86 lines
3.2 KiB
C#
86 lines
3.2 KiB
C#
//Stylized Water 2: Underwater Rendering extension
|
|
//Staggart Creations (http://staggart.xyz)
|
|
//Copyright protected under Unity Asset Store EULA
|
|
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
#if URP
|
|
using UnityEngine.Rendering.Universal;
|
|
|
|
namespace StylizedWater2.UnderwaterRendering
|
|
{
|
|
class UnderwaterShadingPass : RenderPass
|
|
{
|
|
private const string ProfilerTag = "Underwater Rendering: Shading";
|
|
private static readonly ProfilingSampler m_ProfilingSampler = new ProfilingSampler(ProfilerTag);
|
|
|
|
public UnderwaterShadingPass(UnderwaterRenderFeature renderFeature)
|
|
{
|
|
base.Initialize(renderFeature, renderFeature.resources.underwaterShader);
|
|
}
|
|
|
|
public const string DEPTH_NORMALS_KEYWORD = "_REQUIRE_DEPTH_NORMALS";
|
|
public const string SOURCE_DEPTH_NORMALS_KEYWORD = "_SOURCE_DEPTH_NORMALS";
|
|
|
|
public override void Setup(UnderwaterRenderFeature.Settings settings, ScriptableRenderer renderer)
|
|
{
|
|
base.Setup(settings, renderer);
|
|
|
|
renderer.EnqueuePass(this);
|
|
}
|
|
|
|
public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
|
|
{
|
|
base.Configure(cmd, cameraTextureDescriptor);
|
|
|
|
#if UNITY_2020_2_OR_NEWER
|
|
ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Color);
|
|
#endif
|
|
|
|
if (settings.directionalCaustics)
|
|
{
|
|
#if UNITY_2020_2_OR_NEWER
|
|
if(settings.accurateDirectionalCaustics)
|
|
{
|
|
ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Normal | ScriptableRenderPassInput.Color);
|
|
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, true);
|
|
}
|
|
else
|
|
{
|
|
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, false);
|
|
}
|
|
#else
|
|
CoreUtils.SetKeyword(Material, SOURCE_DEPTH_NORMALS_KEYWORD, false);
|
|
#endif
|
|
}
|
|
|
|
CoreUtils.SetKeyword(Material, DEPTH_NORMALS_KEYWORD, settings.directionalCaustics);
|
|
CoreUtils.SetKeyword(Material, UnderwaterRenderer.TRANSLUCENCY_KEYWORD, renderFeature.keywordStates.translucency);
|
|
CoreUtils.SetKeyword(Material, UnderwaterRenderer.CAUSTICS_KEYWORD, renderFeature.keywordStates.caustics);
|
|
}
|
|
|
|
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
|
{
|
|
var cmd = CommandBufferPool.Get();
|
|
|
|
using (new ProfilingScope(cmd, m_ProfilingSampler))
|
|
{
|
|
base.Execute(context, ref renderingData);
|
|
|
|
UnderwaterLighting.PassAmbientLighting(this, cmd);
|
|
UnderwaterLighting.PassMainLight(cmd, renderingData);
|
|
|
|
BlitToCamera(cmd, ref renderingData);
|
|
}
|
|
context.ExecuteCommandBuffer(cmd);
|
|
CommandBufferPool.Release(cmd);
|
|
}
|
|
|
|
protected override void Cleanup(CommandBuffer cmd)
|
|
{
|
|
base.Cleanup(cmd);
|
|
}
|
|
}
|
|
|
|
}
|
|
#endif |