Пример #1
0
        public override void RenderSky(BuiltinSkyParameters builtinParams, bool renderForCubemap, bool renderSunDisk)
        {
            var gradientSky = builtinParams.skySettings as GradientSky;

            m_GradientSkyMaterial.SetColor(_GradientBottom, gradientSky.bottom.value);
            m_GradientSkyMaterial.SetColor(_GradientMiddle, gradientSky.middle.value);
            m_GradientSkyMaterial.SetColor(_GradientTop, gradientSky.top.value);
            m_GradientSkyMaterial.SetFloat(_GradientDiffusion, gradientSky.gradientDiffusion.value);
            m_GradientSkyMaterial.SetFloat(HDShaderIDs._SkyIntensity, GetSkyIntensity(gradientSky, builtinParams.debugSettings));

            CloudLayer.Apply(builtinParams.cloudLayer, m_GradientSkyMaterial);

            // This matrix needs to be updated at the draw call frequency.
            m_PropertyBlock.SetMatrix(HDShaderIDs._PixelCoordToViewDirWS, builtinParams.pixelCoordToViewDirMatrix);

            CoreUtils.DrawFullScreen(builtinParams.commandBuffer, m_GradientSkyMaterial, m_PropertyBlock, renderForCubemap ? 0 : 1);
        }
Пример #2
0
        public override void RenderSky(BuiltinSkyParameters builtinParams, bool renderForCubemap, bool renderSunDisk)
        {
            var   hdriSky = builtinParams.skySettings as HDRISky;
            float intensity, phi, backplatePhi;

            GetParameters(out intensity, out phi, out backplatePhi, builtinParams, hdriSky);
            int passID;

            if (hdriSky.enableBackplate.value == false)
            {
                if (renderForCubemap)
                {
                    passID = m_RenderCubemapID;
                }
                else
                {
                    passID = m_RenderFullscreenSkyID;
                }
            }
            else
            {
                if (renderForCubemap)
                {
                    passID = m_RenderCubemapWithBackplateID;
                }
                else
                {
                    passID = m_RenderFullscreenSkyWithBackplateID;
                }
            }

            if (hdriSky.enableDistortion.value == true)
            {
                m_SkyHDRIMaterial.EnableKeyword("SKY_MOTION");
                if (hdriSky.procedural.value == false)
                {
                    m_SkyHDRIMaterial.EnableKeyword("USE_FLOWMAP");
                    m_SkyHDRIMaterial.SetTexture(HDShaderIDs._Flowmap, hdriSky.flowmap.value);
                }
                else
                {
                    m_SkyHDRIMaterial.DisableKeyword("USE_FLOWMAP");
                }

                float   rot = -Mathf.Deg2Rad * hdriSky.scrollDirection.value;
                bool    upperHemisphereOnly = hdriSky.upperHemisphereOnly.value || hdriSky.procedural.value;
                Vector4 flowmapParam        = new Vector4(upperHemisphereOnly ? 1.0f : 0.0f, scrollFactor, Mathf.Cos(rot), Mathf.Sin(rot));

                m_SkyHDRIMaterial.SetVector(HDShaderIDs._FlowmapParam, flowmapParam);

                scrollFactor += hdriSky.scrollSpeed.value * (Time.time - lastTime) * 0.01f;
                lastTime      = Time.time;
            }
            else
            {
                m_SkyHDRIMaterial.DisableKeyword("SKY_MOTION");
            }

            m_SkyHDRIMaterial.SetTexture(HDShaderIDs._Cubemap, hdriSky.hdriSky.value);
            m_SkyHDRIMaterial.SetVector(HDShaderIDs._SkyParam, new Vector4(intensity, 0.0f, Mathf.Cos(phi), Mathf.Sin(phi)));
            m_SkyHDRIMaterial.SetVector(HDShaderIDs._BackplateParameters0, GetBackplateParameters0(hdriSky));
            m_SkyHDRIMaterial.SetVector(HDShaderIDs._BackplateParameters1, GetBackplateParameters1(backplatePhi, hdriSky));
            m_SkyHDRIMaterial.SetVector(HDShaderIDs._BackplateParameters2, GetBackplateParameters2(hdriSky));
            m_SkyHDRIMaterial.SetColor(HDShaderIDs._BackplateShadowTint, hdriSky.shadowTint.value);
            uint shadowFilter = 0u;

            if (hdriSky.pointLightShadow.value)
            {
                shadowFilter |= unchecked ((uint)LightFeatureFlags.Punctual);
            }
            if (hdriSky.dirLightShadow.value)
            {
                shadowFilter |= unchecked ((uint)LightFeatureFlags.Directional);
            }
            if (hdriSky.rectLightShadow.value)
            {
                shadowFilter |= unchecked ((uint)LightFeatureFlags.Area);
            }
            m_SkyHDRIMaterial.SetInt(HDShaderIDs._BackplateShadowFilter, unchecked ((int)shadowFilter));

            CloudLayer.Apply(builtinParams.cloudLayer, m_SkyHDRIMaterial);

            // This matrix needs to be updated at the draw call frequency.
            m_PropertyBlock.SetMatrix(HDShaderIDs._PixelCoordToViewDirWS, builtinParams.pixelCoordToViewDirMatrix);
            CoreUtils.DrawFullScreen(builtinParams.commandBuffer, m_SkyHDRIMaterial, m_PropertyBlock, passID);
        }