前文:
《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(一)
《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)


十、布料的BRDF

由于纤维的类型特点,会有高度重复的编织微结构,和垂直于表面伸出的线头。所以需要特殊的着色模型,如各向异性的高光、粗糙的散射、随视角变化的颜色变动。

大部分纤维有高频的空间变化。

布料的BRDF模型有三大类:通过观察的经验模型、基于微表面理论的模型、微柱体(micro-cylinder)模型。

10.1 经验布料模型

游戏《Uncharted 2》模型:
f d i f f ( l , v ) = ρ s s π ( k r i m ( ( v ⋅ n ) + ) α r i m + k i n n e r ( 1 − ( v ⋅ n ) + ) α i n n e r + k d i f f ) f_{\mathrm{diff}}(\mathbf l,\mathbf v)=\cfrac{\rho_{\mathrm{ss}}}{\pi}\left(k_{\mathrm{rim}}\left((\mathbf v\cdot\mathbf n)^+\right)^{\alpha_{\mathrm{rim}}}+k_{\mathrm{inner}}\left(1-(\mathbf v\cdot\mathbf n)^+\right)^{\alpha_{\mathrm{inner}}}+k_{\mathrm{diff}}\right) fdiff​(l,v)=πρss​​(krim​((v⋅n)+)αrim​+kinner​(1−(v⋅n)+)αinner​+kdiff​)
其中 k r i m , k i n n e r , k d i f f k_{\mathrm{rim}},\ k_{\mathrm{inner}},\ k_{\mathrm{diff}} krim​, kinner​, kdiff​是用户控制的标量,分别用来控制轮廓光项、照亮前向(内部)表面的项、朗伯项; α r i m , α i n n e r \alpha_{\mathrm{rim}},\ \alpha_{\mathrm{inner}} αrim​, αinner​用于控制轮廓、内部项的衰减;

《Uncharted 4》根据布料类型,使用微表面或微柱体模型来计算高光项,使用“包围光(wrap lighting)”经验次表面散射近似来计算漫反射项目:
f d i f f ( l , v ) ( n ⋅ l ) + ⇒ ρ s s π ( c s c a t t e r + ( n ⋅ l ) + ) ∓ ( n ⋅ l + w ) ∓ 1 + w f_{\mathrm{diff}}(\mathbf l,\mathbf v)(\mathbf n\cdot\mathbf l)^+\Rightarrow\cfrac{\rho_{\mathrm{ss}}}{\pi}\left(\mathbf c_{\mathrm{scatter}}+(\mathbf n\cdot\mathbf l)^+\right)^{\mp}\cfrac{(\mathbf n\cdot\mathbf l+w)^{\mp}}{1+w} fdiff​(l,v)(n⋅l)+⇒πρss​​(cscatter​+(n⋅l)+)∓1+w(n⋅l+w)∓​
在BRDF中,使用箭头右侧代替左侧, c s c a t t e r \mathbf c_{\mathrm{scatter}} cscatter​是用户定义的散射颜色, w w w是取值范围 [ 0 , 1 ] [0,1] [0,1]的参数,用于控制包围光的宽度。

Disney加入一个光泽项到漫反射BRDF项,来模拟粗糙散射:
f s h e e n ( l , v ) = k s h e e n c s h e e n ( 1 − ( h ⋅ l ) + ) 5 f_{\mathrm{sheen}}(\mathbf l,\mathbf v)=k_{\mathrm{sheen}}\mathbf c_{\mathrm{sheen}}\left(1-(\mathbf h\cdot\mathbf l)^+\right)^5 fsheen​(l,v)=ksheen​csheen​(1−(h⋅l)+)5

10.2 微表面布料模型

游戏《The Order: 1886》使用的天鹅绒NDF:
D ( m ) = χ + ( n ⋅ m ) π ( 1 + k a m p α 2 ) ( 1 + k a m p exp ⁡ ( ( n ⋅ m ) 2 α 2 ( ( n ⋅ m ) 2 − 1 ) ) ( 1 − ( n ⋅ m ) 2 ) 2 ) D(\mathbf m)=\cfrac{\chi^+(\mathbf n\cdot\mathbf m)}{\pi(1+k_{\mathrm{amp}}\alpha^2)}\left(1+\cfrac{k_{\mathrm{amp}}\exp\left(\frac{(\mathbf n\cdot\mathbf m)^2}{\alpha^2\left((\mathbf n\cdot\mathbf m)^2-1\right)}\right)}{\left(1-(\mathbf n\cdot\mathbf m)^2\right)^2}\right) D(m)=π(1+kamp​α2)χ+(n⋅m)​⎝⎛​1+(1−(n⋅m)2)2kamp​exp(α2((n⋅m)2−1)(n⋅m)2​)​⎠⎞​
其中, α \alpha α控制逆高斯的宽度, k a m p k_{\mathrm{amp}} kamp​控制其振幅;其完整的布料BRDF为:
f ( l , v ) = ( 1 − F ( h , l ) ) ρ s s π + F ( h , l ) D ( h ) 4 ( n ⋅ l + n ⋅ v − ( n ⋅ l ) ( n ⋅ v ) ) f(\mathbf l,\mathbf v)=\left(1-F(\mathbf h,\mathbf l)\right)\cfrac{\rho_{\mathrm{ss}}}{\pi}+\cfrac{F(\mathbf h,\mathbf l)D(\mathbf h)}{4\left(\mathbf n\cdot\mathbf l+\mathbf n\cdot\mathbf v-(\mathbf n\cdot\mathbf l)(\mathbf n\cdot\mathbf v)\right)} f(l,v)=(1−F(h,l))πρss​​+4(n⋅l+n⋅v−(n⋅l)(n⋅v))F(h,l)D(h)​
游戏《Uncharted 4》使用上述BRDF变种,来对粗糙纤维进行建模,如羊毛、棉等。

Imageworks使用另一种逆高斯NDF,来计算光泽项,并可以加入到任意到BRDF:
D ( m ) = χ + ( n ⋅ m ) ( 2 + 1 α ) ( 1 − ( n ⋅ m ) 2 ) 1 2 α 2 π D(\mathbf m)=\cfrac{\chi^+(\mathbf n\cdot\mathbf m)(2+\frac{1}{\alpha})\left(1-(\mathbf n\cdot\mathbf m)^2\right)^{\frac{1}{2\alpha}}}{2\pi} D(m)=2πχ+(n⋅m)(2+α1​)(1−(n⋅m)2)2α1​​

10.3 微柱体布料模型

布料的微柱体模型与用于毛发的非常相似。背后的理念是表面上覆盖一维的线。

十一、BRDF模型的波动光学

几何光学主要处理的是微几何情况,即不规则度尺寸大于100倍的光波长,但是单独渲染又太小;而波动光学则是处理纳米几何(nanogeometry)。纳米几何情况下的反射,由于波的性质,无法使用几何光学建模;光的波特性影响和波动光学(wave optics,又叫做物理光学,physical optics)来建模。

层厚度接近光波长的表面同样会产生光的波特性相关的光学现象。

11.1 衍射模型

纳米几何会产生衍射(diffraction)现象。惠更斯-菲涅尔原理(Huygens-Fresnel principle)指出,所有波阵面上的点,都是新的球面波的源。当光遇到障碍物时,在拐角处会产生轻微的弯曲。在表面的球面波连成一条线,就产生了反射波阵面,其他方向则因为负向干涉而被消除。当表面的不规则度尺寸在纳米尺度时,球形波的波正面连线就不再平整。

光会被散射到不同方向,其中部分指向高光反射方向;其余衍射出的光的方向样式则基于纳米几何的特性,即纳米几何的凸块高度,或者更精确的说是高度分布的方差。衍射光的分布角度基于纳米几何相对于光波长的宽度。越宽的不规则度,导致越小的分布。

衍射现象在周期性变化的纳米几何表面可以清晰的可见。

11.2 薄膜干涉模型

薄膜干涉现象发生在光在薄膜介电质上下表面分别反射,并互相干涉的情况。

由于波长和路径长度之间的关系,不同波长的光会产生正向干涉或负向干涉。这会导致随着入射角变化,会产生颜色变化。

之所以薄膜需要很薄才会发生这个现象,是因为这与相干长度(coherence length)的概念相关。这个长度是光副本仍然能与原光进行干涉的最大距离。这个长度与光的带宽(bandwidth)成反比。

理论上来讲,白光是混合了所有波长的光,其相干长度为0。但实际上,可见光的波长是有范围的,且相干长度约为1微米

十二、层状材质

在现实世界中,材质通常会铺在另一层物质之上。透明漆(clear coat)是最简单也最常见的层材质,是在不同基底材质之上覆盖的一层光滑透明层。

透明漆层最明显的视觉效果就是双反射,即分别从透明漆和基底表面反射出光。

透明漆层也可以改变色调。色调改变是光线吸收的结果;而光吸收量与路径长度有关,路径长度又与光线角度、视角以及折射率相关。

通常情况下,不同的层有不同的表面法线。但在实时渲染中,很少会对各层设置单独的法线。

十三、材质混合和过滤

材质混合(material blending)是将不同材质的BRDF参数合并的过程。

材质混合可以通过预处理来创建一个新的纹理,这个过程通常称为“烘焙(baking)”;或者也可以着色器中快速执行。因为表面法线 n \mathbf n n在技术上不是BRDF的参数,然而对于外观来说,空间变化是很重要的因素,所以材质混合一般也会包含法线贴图混合。

混合纹理元素可以在节省内存的情况下,得到不同的效果集。游戏中使用材质混合的目的:

  • 显示建筑、车辆、生物等的动态损毁;
  • 使用户可以自定义设置游戏装备、服装等;
  • 提高角色和环境等视觉效果;

上层材质不透明度小于 100 % 100\% 100%或部分覆盖像素的边缘位置,这两种情况的严格正确的方法是,对不同材质分别着色,然后将结果混合成最终结果。但是,混合BRDF参数,然后一次性着色,这样会更快。

法线贴图混合需要特别处理:从法线贴图推导出高度贴图,然后对高度贴图进行混合,这样通常可以得到正确的结果。

材质属性通常存储在纹理中;而GPU会对纹理进行过滤。这些过滤是基于过滤值与最终颜色有线性关系这个假设。对于存在非线形关系的参数纹理,或者法线贴图,如果采用线性mipmap方法,就会产生错误。

13.1 法线过滤和法线分布

NDF是亚像素表面结构上的统计学描述。从多像素到亚像素的变化,与mipmap有紧密的关系。

外观的建模需要假设一个确定的观察尺度。宏观尺度( macroscale)几何通过三角形建模;中尺度(mesoscale)使用纹理;微观尺度(microscale)采用BRDF。

在给定观察尺度的情况下,法线贴图中的纹素,加上粗糙度,可以视作是该纹素覆盖的表面区域的法线分布。假设此时扩大了观测尺度,那么多个纹素可能合并成一个纹素;此时最精确的表示方式应该是对法线分布函数做平均,但是对于法线贴图来说,是无法做到的。

如果将法线和粗糙度分别独立的做平均,那么平均法线是正确的,但是其分布会变窄;这就导致了视觉效果上过于光滑,严重的情况下甚至会产生闪烁高光。

为了获取最佳结果,过滤操作(如mipmapping)应该应用于法线分布函数,而不是法线和粗糙度值。一般情况下,NDF是在局部切线空间中,通过法线贴图逐像素法线定义的。但是将法线贴图和粗糙度贴图的结合,看作是定义在潜在几何表面的切线空间的一个倾斜的NDF,这样更合适。

早期解决NDF过滤问题,采用的是树枝优化方法,来将NDF波瓣贴合到经过平均的分布。这个方法的健壮性和速度都存在问题,所以现在基本不用。很多方法通过计算平均分布的方差来代替。

Toksvig将NDF的粗糙度参数修改为基于法线长度。通过使用修改的粗糙度来计算BRDF,近似过滤法线的扩散效应。其原本的公式是用于Blinn-Phong NDF: α p ′ = ∥ n ‾ ∥ α p ∥ n ‾ ∥ + α p ( 1 − ∥ n ‾ ∥ ) \alpha_{p}^{\prime}=\cfrac{\|\overline{\mathbf n}\|\alpha_p}{\|\overline{\mathbf n}\|+\alpha_p(1-\|\overline{\mathbf n}\|)} αp′​=∥n∥+αp​(1−∥n∥)∥n∥αp​​,其中 α p \alpha_p αp​是原本的粗糙度参数, α p ′ \alpha_p^{\prime} αp′​是修改后的值, ∥ n ‾ ∥ \|\overline{\mathbf n}\| ∥n∥是平均法线的长度。可以通过 α p = 2 α b − 2 − 2 \alpha_p=2\alpha_b^{-2}-2 αp​=2αb−2​−2将上述公式应用于Beckmann NDF。在GGX分布中使用没有这么直接,因为GGX和Blinn-Phong没有明确的线性关系。在实际应用中,与Beckmann NDF使用方式相同。

Toksvig方法的优点是考虑了GPU纹理过滤引入的法线方差;在mipmap机制中使用简单。缺点是纹理压缩不能很好执行;会导致精度问题。

LEAN映射技术基于对法线分布的协方差矩阵进行映射。在Toksvig方法优点的基础上,还有支持各向异性法线分布的优点。

在实时渲染中,大部分法线贴图是静态的。对于这样的贴图,通常使用方差映射(variance mapping)方法。该方法会对顶层mip使用小滤波器进行卷积,以避免mipmap产生的方差。

法线方差也可能由高曲率的几何体的法线贴图引入。如果在几何体表面使用单一的纹理贴图,那么几何体曲率可以通过“烘焙”计算入粗糙度贴图。

方差映射将法线分布近似为光滑高斯分布的波瓣。

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(三)相关推荐

  1. 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(一)

    一.光的物理特性 光与物体的交互形成了基于物理着色的基础. 在物理层面上,光的模型为电磁横波.每个波都有一个单一的波长λ\lambdaλ.具有单一波长的光叫单色光(monochromatic ligh ...

  2. 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)

    上接文章:<Real-Time Rendering>第四版学习笔记--Chapter 9 Physically Based Shading(一) 六.微观几何 每个可见的表面点都包含了很多 ...

  3. 《鸟哥的私房菜基础篇》第四版学习笔记——第0章 计算机概论

    文章目录 http://linux.vbird.org/linux_basic/ 一.计算机:辅助人脑的好工具 1.计算机硬件的五大单元 2.一切设计的起点: CPU 的架构 3.其它单元的设备 4. ...

  4. 《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

    文章目录 一.Liux是什么?? 1.是操作系统or应用程序?? 2.Linux之前,Unix的历史 3.关于 GNU 计划.自由软件与开放原始码 二.Torvalds 的 Linux 发展 1.与 ...

  5. sql必知必会(第四版) 学习笔记一

    温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...

  6. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects...

    The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...

  7. sql必知必会(第四版) 学习笔记二 视图

    本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors (vend_id varchar(20) not null,vend_name varchar(5 ...

  8. 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示

    经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...

  9. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. [洛谷P1317]低洼地
  2. AI一分钟|美团确认收购摩拜;特斯拉今年第一季度产量创历史新高
  3. Crawler:基于urllib库+实现爬虫有道翻译
  4. golang完成聊天室功能
  5. 2/2 数据获取:网络数据的获取
  6. mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器
  7. html目录清华,清华大学HTML、《网页设计与制作》讲义.ppt
  8. Git忽略提交规则 - .gitignore配置运维总结
  9. CCF NOI1069 分解因数
  10. forever不重启 node_node.js – NodeJS和Forever(监控并重启应用)
  11. (进来补知识啦!)利用双四选一数据选择器74153实现十六选一数据选择器(包含74153简单解释)
  12. jmeter并发性能测试工具
  13. 微信开发者工具公众号网页调试跨域问题的解决
  14. MATLAB中使用plotyy绘制双纵坐标图及坐标轴设置
  15. .so文件(so文件是什么)
  16. 东西湖职业技术学校计算机,武汉东西湖职业技术学校中专
  17. Vue笔记 (二) 如何做移动端适配 让你只用关心设计稿
  18. oracle批量清除会话,oracle快速彻底清理kill会话
  19. 状态栏的工具类(支持多种版本类型)
  20. 石英晶体谐振器的应用指南

热门文章

  1. 第10天 喷绘与写真
  2. 游戏建模师经验分享丨必看的13个游戏建模小技巧!
  3. 【Python经典题目】闵可夫斯基距问题
  4. 为什么python里pip命令用不了了
  5. 你还不会用CAD一键布置停车位?赶紧学起来!
  6. MacOS下oh-my-zsh安装与使用
  7. namesilo域名购买教程,域名解析教程
  8. 戴尔浪潮联想服务器代理
  9. python设置坐标轴刻度(主、次刻度)
  10. 『前端面试资料』 个人面试准备手稿 2021/4