UE4材质06_距离,坐标,深度

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 代表消退的距离,可以控制强度

这个输入不会受到相机距离的影响,因为它计算的是物体之间的距离

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

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值