天天看點

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.01_World_Position 

Absolute World Position  絕對世界位置

輸出的是像素的世界位置,不是物體的世界位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

連接配接到BaseColor上,會自動進行鉗制到0和1之間,是以要連接配接到Emissive Color自發光顔色上

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.02_Actor_Position

Actor_Position 物體世界位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

按住Shift,可以随相機移動

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.03_Camera_Position

Camera_Position 

輸出得是相機的世界位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.04_Object_Position

Object Position

輸出的是物體的中心位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

Object Position輸出的是模型中心的值,而不是坐标原點

Aactor Position輸出的是坐标原點的位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.05_Object_Bounds

Object Bounds 物體邊界

輸出的是物體XYZ的長度或者大小

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.06_Object_Radius 

Object_Radius 物體半徑

輸出物體的半徑,輸出的是一個标量,不是向量

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

輸出的是XYZ三個軸中最大的值作為它的半徑

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

輸出的效果是會随着半徑産生變化

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.07_Object_Orientation

Object_Orientation 物體的朝向

輸出的是物體朝向的方向,同時輸出的也是三維資料

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.08_Screen_Position

Screen_Position 螢幕位置

ViewportUV,PixelPosition兩個輸出接口功能不一樣

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

ViewportUV 

輸出的是二維資料,因為螢幕是X,Y兩個軸,它沒有Z軸,我們的螢幕是平面,它沒有深度

它輸出的是一個螢幕位置,也就是說螢幕上的每一個點,它得位置都是不同的,Debug隻能顯示中間這個區域的這個像素點,它的位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

實際遊戲運作一般有兩種運作狀态

一種是全屏,我們整個螢幕都是它的位置

一種是視窗,這個視窗的大小,才是它螢幕的位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

UE的螢幕坐标,輸出的是一個相對位置

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

PixelPosition 像素位置

輸出的是一個實際的資料,而不是0-1了

輸出的是每一個像素點的X,Y的相對的坐标,它是基于螢幕的像素點來算的

它不是0-1,它是0到這個螢幕的分辨率,輸出的是一個基于螢幕的像素點的數,它不是一個相對0-1的數

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.09_Transform_Vector

Transform_Vector 變換向量

把向量從一個參考坐标系轉換為另一個參考坐标系

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.10_Distance

Distance 距離

接受2個輸入,計算它們的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

Actor Position物體位置到Camera Position之間的距離為263...

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.11_PixelDepth 

PixelDepth 像素深度

輸出的是像素的深度 實際上就是相機到像素的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

輸出的是相機到物體的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

它計算的是每一個像素,而這個球體,我們可以看到每個像素的深度都是不一樣的

從頂視圖看,因為它是個球體,是以它都是這樣一排一排的,它每一排的像素距離我們的螢幕深度都是不一樣的,是以就會顯示這樣的的效果

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

Actor Position和Camera Position

弊端之一,如果你是以這個表面的距離來作為咱們相機之間的距離的話,那麼就不能使用Actor Position和Camera Position它們之間的距離來作為表面和相機之間的距離,哪怕調到很高的倍數,它的距離還是不會産生變化,是以就應該使用PixelDepth像素深度,那麼它輸出的值才是正确的

可以使用PixelDepth像素深度來準确的判斷這個表面上它每個像素距離相機的深度

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

Actor Position和Camera Position

隻計算它物體中心的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

PixelDepth

可以計算每個像素到相機之間的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

邊緣也離相機更近,使用像素深度也可以得到一個漸變效果

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.12_SceneDepth

SceneDepth 場景深度

輸出的是它背後的像素到相機之間的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

黃框代表相機,白色Plane到相機就得到了一個像素到相機之間的距離,就是之前講到的節點PixelDepth像素深度,那麼這個場景深度它實際上得到的是它背後的第一個像素的深度,地闆上的像素就是得到這樣一個值

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

SceneDepth 場景深度

這個節點是不能在Opaque不透明模式下使用的,必須要改為Translucent半透明模式

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

為什麼是Translucent半透明模式才能使用?

在之前的章節講到過,延遲渲染會将後面的像素剔除掉,也就是說如果這個材質它不是半透明模式,那麼它後面的像素也就是消失了,我們根本無法得到後面的像素,是以必須要設定為半透明模式,這個節點才能獲得它背後的像素的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

水到岸邊會淺一些,到水的中心,也就是深海區,會深一些,那麼水的顔色也會随之變化,淺水區水的顔色會淺一些,深水區水的顔色會深一些,我們就可以使用這個節點來判斷,它距離水下的地闆有多遠,然後根據深度來切換它們的顔色

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

現在就可以看到淺水區是一個藍色,深水區是一個黃色,但是這樣做會有一個弊端,因為它計算的是相機的距離,是以當我們相機遠離的時候,整個地方都會被視作深水區,也就是說我們的水并不是完全由這個節點來制作的,它隻能實作一部分效果,而且這個效果是有弊端的

這個節點可以根據它背後的物體距離它多遠來制作這樣一個效果,它雖然有弊端,但也是有實際用途的

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

SceneDepth場景深度減去PixelDepth像素深度再除以100,會出現這個效果,球體出現黑色漸變邊緣,并且靠近下面的物體就會變黑

SceneDepth場景深度輸出的是背後的像素到相機之間的距離,PixelDepth輸出的是像素到相機之間的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade
UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

一個輸出的背後的距離,一個輸出的是自己的距離,這裡是用的背後的像素距離減去它自己的像素距離

這紅色線段上,它自己的距離和它背後的距離剛好是一樣的,是以它這裡是一個純黑色

到這個地方,它自己像素到相機之間的距離和它背後到相機之間的距離,是不是隔着這一段,是不是它就是一個白色

而中間的距離會近一些,是以它就是灰色

左邊的距離完全一樣,就是純黑色

背後的像素距離減去它自身的像素距離,就得到這樣一個差,那麼這個差就可以作為一個像這樣靠近物體,它就變黑的一個遮罩,靠近物體,就得到一個消失的效果

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

6.13_DepthFade

DepthFade 深度消退

得到一個靠近其他物體時的遮罩效果(效果等同場景深度減去像素深度)

深度消退同樣需要設定為Translucent半透明模式

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

Opacity 代表連接配接原本的不透明,作為末端的輸出

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

FadeDistance 代表消退的距離,可以控制強度

這個輸入不會受到相機距離的影響,因為它計算的是物體之間的距離

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

不會随着相機的距離産生變換,它是一個完全本地的效果

UE4材質06_距離,坐标,深度6.01_World_Position 6.02_Actor_Position6.03_Camera_Position6.04_Object_Position6.05_Object_Bounds6.06_Object_Radius 6.07_Object_Orientation6.08_Screen_Position6.09_Transform_Vector6.10_Distance6.11_PixelDepth 6.12_SceneDepth6.13_DepthFade

繼續閱讀