在現代引擎中使用正確的渲染打光流程
第0步,確保引擎著色本身是“正確的”。
這一點其實應該是由負責圖形渲染的TA來解決。但是作為美術在這個過程也要負責叮囑和監督圖形TA。什麼是“正確的”?簡而言之就是在使用同樣物理引數(金屬度,粗糙度,表面色彩等)時進行渲染,渲染結果與參照物(可以是DCC如Substance Designer或Vray等離線渲染器)的結果達到相近的程度,當然由於效能限制,要達到100%相同是幾乎是不可能的,那麼要達到什麼程度則需要美術和TA進行漫長的溝通(為什麼漫長?請不要問我是怎麼知道的,謝謝),比方說我們這裡給出一個MPipeline與Substance Designer的效果對比:
Substance Designer測試檔案
MPipeline渲染效果
高度圖+曲面細分細節表現
完成這個步驟後,我們就基本可以確定不會“後庭失火”,也就是自家引擎不會給自己使絆子,因為確定自己使用的引擎是可靠的這一點總是最先要完成的工作。
第1步,匯入素材,確定場景元素正確。
素材從DCC軟體匯入引擎這個過程也是需要特別留意的,因為你既不知道DCC的匯入格式會不會有什麼問題,也不知道引擎會不會做什麼妖(引擎開發:喵喵喵???),所以確定自己的場景正確無誤是很重要的,這裡在準備好場景後對場景進行排查,可以確定場景的Geometry資訊正確無誤:
Albedo資訊確定無誤
Normal資訊確定無誤
第2步,關掉所有的後處理,並開始調整光照屬性。
後處理無疑會嚴重影響打光師對實際效果的影響,尤其是Bloom,Auto Exposure等,所以我們要把所有的後處理都關掉,除了Tonemap以外,至於為什麼我們馬上會講到。
燈光除了角度位置等物理,還有本身的強度和顏色。角度與位置擺放的核心思想在於,一定要“在有光的地方打光”,這一點很重要,在遊戲開發的遠古時期因為對間接光照的處理有限,因此經常在暗處打一些補光來烘托整個場景效果,這本是沒辦法的替代方案,然而現在部分美術人員依然留著這樣的“壞習慣”。這是正常的情況,因為在影視製作中也常通過各種假燈光來烘焙效果,比如《冰雪奇緣》中的這個鏡頭燈光就明顯不“正確”:
可以看到姐姐是背陰面,而妹妹則是在受光面,而兩人明明是面朝同一個方向,兩人也明明都在一個比較廣闊的宮殿內。這樣藝術的處理方法脫離現實但高於現實,立刻就能表現出姐姐和妹妹的心情,雖然不正確,但是用在這裡是有理有據的。
然而,在遊戲中如果使用這樣的操作,則會導致情況完全與想象的背道而馳,這是因為遊戲比起電影具有可互動性,玩家的視角是隨時變化的,所以如果我們生搬硬套電影製作的方法,會導致效果非常假,這是應該格外注意並避免的。
以打光要往正確的地方打,這一點詳細解釋在我們的專業美術的文章中有詳細的解釋:
Lute Li:寫實向室內房間擺設與打光
說完燈光位置角度問題,就是燈光的強度和顏色。首先是強度,在調整強度時一定要先關掉Tonemap,因為Tonemap會對高強度和低強度的HDR結果產生一個壓制的效果,這會嚴重削弱對強度的判斷,很多時候就會因為這樣的情況導致實際燈光比看起來亮很多,烘焙出來的結果就會過曝,我們當然不希望這樣的事情發生:
不加ACES Tonemapping時的效果
加ACES Tonemapping後的效果
可以看到,如果開著Tonemap,光照的強度會被嚴重影響,顯然這是不應該的。
在強度調整的接近以後,就可以開始改變顏色,燈光預設是白色的,而我們在強度調整階段也不應該改變預設值。開始調整顏色之前就需要開啟Tonemap了,因為剛才講過,Tonemap會對顏色表現帶來影響,所以整個打光的過程可以理解成:關Tonemap->確定燈光是預設的白色->調整亮度(如果燈光強度過曝應該拉低整個螢幕亮度來監視燈光強度與周圍暗處的對比)->開啟Tonemap->調整色彩。
第3步,準備烘焙。
完成燈光調整後就進入烘焙準備階段,除了檢查模型UV2,檢查模型之間有無貼面,破面等基本情況,還應該做一些特殊處理,比如在製作室內場景時可能為了室內受光完整,在視窗打一個面光源。這些特殊處理是否要用,怎麼用,具體要看概念設計人員提出的要求。比方說我們這裡的場景想要表現暖色調的教室,而室外天空球則是藍色的,因此我們就在每個視窗打上暖色調的面光源實現效果。
第一次烘焙很大可能不理想,如果不理想則應該重複第2步的步驟,直到打光效果理想,並開啟後處理檢查最後結果。
打光結束後效果大致如此:(程式猿審美,請各位不要噴,因為我玻璃心,謝謝)
第4步,調整後期特效:
色彩的要素基本有了,在體積感上還有比較大的缺陷,體積不夠,霧效來湊,我們這裡直接使用MPipeline自帶的體積霧元件來實現。直接在場景中擺塊並調整霧效濃度和顏色:
場景裡隨便懟一個體積霧塊……
調整體積霧塊的位置大小和濃度色彩後體積感有了很大的改善:
在有了這麼一個較為完整的渲染效果後,可以進行一些藝術化的調色,讓效果符合遊戲劇情想要表現的氛圍:
到此為止,單個場景的打光基本算完成了,至於自動曝光和運動模糊這些需要在攝像機的運動過程中表現的效果則需要聯絡遊戲邏輯進行製作,在此處就不多闡述了。
最後,作為MPipeline渲染管線的作者,本人衷心希望可以讓管線的工具流程更加專業高效,並能為從事遊戲製作的美術人員提供幫助,謝謝。
作者:MaxwellGeng
專欄地址:https://zhuanlan.zhihu.com/p/76235527
相關文章
- Vue 中 強制元件重新渲染的正確方法Vue元件
- 在JavaScript中什麼時候使用==是正確的?JavaScript
- Android中Handler的正確使用Android
- 企業正確使用CRM系統的方法及流程
- Vue中強制元件重新渲染的正確方法Vue元件
- 在iOS中如何正確的實現行間距與行高iOS
- Retrofit中如何正確的使用https?HTTP
- 正確使用Windows Azure 中的VM RoleWindows
- Oracle中修改sysman和dbsnmp密碼正確流程Oracle密碼
- 如何正確實現 Java 中的 HashCodeJava
- 在 JavaScript 中建立陣列的正確姿勢JavaScript陣列
- 瀏覽器核心渲染引擎工作流程瀏覽器
- 在Windows下使用vim grep的正確姿勢Windows
- 正確的equals實現
- 如何正確實現Java中的hashCode方法Java
- mysqljs在koa2中的正確姿勢MySqlJS
- 在 Laravel Mix 裡使用 Vux 2 的正確姿勢LaravelUX
- springboot 中如何正確的在非同步執行緒中使用requestSpring Boot非同步執行緒
- PHP Opcache 的正確使用PHPopcache
- Golang中如何正確的使用sarama包操作Kafka?GolangKafka
- 正確理解和使用JAVA中的字串常量池Java字串
- 在React ClassComponent中繫結方法的正確姿勢React
- 在Flutter中嵌入Native元件的正確姿勢是...Flutter元件
- TensorFlow中RNN實現的正確開啟方式RNN
- 在vscode使用editorconfig的正確姿勢VSCode
- 在Vue中使用JSX的正確姿勢(有福利)VueJS
- 使用Aliplayer在微信中播放視訊的正確姿勢
- 在Golang中如何正確地使用database/sql包訪問資料庫GolangDatabaseSQL資料庫
- Flutter框架渲染流程與使用Flutter框架
- Redis的正確使用姿勢Redis
- 使用正確的工具(轉載)
- 企業如何正確投資工業物聯網,打造下一代增長引擎?
- 正確高效使用 GoogleGo
- 正確使用rman crosscheckROS
- 如何正確的在專案中接入微信JS-SDKJS
- 在LINUX中安裝WEB SPHERE5.1的正確方法LinuxWeb
- 正規表示式在Java中的使用Java
- 正確的折半查詢實現