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能够在效果相近的情况下,大幅度提升渲染效率,可以说是挺犀利了;