基于物理着色实践

绝缘体的菲涅尔系数由其IOR决定,绝缘体的IOR通常大于1,但是比较小。菲涅尔系数随着入射角增大而减小。
因为能量守恒,反射菲涅尔系数是a,那么折射就一定是1-a。

但是金属是一个特例,金属不折射光,只有很少的光被他吸收,所以金属的IOR非常大(他的菲涅尔公式还有一个吸收系数),虽然菲涅尔系数也会随着入射角增大而增大,但增幅不明显,因为都很大。所以金属的菲尼尔系数通常会很接近于1。

事实上,金属和非金属都有IOR和吸收系数,只是非金属的吸收系数多为0或者非常接近于0。

Schlick近似对于金属和非金属都实用:

F ( n , l ) = F 0 + ( 1 − F 0 ) ( 1 − ( n ⋅ l ) + ) 5 F(n,l)=F_0 + (1-F_0)(1-(n\cdot l)^+)^5 F(n,l)=F0+(1F0)(1(nl)+)5

F 0 F_0 F0是垂直看向表面时的菲涅尔系数(他不是颜色,而是反射率,白光时可以是反射颜色),金属的 F 0 F_0 F0通常是有色的,均大于0.5,且大部分接近于1。而绝缘体的 F 0 F_0 F0,都是无色的,对所有波长都是同一个数,这个数很小,一般小于0.2,0.04可以作为一个均值。

所以在基于物理着色的时候,要正确选择高光部分(代表金属)的 F 0 F_0 F0,一般会使用metallic进行插值 F 0 s p e c = 0.04 ∗ ( 1 − m e t a l l i c ) + m e t a l l i c ∗ a l b e d o F_0^{spec}=0.04*(1-metallic)+metallic*albedo F0spec=0.04(1metallic)+metallicalbedo,其中albedo代表物体的固有色,所以在制作albedo的时候,金属的albedo要制作为正确的金属 F 0 F_0 F0.

另外,为了能量守恒, 1 − F 1-F 1F应该作为漫反射部分的系数,再者为了使得metallic调到1的时候,完全转化为金属,也在漫反射部分乘以一个 ( 1 − m e t a l l i c ) (1-metallic) (1metallic)。这样一来,在metallic为0的时候,高光部分退化为绝缘体反射,使得整个brdf不会丢失高光,同时在metallic为1的时候,整个brdf将完全表现为金属。

整个BRDF则写为:

f = f d i f f u s e ∗ ( 1 − F ) ∗ ( 1 − m e t a l l i c ) + F D G 4 ( n ⋅ l ) ( n ⋅ v ) f=f_{diffuse}*(1-F)*(1-metallic)+\frac{FDG}{4(n\cdot l)(n\cdot v)} f=fdiffu

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值