Unity3D 深度图
生活随笔
收集整理的這篇文章主要介紹了
Unity3D 深度图
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
深度圖
- 深度圖原理
- 深度重建
- 深度寫入
- 一些遇到的坑
深度圖原理
移步:深度測試,這篇文章講了深度圖的概念。
深度重建
深度圖是經過NDC坐標空間后渲染出來的,深度存儲時不是線性的,因此需要進行重建。幸運的是,Unity3D ShaderLab中提供了這個函數(shù)接口。
// vert o.vertex = UnityObjectToClipPos(v.vertex); // mvp變換 o.screenPos = ComputeScreenPos(o.vertex); // 獲取屏幕空間坐標 o.uv = v.uv; // uv COMPUTE_EYEDEPTH(o.screenPos.z); // 獲取模型在View空間的z// frag float depth = SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenPos)); // 線性深度值 float screenZ = LinearEyeDepth(depth); // View空間下的深度值 float depth01 = Linear01Depth(depth); // 歸一到0-1的深度值 // 頂點重建 float4 H = float4(i.uv.x * 2 - 1, i.uv.y * 2 - 1, depth01 * 2 - 1, 1); // dnc 坐標系下的 x y z float4 D = mul(_CurrentInverseVP, H); // 重建世界坐標點 float4 W = D / D.w; // 透視逆變換, 需要將xyz/w進行歸一深度寫入
注意:RenderQueue <= 2450。
Pass {Name "ShadowCaster"Tags { "LightMode" = "ShadowCaster" }ZWrite On ZTest LEqual Cull OffCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma target 2.0#pragma multi_compile_shadowcaster#include "UnityCG.cginc"struct v2f {V2F_SHADOW_CASTER;UNITY_VERTEX_OUTPUT_STEREO};v2f vert(appdata_base v){v2f o;UNITY_SETUP_INSTANCE_ID(v);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)return o;}float4 frag(v2f i) : SV_Target{SHADOW_CASTER_FRAGMENT(i)}ENDCG }一些遇到的坑
總結
以上是生活随笔為你收集整理的Unity3D 深度图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件开发包(SDK)安全与合规报告(20
- 下一篇: 2020中国数字营销人才发展报告