Made color and dapth calculations in parallel
- Edited RenderDepth.sahder to 2 sapces calculations - In DepthRenderPassFeature.cs changes passEvent to rendering after post-processing - Remove side cutting merged image in BlendShader.compute
This commit is contained in:
parent
f995cf6721
commit
a2f9328f5f
@ -658,7 +658,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 365053774}
|
m_GameObject: {fileID: 365053774}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0.12557845, y: 0.64992166, z: -10.212498}
|
m_LocalPosition: {x: 0.37, y: -9.73, z: -0.46}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@ -748,7 +748,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!4 &409312061
|
--- !u!4 &409312061
|
||||||
Transform:
|
Transform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1444,7 +1444,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!224 &686694434
|
--- !u!224 &686694434
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1591,6 +1591,7 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
testDistance: 0.08
|
testDistance: 0.08
|
||||||
DepthShader: {fileID: 4800000, guid: 38575fbac906d53499789597d61d2fa4, type: 3}
|
DepthShader: {fileID: 4800000, guid: 38575fbac906d53499789597d61d2fa4, type: 3}
|
||||||
|
depthMaterial: {fileID: 0}
|
||||||
BlendShader: {fileID: 7200000, guid: 5bf2857e309eda648b826d75af82d1ab, type: 3}
|
BlendShader: {fileID: 7200000, guid: 5bf2857e309eda648b826d75af82d1ab, type: 3}
|
||||||
camera1: {fileID: 146129744}
|
camera1: {fileID: 146129744}
|
||||||
camera2: {fileID: 73635654}
|
camera2: {fileID: 73635654}
|
||||||
@ -1748,7 +1749,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!114 &867358639
|
--- !u!114 &867358639
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -2120,7 +2121,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!224 &1682170431
|
--- !u!224 &1682170431
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -2302,9 +2303,9 @@ RectTransform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 2034953397}
|
m_Father: {fileID: 2034953397}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 1, y: 0}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 1, y: 0}
|
||||||
m_AnchoredPosition: {x: 0, y: -160}
|
m_AnchoredPosition: {x: -300, y: 200}
|
||||||
m_SizeDelta: {x: 500, y: 300}
|
m_SizeDelta: {x: 500, y: 300}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!1 &2034953393
|
--- !u!1 &2034953393
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Rendering;
|
||||||
using UnityEngine.Rendering.Universal.Internal;
|
using UnityEngine.Rendering.Universal.Internal;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ public class BlendShaderController : MonoBehaviour
|
|||||||
[Range(0.0f, 2.0f)]
|
[Range(0.0f, 2.0f)]
|
||||||
public float testDistance = 0.08f;
|
public float testDistance = 0.08f;
|
||||||
public Shader DepthShader;
|
public Shader DepthShader;
|
||||||
|
public Material depthMaterial;
|
||||||
public ComputeShader BlendShader;
|
public ComputeShader BlendShader;
|
||||||
public Camera camera1;
|
public Camera camera1;
|
||||||
public Camera camera2;
|
public Camera camera2;
|
||||||
@ -57,6 +59,7 @@ public class BlendShaderController : MonoBehaviour
|
|||||||
private bool flag = false;
|
private bool flag = false;
|
||||||
|
|
||||||
private ComputeBuffer computeBuffer;
|
private ComputeBuffer computeBuffer;
|
||||||
|
private ComputeBuffer depthBuffer;
|
||||||
private float[] resultArray;
|
private float[] resultArray;
|
||||||
Thread savingThread;
|
Thread savingThread;
|
||||||
Task<string> task1;
|
Task<string> task1;
|
||||||
@ -74,6 +77,10 @@ public class BlendShaderController : MonoBehaviour
|
|||||||
void InitializeComputeBuffer()
|
void InitializeComputeBuffer()
|
||||||
{
|
{
|
||||||
computeBuffer = new ComputeBuffer(currentRes * currentRes, 1 * sizeof(float));//2 dimensional array of 1 value type of float
|
computeBuffer = new ComputeBuffer(currentRes * currentRes, 1 * sizeof(float));//2 dimensional array of 1 value type of float
|
||||||
|
|
||||||
|
depthBuffer = new ComputeBuffer(currentRes * currentRes, 1 * sizeof(float));
|
||||||
|
depthMaterial = CoreUtils.CreateEngineMaterial(DepthShader);
|
||||||
|
depthMaterial.SetBuffer("distBuffer", depthBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeTextures()
|
void InitializeTextures()
|
||||||
@ -115,25 +122,23 @@ public class BlendShaderController : MonoBehaviour
|
|||||||
|
|
||||||
if (Input.GetKeyDown(KeyCode.F))
|
if (Input.GetKeyDown(KeyCode.F))
|
||||||
{
|
{
|
||||||
SetFlag();
|
flag = !flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag)
|
// if (flag)
|
||||||
{
|
// {
|
||||||
GenerateDepth();
|
// GenerateDepth();
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
// if(flag)
|
||||||
|
// {
|
||||||
|
// RenderTexture tempRt = new RenderTexture(cameraTexture1);
|
||||||
|
// Graphics.Blit(tempRt, cameraTexture1, depthMaterial);
|
||||||
|
// tempRt = new RenderTexture(cameraTexture2);
|
||||||
|
// Graphics.Blit(tempRt, cameraTexture2, depthMaterial);
|
||||||
|
// }
|
||||||
|
|
||||||
UpdateShader(cameraTexture1, cameraTexture2);
|
UpdateShader(cameraTexture1, cameraTexture2);
|
||||||
|
|
||||||
if(Input.GetKeyDown(KeyCode.S))
|
|
||||||
{
|
|
||||||
SaveTextureAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Input.GetKeyDown(KeyCode.A))
|
|
||||||
{
|
|
||||||
SaveTexture();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateShader(RenderTexture tex1, RenderTexture tex2)
|
void UpdateShader(RenderTexture tex1, RenderTexture tex2)
|
||||||
@ -311,5 +316,11 @@ public class BlendShaderController : MonoBehaviour
|
|||||||
{
|
{
|
||||||
computeBuffer.Release();
|
computeBuffer.Release();
|
||||||
computeBuffer = null;
|
computeBuffer = null;
|
||||||
|
|
||||||
|
depthBuffer.Release();
|
||||||
|
depthBuffer = null;
|
||||||
|
|
||||||
|
Destroy(depthMaterial);
|
||||||
|
depthMaterial = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,16 @@
|
|||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering;
|
using UnityEngine.Rendering;
|
||||||
using UnityEngine.Rendering.Universal;
|
using UnityEngine.Rendering.Universal;
|
||||||
|
using UnityEngine.XR;
|
||||||
|
|
||||||
public class DepthRenderPassFeature : ScriptableRendererFeature
|
public class DepthRenderPassFeature : ScriptableRendererFeature
|
||||||
{
|
{
|
||||||
class DepthRenderPass : ScriptableRenderPass
|
class DepthRenderPass : ScriptableRenderPass
|
||||||
{
|
{
|
||||||
|
public static Action<float[]> OnDepthReady;
|
||||||
public static Queue<bool> Requests;
|
public static Queue<bool> Requests;
|
||||||
public static Queue<float[]> Answers;
|
public static Queue<float[]> Answers;
|
||||||
|
|
||||||
@ -38,6 +41,7 @@ public class DepthRenderPassFeature : ScriptableRendererFeature
|
|||||||
{
|
{
|
||||||
material.SetBuffer("distBuffer", computeBuffer);
|
material.SetBuffer("distBuffer", computeBuffer);
|
||||||
material.SetFloat("res", rt.height);
|
material.SetFloat("res", rt.height);
|
||||||
|
material.SetInt("_RenderDepth", this.depth ? 1 : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,8 +56,6 @@ public class DepthRenderPassFeature : ScriptableRendererFeature
|
|||||||
// You don't have to call ScriptableRenderContext.submit, the render pipeline will call it at specific points in the pipeline.
|
// You don't have to call ScriptableRenderContext.submit, the render pipeline will call it at specific points in the pipeline.
|
||||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||||
{
|
{
|
||||||
if (!depth) return;
|
|
||||||
|
|
||||||
CommandBuffer cmd = CommandBufferPool.Get();
|
CommandBuffer cmd = CommandBufferPool.Get();
|
||||||
//RTHandle rt = renderingData.cameraData.renderer.cameraColorTargetHandle;
|
//RTHandle rt = renderingData.cameraData.renderer.cameraColorTargetHandle;
|
||||||
|
|
||||||
@ -132,7 +134,7 @@ public class DepthRenderPassFeature : ScriptableRendererFeature
|
|||||||
m_ScriptablePass = new DepthRenderPass(material);
|
m_ScriptablePass = new DepthRenderPass(material);
|
||||||
|
|
||||||
// Configures where the render pass should be injected.
|
// Configures where the render pass should be injected.
|
||||||
m_ScriptablePass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
|
m_ScriptablePass.renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Here you can inject one or multiple render passes in the renderer.
|
// Here you can inject one or multiple render passes in the renderer.
|
||||||
|
|||||||
@ -14,7 +14,7 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Active: 1
|
m_Active: 1
|
||||||
shader: {fileID: 4800000, guid: 38575fbac906d53499789597d61d2fa4, type: 3}
|
shader: {fileID: 4800000, guid: 38575fbac906d53499789597d61d2fa4, type: 3}
|
||||||
Depth: 1
|
Depth: 0
|
||||||
--- !u!114 &-1878332245247344467
|
--- !u!114 &-1878332245247344467
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -108,7 +108,7 @@ MonoBehaviour:
|
|||||||
zFailOperation: 0
|
zFailOperation: 0
|
||||||
m_ShadowTransparentReceive: 1
|
m_ShadowTransparentReceive: 1
|
||||||
m_RenderingMode: 1
|
m_RenderingMode: 1
|
||||||
m_DepthPrimingMode: 0
|
m_DepthPrimingMode: 1
|
||||||
m_CopyDepthMode: 0
|
m_CopyDepthMode: 0
|
||||||
m_AccurateGbufferNormals: 0
|
m_AccurateGbufferNormals: 0
|
||||||
m_IntermediateTextureMode: 1
|
m_IntermediateTextureMode: 1
|
||||||
|
|||||||
@ -16,8 +16,16 @@ void CSMain (uint3 id : SV_DispatchThreadID)
|
|||||||
{
|
{
|
||||||
int2 idxy1 = int2(clamp(id.x + Offset, 0, ResX), id.y);
|
int2 idxy1 = int2(clamp(id.x + Offset, 0, ResX), id.y);
|
||||||
int2 idxy2 = int2(clamp(id.x - Offset, 0, ResX), id.y);
|
int2 idxy2 = int2(clamp(id.x - Offset, 0, ResX), id.y);
|
||||||
float diffFactor = saturate(id.x - Offset) * saturate(ResX - (id.x + Offset));
|
float3 col1 = Camera1[idxy1].xyz;
|
||||||
float4 resVal = float4(((Camera1[idxy1] * diffFactor + Camera2[idxy2] * diffFactor) / 2).xyz, 1);
|
float3 col2 = Camera1[idxy2].xyz;
|
||||||
|
float diffFactorL = saturate(id.x - Offset);
|
||||||
|
float diffFactorR = saturate(ResX - (id.x + Offset));
|
||||||
|
float4 resVal = 0;
|
||||||
|
//if(diffFactorL && diffFactorR > 0)
|
||||||
|
resVal = float4(((col1 * diffFactorR + col2 * diffFactorL) / ((diffFactorL && diffFactorR) == false ? 1 : 2)).xyz, 1);
|
||||||
|
//else
|
||||||
|
//resVal = float4(max(col1, col2), 1);
|
||||||
|
|
||||||
Result[id.xy] = resVal;
|
Result[id.xy] = resVal;
|
||||||
MonoChannelResult[id.x + id.y * ResX] = resVal.r * FarClipPlane;
|
MonoChannelResult[id.x + id.y * ResX] = resVal.r * FarClipPlane;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,54 +14,36 @@ Shader "Hidden/RenderDepth"
|
|||||||
Pass
|
Pass
|
||||||
{
|
{
|
||||||
HLSLPROGRAM
|
HLSLPROGRAM
|
||||||
|
#pragma target 5.0
|
||||||
|
|
||||||
#pragma vertex Vert
|
#pragma vertex Vert
|
||||||
#pragma fragment frag
|
#pragma fragment frag
|
||||||
|
|
||||||
//#include "UnityCG.cginc"
|
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||||
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
|
||||||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareOpaqueTexture.hlsl"
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
|
||||||
|
|
||||||
struct appdata
|
|
||||||
{
|
|
||||||
float4 vertex : POSITION;
|
|
||||||
float2 uv : TEXCOORD0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct v2f
|
|
||||||
{
|
|
||||||
float2 uv : TEXCOORD0;
|
|
||||||
float4 vertex : SV_POSITION;
|
|
||||||
};
|
|
||||||
|
|
||||||
// v2f vert (appdata v)
|
|
||||||
// {
|
|
||||||
// v2f o;
|
|
||||||
// o.vertex = UnityObjectToClipPos(v.vertex);
|
|
||||||
// o.uv = v.uv;
|
|
||||||
// return o;
|
|
||||||
// }
|
|
||||||
|
|
||||||
sampler2D _MainTex;
|
sampler2D _MainTex;
|
||||||
TEXTURE2D_X(_CameraOpaqueTexture);
|
|
||||||
SAMPLER(sampler_CameraOpaqueTexture);
|
|
||||||
|
|
||||||
RWStructuredBuffer<float> distBuffer;
|
RWStructuredBuffer<float> distBuffer;
|
||||||
int res;
|
int res;
|
||||||
|
bool _RenderDepth;
|
||||||
|
|
||||||
float4 frag (Varyings i) : SV_Target
|
float4 frag (Varyings i) : SV_Target
|
||||||
{
|
{
|
||||||
float2 UV = i.positionCS.xy / _ScaledScreenParams.xy;
|
uint2 pixelIdx = uint2(i.positionCS.xy);
|
||||||
|
float3 color = SampleSceneColor(i.texcoord);
|
||||||
|
|
||||||
#if UNITY_REVERSED_Z
|
#if UNITY_REVERSED_Z
|
||||||
real depth = SampleSceneDepth(UV);
|
real depth = SampleSceneDepth(i.texcoord);
|
||||||
#else
|
#else
|
||||||
// Adjust z to match NDC for OpenGL
|
// Adjust z to match NDC for OpenGL
|
||||||
real depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, SampleSceneDepth(UV));
|
real depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, SampleSceneDepth(i.texcoord));
|
||||||
#endif
|
#endif
|
||||||
depth = Linear01Depth(depth, _ZBufferParams);
|
depth = Linear01Depth(depth, _ZBufferParams);
|
||||||
|
distBuffer[pixelIdx.y * _ScaledScreenParams.x + pixelIdx.x] = depth * _ProjectionParams.z;
|
||||||
return float4(depth, depth, depth, 1);
|
return _RenderDepth ? float4(depth, depth, depth, 1) : float4(color, 1);
|
||||||
}
|
}
|
||||||
ENDHLSL
|
ENDHLSL
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user