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