Bootstrap

UE5材质实现近大远小的效果 完善视差效果

思考这个问题,首先我们需要用到缩放的知识。其次我们要让它与摄像机的距离进行关联。先上代码。

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

输出相机的世界位置。不同相机输出的值不同

大佬的帖子,很全。

UE4材质编辑器入门笔记(6)——坐标、向量和位置 - 知乎 (zhihu.com)

;