描述:已知数值satrt end 摄像机到物体数值d 物体的透明度a
1:摄像机离开物体 由近到远 物体由不透明到透明的变化过程 如下图
该补补数学知识了
a =1 - (d-start)/(end - start)
可以这么理解,将距离d距离先向前移动start,那么d-start的数值就是从0——end -start 要想把0——end-start的数值变成0到1
那么就需要处以end -start 而我们需要的是1到0 所以需要用1减
2.还有一种情况是反过来 随着摄像机距离的减小 物体变透明
a = (d-end)/(start-end)
当d小于end的时候 a会是负数 而我们正真想要的是0 当d大于start的时候 a会大于1 我们需要的是1
所以直接saturate这个值就可以了 而不要去在片段里去用if 会增加不必要的运算 拉低效率
跟上面的方式一样去理解就好了 (跟上面不一样的是这里的start比end远)
3.再补充一个知识点
相机到物体的距离
float4 wpos = mul(_Object2World, v.vertex);
float distance = length(_WorldSpaceCameraPos - wpos.xyz);
需要将顶点转化为世界空间 然后同空间用length函数求出d的值
结束 !!!
亲,如果您觉得本文不错,愿意给我一些动力的话,请用手机扫描二维码即可向我打赏
打赏