UE4材质06_距离,坐标,深度
6.01_World_PositionAbsolute World Position绝对世界位置输出的是像素的世界位置,不是物体的世界位置连接到BaseColor上,会自动进行钳制到0和1之间,所以要连接到Emissive Color自发光颜色上6.02_Actor_PositionActor_Position物体世界位置按住Shift,可以随相机移动6.03_Camera_PositionCam
6.01_World_Position
Absolute World Position 绝对世界位置
输出的是像素的世界位置,不是物体的世界位置

连接到BaseColor上,会自动进行钳制到0和1之间,所以要连接到Emissive Color自发光颜色上

6.02_Actor_Position
Actor_Position 物体世界位置

按住Shift,可以随相机移动

6.03_Camera_Position
Camera_Position
输出得是相机的世界位置

6.04_Object_Position
Object Position
输出的是物体的中心位置

Object Position输出的是模型中心的值,而不是坐标原点
Aactor Position输出的是坐标原点的位置


6.05_Object_Bounds
Object Bounds 物体边界
输出的是物体XYZ的长度或者大小

6.06_Object_Radius
Object_Radius 物体半径
输出物体的半径,输出的是一个标量,不是向量

输出的是XYZ三个轴中最大的值作为它的半径

输出的效果是会随着半径产生变化

6.07_Object_Orientation
Object_Orientation 物体的朝向
输出的是物体朝向的方向,同时输出的也是三维数据


6.08_Screen_Position
Screen_Position 屏幕位置
ViewportUV,PixelPosition两个输出接口功能不一样

ViewportUV
输出的是二维数据,因为屏幕是X,Y两个轴,它没有Z轴,我们的屏幕是平面,它没有深度
它输出的是一个屏幕位置,也就是说屏幕上的每一个点,它得位置都是不同的,Debug只能显示中间这个区域的这个像素点,它的位置

实际游戏运行一般有两种运行状态
一种是全屏,我们整个屏幕都是它的位置
一种是窗口,这个窗口的大小,才是它屏幕的位置

UE的屏幕坐标,输出的是一个相对位置

PixelPosition 像素位置
输出的是一个实际的数据,而不是0-1了
输出的是每一个像素点的X,Y的相对的坐标,它是基于屏幕的像素点来算的
它不是0-1,它是0到这个屏幕的分辨率,输出的是一个基于屏幕的像素点的数,它不是一个相对0-1的数

6.09_Transform_Vector
Transform_Vector 变换向量
把向量从一个参考坐标系转换为另一个参考坐标系

6.10_Distance
Distance 距离
接受2个输入,计算它们的距离

Actor Position物体位置到Camera Position之间的距离为263...

6.11_PixelDepth
PixelDepth 像素深度
输出的是像素的深度 实际上就是相机到像素的距离

输出的是相机到物体的距离

它计算的是每一个像素,而这个球体,我们可以看到每个像素的深度都是不一样的
从顶视图看,因为它是个球体,所以它都是这样一排一排的,它每一排的像素距离我们的屏幕深度都是不一样的,所以就会显示这样的的效果

Actor Position和Camera Position
弊端之一,如果你是以这个表面的距离来作为咱们相机之间的距离的话,那么就不能使用Actor Position和Camera Position它们之间的距离来作为表面和相机之间的距离,哪怕调到很高的倍数,它的距离还是不会产生变化,所以就应该使用PixelDepth像素深度,那么它输出的值才是正确的
可以使用PixelDepth像素深度来准确的判断这个表面上它每个像素距离相机的深度


Actor Position和Camera Position
只计算它物体中心的距离

PixelDepth
可以计算每个像素到相机之间的距离

边缘也离相机更近,使用像素深度也可以得到一个渐变效果

6.12_SceneDepth
SceneDepth 场景深度
输出的是它背后的像素到相机之间的距离

黄框代表相机,白色Plane到相机就得到了一个像素到相机之间的距离,就是之前讲到的节点PixelDepth像素深度,那么这个场景深度它实际上得到的是它背后的第一个像素的深度,地板上的像素就是得到这样一个值


SceneDepth 场景深度
这个节点是不能在Opaque不透明模式下使用的,必须要改为Translucent半透明模式

为什么是Translucent半透明模式才能使用?
在之前的章节讲到过,延迟渲染会将后面的像素剔除掉,也就是说如果这个材质它不是半透明模式,那么它后面的像素也就是消失了,我们根本无法得到后面的像素,所以必须要设置为半透明模式,这个节点才能获得它背后的像素的距离

水到岸边会浅一些,到水的中心,也就是深海区,会深一些,那么水的颜色也会随之变化,浅水区水的颜色会浅一些,深水区水的颜色会深一些,我们就可以使用这个节点来判断,它距离水下的地板有多远,然后根据深度来切换它们的颜色

现在就可以看到浅水区是一个蓝色,深水区是一个黄色,但是这样做会有一个弊端,因为它计算的是相机的距离,所以当我们相机远离的时候,整个地方都会被视作深水区,也就是说我们的水并不是完全由这个节点来制作的,它只能实现一部分效果,而且这个效果是有弊端的
这个节点可以根据它背后的物体距离它多远来制作这样一个效果,它虽然有弊端,但也是有实际用途的


SceneDepth场景深度减去PixelDepth像素深度再除以100,会出现这个效果,球体出现黑色渐变边缘,并且靠近下面的物体就会变黑
SceneDepth场景深度输出的是背后的像素到相机之间的距离,PixelDepth输出的是像素到相机之间的距离


一个输出的背后的距离,一个输出的是自己的距离,这里是用的背后的像素距离减去它自己的像素距离
这红色线段上,它自己的距离和它背后的距离刚好是一样的,所以它这里是一个纯黑色
到这个地方,它自己像素到相机之间的距离和它背后到相机之间的距离,是不是隔着这一段,是不是它就是一个白色
而中间的距离会近一些,所以它就是灰色
左边的距离完全一样,就是纯黑色
背后的像素距离减去它自身的像素距离,就得到这样一个差,那么这个差就可以作为一个像这样靠近物体,它就变黑的一个遮罩,靠近物体,就得到一个消失的效果

6.13_DepthFade
DepthFade 深度消退
得到一个靠近其他物体时的遮罩效果(效果等同场景深度减去像素深度)
深度消退同样需要设置为Translucent半透明模式

Opacity 代表连接原本的不透明,作为末端的输出

FadeDistance 代表消退的距离,可以控制强度
这个输入不会受到相机距离的影响,因为它计算的是物体之间的距离

不会随着相机的距离产生变换,它是一个完全本地的效果

更多推荐



所有评论(0)