// deactivate this test for template package making issue
        //[Test]
        public void ApplySettings()
        {
            for (int i = 0; i < 10; ++i)
            {
                var perspectiveMatrix = Matrix4x4.Perspective(
                    RandomUtilities.RandomFloat(i, 2943.06587f) * 30.0f + 75.0f,
                    RandomUtilities.RandomFloat(i, 6402.79532f) * 0.5f + 1,
                    RandomUtilities.RandomFloat(i, 8328.97521f) * 10.0f + 10f,
                    RandomUtilities.RandomFloat(i, 6875.12374f) * 100.0f + 1000.0f
                    );
                var worldToCameraMatrix = GeometryUtils.CalculateWorldToCameraMatrixRHS(
                    RandomUtilities.RandomVector3(i),
                    RandomUtilities.RandomQuaternion(i)
                    );

                var settings = new CameraSettings
                {
                    bufferClearing = new CameraSettings.BufferClearing
                    {
                        backgroundColorHDR = RandomUtilities.RandomColor(i),
                        clearColorMode     = RandomUtilities.RandomEnumIndex <HDAdditionalCameraData.ClearColorMode>(i),
                        clearDepth         = RandomUtilities.RandomBool(i)
                    },
                    culling = new CameraSettings.Culling
                    {
                        cullingMask         = RandomUtilities.RandomInt(i),
                        useOcclusionCulling = RandomUtilities.RandomBool(i + 0.5f),
                    },
                    renderingPathCustomFrameSettings             = default,
示例#2
0
        // deactivate this test for template package making issue
        //[Test]
        public void FrameSettingsAggregation()
        {
            for (int i = 0; i < 10; ++i)
            {
                //init
                FrameSettings             fs            = default;
                FrameSettingsOverrideMask fso           = default;
                FrameSettingsRenderType   defaultFSType = RandomUtilities.RandomEnumValue <FrameSettingsRenderType>(i);
                FrameSettings             defaultFS;
                FrameSettings             result            = FrameSettings.NewDefaultCamera();
                FrameSettings             tester            = default;
                RenderPipelineSettings    supportedFeatures = new RenderPipelineSettings();
                switch (defaultFSType)
                {
                case FrameSettingsRenderType.Camera:
                    defaultFS = FrameSettings.NewDefaultCamera();
                    break;

                case FrameSettingsRenderType.CustomOrBakedReflection:
                    defaultFS = FrameSettings.NewDefaultCustomOrBakeReflectionProbe();
                    break;

                case FrameSettingsRenderType.RealtimeReflection:
                    defaultFS = FrameSettings.NewDefaultRealtimeReflectionProbe();
                    break;

                default:
                    throw new ArgumentException("Unknown FrameSettingsRenderType");
                }

                //change randomly override values
                for (int j = 0; j < 10; ++j)
                {
                    FrameSettingsField field = RandomUtilities.RandomEnumValue <FrameSettingsField>((i + 0.5f) * (j + 0.3f));
                    fs.SetEnabled(field, RandomUtilities.RandomBool((i + 1) * j));
                    fso.mask[(uint)field] = true;
                }

                //create and init gameobjects
                var go = new GameObject("TestObject");
                m_ToClean = go;
                var cam = go.AddComponent <Camera>();

                var add = cam.GetComponent <HDAdditionalCameraData>() ?? cam.gameObject.AddComponent <HDAdditionalCameraData>();
                Assert.True(add != null && !add.Equals(null));

                add.renderingPathCustomFrameSettings             = fs;
                add.renderingPathCustomFrameSettingsOverrideMask = fso;
                add.defaultFrameSettings    = defaultFSType;
                add.customRenderingSettings = true;

                //gather data two different ways
                FrameSettings.AggregateFrameSettings(ref result, cam, add, ref defaultFS, supportedFeatures);

                foreach (FrameSettingsField field in Enum.GetValues(typeof(FrameSettingsField)))
                {
                    tester.SetEnabled(field, fso.mask[(uint)field] ? fs.IsEnabled(field) : defaultFS.IsEnabled(field));
                }
                tester.lodBias             = result.lodBias;
                tester.lodBiasMode         = result.lodBiasMode;
                tester.maximumLODLevel     = result.maximumLODLevel;
                tester.maximumLODLevelMode = result.maximumLODLevelMode;
                FrameSettings.Sanitize(ref tester, cam, supportedFeatures);

                //test
                Assert.AreEqual(result, tester);

                Object.DestroyImmediate(go);
            }
        }
        public void ApplySettings()
        {
            for (int i = 0; i < 10; ++i)
            {
                var perspectiveMatrix = Matrix4x4.Perspective(
                    RandomUtilities.RandomFloat(i, 2943.06587f) * 30.0f + 75.0f,
                    RandomUtilities.RandomFloat(i, 6402.79532f) * 0.5f + 1,
                    RandomUtilities.RandomFloat(i, 8328.97521f) * 10.0f + 10f,
                    RandomUtilities.RandomFloat(i, 6875.12374f) * 100.0f + 1000.0f
                    );
                var worldToCameraMatrix = GeometryUtils.CalculateWorldToCameraMatrixRHS(
                    RandomUtilities.RandomVector3(i),
                    RandomUtilities.RandomQuaternion(i)
                    );

                var settings = new CameraSettings
                {
                    bufferClearing = new CameraSettings.BufferClearing
                    {
                        backgroundColorHDR = RandomUtilities.RandomColor(i),
                        clearColorMode     = RandomUtilities.RandomEnum <HDAdditionalCameraData.ClearColorMode>(i),
                        clearDepth         = RandomUtilities.RandomBool(i)
                    },
                    culling = new CameraSettings.Culling
                    {
                        cullingMask         = RandomUtilities.RandomInt(i),
                        useOcclusionCulling = RandomUtilities.RandomBool(i + 0.5f),
                    },
                    frameSettings = new FrameSettings(),
                    frustum       = new CameraSettings.Frustum
                    {
                        aspect           = RandomUtilities.RandomFloat(i, 6724.2745f) * 0.5f + 1,
                        nearClipPlane    = RandomUtilities.RandomFloat(i, 7634.7235f) * 10.0f + 10f,
                        farClipPlane     = RandomUtilities.RandomFloat(i, 1935.3234f) * 100.0f + 1000.0f,
                        fieldOfView      = RandomUtilities.RandomFloat(i, 9364.2534f) * 30.0f + 75.0f,
                        mode             = RandomUtilities.RandomEnum <CameraSettings.Frustum.Mode>(i * 2.5f),
                        projectionMatrix = perspectiveMatrix
                    },
                    volumes = new CameraSettings.Volumes
                    {
                        anchorOverride = null,
                        layerMask      = RandomUtilities.RandomInt(i * 3.5f)
                    },
                    renderingPath = RandomUtilities.RandomEnum <HDAdditionalCameraData.RenderingPath>(i * 4.5f)
                };
                var position = new CameraPositionSettings
                {
                    mode                = RandomUtilities.RandomEnum <CameraPositionSettings.Mode>(i),
                    position            = RandomUtilities.RandomVector3(i * 5.5f),
                    rotation            = RandomUtilities.RandomQuaternion(i * 6.5f),
                    worldToCameraMatrix = worldToCameraMatrix
                };

                var go = new GameObject("TestObject");
                m_ToClean = go;
                var cam = go.AddComponent <Camera>();

                cam.ApplySettings(settings);
                cam.ApplySettings(position);

                var add = cam.GetComponent <HDAdditionalCameraData>();
                Assert.NotNull(add);

                // Position
                switch (position.mode)
                {
                case CameraPositionSettings.Mode.UseWorldToCameraMatrixField:
                    AssertUtilities.AssertAreEqual(position.worldToCameraMatrix, cam.worldToCameraMatrix);
                    break;

                case CameraPositionSettings.Mode.ComputeWorldToCameraMatrix:
                    AssertUtilities.AssertAreEqual(position.position, cam.transform.position);
                    AssertUtilities.AssertAreEqual(position.rotation, cam.transform.rotation);
                    AssertUtilities.AssertAreEqual(position.ComputeWorldToCameraMatrix(), cam.worldToCameraMatrix);
                    break;
                }
                // Frustum
                switch (settings.frustum.mode)
                {
                case CameraSettings.Frustum.Mode.UseProjectionMatrixField:
                    AssertUtilities.AssertAreEqual(settings.frustum.projectionMatrix, cam.projectionMatrix);
                    break;

                case CameraSettings.Frustum.Mode.ComputeProjectionMatrix:
                    Assert.AreEqual(settings.frustum.nearClipPlane, cam.nearClipPlane);
                    Assert.AreEqual(settings.frustum.farClipPlane, cam.farClipPlane);
                    Assert.AreEqual(settings.frustum.fieldOfView, cam.fieldOfView);
                    Assert.AreEqual(settings.frustum.aspect, cam.aspect);
                    AssertUtilities.AssertAreEqual(settings.frustum.ComputeProjectionMatrix(), cam.projectionMatrix);
                    break;
                }
                // Culling
                Assert.AreEqual(settings.culling.useOcclusionCulling, cam.useOcclusionCulling);
                Assert.AreEqual(settings.culling.cullingMask, (LayerMask)cam.cullingMask);
                // Buffer clearing
                Assert.AreEqual(settings.bufferClearing.clearColorMode, add.clearColorMode);
                Assert.AreEqual(settings.bufferClearing.backgroundColorHDR, add.backgroundColorHDR);
                Assert.AreEqual(settings.bufferClearing.clearDepth, add.clearDepth);
                // Volumes
                Assert.AreEqual(settings.volumes.layerMask, add.volumeLayerMask);
                Assert.AreEqual(settings.volumes.anchorOverride, add.volumeAnchorOverride);
                // HD Specific
                Assert.AreEqual(settings.renderingPath, add.renderingPath);

                Object.DestroyImmediate(go);
            }
        }