虚幻4渲染编程(重写渲染管线篇)【第二卷:从零开始推导PBR渲染模型---下】...

我的专栏目录:

小IVan:专题概述及目录​zhuanlan.zhihu.com图标

上篇推导了一些通用公式。本来打算在第一卷就全部写完的,结果知乎有字数限制?我写超出字数限制的部分全部被删掉了!被删掉了!被删掉了!于是只好开个尾巴。下面就将使用之前的理论的公式推导一些特殊的光照模型

上篇链接:

小IVan:虚幻4渲染编程(重写渲染管线篇)【第一卷:从零开始推导PBR渲染模型---上】


【布料】

我之前有做过一些布料的效果

小IVan:虚幻4渲染编程(材质进阶篇)【第一卷:影视剧各种衣料--上】

这里我们将一起来推导它的BRDF。由线性理论,我们可以把BRDF的漫反射项和镜面高光项拆开来。

漫反射项:

我们的布料模型仍然依赖于能量守恒的Lambertian漫射BRDF。并提供可选的次表面散射项。 这个额外的分量不是基于物理 的,可用于模拟某些类型织物中光的散射,部分吸收和再发射

f_{d}(v,h)=\frac{c_{diff}}{\pi}(1-F(v,h)) ....................................................(1)

其中 F(v,h)是镜面反射中的菲涅尔项,在实践中,可以将 1-F(v,h) 省去。

使用包裹漫射照明技术以其能量保守形式实现次表面散射:

f_{d}(v,h)=\frac{c_{diff}}{\pi}(1-F(v,h))(n\cdot l +\frac{w}{(1+w)})(c_{Subsurface}+n\cdot l) .......(2)

其中 w \in[0,1] ,一般情况下固定 w=0.5 ,漫反射分量不能乘以 。

镜面反射:

我们使用的布镜面BRDF是Ashikhmin和Premoze描述的改进的微平面 BRDF。 在他们的论文中,Ashikhmin和Premoze指出,分布项是对BRDF有影响的,并且阴 影/掩蔽分量对于他们的天鹅绒分布来说不是必需的。 分布项本身是反向高斯分布。 这有助于实 现模糊照明(向前和向后散射),同时添加偏移以模拟前向镜面反射影响。 所谓的天鹅绒NDF定 义如下:

D_{velvet}(v,h,\alpha)=c_{norm}(1+4 exp(\frac{-cot^2\theta_{h}}{\alpha^2})) ....................................(3)

而Neubelt和Pettineo提出了这个NDF的标准化版本:

D_{velvet}(v,h,\alpha)=\frac{1}{\pi(1+4\alpha^2)}(1+4\frac{exp(\frac{-cot^2\theta_{h}}{\alpha^2})}{sin^4\theta_{h}}) ........................(4)

所以完整的镜面BRDF使用更平滑的变体替换传统cook的分母可得

f_{r}(v,h,\alpha)=\frac{F(v,h)D_{velvet}(v,h,\alpha)}{4(n\cdot l+n\cdot v -(n\cdot l)(n\cdot v))} ...................................(5)

经过优化以适合半浮点格式并避免计算昂贵的余切,而 是依赖于三角恒等式,可以得到如下代码:

v2-6b6d592cb744d62841729a372531a42d_b.jpg

Estevez和Kulla提出了一种基于指数正弦而不是倒置高斯的不同NDF(称 为“查理”光泽)。 这个NDF很有吸引力:它的参数化感觉更加自然和直观,它提供了更柔和的外 观,如公式 所示,它的实现更简单:

D(m)=\frac{(2+\frac{1}{\alpha})sin(\theta)^\frac{1}{\alpha}}{2\pi} ....................................................(6)

v2-2dc867fc3054559fe2f2243885ad258b_b.jpg

【Clear Coat---车漆】

多层材质在世界上其实非常普遍车油漆,汽水罐, 漆木,丙烯酸等都可以用这种材质模型来描述。

v2-57bd8d7a3651c70fb5e0259ed22bd339_b.jpg

由于入射光将穿过透明涂层,我们还必须考虑能量损失。 然而,我们的模型不 会模拟相互反射和折射行为。

v2-100f9a17db054a3009661763a0f6a8de_b.jpg

透明涂层将使用标准模型中使用的相同Cook-Torrance microfacet BRDF进行建模。 由于透明涂 层总是各向同性和电介质,粗糙度值较低,我们可以选择更便宜的DFG分 量而不会明显牺牲视觉质量。

V(l,h)=\frac{1}{4(l\cdot h)^2} ............................................(7)

v2-c27a5bd0e09090965b73ef663ea68b91_b.jpg

为我们必须考虑到添加透明涂层引起的能量损失,我们可以重新表征BRDF:

f(v,l)=f_{d}(n,l)(1-F_{c})+f_{r}(n,l)(1-F_{c})^2+f_{c}{(n,l)} .................(8)

其中 F_{c} 是透明图层的菲尼尔分量。 f_{c} 是透明图层的BRDF。镜面反射分量乘以 (1-F_{c})^2 是为 了保持能量守恒,因为光进入并离开透明涂层。 乘以 1-F_{c} 的漫反射分量是对能量守恒的尝试。

v2-31369a980a7065af502c7ef51378fb86_b.jpg

透明涂层的存在意味着我们应该重新计算 ,因为它通常基于空气-材质界面。 因此,基础层需 要基于透明涂层材质界面来计算 。

这可以通过从 计算材质的折射率(IOR),然后根据新计算的IOR和透明涂层的IOR(1.5)计 算新的 来实现。

首先,我们计算基础层的IOR:

v2-f6c74079dfa0a31e98498d8b2a285f6e_b.jpg

然后我们从这个新的折射率计算新的 :

v2-250e770aedc3340be159923ea2d16a95_b.jpg

由于透明涂层的IOR是固定的,我们可以结合这两个步骤来简化:

v2-b861940d7967cd3300143798eb34b910_b.jpg

【双面次表面散射】

这种模型适合于树叶这种类型的物体

v2-0914c0af2f9880226d59335906dea06e_b.jpg

float3 wrappedDiffuse = LightColor * saturate((dot(N.L)+w)/(1+w)*(1+w)));

w\in[0,1]

v2-d65428b9536bf430345fac7773799454_b.jpg



什么?质疑我动画,打光,氛围的制作能力?好吧我去做个小短片放松一下。

v2-16096dab79e42077c0025ae18da9b0df_b.jpghttps://www.zhihu.com/video/1036717579095760896

Enjoy It!

参考资料

[1] blog.stevemcauley.com/2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值