最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

斯坦福UE4C++課程P28-P33(動態(tài))游戲材質(zhì)

2022-10-28 21:01 作者:_Hide-on-bush_  | 我要投稿

UE4的材質(zhì)Materials,在Unity中叫著色器Shaders。

我們學習動態(tài)材質(zhì)(能夠與游戲交互),這意味著我們不會注重如何做逼真的材質(zhì),而是注重如何與游戲交互。

了解材質(zhì)多半是要了解:基于物理的渲染PBR(Physically Based Rendering)。

PBR讓材質(zhì)參數(shù)能夠被美術(shù)人員修改,例如金屬度、粗糙度,然后引擎能夠根據(jù)這些參數(shù)計算出材質(zhì)的效果。

作者給了一些學習材質(zhì)的資源,有官方文檔的基于物理的材質(zhì)預覽、材質(zhì)輸入、還有Content Examples工程里的關(guān)于材質(zhì)的學習。

另外我們發(fā)現(xiàn),角色發(fā)射的魔法球能夠打到自己讓自己掉血,在魔法球C++類OnActorOverlap判斷條件添加OtherActor!=GetInstigator()即可。

接下來介紹材質(zhì)基礎(chǔ)知識(著色器)

這里推薦先看看

創(chuàng)建材質(zhì)實例=創(chuàng)建子類,材質(zhì)實例會“繼承”之前的材質(zhì)的設(shè)定。

可以給常數(shù)、紋理等節(jié)點右鍵轉(zhuǎn)換為參數(shù)節(jié)點,使得其可變。

開啟選項欄的Live Nodes可以右鍵預覽任一節(jié)點的情況

使用DebugScalarValues函數(shù)可以實時查看數(shù)值變化

接下來我們學習用藍圖來控制材質(zhì)。創(chuàng)建M_SineWaveBP材質(zhì)

下方的GameTime原來是time節(jié)點,我們把它換成了參數(shù)節(jié)點,使得我們可以在藍圖中控制它。

創(chuàng)建Actor藍圖類,添加一個staticmesh,用剛剛創(chuàng)建的M_SineWaveBP材質(zhì),添加如下節(jié)點

現(xiàn)在運行游戲,可以看到相同效果,顏色在紅藍之間正弦變化。

更好的辦法是直接在材質(zhì)編輯界面使用time,因為材質(zhì)編輯界面的邏輯的代碼會被編譯為HLSL(High Level Shader Language高級著色器語言),并交給GPU處理,并不經(jīng)過CPU。但是如果在藍圖處理這些邏輯,將交給CPU處理,由于CPU調(diào)用代價比交給GPU處理昂貴,所以前者更好。

接下來我們通過C++實現(xiàn)擊中時閃光材質(zhì)和如何驅(qū)動材質(zhì)的參數(shù)

新建Actor繼承C++類STargetDummy,添加staticmesh和角色attribute組件,并在構(gòu)造函數(shù)添加

表示當角色血量變化時觸發(fā)本類的OnHealthChanged函數(shù)。(之前我們在Attribute類用聲明了動態(tài)組播委托事件OnHealthChanged事件),以下是本類的OnHealthChanged函數(shù):

回到編輯器,新建藍圖類TargetDummyBP,給mesh組件一個網(wǎng)格體和閃光材質(zhì)。

拖到視口中,擊中該物體時會閃光。

接下來制作一個簡單溶解材料(紋理)

新建一個溶解材質(zhì),設(shè)置Blend Mode為Masked:

連接到Opacity Mask會讓低于一定閾值的像素透明不可見,我們可以通過加上DissolveAmount來控制,其為1時全部可見(RGB值全大于1),為0時低于閾值的全都不可見。

調(diào)節(jié)DissolveAmount

如下連實現(xiàn)溶解效果:

和前面閃光材質(zhì)同理,可以在藍圖中通過控制DissolveAmount參數(shù)來實現(xiàn)被擊中時溶解效果。

下面來創(chuàng)建可重復使用的材質(zhì)功能

我們在內(nèi)容瀏覽器右鍵新建一個Material Function材質(zhì)函數(shù)。

可以把之前做的閃光材質(zhì)的節(jié)點復制到該材質(zhì)函數(shù),和函數(shù)輸出結(jié)果Output Result相連。

勾選左側(cè)Expose to Library使得材質(zhì)函數(shù)可以在編輯器中可見

現(xiàn)在上面這一堆和下面的輸出等價。

所以可以看出,材質(zhì)函數(shù)實際上就是封裝了部分邏輯為一個函數(shù)節(jié)點。

函數(shù)節(jié)點也可以添加輸入引腳

現(xiàn)在可以給里邊輸入一個值來覆蓋其默認值(TimeToHit)。

最后是在用戶界面使用材質(zhì)(UMG)。

新建一個材質(zhì)M_HealthBar,左側(cè)選擇Material Domain為User Interface。

添加如下節(jié)點,LinearGradient實現(xiàn)UV方向上的漸變效果。

我們可以在Health控件藍圖中把生命值條刪掉,拖進來一個image,給image添加我們剛剛創(chuàng)建的材質(zhì)M_HealthBar。

我們可以獲取到image的材質(zhì),然后獲取到材質(zhì)的名為ProgressAlpha的參數(shù),用之前生命值進度條使用過的值作為Value。

現(xiàn)在效果如下:

這一章只是簡介材質(zhì),很多東西沒有深入,因為我們的重點放在C++上。

斯坦福UE4C++課程P28-P33(動態(tài))游戲材質(zhì)的評論 (共 條)

分享到微博請遵守國家法律
汨罗市| 海淀区| 兴国县| 健康| 齐齐哈尔市| 郎溪县| 定南县| 枣强县| 调兵山市| 靖安县| 宁化县| 万州区| 洪江市| 黄山市| 沙河市| 清水县| 大城县| 千阳县| 广水市| 武川县| 宁强县| 增城市| 万荣县| 高阳县| 岳普湖县| 乡宁县| 美姑县| 连云港市| 城市| 徐水县| 增城市| 朔州市| 甘洛县| 祥云县| 汾阳市| 漳州市| 铜鼓县| 祥云县| 拜泉县| 马山县| 永新县|