最近在Unity在ForwardPath的情况下,实现一个DeferRender的效果。 其中在DeferRender的时候会用到世界坐标。 世界坐标有三个值x,y,z,如果要记录三个值就需要三个通道来记录世界坐标。
第一部分:根据深度值世界坐标
其实在DeferRender的时候我们对每一个像素值都是可以知道屏幕坐标的xy值的, 那么只要知道了深度值, 就可以反向推出世界坐标了。
图1-1 模型空间到屏幕空间的过程
在经过透视除法得到的结果xyz 都是在-1 -- 1 (opengl) 或者0-1(directx)。 我们只要获取到这个深度值。 在PC中, vertex的 shader写法如下:
图1-2 在vertshader中获取深度值