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); }
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); }