當前位置: 華文問答 > 遊戲

1、【虛幻4 Shader入門】

2022-06-27遊戲

簡介

看了一年半的虛幻原始碼,終於要開始學習一下材質編輯器入門了,掩飾不了激動之余,就想把這些新手村遇到的東西寫點小作文,幫助同樣在新手村的同學們走的更穩。文中使用到的資源我會貼在文章的某個地方,比如文章末尾或者文章開頭。其他的東西都屬於虛幻內建的東西,你使用虛幻4.27可以實作本文中的效果。

內容

本文實作一個逐頂點渲染的Lambert光照效果,效果可能會比較挫,面向的人群是像我這樣的TA萌新,如果你學完了OpenGL的什麽課程,我希望透過這種類似的內容把你在OpenGL裏學到的東西對映到虛幻裏面來,作為你熟悉和用上虛幻的開始。如果你覺得本文章分享的效果太差了,那確實如此,畢竟重點不在於效果,而在於教會大家虛幻材質編輯器的基本使用方法。

如果你覺得虛幻什麽地方用起來不舒服,也可以一起交流交流,我們可以探討一下怎麽改它。

如果你學到什麽地方發現你不會了,那請你告訴我,我補充一下這部份前置內容,如果沒人反饋那就當你們都明白了。

當你開始學習一個東西的時候,你才能寫出好的教程 --- 羅老師

1、首先新建一個材質球叫:M_LegacyLighting

2、然後雙擊材質球M_LegacyLighting,考慮到我們要實作逐頂點的光照運算,所以首先你把材質球的ShadingModel選成:Unlit。如下圖所示:

如果你不知道什麽時候連連看產生的HLSL程式碼在Vertex Shader裏,什麽時候在Pixel Shader裏,那麽你可以參考下面這一篇小作文,關於連連看的工作原理:

3、考慮到我們要實作逐頂點的光照運算,要透過Vertex Shader到Pixel Shader的內容傳遞來把Vertex Shader階段算出來的光照資訊傳到Pixel Shader那邊去。所以對材質球進行如下的設定,使用2個額外的UV,來作為VS到PS的內容傳遞通道,這個地方需要你知道什麽是逐頂點光照(OpenGL1.0裏那種光照或者我先前出過的Shader課程裏的逐頂點光照):

為了方便你找到材質球的內容,建議你在

< style data-emotion-css="19xugg7"> .css-19xugg7{position:absolute;width:100%;bottom:0;background-image:linear-gradient(to bottom,transparent,#ffffff 50px);} < style data-emotion-css="12cv0pi"> .css-12cv0pi{box-sizing:border-box;margin:0;min-width:0;height:100px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:100%;bottom:0;background-image:linear-gradient(to bottom,transparent,#ffffff 50px);}
< style data-emotion-css="1pr2waf"> .css-1pr2waf{font-size:15px;color:#09408e;}
編輯於 2022-06-27 14:13
< style data-emotion-css="ch8ocw"> .css-ch8ocw{position:relative;display:inline-block;height:30px;padding:0 12px;font-size:14px;line-height:30px;color:#1772F6;vertical-align:top;border-radius:100px;background:rgba(23,114,246,0.1);}.css-ch8ocw:hover{background-color:rgba(23,114,246,0.15);}
< style data-emotion-css="1xlfegr"> .css-1xlfegr{background:transparent;box-shadow:none;} < style data-emotion-css="1gomreu"> .css-1gomreu{position:relative;display:inline-block;}
亞當·蘭伯特(Adam Lambert)