0%
Disney Model
- 参考
- 用 GLSL-PathTracer 代码,解释 hw1 不同的地方
展示


GLSL-PathTracer
类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| struct Disney { vec3 _base_color; float _roughness;
float _subsurface; float _anisotropic; float _metallic; float _clearcoat_gloss;
int _is_refractive; float _eta; float _sheen_tint; float _specular_transmission;
float _specular_tint; float _clearcoat; float _sheen; float _specular; };
|
- 根据上面的 Disney 结构体计算得到 Material
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| struct Material { vec3 baseColor; float anisotropic;
float metallic; float roughness; float subsurface; float specularTint;
float sheen; float sheenTint; float clearcoat; float clearcoatRoughness;
float specTrans; float ior; float ax; float ay; };
|
权重
- 权重
- 多了一个 dielectric lobe
- 同样也忽略了微弱的 sheen lobe
- weight 修改
- metal 的部分直接使用 metallic(hw1 中是
(1 - specTrans*(1 - metallic))
- 采样权重
- glass、clearcoat:一样
- diffuse、dielectric、metal:乘了 luminance
- 另外注意,如果是折射的话,只有 glass 分量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
float metalWt = mat.metallic; float dielectricWt = (1.0 - mat.metallic) * (1.0 - mat.specTrans); float glassWt = (1.0 - mat.metallic) * mat.specTrans;
float schlickWt = SchlickWeight(V.z);
float diffPr = dielectricWt * Luminance(mat.baseColor); float dielectricPr = dielectricWt * Luminance(mix(Cspec0, vec3(1.0), schlickWt)); float metalPr = metalWt * Luminance(mix(mat.baseColor, vec3(1.0), schlickWt)); float glassPr = glassWt; float clearCtPr = 0.25 * mat.clearcoat;
|
Diffuse
- diffuse + subsurface + sheen
- diffuse
- subsurface:一样的
- sheen:一样的
- 采样:cos 半球采样
- 这里的 Diffuse 部分其实就是 2015 的
Dielectric 部分
Dielectric
- hw1没有这个,好像是他自己加的,作用上和 Metal
修改为 \(\hat{f}\) 一样
- hw 修改了 \(\hat{f}\)
就是因为缺少了 dielectric specular reflection
- 是只有 \(\hat{F}\) 不一样
- 采样:Visible NDF
- 一样的,就是 Cook-Torrance microfacet BRDF
- 原始版本,不是修改后的 \(\hat{f}_{\text{metal}}\) 版本
- 采样:Visible NDF
Clearcoat
- 一样的,是给定参数的 Cook-Torrance microfacet BRDF
- \(\eta=1.5\)
- 各向同性 Smith(都是 \(\alpha_g\))
- 采样:Visible NDF
Glass
- 折射的时候多乘了 \(\eta^2\)【等价于少乘了一个 \(1/\eta^2\)】
- 但是 2015 Disney 加上了 \(1/\eta^2\)【2007 GGX 没有】
- spreading factor
:能够处理相机在介质内的情况(在外面的话,两次折射抵消了)
- 反射的时候没有乘 basecolor【感觉应该是不对的】
- 采样:Visible NDF
hw1 版本
- 根据 hw1 写一个看看,Code
- hw1 的结果会黑一点,好像就是 glass 反射的 baseColor 的问题
- 整体还是有点区别的