ue4-2,uv實例1扭曲效果
1,先看效果,給圖片增加扭曲效果
2,實現(xiàn)所用節(jié)點和貼圖
3分步詳解
3.1
3.2,如果把一張貼圖替換上面的時間節(jié)點呢
也很漂亮,之所以這樣,是因為傳遞的數(shù)值太大了,導(dǎo)致這樣。
正常不對uv進行操作時,材質(zhì)會默認使用texcoord中的u和v方向的兩張灰度圖。
當texture?sample的uvs端口有輸入時,它會使用輸入的這張灰度圖。
在這個地方,將云圖r/g通道加入到texcoord的u/v方向后,取某一個點,在這個點,云圖的(r1,g1)值會加上texcoord(r2,g2),得到一個(r3,g3)值,無論這個點在材質(zhì)貼圖的哪個位置,當這個點被texture?sample調(diào)用時,它會調(diào)用原uv圖中(r3,g3)這個值對應(yīng)的紋理信息。
這里直接將一張噪波圖加上來,很多點都會調(diào)用離他比較遠的點的信息。
所以,這里,需要將加進來的這張噪波處理一下,讓它所有值都降低,這樣就可以讓材質(zhì)上的點只取臨近點的信息。
3.3如果我們讓云圖圖片的uv產(chǎn)生移動會怎樣?
針對材質(zhì)貼圖的一個點來想,當這么一張兩通道灰度圖傳進來時,這個點的rg大小每時每刻都在變化,又因為變化值很小,它只會調(diào)用離他比較近點的貼圖信息,所以構(gòu)成的畫面就是這種扭曲畫面。
3.4,效果差不多了,只是它的波動頻率太單一,速度又太快
ben用套娃的方式,用紅色區(qū)域的這一堆替代了原來的時間節(jié)點,增加了復(fù)雜性。
在時間節(jié)點,乘以比較小的一個數(shù),使它的變化頻率降低了。
在紅框里的數(shù)據(jù),出紅框時,并沒有乘以較小的數(shù),是因為這樣就可以保持比較高的擾動性,就像直接把貼圖未經(jīng)處理加給texcoord一樣。
效果就是文章開頭的第二張圖。
3.5
ben為了使其更加不規(guī)律,還做了這樣的處理
4,解決出現(xiàn)的邊角位移問題
經(jīng)過這些計算,材質(zhì)貼圖向左向上位移了一部分,要解決這個問題,直接在*節(jié)點減某一個數(shù)就可以了。
u減就是讓它向右移動,v減就是讓它向下移動。
試了幾個數(shù),大體效果就不錯了
UE4是基于物理的渲染PBR,結(jié)合自己理解說一說ue4中什么是材質(zhì),什么材質(zhì)實例?
具體看以下內(nèi)容。 UE4的PBR材質(zhì)系統(tǒng)中引入了各種BRDF理論模型。
BRDF 雙向反射分布函數(shù)( Function)是建立在光學(xué)物理與計算機圖形學(xué)的基礎(chǔ)上的用于描述光反射現(xiàn)象的數(shù)學(xué)模型。
為了便于使用,BRDF模型被組織成了多種參數(shù)化的指數(shù)模型,可以分為三類:經(jīng)驗?zāi)P?、基于物理的模型、?shù)據(jù)模型等。
游戲建模師干貨分享,教你如何在UE4的編輯器中調(diào)用藍圖
在UE4的編輯器中調(diào)用藍圖可以在虛幻編輯器中按需調(diào)用藍圖事件和函數(shù),每當需要在運行時和在編輯器中運行相同的“藍圖”圖時,此功能就特別有用。例如,你可以在編輯器UI中測試或預(yù)覽運行時游戲玩法。它也是觸發(fā)需要角色或3D空間中的位置作為上下文的編輯器中的藍圖的簡單方法。
在UE4的編輯器中調(diào)用藍圖
1、每當在Blueprint類的“事件圖”中使用“自定義事件”節(jié)點時,都可以在“詳細信息”面板中設(shè)置“圖”>“在編輯器中調(diào)用”選項:
同樣,在Blueprint類上創(chuàng)建新函數(shù)時,可以選擇新函數(shù)的節(jié)點,并在“詳細信息”面板中設(shè)置相同的選項:
2、如果尚未將Blueprint類的實例添加到您的Level中。
3、在關(guān)卡視口或“世界大綱”中選擇“藍圖角色”。“詳細信息”面板為你設(shè)置的每個“調(diào)用編輯器”事件和功能顯示一個按鈕。通常會在“默認”部分找到它們,其中“藍圖”類還公開了標記為“實例可編輯”的變量。
如果自定義事件或功能具有任何輸入,則不會在“詳細信息”面板中顯示它。
4、單擊這些按鈕可從“自定義事件”節(jié)點開始觸發(fā)事件圖執(zhí)行,或觸發(fā)自定義函數(shù)。
支持的藍圖類
并非所有的藍圖類都允許其自定義事件和函數(shù)在虛幻編輯器中運行。
下述步驟適用于可以放置在Level中的任何Blueprint類,即任何直接或間接從Actor派生的類。
如果需要訪問僅編輯器功能,例如在內(nèi)容瀏覽器中使用Assets,則可以從可放置的僅編輯器基類(例如)派生Blueprint類。但使用僅編輯器的基類時,將無法在運行時觸發(fā)藍圖,因為打包的虛幻引擎應(yīng)用程序中不包含僅編輯器的類。
從Actor基類派生的Editor Utility Blueprint類不會在“ 詳細信息”面板中公開任何在編輯器中標記為可調(diào)用的“函數(shù)”或“自定義事件”的按鈕。如果需要使用“詳細信息”面板中的按鈕來驅(qū)動“藍圖”邏輯,請在普通的“藍圖”類中而不是在“編輯器實用程序藍圖”類中創(chuàng)建圖形。但是,對于一種更靈活,更強大的方法來創(chuàng)建自定義UI來驅(qū)動虛幻編輯器中的Blueprint邏輯,考慮改用Editor Utility Widget。
我近期整理了不少學(xué)習(xí)資料,每天都會開設(shè)游戲建模的直播課,課程會講到3D Max、Maya以及Zbrush等軟件的使用以及機械、道具、人物、怪物等模型的制作,想要更多建模學(xué)習(xí)資料或者對建模感興趣的小伙伴可以加入我們的建模交流圈 在線等你喲!
Unreal Engine 4場景制作攻略指南-UE4室內(nèi)場景制作
場景由環(huán)境球體和冬季外部地圖包圍。
環(huán)境球體材質(zhì)是基于無邊界材質(zhì)。
作為環(huán)境球體的基礎(chǔ)材料,unlit材質(zhì)非常簡單。它由一個具有對比度參數(shù)控制(廉價對比度節(jié)點和標量參數(shù))的紋理采樣槽和具有多重節(jié)點的強度控制組成
從外面看到的景象。周圍的盒子是輕質(zhì)量重要值和后處理體積。
場景包含在3DS Max中創(chuàng)建的多個網(wǎng)格(165),然后導(dǎo)入到 Unreal Engine 4。它們是由物質(zhì)畫家制作的。以門為例…
為光照貼圖(UV通道2)創(chuàng)建的門網(wǎng)格和UV。
門材質(zhì)實例
…以及用于此實例的基礎(chǔ)材料。
基礎(chǔ)材質(zhì)基礎(chǔ)顏色-您可以看到紋理坐標控制,允許我們在 Unreal Engine 4中縮放UV。
[圖片上傳失敗...(image-491f20-)]
我們使用一張來自 Substance Painter的普通地圖和另一張統(tǒng)一的藍色地圖(完全平滑的表面)。我們將它們混合在一起,并使用“正常量”參數(shù)來控制正常貼圖紋理的強度。
遮罩紋理在不同的通道上包含不同的信息:紅色是環(huán)境光遮擋(帶有ao_數(shù)量參數(shù)),綠色是粗糙度,藍色是金屬色。
燈網(wǎng)(和聚光燈內(nèi)部)。
從頂角看燈。
燈泡材質(zhì)。
聚光燈設(shè)置。
燈具材質(zhì)
地板網(wǎng)格被分為不同的元素。
地板紫外線通道1(用于紋理處理)
地板紫外線通道2(用于光照映射)
燈光和燈光質(zhì)量設(shè)置。我們使用Blueprint 9BP Light Studio作為環(huán)境光(HDRI)。
細節(jié)照明可視化
僅照明可視化
沒有后期處理的場景。
后處理場景
后量處理。我們改變了開花和曝光,增加了一點顆粒。我們還提高了白平衡的溫度。
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
現(xiàn)場的最終截圖
謝謝你的閱讀!
UE4基礎(chǔ)知識總結(jié)(四)
六、自動測試技術(shù)
1.自動測試分為簡單測試和復(fù)雜測試,簡單測試用來描述單個原子測試,復(fù)雜測試用來運行基于多個輸入的相同代碼。
2.簡單測試可用來確認特定功能如預(yù)期般可操作。一般都是單元測試或功能測試。
3.復(fù)雜測試可被用來對一系列物品迭代并對每個物品運行相同的功能。一般就是內(nèi)容壓力測試。例如載入所有地圖或編譯所有藍本。
4.當前的規(guī)則是將所有的自動測試放置到相關(guān)模塊內(nèi)的目錄。測試文件命名為[]Test.cpp
5.這些測試通過應(yīng)用RunTest()函數(shù)來單獨定義其功能,而且字符串將保持為空字符串。
IMPLEMENT_SIMPLE__TEST( TClass, , TFlags )
IMPLEMENT_COMPLEX__TEST( TClass, , TFlags )
七、編碼規(guī)范
1.編碼規(guī)范對于程序員來說非常重要,原因如下:
a.一套軟件80%的生命周期都是維護。
b.在軟件的整個生命周期中,幾乎不可能一直是軟件的原始作者來對其進行維護。
c.編碼規(guī)范可以改進軟件的可讀性,從而使得工程師可以快速并透徹地理解新的代碼。
d.如果我們決定將源代碼公布到 MOD 開發(fā)者社區(qū),那么我們想讓它通俗易懂。
e.大部分編碼規(guī)范實際上是交叉編譯器兼容性所要求的。
2.變量、方法及類的名稱應(yīng)該清晰、明確且具有描述性。
3.注釋應(yīng)該是輔助加強代碼的,代碼是功能實現(xiàn),注釋表明了代碼的目的。
八、對象
1.虛幻引擎中的對象基礎(chǔ)類為UObject。UCLASS宏可用于標記從UObject派生的類,使UObject處理系統(tǒng)識別到它們。
2.UCLASS宏為UObject提供一個對UCLASS的引用,描述其基于虛幻引擎的類型。
3.每個UCLASS保留一個稱作“類默認對象(Class Default Object)”的對象,簡稱CDO。
4.新建UObject示例的函數(shù)有:
a.NewObject () 創(chuàng)建一個自動生成命名的新實例。在簡單情況下使用*。
b. () 使用特定命名以及其他幾項任選參數(shù)創(chuàng)建一個新實例。將判斷新實例的Outer中是否存在命名沖突。
c. () 創(chuàng)建一個提供所有可用創(chuàng)建選項的新實例。僅限需要靈活性時使用。
d.new 用于在特定低層情況下構(gòu)建對象,如構(gòu)建函數(shù)需要參數(shù)時。
5.UObjects提供的功能有:
a.垃圾回收:虛幻引擎實現(xiàn)了一個垃圾回收方案,定期清理不再被引用或被顯式標記為待銷毀的 UObject。
b.引用更新:對象被垃圾回收清理時,對它的UPROPERTY引用將自動被更新為 NULL。
c.映象
d.序列化:當一個 UObject 被序列化時,所有 UProperty 數(shù)值將被自動書寫或讀取。
e.默認屬性變化自動更新:UClass 的CDO發(fā)生變化時,引擎將嘗試把這些變化智能應(yīng)用到類的所有實例上(在它們被加載時)。
f.自動屬性初始化:初始化時,在構(gòu)建函數(shù)被調(diào)用之前,UObject 將被自動清零。
g.自動編輯器整合:編輯器理解 UObjects 和 ,還可將這些數(shù)值自動公開進行編輯,而無需編寫特殊代碼。
h.運行時類型信息可用:UObject 明確其為何種 UClass,運行時可作出類型相關(guān)的決定。
i.網(wǎng)絡(luò)復(fù)制:UObject 系統(tǒng)包括一個穩(wěn)定的功能集,實現(xiàn)網(wǎng)絡(luò)通訊和多人 游戲 。
6.UObjects的頭文件格式:
#include 'Object.h'
#include 'MyObject.generated.h'
UCLASS() //UCLASS 宏使虛幻引擎 4 能識別 UMyObject。
class MYPROJECT_API UMyObject : public UObject //如 MyProject 希望將 UMyObject 類公開到其他模塊,則需要指定 MYPROJECT_API。
{
GENERATED_BODY() //對類進行設(shè)置,以支持引擎要求的基礎(chǔ)結(jié)構(gòu)。
};
UE4材質(zhì)系統(tǒng)
在材質(zhì)系統(tǒng)的"基于物理( Based Materials)"方面,只有 4 個您需要熟悉的不同屬性。它們是:
底色(Base Color)
粗糙度(Roughness)
金屬色(Metallic)
高光(Specular)
底色
底色(Base Color) 定義材質(zhì)的整體顏色。它接收 Vector3 (RGB) 值,并且每個通道都自動限制在 0 與 1 之間。
如果是從現(xiàn)實世界獲得的,那么這是使用偏振濾光器拍攝時獲得的顏色 (偏振在校準時會消除非金屬材質(zhì)的鏡面反射)。
針對金屬測得的底色:
粗糙度(Roughness) 輸入控制材質(zhì)表面的粗糙或平滑程度。與平滑的材質(zhì)相比,粗糙的材質(zhì)將向更多方向散射所反射的光線。 這決定了反射的模糊或清晰度(或者鏡面反射高光的廣度或密集度)。 粗糙度 0(平滑)是鏡面反射,而粗糙度 1(粗糙)是漫射(或無光)表面。
金屬色(Metallic) 輸入控制表面在多大程度上"像金屬"。非金屬的金屬色(Metallic)值為 0, 金屬的金屬色(Metallic)值為 1。對于純表面,例如純金屬、純石頭、 純塑料等等,此值將是 0 或 1,而不是任何介于它們之間的值。創(chuàng)建受腐蝕、落滿灰塵或生銹金屬之類的混合表面時, 您可能會發(fā)現(xiàn)需要 介于 0 與 1 之間的值。
在編輯 非金屬 表面材質(zhì)時,您有時可能希望調(diào)整它反射光線的能力,尤其是它的 高光 屬性。 要更新材質(zhì)的高光度,需輸入介于0(無反射)和1(全反射)之間的標量數(shù)值。注意,材質(zhì)的 默認高光值為0.5 。
一般而言,通過修改"高光"(Specular),可添加輕微的吸著現(xiàn)象或小比例的遮蔽,例如在法線貼圖中表示的裂縫。有時,將這些現(xiàn)象稱為腔洞。 比例較小的幾何體,尤其是僅存在于高多邊形中且并入法線貼圖的細節(jié),不會被渲染器的實時陰影拾取。為了捕獲這種遮蔽,我們生成腔洞貼圖, 這通常是追蹤距離非常短的 AO 貼圖。此貼圖先乘以最終的底色,然后輸出并乘以 0.5(鏡面反射默認值)以作為鏡面反射輸出。 即,BaseColor = Cavity×,Specular = Cavity×0.5。
對于高級使用,這可用來控制折射率 (IOR)。我們發(fā)現(xiàn)對于 99% 的材質(zhì),這并非必要。以下是基于實測 IOR 的鏡面反射值。
實測鏡面反射值:
頂部:木炭、新鮮混凝土、老化瀝青。底部:銅、鐵、金、鋁、銀、鎳、鈦
材質(zhì)混合模式
"不透明"(Opaque)
"遮罩"(Masked) : 遮罩沒有鏡面反射
"半透明"()
"疊加型"(Additive)
"調(diào)制"(Modulate)
"調(diào)制"(Modulate)混合模式無非將材質(zhì)的值與背景的像素相乘。這種行為與Photoshop中的 正片疊底模式 混合模式非常類似。
"疊加型"(Additive)混合模式無非獲取材質(zhì)的像素,并將其與背景的像素相加。這與Photoshop中的 線性減淡(添加) 混合模式非常相似。這表示不會進行暗化;因為所有像素值都 添加 到一起,因此黑色將直接渲染為透明。這種混合方式適合于各種特殊效果,例如火焰、蒸汽或全息圖。
與"半透明"()混合方式相同,這種混合方式不支持鏡面反射(即,反射)。這種混合的疊加型性質(zhì)可能意味著您不會以任何方式使用這種混合,但您可以使用上文中"半透明"()小節(jié)中所示的"立方體貼圖"方法來模擬類似于反射的效果。
使用 半透明材質(zhì) 時,一個重要的注意事項是它們目前不支持鏡面反射。這意味著您在表面上不會看到任何反射。但是,可使用 立方體貼圖 通過類似于以下的網(wǎng)絡(luò)來模擬此類反射:
不透明遮罩(Opacity Mask) 類似于不透明度(Opacity),但僅在使用遮罩(Masked)混合模式時可用。與不透明度(Opacity)一樣,它的值在0.0到1.0之間,但與不透明度(Opacity) 不同 的是,結(jié)果中看不到不同深淺的灰色。 在遮罩模式下時,材質(zhì)要么完全可見,要么完全不可見。當你需要可以定義復(fù)雜實心表面(如鐵絲網(wǎng)、鏈環(huán)圍欄等等)的材質(zhì)時,它將成為一種理想的解決方案。不透明部分仍將遵循光照。
你可以使用基礎(chǔ)材質(zhì)節(jié)點上的 不透明度遮罩剪切值(Opacity Mask Clip Value) 屬性來控制剪切發(fā)生點。欲知更多詳情,請參閱 材質(zhì)混合模式文檔 。
不透明蒙板剪輯值(Opacity Mask Clip Value)
我們在之前已了解到 Masked BlendMode (蒙板混合模式)僅有完全不透明或完全透明的像素。您可以把灰度貼圖或貼圖中的單通道作為蒙板來使用。 Clip Value (剪輯值)可以讓您設(shè)置一個閥值,以控制像素何時為不透明或何時為透明。對于擁有細長部分的貼圖,這些區(qū)域會隨著mipmap將白色從圖像或通道中去除而在一定距離內(nèi)消失,您可以通過調(diào)整 Clip Value (剪輯值)來調(diào)整該現(xiàn)象發(fā)生的時間點。
材質(zhì)界面操作
在材質(zhì)預(yù)覽界面,按住 L 鍵并拖動鼠標可以旋轉(zhuǎn)光照方向
轉(zhuǎn)自
材質(zhì)表達式 是 UE4 中的構(gòu)建塊,用來創(chuàng)建功能完整的材質(zhì)。每一個材質(zhì)表達式都是獨立的黑匣,它輸出一個或多個特定值的集合,或者對一個或多個輸入執(zhí)行單一操作,然后輸出該操作的結(jié)果。一個材質(zhì)表達式節(jié)點包含以下5部分:
1、說明 - 所有材質(zhì)表達式都具有公共的 說明(Desc)屬性。在此屬性中輸入的文本將顯示在材質(zhì)編輯器中,它位于工作空間中表達式的正上方。它可用于任何用途,但通常是一種保留關(guān)于表達式用途或功能的簡短備注的好方法。
2、標題欄 - 顯示材質(zhì)表達式名稱或材質(zhì)表達式屬性的相關(guān)信息。
3、輸入 - 這些鏈接用于接收材質(zhì)表達式所要使用的值。
4、預(yù)覽 - 顯示材質(zhì)表達式的輸出值的預(yù)覽。啟用實時更新后,預(yù)覽將自動更新。您可使用空格進行手動更新。
5、輸出 - 這些鏈接用于輸出材質(zhì)表達式操作的結(jié)果。
某些材質(zhì)表達式是參數(shù),這意味著它們的值可在包含該參數(shù)的基本材質(zhì)的材質(zhì)實例中修改(在某些情況下,可在運行時進行動態(tài)修改)。您應(yīng)通過 參數(shù)名稱(Parameter Name)屬性對這些表達式指定*的名稱,以便在材質(zhì)實例中識別特定參數(shù)時使用。如果類型相同的兩個參數(shù)在同一材質(zhì)中具有相同的名稱,那么系統(tǒng)會假定它們是同一個參數(shù)。在材質(zhì)實例中更改此參數(shù)的值時,將在材質(zhì)中同時更改這兩個參數(shù)表達式的值。在基本材質(zhì)中,還將設(shè)置此參數(shù)的默認值。這將是此參數(shù)在材質(zhì)實例中具有的值,除非它在該材質(zhì)實例中被覆蓋并修改。
材質(zhì)表達式有很多類型,本次介紹 數(shù)學(xué)表達式。
Add(加) 表達式接收兩個輸入,將其相加,然后輸出結(jié)果。這個加法運算按通道執(zhí)行,這意味著輸入的 R 通道、G 通道和 B 通道等等將分別相加。兩個輸入必須具有相同數(shù)目的通道,除非其中之一是單個常量值。常量可以添加到具有任意數(shù)目輸入的矢量。
示例:對 0.2 和 0.4 執(zhí)行 Add(加)的結(jié)果是 0.6;對 (0.2,-0.4,0.6) 和 (0.1,0.5,1.0) 執(zhí)行 Add(加)的結(jié)果是 (0.3,0.1,1.6);對 (0.2,-0.4,0.6) 和 1.0 執(zhí)行 Add(加)的結(jié)果是 (1.2,0.6,1.6)
用法示例:Add(加)通常用來使顏色變亮/變暗,或者使 UV 紋理坐標偏移。
(追加矢量) 表達式允許您將通道組合在一起,以創(chuàng)建通道數(shù)比原始矢量更多的矢量。例如,您可以使用兩個 常量 值并進行追加,以建立雙通道 (常量 2 矢量) 值。這有助于將單個紋理中的通道重新排序,或者將多個灰階紋理組合成一個 RGB 彩色紋理。
示例:對 0.2 和 0.4 執(zhí)行追加的結(jié)果是 (0.2,0.4);對 (0.2,0.4) 和 (1.6) 執(zhí)行追加的結(jié)果是 (0.2,0.4,1.6)。
Subtract(減) 節(jié)點接收兩個輸入,從*個輸入中減去第二個輸入,然后輸出它們的差。減法按通道進行,即,*個輸入的 R 通道將減去第二個輸入的 R 通道,*個輸入的 G 通道將減去第二個輸入的 G 通道,依此類推。除非第二個輸入是單個常量值,否則兩個輸入必須具有相同數(shù)目的通道。常量可以從具有任意數(shù)目輸入的矢量中減去。
示例:對 0.5 和 0.2 執(zhí)行 Subtract(減)的結(jié)果是 0.3;對 (0.2,-0.4,0.6) 和 (0.1,0.1,1.0) 執(zhí)行 Subtract(減)的結(jié)果是 (0.1,-0.5,-0.4);對 (0.2,0.4,1.0) 和 0.2 執(zhí)行 Subtract(減)的結(jié)果是 (0.0,0.2,0.8)。
用法示例:Subtract(減)可用來使顏色變暗以及使 UV 偏移。
Multiply(乘) 表達式接收兩個輸入,將其相乘,然后輸出結(jié)果。類似于 Photoshop 的多層混合。乘法按通道進行,即,*個輸入的 R 通道將乘以第二個輸入的 R 通道,*個輸入的 G 通道將乘以第二個輸入的 G 通道,依此類推。除非其中一個值是單個浮點值,否則兩個輸入必須具有相同數(shù)目的值。
示例:對 0.4 和 0.5 執(zhí)行 Multiply(乘)的結(jié)果是 0.2;對 (0.2,-0.4,0.6) 和 (0.0,2.0,1.0) 執(zhí)行 Multiply(乘)的結(jié)果是 (0.0,-0.8,0.6);對 (0.2,-0.4,0.6) 和 0.5 執(zhí)行 Multiply(乘)的結(jié)果是 (0.1,-0.2,0.3)。
用法示例:Multiply(乘)通常用來使顏色/紋理變亮或變暗。
Divide(除) 表達式接收兩個輸入,并輸出*個輸入除以第二個輸入的結(jié)果。除法按通道進行,即,*個輸入的 R 通道將除以第二個輸入的 R 通道,*個輸入的 G 通道將除以第二個輸入的 G 通道,依此類推。除非除數(shù)是單個浮點值,否則兩個輸入必須具有相同數(shù)目的值。切勿以零作除數(shù)。
示例:當 A=(1.0,0.5,-0.4) 且 B=(2.0,2.0,4.0) 時,Divide(除)的輸出為 (0.5,0.25,-0.1)。
OneMinus(一減) 表達式接收一個輸入值,并輸出“一減去該值”。此運算按通道執(zhí)行。
示例:對 0.4 執(zhí)行 OneMinus(一減)的結(jié)果是 0.6;對 (0.2,0.5,1.0) 執(zhí)行 OneMinus(一減)的結(jié)果是 (0.8,0.5,0.0);對 (0.0,-0.4,1.6) 執(zhí)行 OneMinus(一減)的結(jié)果是 (1.0,1.4,-0.6)。
用法示例:當輸入顏色在 [0,1] 范圍內(nèi)時,OneMinus(一減)的作用就是通常所謂的“反色”-- 即,OneMinus(一減)將返回互補色,這種顏色與輸入相加將產(chǎn)生白色。
Min(最小值) 表達式接收兩個輸入,然后輸出其中的較小者。
Max(*值) 表達式接收兩個輸入,然后輸出其中的較大者。
Ceil(加一取整) 表達式接收值,使其 向上 舍入到下一個整數(shù),并輸出結(jié)果。示例:對 0.2 執(zhí)行 Ceil(加一取整)的結(jié)果是 1.0;對 (0.2,1.6) 執(zhí)行 Ceil(加一取整)的結(jié)果是 (1.0,2.0)。
Floor(減一取整) 表達式接收值,使其 向下 舍入到上一個整數(shù),并輸出結(jié)果。
示例:對 0.2 執(zhí)行 Floor(減一取整)的結(jié)果是 0.0;對 (0.2,1.6) 執(zhí)行 Floor(減一取整)的結(jié)果是 (0.0,1.0)。
Frac(小數(shù)) 表達式接收值,并輸出這些值的小數(shù)部分。
示例:對 0.2 執(zhí)行 Frac(小數(shù))的結(jié)果是 0.2;對 (0.0,1.6) 執(zhí)行 Frac(小數(shù))的結(jié)果是 (0.0,0.6)。
FMod(浮點余數(shù)) 表達式返回對兩個輸入執(zhí)行除法運算的浮點余數(shù)。
示例:對 (10.9,3.9) 執(zhí)行 FMod(浮點余數(shù))的結(jié)果是 3.1。
Clamp(限制) 表達式接收值,并將它們約束到由最小值和*值定義的指定范圍。
示例:在最小值為 0.0 且*值為 1.0 的情況下對 0.3 進行限制將產(chǎn)生 0.3;在最小值為 0.0 且*值為 1.0 的情況下對 1.3 進行限制將產(chǎn)生 1.0。
(矢量積) 表達式計算兩個三通道矢量值輸入的矢量積,并輸出所產(chǎn)生的三通道矢量值。給定空間中的兩個矢量,矢量積是與兩個輸入都垂直的矢量。
示例:對 (0,1,0) 和 (0,0,1) 執(zhí)行 (矢量積)結(jié)果是 (1,0,0)。
用法示例:(矢量積)通常用來計算與另外兩個方向都垂直的方向。
(標量積) 表達式計算標量積,即一個矢量投射到另一個矢量上的長度。許多技術(shù)使用此計算來計算衰減。(標量積)要求兩個矢量輸入具有相同數(shù)目的通道。
Abs(*) 是數(shù)學(xué)術(shù)語“*(absolute value)”的縮寫。Abs(*)表達式輸出其接收到的輸入的*(無符號值)?;旧?,這意味著它通過刪除減號將負數(shù)轉(zhuǎn)換為正數(shù),而正數(shù)和零將保持不變。
示例:-0.7 的 Abs(*)為 0.7;-1.0 的 Abs(*)為 1.0;1.0 的 Abs(*)也是 1.0。
用法示例:Abs(*)一般與 (標量積) 配合使用。(標量積)的結(jié)果是 -1..0..1,對 (標量積)的結(jié)果執(zhí)行 Abs(*)的結(jié)果將是 1..0..1。
Sine(正弦) 表達式反復(fù)輸出 [0, 1] 范圍內(nèi)的正弦波值。最常見的情況是,通過將 Time(時間) 表達式連接至它的輸入,輸出連續(xù)的振蕩波形。輸出值將在 -1 與 1 之間來回循環(huán)。此表達式與 Cosine(余弦) 表達式輸出之間的差別是,輸出波形偏移半個周期。下圖顯示波的視覺表示:
用法示例:在任何需要振蕩效果的場合,此表達式都非常有用。通過將時間輸入(速度)或輸出(振幅)倍增,可以輕松地動態(tài)控制振蕩的速度和振幅。
Cosine(余弦) 表達式反復(fù)輸出 [0, 1] 范圍內(nèi)的余弦波值。最常見的情況是,通過將 Time(時間) 表達式連接至它的輸入,輸出連續(xù)的振蕩波形。輸出值將在 -1 與 1 之間來回循環(huán)。下圖顯示波的視覺表示:
If(如果) 表達式對兩個輸入進行比較,然后根據(jù)比較結(jié)果傳遞另外三個輸入值中的一個。所比較的兩個輸入必須都是單個浮點值。
在此示例中,If(如果)表達式接收高度貼圖,并根據(jù)高度是低于還是高于值 0.2 來輸出紅色或綠色。
Power(冪) 表達式接收兩個輸入,計算“底數(shù)”(Base)的“指數(shù)”(Exp)次冪,并輸出結(jié)果;換而言之,“底數(shù)”(Base)自乘“指數(shù)”(Exp)次。
示例:底數(shù)為 0.5,指數(shù)為 2.0 時,Power(冪)的結(jié)果為 0.25。
用法示例:如果傳遞到 Power(冪)的顏色在 [0,1] 范圍內(nèi),那么 Power(冪)可以用作對比度調(diào)整,即,僅保留較亮的值。
(平方根) 表達式輸出輸入值的平方根。只能對單個浮點輸入值執(zhí)行運算。
Normalize(規(guī)范化) 也稱歸一化,表達式計算并輸出其輸入的規(guī)范化值。這表示該輸入的每個分量都會除以矢量的 L-2 范數(shù)(長度)。
(分量蒙版) 表達式允許從輸入中選擇通道(R、G、B、A)的特定子集以傳遞到輸出。嘗試傳遞輸入中不存在的通道將導(dǎo)致錯誤,除非輸入是單個常量值。在這種情況下,會將單個值傳遞到每個通道。選擇傳遞的當前通道將顯示在表達式的標題欄中。
示例:如果 (分量蒙版)的輸入為 (0.2,0.8,1.4) 并選中 R 和 B 通道,那么將輸出 (0.2,1.4)。
(線性插值) 表達式根據(jù)用作蒙版的第三個輸入值,在兩個輸入值之間進行混合。您可以將其想像成用于定義兩個紋理之間的過渡效果的蒙版,例如 Photoshop 中的層蒙版。蒙版“阿爾法”(Alpha)的強度確定從兩個輸入值獲取顏色的比例。如果“阿爾法”(Alpha)為 0.0/黑色,那么將使用*個輸入。如果“阿爾法”(Alpha)為 1.0/白色,那么將使用第二個輸入。如果“阿爾法”(Alpha)為灰色(介于 0.0 與 1.0 之間的值),那么輸出是兩個輸入之間的混合。請記住,混合按通道進行。因此,如果“阿爾法”(Alpha)為 RGB 顏色,那么“阿爾法”(Alpha)的紅色通道值定義 A 與 B 的紅色通道之間的混合,而與“阿爾法”(Alpha)的綠色通道 無關(guān),該通道定義 A 與 B 的綠色通道之間的混合。
示例:如果 (線性插值)的輸入為 (1,0,0) 、(0,1,0) 、0.5,將輸出 (0.5,0.5,0)。(1 * 0.5 + 0 * 0.5,0 * 0.5 + 1 * 0.5,0 * 0.5 + 0 * 0.5)
問題:
在UE4中的紋理編輯器中,點擊視圖菜單,能看到 R,G,B,A的顏色通道,單獨打開其中的通道,能夠顯示圖像的灰度值,。
以紅色灰度圖為例,0 代表沒有任何紅色信息,0 等價于黑色
數(shù)字1.0或者白色表示深紅色。
ue4---1,pbr概述,數(shù)據(jù)運算,uv運算
1,一維數(shù)據(jù),適合用于調(diào)整金屬度,粗糙組,高光。
這幾個數(shù)據(jù)都是使用一維浮點數(shù)作為輸入。
在這里,將一維數(shù)據(jù)到連接主節(jié)點的三維數(shù)據(jù)口,可以發(fā)現(xiàn)主節(jié)點自動補齊了剩下的兩個通道數(shù)據(jù)。還是以復(fù)制的形式補齊。
2,二維數(shù)據(jù)適合用于調(diào)整uv,但是如果把二維數(shù)據(jù)給與三維接口。
主節(jié)點也是將缺失的第三通道補齊,不過,補的是零。
3,三維數(shù)據(jù)適用于基礎(chǔ)顏色,自發(fā)光,法線。
當二維或者三維數(shù)據(jù)輸入主節(jié)點的一維端口
這里使用的是一個二維數(shù)據(jù)(0,1)。
顯而易見,所顯示的是粗糙度為0的情況。
所以,這種情況,主節(jié)點只會使用*個通道的值。
4,主節(jié)點可以這樣對輸入數(shù)據(jù)進行補齊和挑選,但其他節(jié)點之間就不太一樣
一維數(shù)據(jù)可以和其它維度運算,二維不能與三維或四維運算。
除了一維數(shù)據(jù)和主節(jié)點,其它節(jié)點間的運算都需要數(shù)據(jù)類型相同。
1,texcoord節(jié)點的含義
因為ben在課程中講解的并不是很清楚,這段關(guān)于uv的部分都是我自己思考猜出來的。
上圖uv兩個通道合起來的樣子,下面把兩個通道單獨顯示,將texcoord的兩個通道拆出來
texcoord節(jié)點在r和g通道提供兩張這樣的梯度圖。當我們對texcoord節(jié)點進行加減乘除時。
是對texcoord的這兩張圖進行一系列運算,改變r和g通道上的灰度分布,再將其傳遞給texture sample節(jié)點的uvs端口。
texture sample節(jié)點會檢查每個點,讀取這個點傳遞進來時對應(yīng)rg通道的灰度信息,再調(diào)用原uv的r和g灰度值所對應(yīng)位置的貼圖信息。
舉個例子,texture sample節(jié)點中,傳遞進來一個點,它的rg通道灰度值分別為(0.3,0.21),但它在傳進來時,在那張圖絕對位置是(0.8,0.9),此時它會調(diào)用原uv(0.3,0.21)處的貼圖數(shù)據(jù),雖然它在傳遞給texture sample時的絕對位置是(0.8,0.9)。
再舉個例子,如果將兩個數(shù)字輸入給texture sample的uvs端口,會咋樣?
如果輸入0.5和0.5,就是把r和g兩張灰度為0.5的圖對texture sample輸入,然后texture sample會將所有的點都調(diào)用原uv中(0.5,0.5)處所對應(yīng)的貼圖數(shù)據(jù)。
結(jié)果:
2,uv的加法
對于uv的運算,輸入給texture sample,超過1的數(shù)值整數(shù)部分會被忽略,只讀取其小數(shù)部分。
此處以u(x)方向為例
表現(xiàn)在貼圖上就是貼圖左移了10%。
實例:
其實我們的計算主要是對u和v的黑白貼圖進行變化,然后調(diào)用原uv數(shù)據(jù)和省去整數(shù)這部分都是texture sample這個節(jié)點在進行。所以我們可以像編輯貼圖那樣對輸入texture sample的圖像進行編輯。
3,uv的乘法
清楚了加法,乘法的道理也是一樣
從左到右就是從0到3
因為會忽略整數(shù),所以就是將0-1重復(fù)三次,貼圖在u方向平鋪三次。
4,世界絕對位置下的uv變化
ben在案例中大量使用了世界坐標,是因為世界坐標可以隨著物體改變而發(fā)生改變。
作用到材質(zhì)上,結(jié)果就是,只需要制作很少的貼圖,把他們擺在不同的位置,就有不同的材質(zhì)表現(xiàn)。
當使用絕對世界位置時,這些貼圖會平鋪很多次,究其原因,也是因為傳遞給texture sample的圖中,數(shù)值從0到很大,去除整數(shù),實現(xiàn)了多次0到1。
現(xiàn)在,將世界坐標乘以較小的一個數(shù),得到下面這張圖
零基礎(chǔ)學(xué)ue4要多久
零基礎(chǔ)學(xué)ue4要多久:學(xué)習(xí)UE4至少需要4個月以上,如果在培訓(xùn)學(xué)校學(xué)習(xí)的話學(xué)習(xí)周期一般在6-8個月,自學(xué)的話可能要學(xué)一兩年。
知識拓展:學(xué)習(xí)UE4一般分為四個周期,前期掌握虛幻引擎的基本操作使用和工作流程,學(xué)習(xí)場景搭建與燈光,后期學(xué)習(xí)UE4地編以及實例制作。
如果你想學(xué)UE4未來從事游戲開發(fā)相關(guān)的工作的話建議你找一個培訓(xùn)學(xué)校學(xué)一下,因為自學(xué)的話需要很長的時間,而且學(xué)習(xí)效果也不是很好,在培訓(xùn)學(xué)校學(xué)習(xí)的話學(xué)習(xí)效率會高一些,也可以更加全面的學(xué)習(xí)UE4相關(guān)的知識。
現(xiàn)在學(xué)UE4的培訓(xùn)學(xué)校是很多的,如果你想學(xué)的話可以找一個大一點的培訓(xùn)機構(gòu)學(xué)一下,一般在一二線游戲產(chǎn)業(yè)發(fā)展強的城市培訓(xùn)機構(gòu)會好一些,你可以在這些城市找一個培訓(xùn)機構(gòu)學(xué)習(xí)。
ue4引擎有幾個系統(tǒng)模塊?
UE4官方文檔中《Graphics Overview》開篇即說:UE4的渲染代碼太多故難以從宏觀上快速預(yù)覽它的全貌(There is a lot of rendering code in Unreal Engine 4 (UE4) so it is hard to get a quick high level view of what is going on)。這一官方說辭從側(cè)面說明了UE4渲染引擎的復(fù)雜性是很高的,這個說法多少有點推卸責(zé)任,也頗具勸退之意。但我們自己做為一個合格的程序員,在做任何技術(shù)選型的時候最基本的要求總該是:我選的方案在其內(nèi)涵和外延上至少要能貼合或拔高項目對該功能塊的需求,并且這個方案得是我能全程能Hold得住而不是挖深坑用以自埋的。在這一前提下對UE4的渲染引擎乃至UE4引擎本身做一個宏觀的整體性的評估就必不可少了。
當然UE4渲染引擎的非常棒且推進迅捷,所以在功能性和前瞻性方面往往大超項目預(yù)期,往往并不是評估的重點。許多公司之所以選UE4做為項目的引擎必選項,是因為老板看到基于UE的吃雞大熱,UE4所產(chǎn)出的其它產(chǎn)品和宣傳視頻也驚艷絕倫,于是乎腦袋一熱雙手一拍,技術(shù)人員就麻著膽子硬著頭皮,戰(zhàn)戰(zhàn)兢兢開始玩弄UE(或者說被UE摁在地上摩擦了)。
本文的內(nèi)容是從渲染引擎的宏觀功能上羅列UE4的覆蓋面和劃分方式,尚不會涉及到具體每個功能模塊的實現(xiàn)細節(jié)。本文在討論渲染模塊的時候還假設(shè)大家均具備這些圖形引擎常識:渲染API的功能范疇、如何組織基礎(chǔ)的渲染管線、夸平臺圖形引擎需要基礎(chǔ)框架支持的最小集。
先從頂層來看一次完整的渲染
給渲染器輸入以原始的幾何和材質(zhì)數(shù)據(jù),渲染器把幾何和材質(zhì)數(shù)據(jù)轉(zhuǎn)換為渲染API所支持的數(shù)據(jù)、渲染狀態(tài)、Shader及Shader參數(shù)并由這些數(shù)據(jù)組裝為一個,然后執(zhí)行該,得到渲染結(jié)果后交換到渲染的目標Context上去(如Windows下的一個窗口,Android下的一個View等)。一個3D渲染引擎的核心工作就是組織好這一宏觀上的工作流,使其*化利用目標平臺的硬件資源(CPU,GPU,內(nèi)存,硬盤或閃存等)和特性,使其使用最便利、性能*,效果*。
UE4的渲染系統(tǒng)也不例外,所以我們的渲染功能的識別方式的基于以上基本過程和傳統(tǒng)的3D引擎功能劃分來做。UE4的模塊(Module)和我們將要討論的渲染功能模塊不存在一一對應(yīng)關(guān)系,可能UE4的一兩個類即實現(xiàn)一個功能塊,或一個UE4的模塊(Module)除了包含數(shù)個渲染相關(guān)的功能。
UE4場景和場景管理(Scene 、)
在UE4中不存在傳統(tǒng)引擎中的嚴格一一對應(yīng)的Scene和,它的實現(xiàn)是散落在許多類中。
傳統(tǒng)引擎中的Scene一般表達一個渲染用的世界。這個概念在UE4中有兩個類和它對應(yīng):用于游戲線程中的UWorld類和用于渲染線程中的FScene類.UE4中的中UWorld和FScene有一一對應(yīng)關(guān)系,UWorld用于游戲線程,用于用戶的主動操作(如創(chuàng)建、刪除世界中的物件等),而FScene則隱藏于渲染線程,由UWorld和世界中的對象被動操作。在游戲過程中,一般只存在一個UWorld實例(在過渡的時候可能有兩個),但在編輯器形態(tài)下,一般會存在許多個UWorld對象——一般來說,一個UWorld對象表達一個單獨的編輯器窗口。
UE4和其它支持大世界的引擎一樣支持游戲場景中的物體動態(tài)加載和卸載。但它對于大世界的拆分方式是比較獨特的——UE4的場景的劃分模式不是基于物件級而是基于子關(guān)卡級來做。在UE4中,一個UWorld由一個一直存在的持久關(guān)卡(ULevel類)和多個動態(tài)加載卸載的子關(guān)卡組成。UE4中這種動態(tài)加載卸載的子關(guān)卡叫做流關(guān)卡( ,類),且場景中的具體物件都是放置在關(guān)卡或流關(guān)卡中而不是直接位于UWorld中。
UE4中的流關(guān)卡的加、卸載策略實現(xiàn)是由類來負責(zé)的。這是一個基于視點距離和流關(guān)卡卡包圍盒的簡單的加載策略實現(xiàn)。
用于渲染線程的FScene不具備復(fù)雜的場景管理功能,它有一些數(shù)組用于各類管理場景可渲染對象和燈光,它有兩個Octree結(jié)構(gòu)用于空間的快速查詢——一個用于燈光,另一個用于其它的可渲染對象,它還有一個DrawList用于Cache各個渲染Pass的指令。