コード例 #1
0
        public void PushFogShaderParameters(HDCamera hdCamera, CommandBuffer cmd)
        {
            if ((fogType.value != FogType.Volumetric) || (!hdCamera.frameSettings.IsEnabled(FrameSettingsField.Volumetrics)))
            {
                // If the volumetric fog is not used, we need to make sure that all rendering passes
                // (not just the atmospheric scattering one) receive neutral parameters.
                VolumetricFog.PushNeutralShaderParameters(cmd);
            }

            if (!hdCamera.frameSettings.IsEnabled(FrameSettingsField.AtmosphericScattering))
            {
                cmd.SetGlobalInt(HDShaderIDs._AtmosphericScatteringType, (int)FogType.None);
                return;
            }

            // The PBR sky contributes to atmospheric scattering.
            int pbrSkyAtmosphereFlag = skyType.value == (int)SkyType.PhysicallyBased ? 128 : 0;

            switch (fogType.value)
            {
            case FogType.None:
            {
                cmd.SetGlobalInt(HDShaderIDs._AtmosphericScatteringType, pbrSkyAtmosphereFlag | (int)FogType.None);
                break;
            }

            case FogType.Linear:
            {
                var fogSettings = VolumeManager.instance.stack.GetComponent <LinearFog>();
                fogSettings.PushShaderParameters(hdCamera, cmd);
                break;
            }

            case FogType.Exponential:
            {
                var fogSettings = VolumeManager.instance.stack.GetComponent <ExponentialFog>();
                fogSettings.PushShaderParameters(hdCamera, cmd);
                break;
            }

            case FogType.Volumetric:
            {
                if (hdCamera.frameSettings.IsEnabled(FrameSettingsField.Volumetrics))
                {
                    var fogSettings = VolumeManager.instance.stack.GetComponent <VolumetricFog>();
                    fogSettings.PushShaderParameters(hdCamera, cmd);
                }
                break;
            }
            }
        }
コード例 #2
0
        public void PushFogShaderParameters(HDCamera hdCamera, CommandBuffer cmd)
        {
            if ((fogType.value != FogType.Volumetric) || (!hdCamera.frameSettings.enableVolumetrics))
            {
                // If the volumetric fog is not used, we need to make sure that all rendering passes
                // (not just the atmospheric scattering one) receive neutral parameters.
                VolumetricFog.PushNeutralShaderParameters(cmd);
            }

            if (!hdCamera.frameSettings.enableAtmosphericScattering)
            {
                cmd.SetGlobalInt(HDShaderIDs._AtmosphericScatteringType, (int)FogType.None);
                return;
            }

            switch (fogType.value)
            {
            case FogType.None:
            {
                cmd.SetGlobalInt(HDShaderIDs._AtmosphericScatteringType, (int)FogType.None);
                break;
            }

            case FogType.Linear:
            {
                var fogSettings = VolumeManager.instance.stack.GetComponent <LinearFog>();
                fogSettings.PushShaderParameters(hdCamera, cmd);
                break;
            }

            case FogType.Exponential:
            {
                var fogSettings = VolumeManager.instance.stack.GetComponent <ExponentialFog>();
                fogSettings.PushShaderParameters(hdCamera, cmd);
                break;
            }

            case FogType.Volumetric:
            {
                if (hdCamera.frameSettings.enableVolumetrics)
                {
                    var fogSettings = VolumeManager.instance.stack.GetComponent <VolumetricFog>();
                    fogSettings.PushShaderParameters(hdCamera, cmd);
                }
                break;
            }
            }
        }