intro
acm transaction on graphics 15的一個文章;
https://dl.acm.org/doi/10.1145/2766988
整體偏學術,主要是對馬島的siggraph20的course中有引用,順着看過來,還挺有意思;
論文本身有點晦澀,看起來有點枯燥,看這個視訊比較好:
https://www.bilibili.com/video/BV1MK411P71x?from=search&seid=10817193380449311591
筆者還加了些注釋說明。
overview
sggx microflake distribution是處理volume 渲染的一個方法;
像fur,fabric,植被這種,實體比較正确的方式還是要按照volume去模組化;
像之前[sig16]《神秘海域4》中的volumetric-based materials
裡的技術還是偏hack的,沒有做正确的模組化和計算。
在sggx之前,是有zhao shuang老師的很多在volume渲染方面的很多工作.
對于毛發這種,是屬于各向異性的體資料,一般使用的模組化是microflake;毛發這種完整說來是:spatially-varing properties of anisotropic microflake participating media;
microflake就是如圖了解就行,就是volume中一堆小片,用這個來模組化各種體資料;
但是之前的做法是超高精度的渲染方式,細節很高,但是消耗太大;
而且數學模型也不容易去downsample。
sggx是使用了一個更加簡單,以及容易lod的表達,極大地提升了這個渲染的效率,是以也在一些遊戲中開始被使用;
關鍵點
整篇文章關鍵點兩個:
- roughness實體屬性的直覺表達,是microflake在各個方向上的投影面積(project area)
- 然後使用ellipsoid(橢球體)來表達模組化,把解析公式的方式,轉變成geometry的方式,進而把整個問題大幅度簡化
這裡作者首先從light在volume中傳播的方式來進行反推,最後得出roughness就是microflake在各個方向上的project area;
然後進行downsample的時候也要圍繞這個來做;
一旦有了project area這個關鍵點,那麼模組化就相對直接
就是使用ellipsoid來模組化,可以做到和原來的microflake等效;
這樣normal distribution什麼的也都有了,sggx的ellipsoid模型也可以把ggx distribution統一進來;
然後ellisoid表達就是一個矩陣就有了,各種簡潔;
進而各種dowsample等等的操作就簡單了;
結果
sggx normal distribution能夠在效果相近的情況下,大幅度提升渲染效率,可以說是挺犀利了;