offectSamplePos);floattrueDepth=SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,screenParams01);//等价于tex2D(_CameraDepthTexture, screenParams01);floatlinear01EyeOffectDepth=Linear01Depth(offcetDepth);floatlinear01EyeTrueDepth=Linear01Depth(trueDepth);float...
sampler2D_CameraDepthTexture;float4frag(v2finput):Color{floatdepth=tex2D(_CameraDepthTexture,input.uv);returnfloat4(depth,0.0f,0.0f,1.0f);} 采样的代码,一般也会写成下面这种形式: floatdepth=UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,input.uv)); 其中UNITY_SAMPLE_DEPTH的作用就是取r通道的值:...
此外,有了采样的思路代码就很好实现了(CG语言) float2 offectSamplePos=screenParams01-float2(_RimOffect/input.clipW,0);//向右采样则是+float offcetDepth=SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,offectSamplePos);float trueDepth=SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,screenParams01);//等价于tex2D(_Ca...
SAMPLE_DEPTH_TEXTURE_LOD、 SAMPLE_DEPTH_TEXTURE_PROJ 宏同样接受两个参数一一深度纹理和一个float3 或float4 类型的纹理坐标,它的内部使用了tex2Dproj 这样的函数进行投影纹理采样,纹理坐标的前两个分量首先会除以最后一个分量,再进行纹理采样。如果提供了第四个分量,还会进行一次比较,通常用于阴影的实现中。SAMPLE...
SAMPLE_DEPTH_TEXTURE_PROJ 宏同样接受两个参数——深度纹理和一个float3或float4类型的纹理坐标,它的内部使用了tex2Dproj这样的函数进行投影纹理采样,纹理坐标的前两个分量首先会除以最后一个分量,再进行纹理采样。如果提供了第四个分量,还会进行一次比较, 通常用于阴影的实现中。SAMPLE_DEPTH_TEXTURE_PROJ 的第二...
如果生成了深度纹理,深度纹理会保存在内置变量 _CameraDepthTexture 中。 1)深度纹理采样 // 非线性的深度(即计算的深度值与实际深度值不是线性关系)floatdepth=SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,i.uv);// tex2D(_CameraDepthTexture, i.uv).r// 观察空间中的线性的深度, 值域: [Near, Far], 公式...
SAMPLE_DEPTH_TEXTURE_PROJ 宏同样接受两个参数——深度纹理和一个float3或float4类型的纹理坐标,它的内部使用了tex2Dproj这样的函数进行投影纹理采样,纹理坐标的前两个分量首先会除以最后一个分量,再进行纹理采样。如果提供了第四个分量,还会进行一次比较, 通常用于阴影的实现中。SAMPLE_DEPTH_TEXTURE_PROJ 的第二...
如果生成了深度纹理,深度纹理会保存在内置变量 _CameraDepthTexture 中。 1)深度纹理采样 // 非线性的深度(即计算的深度值与实际深度值不是线性关系)floatdepth =SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv);// tex2D(_CameraDepthTexture, i.uv).r// 观察空间中的线性的深度, 值域: [Near,...
上面用到了这个宏:SAMPLE_DEPTH_TEXTURE 原型如下: 代码语言:javascript 复制 #defineSAMPLE_DEPTH_TEXTURE(sampler,uv)(tex2D(sampler,uv).r) 这句代码也可以写为: tex2D(_CameraDepthTexture, i.uv).r; 从视空间深度转化到屏幕空间深度的公式如下: a = F/(F – N) b = NF/(N – F) 最终depth(...
一旦设置好上面的摄像机模式后,我们就可以在Shader中声明_CameraDepthTexture来访问它。 Unity为我们提供了统一的宏SAMPLE_DEPTH_TEXTURE用来处理这些平台差异(比如PS3和PS2)造成的问题。例如: float d = SAMPLE DEPTH TEXTURE (_CameraDepthTexture , i.uv) ; ...