Skip to content

first working #7124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ private int DrawLayerBatches(
if (layerBatch.lightStats.totalNormalMapUsage > 0)
{
filterSettings.sortingLayerRange = layerBatch.layerRange;
var depthTarget = m_NeedsDepth ? depthAttachmentHandle.nameID : BuiltinRenderTextureType.None;
var depthTarget = false ? depthAttachmentHandle.nameID : BuiltinRenderTextureType.None;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure if this is a temporary change for testing purpose or final. If final you can remove the ternary operator completely and replace it with BuiltinRenderTextureType.None

this.RenderNormals(context, renderingData, normalsDrawSettings, filterSettings, depthTarget, cmd, layerBatch.lightStats);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using UnityEngine.Rendering.Universal.Internal;

namespace UnityEngine.Rendering.Universal
{
internal class Renderer2DDepthFeature : ScriptableRendererFeature
{
DepthOnlyPass m_DepthPrepass;
private CopyDepthPass m_CopyDepthPass;
RTHandle m_CameraDepthTexture;
[Reload("Shaders/Utils/CopyDepth.shader")]
public Shader copyDepthPS;
Material m_CopyDepthMaterial = null;

public override void Create()
{
m_CopyDepthMaterial = CoreUtils.CreateEngineMaterial(copyDepthPS);
}

public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
m_DepthPrepass = new DepthOnlyPass(RenderPassEvent.BeforeRenderingPrePasses, RenderQueueRange.opaque, -1);

ref var cameraData = ref renderingData.cameraData;
var cameraTargetDescriptor = cameraData.cameraTargetDescriptor;

var renderer2DData = ((Renderer2D)renderer).GetRenderer2DData();
cameraTargetDescriptor.width = (int)(cameraTargetDescriptor.width * renderer2DData.lightRenderTextureScale);
cameraTargetDescriptor.height = (int)(cameraTargetDescriptor.height * renderer2DData.lightRenderTextureScale);

RenderingUtils.ReAllocateIfNeeded(ref m_CameraDepthTexture, cameraTargetDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: "_CameraDepthTexture");
m_DepthPrepass.Setup(cameraTargetDescriptor, m_CameraDepthTexture);
m_DepthPrepass.sortingCriteriaOverride = SortingCriteria.QuantizedFrontToBack |
SortingCriteria.RenderQueue |
SortingCriteria.OptimizeStateChanges;
renderer.EnqueuePass(m_DepthPrepass);

var depthTextureHandle = ((Renderer2D)renderer).GetDepthHandle(ref cameraData);
m_CopyDepthPass = new CopyDepthPass(RenderPassEvent.AfterRenderingPrePasses, m_CopyDepthMaterial);
m_CopyDepthPass.Setup(m_CameraDepthTexture, depthTextureHandle);
renderer.EnqueuePass(m_CopyDepthPass);
}

protected override void Dispose(bool disposing)
{
if(disposing)
m_CameraDepthTexture?.Release();
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 16 additions & 7 deletions com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ internal class Renderer2D : ScriptableRenderer
internal PostProcessPass finalPostProcessPass { get => m_PostProcessPasses.finalPostProcessPass; }
internal RTHandle afterPostProcessColorHandle { get => m_PostProcessPasses.afterPostProcessColor; }
internal RTHandle colorGradingLutHandle { get => m_PostProcessPasses.colorGradingLut; }
internal RTHandle depthAttachment { get => m_DepthTextureHandle; }

public Renderer2D(Renderer2DData data) : base(data)
{
Expand Down Expand Up @@ -77,6 +78,18 @@ public Renderer2DData GetRenderer2DData()
return m_Renderer2DData;
}

internal RTHandle GetDepthHandle(ref CameraData cameraData)
{
ref var cameraTargetDescriptor = ref cameraData.cameraTargetDescriptor;
var depthDescriptor = cameraTargetDescriptor;
depthDescriptor.colorFormat = RenderTextureFormat.Depth;
depthDescriptor.depthBufferBits = 32;
if (!cameraData.resolveFinalTarget && m_UseDepthStencilBuffer)
depthDescriptor.bindMS = depthDescriptor.msaaSamples > 1 && !SystemInfo.supportsMultisampleAutoResolve && (SystemInfo.supportsMultisampledTextures != 0);
RenderingUtils.ReAllocateIfNeeded(ref m_DepthTextureHandle, depthDescriptor, FilterMode.Point, wrapMode: TextureWrapMode.Clamp, name: "_CameraDepthAttachment");
return m_DepthTextureHandle;
}

void CreateRenderTextures(
ref CameraData cameraData,
bool forceCreateColorTexture,
Expand All @@ -99,7 +112,8 @@ void CreateRenderTextures(
|| m_Renderer2DData.useCameraSortingLayerTexture
|| !Mathf.Approximately(cameraData.renderScale, 1.0f);

m_CreateDepthTexture = (!cameraData.resolveFinalTarget && m_UseDepthStencilBuffer) || createColorTexture;
// m_CreateDepthTexture = (!cameraData.resolveFinalTarget && m_UseDepthStencilBuffer) || createColorTexture;
m_CreateDepthTexture = m_UseDepthStencilBuffer;

if (m_CreateColorTexture)
{
Expand All @@ -110,12 +124,7 @@ void CreateRenderTextures(

if (m_CreateDepthTexture)
{
var depthDescriptor = cameraTargetDescriptor;
depthDescriptor.colorFormat = RenderTextureFormat.Depth;
depthDescriptor.depthBufferBits = 32;
if (!cameraData.resolveFinalTarget && m_UseDepthStencilBuffer)
depthDescriptor.bindMS = depthDescriptor.msaaSamples > 1 && !SystemInfo.supportsMultisampleAutoResolve && (SystemInfo.supportsMultisampledTextures != 0);
RenderingUtils.ReAllocateIfNeeded(ref m_DepthTextureHandle, depthDescriptor, FilterMode.Point, wrapMode: TextureWrapMode.Clamp, name: "_CameraDepthAttachment");
GetDepthHandle(ref cameraData);
}

colorTargetHandle = m_CreateColorTexture ? m_ColorTextureHandle : k_CameraTarget;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public class DepthOnlyPass : ScriptableRenderPass
private GraphicsFormat depthStencilFormat;
internal ShaderTagId shaderTagId { get; set; } = k_ShaderTagId;

internal SortingCriteria? sortingCriteriaOverride { get; set; } = null;

FilteringSettings m_FilteringSettings;

/// <summary>
Expand Down Expand Up @@ -85,7 +87,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData
context.ExecuteCommandBuffer(cmd);
cmd.Clear();

var sortFlags = renderingData.cameraData.defaultOpaqueSortFlags;
var sortFlags = sortingCriteriaOverride ?? renderingData.cameraData.defaultOpaqueSortFlags;
var drawSettings = CreateDrawingSettings(this.shaderTagId, ref renderingData, sortFlags);
drawSettings.perObjectData = PerObjectData.None;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@ Shader "Universal Render Pipeline/2D/Sprite-Lit-Default"

SubShader
{
Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }
Tags {"RenderPipeline" = "UniversalPipeline" }

Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
Cull Off
ZWrite Off

Pass
{
Tags { "LightMode" = "Universal2D" }
Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
ZWrite Off

HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
Expand Down Expand Up @@ -120,6 +121,8 @@ Shader "Universal Render Pipeline/2D/Sprite-Lit-Default"
Pass
{
Tags { "LightMode" = "NormalsRendering"}
Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
ZWrite Off

HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
Expand Down Expand Up @@ -182,7 +185,68 @@ Shader "Universal Render Pipeline/2D/Sprite-Lit-Default"

Pass
{
Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"}
Name "DepthOnly"
Tags {"LightMode" = "DepthOnly"}
Tags {"Queue" = "Geometry" "RenderType" = "Opaque"}

ZWrite On
Cull Off

HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

//--------------------------------------
// GPU Instancing
#pragma multi_compile_instancing
#pragma vertex DepthOnlyVertex
#pragma fragment DepthOnlyFragment

struct Attributes
{
float4 position : POSITION;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct Varyings
{
float2 uv : TEXCOORD0;
float4 positionCS : SV_POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};

TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
float4 _MainTex_ST;

Varyings DepthOnlyVertex(Attributes input)
{
Varyings output = (Varyings)0;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);

output.uv = TRANSFORM_TEX(input.texcoord, _MainTex);
output.positionCS = TransformObjectToHClip(input.position.xyz);
return output;
}

half4 DepthOnlyFragment(Varyings i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
clip(main.a - half(1.0));
return 0;
}

ENDHLSL
}

Pass
{
Tags { "LightMode" = "UniversalForward"}
Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
ZWrite Off

HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
Expand Down