在做一些后处理Shader的时候,很多情况都需要对屏幕空间中的坐标还原到世界坐标。
一、还原原理
_CameraDepthTexture保存了物体的深度信息,深度信息可以直接通过uv采样到。假设获取到了屏幕空间中A像素的深度信息,如果要得到A像素的世界坐标,还需要一个方向,深度信息是长度。这个方向,应该是A像素投影在屏幕坐标的点指向A像素世界坐标的点。然后通过方向乘以深度就得到物体在相机空间下的坐标,然后加上相机的世界坐标,就得到了物体的世界坐标。
二、计算方向
唯一的难点就是计算方向,这里可以计算相机4个角,从近裁面指向相机
上面是主视图,右视图,主视图
这里计算是针对近剪裁面的
float fov = mcamera.fieldOfView;
float near = mcamera.nearClipPlane;
float aspect = mcamera.aspect;
float halfHeight = n