[acm15]the sggx microflake distribution

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 渲染的一个方法;

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1954″ data-rawheight=”492″ width=”1954″ data-original=”https://pic2.zhimg.com/v2-225c476dd4ca193e25eabbe927952dc9_r.jpg” data-actualsrc=”https://pic2.zhimg.com/v2-225c476dd4ca193e25eabbe927952dc9_b.jpg”>

像fur,fabric,植被这种,物理比较正确的方式还是要按照volume去建模; 像之前

安柏霖:[sig16]《神秘海域4》中的volumetric-based materialszhuanlan.zhihu.com图标

里的技术还是偏hack的,没有做正确的建模和计算。

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1021″ data-rawheight=”480″ width=”1021″ data-original=”https://pic1.zhimg.com/v2-2e4963659833c0fde022326d646da0b0_r.jpg” data-actualsrc=”https://pic1.zhimg.com/v2-2e4963659833c0fde022326d646da0b0_b.jpg”>

在sggx之前,是有zhao shuang老师的很多在volume渲染方面的很多工作. 对于毛发这种,是属于各向异性的体数据,一般使用的建模是microflake;毛发这种完整说来是:spatially-varing properties of anisotropic microflake participating media; microflake就是如图理解就行,就是volume中一堆小片,用这个来建模各种体数据;

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1020″ data-rawheight=”462″ width=”1020″ data-original=”https://pic2.zhimg.com/v2-e7d31c64f0568799941758b4b856e499_r.jpg” data-actualsrc=”https://pic2.zhimg.com/v2-e7d31c64f0568799941758b4b856e499_b.jpg”>

但是之前的做法是超高精度的渲染方式,细节很高,但是消耗太大; 而且数学模型也不容易去downsample。 sggx是使用了一个更加简单,以及容易lod的表达,极大地提升了这个渲染的效率,因此也在一些游戏中开始被使用;

关键点

整篇文章关键点两个:

  • roughness物理属性的直觉表达,是microflake在各个方向上的投影面积(project area)
  • 然后使用ellipsoid(椭球体)来表达建模,把解析公式的方式,转变成geometry的方式,进而把整个问题大幅度简化
<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1026″ data-rawheight=”529″ width=”1026″ data-original=”https://pic1.zhimg.com/v2-cb3de15ea578c4e82644324e5e451b8c_r.jpg” data-actualsrc=”https://pic1.zhimg.com/v2-cb3de15ea578c4e82644324e5e451b8c_b.jpg”>

这里作者首先从light在volume中传播的方式来进行反推,最后得出roughness就是microflake在各个方向上的project area; 然后进行downsample的时候也要围绕这个来做; 一旦有了project area这个关键点,那么建模就相对直接

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”899″ data-rawheight=”388″ width=”899″ data-original=”https://pic3.zhimg.com/v2-a3b4474ff7f516dd6978e4865f5edef2_r.jpg” data-actualsrc=”https://pic3.zhimg.com/v2-a3b4474ff7f516dd6978e4865f5edef2_b.jpg”>
<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1046″ data-rawheight=”536″ width=”1046″ data-original=”https://pic4.zhimg.com/v2-30cf410570051227a3d9af4ce56c4597_r.jpg” data-actualsrc=”https://pic4.zhimg.com/v2-30cf410570051227a3d9af4ce56c4597_b.jpg”>

就是使用ellipsoid来建模,可以做到和原来的microflake等效;

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”959″ data-rawheight=”508″ width=”959″ data-original=”https://pic3.zhimg.com/v2-172aa5a16d80e4bbd8b5ba8017ad60e2_r.jpg” data-actualsrc=”https://pic3.zhimg.com/v2-172aa5a16d80e4bbd8b5ba8017ad60e2_b.jpg”>

这样normal distribution什么的也都有了,sggx的ellipsoid模型也可以把ggx distribution统一进来;

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”361″ data-rawheight=”500″ width=”361″ data-actualsrc=”https://pic2.zhimg.com/v2-cde882d8419b91453eb7c3fd786f9c51_b.jpg”>

然后ellisoid表达就是一个矩阵就有了,各种简洁; 进而各种dowsample等等的操作就简单了;

结果

sggx normal distribution能够在效果相近的情况下,大幅度提升渲染效率,可以说是挺犀利了;

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”3038″ data-rawheight=”1500″ width=”3038″ data-original=”https://pic2.zhimg.com/v2-0c26dc2725dd72d79bf7cbe4a4210d89_r.jpg” data-actualsrc=”https://pic2.zhimg.com/v2-0c26dc2725dd72d79bf7cbe4a4210d89_b.jpg”>

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”1540″ data-rawheight=”1044″ width=”1540″ data-original=”https://pic4.zhimg.com/v2-b696611e4e674ed2aa8869d08e8081db_r.jpg” data-actualsrc=”https://pic4.zhimg.com/v2-b696611e4e674ed2aa8869d08e8081db_b.jpg”>