思考这个问题,首先我们需要用到缩放的知识。其次我们要让它与摄像机的距离进行关联。先上代码。
CameraPosition 是摄像机在世界的位置。Absolute WorldPosition是物体在世界的位置。距离就是摄像机到材质的距离。
锚点坐标(图像中心)先移动到原点(左上角),再把UV坐标系拉伸放大,再移动回锚点原来的位置。反向理解为坐标系移动也可以。
接下来,要理解的是拉伸比例的大小。这个大小,可以通过映射的方式,粗略的线性计算。蓝图里有个映射蓝图结点(Map Range Clamped 可以实现值的转换,进行映射),材质里也有个结点叫RemapValueRange。
这样就实现了近大远小的效果。
再将它用到上一个篇文章中的视差
视差里的UV,已经通过计算将坐标系放到了 视差里的面的锚点上。所以直接缩放就能达到效果。
这里再区分一下CameraVector是像素点到摄像机的向量
1、相机向量CameraVector
像素到相机的向量
可以直接用来采样HDR贴图(cubemap),但是是反的
2、反射向量ReflectionVector
表面法线反射到相机位置的向量
用这个来采样HDR贴图就是正确的结果
3、顶点法线VectorNormalWS
查看模型时点亮Normal以查看模型法线
4、像素法线PixelNormalWS
和顶点法线很像,但是当有法线贴图时,像素法线的输出会包含法线贴图的计算
5、世界位置WorldPosition
输出像素的世界位置,自动saturate
可通过xyz三个方向的mask作为Uv采样贴图来做出在某个方向投射的效果
6、角色位置ActorPosition
物体的世界位置(即Transform组件上的坐标)
7、相机位置CameraPosition
输出相机的世界位置。不同相机输出的值不同
大佬的帖子,很全。