《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

Posted 董小虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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_\\mathrmdiff(\\mathbf l,\\mathbf v)=\\cfrac\\rho_\\mathrmss\\pi\\left(k_\\mathrmrim\\left((\\mathbf v\\cdot\\mathbf n)^+\\right)^\\alpha_\\mathrmrim+k_\\mathrminner\\left(1-(\\mathbf v\\cdot\\mathbf n)^+\\right)^\\alpha_\\mathrminner+k_\\mathrmdiff\\right) fdiff(l,v)=πρss(krim((vn)+)αrim+kinner(1(vn)+)αinner+kdiff)
其中 k r i m ,   k i n n e r ,   k d i f f k_\\mathrmrim,\\ k_\\mathrminner,\\ k_\\mathrmdiff krim, kinner, kdiff是用户控制的标量,分别用来控制轮廓光项、照亮前向(内部)表面的项、朗伯项; α r i m ,   α i n n e r \\alpha_\\mathrmrim,\\ \\alpha_\\mathrminner α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_\\mathrmdiff(\\mathbf l,\\mathbf v)(\\mathbf n\\cdot\\mathbf l)^+\\Rightarrow\\cfrac\\rho_\\mathrmss\\pi\\left(\\mathbf c_\\mathrmscatter+(\\mathbf n\\cdot\\mathbf l)^+\\right)^\\mp\\cfrac(\\mathbf n\\cdot\\mathbf l+w)^\\mp1+w fdiff(l,v)(nl)+πρss(cscatter+(nl)+)1+w(nl+w)
在BRDF中,使用箭头右侧代替左侧, c s c a t t e r \\mathbf c_\\mathrmscatter 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_\\mathrmsheen(\\mathbf l,\\mathbf v)=k_\\mathrmsheen\\mathbf c_\\mathrmsheen\\left(1-(\\mathbf h\\cdot\\mathbf l)^+\\right)^5 fsheen(l,v)=ksheencsheen(1(hl)+)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_\\mathrmamp\\alpha^2)\\left(1+\\cfrack_\\mathrmamp\\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)χ+(nm)1+(1(nm)2)2kampexp(α2((nm)21)(nm)2)
其中, α \\alpha α控制逆高斯的宽度, k a m p k_\\mathrmamp 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_\\mathrmss\\pi+\\cfracF(\\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)=(1F(h,l))πρss+4(nl+nv(nl)(n《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 4 Transforms

《Real-Time Rendering》第四版学习笔记——Chapter 2 The Graphics Rendering Pipeline