《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(三)
前文:
《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)=ksheencsheen(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)2kampexp(α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(三)相关推荐
- 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(一)
一.光的物理特性 光与物体的交互形成了基于物理着色的基础. 在物理层面上,光的模型为电磁横波.每个波都有一个单一的波长λ\lambdaλ.具有单一波长的光叫单色光(monochromatic ligh ...
- 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)
上接文章:<Real-Time Rendering>第四版学习笔记--Chapter 9 Physically Based Shading(一) 六.微观几何 每个可见的表面点都包含了很多 ...
- 《鸟哥的私房菜基础篇》第四版学习笔记——第0章 计算机概论
文章目录 http://linux.vbird.org/linux_basic/ 一.计算机:辅助人脑的好工具 1.计算机硬件的五大单元 2.一切设计的起点: CPU 的架构 3.其它单元的设备 4. ...
- 《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
文章目录 一.Liux是什么?? 1.是操作系统or应用程序?? 2.Linux之前,Unix的历史 3.关于 GNU 计划.自由软件与开放原始码 二.Torvalds 的 Linux 发展 1.与 ...
- sql必知必会(第四版) 学习笔记一
温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...
- 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 ...
- sql必知必会(第四版) 学习笔记二 视图
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors (vend_id varchar(20) not null,vend_name varchar(5 ...
- 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示
经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...
- 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题
专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...
最新文章
- [洛谷P1317]低洼地
- AI一分钟|美团确认收购摩拜;特斯拉今年第一季度产量创历史新高
- Crawler:基于urllib库+实现爬虫有道翻译
- golang完成聊天室功能
- 2/2 数据获取:网络数据的获取
- mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器
- html目录清华,清华大学HTML、《网页设计与制作》讲义.ppt
- Git忽略提交规则 - .gitignore配置运维总结
- CCF NOI1069 分解因数
- forever不重启 node_node.js – NodeJS和Forever(监控并重启应用)
- (进来补知识啦!)利用双四选一数据选择器74153实现十六选一数据选择器(包含74153简单解释)
- jmeter并发性能测试工具
- 微信开发者工具公众号网页调试跨域问题的解决
- MATLAB中使用plotyy绘制双纵坐标图及坐标轴设置
- .so文件(so文件是什么)
- 东西湖职业技术学校计算机,武汉东西湖职业技术学校中专
- Vue笔记 (二) 如何做移动端适配 让你只用关心设计稿
- oracle批量清除会话,oracle快速彻底清理kill会话
- 状态栏的工具类(支持多种版本类型)
- 石英晶体谐振器的应用指南