CGPROGRAM
sampler2D _CameraDepthTexture; //需要声明一个2d贴图变量用于深度图采样
struc a2f{
``
}
struct v2f{
``
float4 screenPosition : TEXCOORDx;
}
v2f vert (appdata v){
``
o.screenPosition = ComputeScreenPos(o.vertex); //拿到屏幕坐标
}
float4 frag (v2f i) : SV_Target
{
//处理具有透视关系的纹理采样用tex2Dproj(texture,uv)
//UNITY_PROJ_COORD可以将screenPosition转为透视投影下的uv坐标
float depth1 = tex2Dproj(_CameraDepthTexture,UNITY_PROJ_COORD(i.screenPosition)).r;
float DepthLinear1 = LinearEyeDepth(depth1);//转成摄像机视角线性的深度值
float depthDifference = DepthLinear1- i.screenPosition.w; //摄像机视角的深度减去当前物体的深度
}
ENDCG
````
camera中需要设置深度写入
GetComponent<Camera>().depthTextureMode = depthTextureMode; //设置深度写入模式
unity水渲染学习1_深度图和采样
最新推荐文章于 2024-02-23 22:16:21 发布