寒霜引擎中strand-based(基於線)的頭髮渲染
https://www.bilibili.com/video/av73692434/
這篇可以說把hair render往前推進了一步,主要亮點:
開始使用線來做頭髮渲染(strand based),這個也構成了頭髮品質飛躍的一個好的基礎
進一步處理頭髮中multiple scattering的問題
[招聘貼](長期有效)
安柏霖:騰訊北極光《無限法則》《天涯明月刀》誠招程式
頭髮在遊戲中渲染的簡要歷史
89,kajiya-kay的頭髮光照模型
相當長時間中在用,也應屬於剛好適合當前(2019)手遊的光照模型,現在逐漸退出歷史舞臺。
siggraph03,年marschner的頭髮光照模型,是我們現在認為比較physically based的頭髮光照模型
這個後來在cg中被disney和weta digital進一步改進。
siggraph16,
unreal基於LUT的方式把marschner的頭髮模型,做了一些近似逼近,能realtime展現的比較好,但是沒有覆蓋到頭髮之間的散射(multiple scattering)以及在single scatter方面還有一些提升空間。
同年naughtydog的volume material render中也覆蓋了頭髮,以volume技術:
安柏霖:[sig16]《神祕海域4》中的volumetric-based materials
使用了一些偏artist的方式以及離線預先cook的方式,帶上了一些volume的概念(由於naughtydog的模型直接用於console上的遊戲中的,而非demo,所以naughtydog最後選擇不使用marschner的模型)
截止到現在,頭髮建模也是基於card的。
sig19
也就是當前,frostbite提出的基於strand的方式以及進一步處理single/multiple scattering,就是一個紮紮實實的推進了。
Strand-based Hair Rendering in Frostbite
stand based
雖然這篇文章號稱是strand based,實際上主要集中在渲染,而strand最牛的地方是在simulation。
這裡frostbite簡單帶過,可能還沒有做完等等原因。
一圖看好整體的製作流程,從點的建模,然後realtime simulation,然後point list生成頭髮的triangle strip。
所以這裡的simulation部分就是一個對於points的simulation,這也是一個常用的方法(比如fluid simulation)。
render
渲染部分就分了3塊,是
- single scattering
- multiple scattering
- 髮絲的“透明渲染”
single scattering
這裡要回到marschner模型,一般我們使用的光照模型,光照的建模包括三個部分:
- R Reflective paths
- TT Transmissive paths
- TRT Transmissive with single internal reflection
這樣三個路徑,也就是光線在頭髮中傳播並最終貢獻光照效果的主要路徑,
落到具體的視覺上,看起來這樣的。
中間epic在16年siggraph上面就是對這幾項做了approximation,frostbite在這裡把這個approximation提到更好的水平:
(圖中karis16,就是指unreal 16年的paper的效果)
frostbite在approximation這裡做了更多的工作,來把頭髮的擬真度進一步提升。
就大的屬性模型這裡列下:
類似PBR的macrofacet模型,這裡有兩大項比較重要:
- attenuation
- distribution
然後具體的數學選擇,frostbite主要是給出了最後結論,中間有推導成分,也有硬做擬合逼近(使用一些scale來修正)的成分。
反正最後就是達到了一個比unreal更好的擬真效果。
multiple scattering
multiple scattering這裡分為
- local scattering–近距離的頭髮之間的反射
- global scattering–遠距離的光線散射
兩塊,分別使用了現有的技術整合
按照ppt裡的說法似乎是local scattering使用了Dual Scattering Approximation。
然後global scattering使用了4層deep opacity map來做這個事情。
Rendering–Strand rendering
這裡做的事情就是讓頭髮的輕薄的透明感出來。
如果不做,就會像左邊,一堆乾草的感覺。
這裡是msaa+visibility buffer。
效率方面:並且如果是相近的部分,就只shading一遍(有點類似VariableRateShading的概念)這個會帶來很好的效率提升。
pipeline。
最終效率對比:
依舊還是蠻費的,不過用在主角一個人身上,應該還可以。
作者:安柏霖gamedev
專欄地址:https://zhuanlan.zhihu.com/p/89988590
相關文章
- 深入解析基於 Flutter 的 Web 渲染引擎「北海 Kraken 」技術原理FlutterWeb
- 基於virtual dom 的canvas渲染Canvas
- 基於頭肩部檢測的過線客流統計
- 基於 HTML5 WebGL 的 3D 渲染引擎構建工廠運作系統HTMLWeb3D
- 瀏覽器引擎、渲染引擎與JavaScript引擎的區別瀏覽器JavaScript
- 基於 HTML5 Canvas 的 3D 渲染引擎構建生產管控系統HTMLCanvas3D
- AI生成遊戲中基於物理的渲染(PBR)貼圖探索AI遊戲
- 七個基於 Fedora Linux 的優秀髮行版Linux
- 下一代實時渲染——基於深度學習的渲染深度學習
- 基於VUE的伺服器端渲染(SSR)Vue伺服器
- 瀏覽器渲染引擎瀏覽器
- 頭髮健康網址大全【收藏】
- 關於遊戲中的實時渲染遊戲
- 基於React的SSG靜態站點渲染方案React
- 基於 SSR 的預渲染首屏直出方案
- PBR(基於物理的渲染)學習筆記2筆記
- Arroyo:基於Arrow和DataFusion的新SQL引擎SQL
- 基於laravel的流程引擎偷偷開源了Laravel
- 瀏覽器之渲染引擎瀏覽器
- PBR來龍去脈篇五:建立標準的重要性和寒霜引擎的pbr材質綜述
- Marlincare生髮頭盔隱私政策
- 剖析Unreal Engine超真實人類的渲染技術Part 3 - 毛髮渲染及其它Unreal
- 渲染引擎的資源載入優化優化
- 火山引擎基於 Dragonfly 加速實踐Go
- 徹底瞭解渲染引擎以及幾點關於效能優化的建議優化
- 基於 .NET 的開源工作流引擎框架框架
- 基於 XAF Blazor 的規則引擎編輯器Blazor
- microsoft/RulesEngine:基於 Json的C#規則引擎ROSJSONC#
- 基於 Elasticsearch 的站內搜尋引擎實戰Elasticsearch
- 基於Groovy的規則指令碼引擎實戰指令碼
- Ocean:基於容器的無伺服器基礎架構引擎伺服器架構
- 渲染中的光照著色方式:PBR(Physically Based Rendering,物理基礎渲染)與 傳統經驗渲染
- 地平線:黎明時分中的雲渲染技術
- 白髮有救啦!新研究揭示頭髮變白的原因並找到干預靶點
- 基於Typecho的桌布頭像站原始碼原始碼
- FlutterUI 呼叫系統渲染引擎-13FlutterUI
- 瀏覽器核心渲染:重建引擎瀏覽器
- 遊戲角色寫實頭髮製作遊戲