Skip to content
Merged
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
53 changes: 53 additions & 0 deletions Resources/VXGI/Shader/Utility.shader
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,26 @@ Shader "Hidden/VXGI/Utility"
{
ZWrite Off

Pass
{
Name "BlitViewport"

HLSLPROGRAM
#pragma vertex BlitViewportVertex
#pragma fragment frag

#include "UnityCG.cginc"
#include "Packages/com.looooong.srp.vxgi/ShaderLibrary/BlitSupport.hlsl"

sampler2D _MainTex;

float4 frag(BlitInput i) : SV_TARGET
{
return tex2D(_MainTex, i.uv);
}
ENDHLSL
}

Pass
{
Name "DepthCopy"
Expand Down Expand Up @@ -38,6 +58,35 @@ Shader "Hidden/VXGI/Utility"
ENDHLSL
}

Pass
{
Name "DepthCopyViewport"

BlendOp Min, Max
ZWrite On

HLSLPROGRAM
#pragma vertex BlitViewportVertex
#pragma fragment frag

#include "UnityCG.cginc"
#include "Packages/com.looooong.srp.vxgi/ShaderLibrary/BlitSupport.hlsl"

sampler2D _CameraDepthTexture;

float4 frag(BlitInput i, out float depth : SV_DEPTH) : SV_TARGET
{
depth = tex2D(_CameraDepthTexture, i.uv).r;

if (Linear01Depth(depth) < 1.0) {
return float4(0.0, 0.0, 0.0, 1.0);
} else {
return 1.0;
}
}
ENDHLSL
}

Pass
{
Name "EncodeDepthNormal"
Expand Down Expand Up @@ -80,12 +129,16 @@ Shader "Hidden/VXGI/Utility"
};

sampler2D _MainTex;
float4 BlitViewport;

v2f vert(appdata_base v)
{
v.vertex.xy = (v.vertex.xy - BlitViewport.zw) / BlitViewport.xy;

v2f o;
o.position = UnityObjectToClipPos(v.vertex);
o.uv = ComputeScreenPos(o.position);
o.uv.xy = mad(o.uv.xy, BlitViewport.xy, BlitViewport.zw);

#ifdef PROJECTION_PARAMS_X
if (_ProjectionParams.x < 0.0) o.uv.y = 1.0 - o.uv.y;
Expand Down
8 changes: 5 additions & 3 deletions Runtime/SRP/VXGIRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ public void RenderDeferred(ScriptableRenderContext renderContext, Camera camera,

TriggerCameraEvent(renderContext, camera, CameraEvent.BeforeImageEffects, vxgi);
RenderPostProcessing(renderContext, camera);
_command.Blit(ShaderIDs.FrameBuffer, BuiltinRenderTextureType.CameraTarget);
_command.SetGlobalVector(ShaderIDs.BlitViewport, new Vector4(camera.rect.width, camera.rect.height, camera.rect.xMin, camera.rect.yMin));
_command.Blit(ShaderIDs.FrameBuffer, BuiltinRenderTextureType.CameraTarget, UtilityShader.material, (int)UtilityShader.Pass.BlitViewport);
renderContext.ExecuteCommandBuffer(_command);
_command.Clear();
TriggerCameraEvent(renderContext, camera, CameraEvent.AfterImageEffects, vxgi);
Expand All @@ -143,8 +144,9 @@ public void RenderDeferred(ScriptableRenderContext renderContext, Camera camera,
}

void CopyCameraTargetToFrameBuffer(ScriptableRenderContext renderContext, Camera camera) {
_command.GetTemporaryRT(ShaderIDs.Dummy, camera.pixelWidth, camera.pixelHeight, 0, FilterMode.Point, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
_command.Blit(ShaderIDs._CameraDepthTexture, BuiltinRenderTextureType.CameraTarget, UtilityShader.material, (int)UtilityShader.Pass.DepthCopy);
_command.GetTemporaryRT(ShaderIDs.Dummy, Screen.width, Screen.height, 0, FilterMode.Point, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
_command.SetGlobalVector(ShaderIDs.BlitViewport, new Vector4(camera.rect.width, camera.rect.height, camera.rect.xMin, camera.rect.yMin));
_command.Blit(ShaderIDs._CameraDepthTexture, BuiltinRenderTextureType.CameraTarget, UtilityShader.material, (int)UtilityShader.Pass.DepthCopyViewport);
_command.Blit(BuiltinRenderTextureType.CameraTarget, ShaderIDs.Dummy);
_command.Blit(ShaderIDs.Dummy, ShaderIDs.FrameBuffer, UtilityShader.material, (int)UtilityShader.Pass.GrabCopy);
_command.ReleaseTemporaryRT(ShaderIDs.Dummy);
Expand Down
10 changes: 6 additions & 4 deletions Runtime/ShaderPasses/UtilityShader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

public static class UtilityShader {
public enum Pass {
DepthCopy = 0,
EncodeDepthNormal = 1,
GrabCopy = 2,
LowResComposite = 3
BlitViewport,
DepthCopy,
DepthCopyViewport,
EncodeDepthNormal,
GrabCopy,
LowResComposite
}

public static Material material {
Expand Down
1 change: 1 addition & 0 deletions Runtime/Utilities/ShaderIDs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ internal static class ShaderIDs {
internal static readonly int _CameraGBufferTexture2 = Shader.PropertyToID("_CameraGBufferTexture2");
internal static readonly int _CameraGBufferTexture3 = Shader.PropertyToID("_CameraGBufferTexture3");
internal static readonly int Arguments = Shader.PropertyToID("Arguments");
internal static readonly int BlitViewport = Shader.PropertyToID("BlitViewport");
internal static readonly int ClipToVoxel = Shader.PropertyToID("ClipToVoxel");
internal static readonly int ClipToWorld = Shader.PropertyToID("ClipToWorld");
internal static readonly int Displacement = Shader.PropertyToID("Displacement");
Expand Down
12 changes: 12 additions & 0 deletions ShaderLibrary/BlitSupport.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ struct BlitInput
float2 uv : TEXCOORD;
};

float4 BlitViewport;

BlitInput BlitVertex(appdata_base v)
{
BlitInput o;
Expand All @@ -21,4 +23,14 @@ BlitInput BlitVertex(appdata_base v)
return o;
}

BlitInput BlitViewportVertex(appdata_base v)
{
v.vertex.xy = mad(v.vertex.xy, BlitViewport.xy, BlitViewport.zw);

BlitInput o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
return o;
}

#endif