您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
63 行
2.7 KiB
63 行
2.7 KiB
using UnityEngine.Rendering;
|
|
|
|
namespace UnityEngine.Experimental.Rendering.HDPipeline
|
|
{
|
|
public class HDRISkyRenderer : SkyRenderer
|
|
{
|
|
Material m_SkyHDRIMaterial; // Renders a cubemap into a render texture (can be cube or 2D)
|
|
MaterialPropertyBlock m_PropertyBlock;
|
|
HDRISky m_HdriSkyParams;
|
|
|
|
public HDRISkyRenderer(HDRISky hdriSkyParams)
|
|
{
|
|
m_HdriSkyParams = hdriSkyParams;
|
|
m_PropertyBlock = new MaterialPropertyBlock();
|
|
}
|
|
|
|
public override void Build()
|
|
{
|
|
var hdrp = GraphicsSettings.renderPipelineAsset as HDRenderPipelineAsset;
|
|
m_SkyHDRIMaterial = CoreUtils.CreateEngineMaterial(hdrp.renderPipelineResources.hdriSky);
|
|
}
|
|
|
|
public override void Cleanup()
|
|
{
|
|
CoreUtils.Destroy(m_SkyHDRIMaterial);
|
|
}
|
|
|
|
public override void SetRenderTargets(BuiltinSkyParameters builtinParams)
|
|
{
|
|
if (builtinParams.depthBuffer == BuiltinSkyParameters.nullRT)
|
|
{
|
|
HDUtils.SetRenderTarget(builtinParams.commandBuffer, builtinParams.hdCamera, builtinParams.colorBuffer);
|
|
}
|
|
else
|
|
{
|
|
HDUtils.SetRenderTarget(builtinParams.commandBuffer, builtinParams.hdCamera, builtinParams.colorBuffer, builtinParams.depthBuffer);
|
|
}
|
|
}
|
|
|
|
public override void RenderSky(BuiltinSkyParameters builtinParams, bool renderForCubemap, bool renderSunDisk)
|
|
{
|
|
float luxMultiplier = m_HdriSkyParams.desiredLuxValue.value / m_HdriSkyParams.upperHemisphereLuxValue.value;
|
|
float multiplier = (m_HdriSkyParams.skyIntensityMode == SkyIntensityMode.Exposure) ? m_HdriSkyParams.multiplier.value : luxMultiplier;
|
|
float exposure = (m_HdriSkyParams.skyIntensityMode == SkyIntensityMode.Exposure) ? GetExposure(m_HdriSkyParams, builtinParams.debugSettings) : 0;
|
|
|
|
m_SkyHDRIMaterial.SetTexture(HDShaderIDs._Cubemap, m_HdriSkyParams.hdriSky);
|
|
m_SkyHDRIMaterial.SetVector(HDShaderIDs._SkyParam, new Vector4(exposure, multiplier, -m_HdriSkyParams.rotation, 0.0f)); // -rotation to match Legacy...
|
|
|
|
using (new ProfilingSample(builtinParams.commandBuffer, "Draw sky"))
|
|
{
|
|
// 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, renderForCubemap ? 0 : 1);
|
|
}
|
|
}
|
|
|
|
public override bool IsValid()
|
|
{
|
|
return m_HdriSkyParams != null && m_SkyHDRIMaterial != null;
|
|
}
|
|
}
|
|
}
|