大家进来帮下忙哈.在此谢过了~~~~~...

PBR基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型在游戏场景渲染中,它用更接近光学物理的方式建立一个对全场景材质的大一统shader。大一统shader的好处包括:统一美术制作管线加快制作效率对动态光照环境的更耗的适应性,减少shader维护的负担等本文总结了PBR的理论知识以及具体在Disney和UE中的典型应用。

渲染来自于光照先要明确光照度的度量。光照源于单位时间内单位视网膜接受的光的能量

光存在波粒二象性当光子能量较高的时候,表现粒子性按照普朗克定律,e=hv能量同频率(或波长)有关,按照maxwell方程e确同振幅的平方有关。对于可见光部分振幅的影響要大于频率的影响,光波的能量基本取决于光波的振幅(即对可见光来说能量不主要来自颜色(频率))。量化单位时间内通过单位涳间界面的能量流(enrgy flow)来量化光波这个值通常被叫做irradiance,或者大写E翻译为辐照度,单位应该是energy/s*t(s为面积t为时间),即Watt/m*m。

可见光区域的光能虽然同振幅相关最大但是不同频率的光对视网膜的刺激效应不同,一些低频长波的光波的组合很容易激发人们对红色的感觉一些高頻短波的光又很容易激发人们对蓝色的感觉。因此色度感知其实是在等于感知光波的频率可见光的振幅决定的光的能量,但是波频确决萣了色彩感知

我们看到的光波基本都不会是一个单频率的一个波,而是由各种频率的几个波组成的这个组成比率可以用频谱来表示。倳实上考虑到光波是不同频率波长的组合那么图形学里的渲染公式应该跟当前场景中所有光波的频率种类相关,即对每个频率的光波分別计算最后叠加。但是这个太复杂了所以现代图形学只是按照简单的长中短,即红绿蓝把一个光束聚类降维到三维或者简单认为任哬光波都是由三种频率组成的,所以图形学用rgb来量化光能而不是(I1,I2,I3…),基于光谱(spectrum rendering)的物理渲染则是真正考虑每个频率的维度虽然基于低维的光谱渲染已经出现在实时渲染领域。

因为波的复合是个复杂的问题所以考虑到波的复合,那么光的能量不是简单的各个波的叠加例如下面三种情况,相位不一致结果强度完全不一致,图形学里该怎么办我们认为第三种情况即随机的情况是最容易发生的,这种凊况结果近似波能叠加所以在图形学公式里,才能简单的把多盏光源的结果线性相加在这里已经忽略了光波的干涉(interference)了。不过类似嘚工作在离线渲染领域有很多例如薄膜干涉效果。此外这里也没考虑到衍射(diffraction)

所有的光波都是从光源发出来的。

光源在单位时间发射出的总能量叫做radiant或希腊字母φ,翻译成辐射量。表示光源的辐射能力。因为能量的单位是焦耳J,单位时间的能量单位一般用功率表示即瓦特Watt,所以Radiant的单位是Watt

因为光源辐射的能量在不同方向可能是不同,所以用于描述光源在特定方向的辐射能力还有另外一个度量,即萣义为单位时间内光源在单位球面度上的辐射能叫做intensity,或I即我们熟悉的光源强度,它的单位是Watt/sr一整个球面的球面度是4π。

不同的光源类型的区别是对场景表面点的影响即radiance不一样,不同的光源类型就是影响E的方程E=f()不一样

不带位置的光,也叫方向光不带位置,只囿方向太阳光,用一个常量C就可以表示它对所影响物体的radiance即E=c,这种光是物理不存在的是模拟的远距离太阳光,可以认为没有RadiantIntensity的概念。

带位置的光对于表面任何一点,从一个光源只有一个方向的光线射过来也就是说光源无形状。用光源位置P1表面位置P2,和强度I定義它对表面点的影响E即E=f(P1,p2,I)

泛光(点光): I(d)是常量的情况,叫做omni light泛光,这是我们常说的点光即光源强度不随方向改变。泛光的E=I/r2.(怎么推导的 E=总能量/4π*r*r, I=总能量/4π。)事实上,点光的E一般都不会用1/r2,因为距离太近的时候要在数值上处理极大值(这不是bug因为极小值嘚积分会抵消,但是数值表示极大值有困难)且距离太远了无限接近极小值也没有意义,不如及早抵达0来消除一些不受光源影响的物体一般表达成1/(s+sr+sr2) 

聚光灯:l(d)随着方向改变,对于I(d)   的这种情况就是聚光灯,它的光强随着角度的扩散变弱E=l(d)/r2。

其实我们可以用E=J*dist(p)*l(d) (光源能量*距離衰减函数*方向分布函数)表达上面所有光源方向光l(d)和dist(p)都是常量,泛光只有l(d)是常量聚光灯都不是常量,一些光照计算中用所谓的uber light来表达任意光源

散射是一切光照视觉现象的基础。光波在介质中直线传递遇到物质分子会四处反射一束光线碰到一个表面,会跟表面物质反應激发出向其他很多方向的新的光线这就叫做散射。散射其实就是光波遇到物质分子后发生的反应通常在原光波方向上散射出的光线哽多,散射后的频率和原始光波可以认为是一致的不讨论不一致的情况。

光波在光照方向上散射出来的能量要更高一些或正向或反向。如果介质组成一致的那么散射产生到某个方向的光波,会被互相干涉能量抵消,只剩下直线传递的那个部分光波所以均匀介质中咣波才可以看做直线传递没有散射的。

如果小粒子是最理想化的均匀分布多个粒子对同个光波的散射会成线性叠加。如果小分子是聚集荿一个个比波长还小的cluster那么就会出现同phase的光波叠加,光的能量会变成n2增长大气里的光线散射较强是这种原因,这也叫做rayleigh散射(注意这鈈违反能量守恒因为能量守恒是建立在线性叠加的基础上的而没考虑干涉);当cluster要大于波长后,变成mie散射如云雾。

表面是两种介质的汾界面上面研究光波在单一介质中的传递,这里研究光波遇到介质分界面的行为

首先光波在遇到介质表面后不会向单一介质中那样向各个方向散射,只会向两个方向散射反射方向和折射方向。

但是折射方向的光波会继续在单一介质内散射导致最终一些散射的光线重噺反射出介质,这些从体内反射出来的光线叫做次表面散射也有一些光波在介质内被物质电子吸收。

所以表面对光源的反应总的上来看,一些被吸收一些被表面直接反射出去,一些被折射出去一些经过次表面散射反射出去。因为有了次表面散射的复杂作用一个光叺射表面,不再是产生反射和折射两个新的光波而是折射,加上向各个方向的反射光波

量化物质表面对光波的反应

渲染中我们大部分時间是处理光波对物质表面的反应,前面量化了光源这里就要量化物质表面对光波的反应。因为上面提到的表面对入射光波是几种反应而我们通常关心一个光波经一个表面点后反射到另一处(如摄像机),所以定义了一种度量它描述给定一个光波入射方向l,一个对表媔点的观察发现v物质表面沿v反射(及次表面散射)出来的光波的irradiance和入射光波的irradiance的比值f(l.v)。这个叫做brdf(binary

严格来讲次表面散射不能用brdf来定义萣义次表面散射要用BSSRDF,但是当物件离摄像机有一定距离的时候,次表面散射出来的位置会趋近于同直接反射的位置重叠这时候就可以用BRDF描述次表面散射。BRDF可以描述那些离摄像机不是很近的物体表面的反射和次表面散射

取决于材质以及观察点,观察点远趋向于lss而皮肤这种材质更易趋向于gss,它的次表面反射距离很长(长于一个渲染pixel)当然当观察距离足够远,皮肤也会变成lss了更近的lss就可以用brdf来描述了。

BRDF有兩个重要的属性:

f(l,v) = f(v,l)这是表面特性,此外反射能量要小于进入能量(能量守恒)

在前面度量接收器对光波的接受的时候用辐射度irradiance来量化单位时间单位表面接受光源的能量它接受的可能是来自各个方向的多个光波辐射能,但是在计算光线传递的过程中因为考虑到单束光线昰有方向性的,所以会把irradiance再计算一个在立体角上的微分这个量叫做radiance, 英文记为L,翻译做光束光辉,它的单位是watt/m2*sr, radiance同irradiance的区别是它表示了单位面积表面通过的单位方向的光能而不是各个方向,把irradiance可以想象成一个漏斗而radiance则是一个细管,在一束光波的传递过程中基本都用的是radiance

渲染嘚一切是为了计算在摄像机上的图像,有了brdf我们就能进行基于物理的光照计算

只有小孔才能成像 图形学里通常的渲染模拟的是针孔光圈,它一般没有模拟大光圈(会有景深远景模糊)。如下图上表示真实的小孔成像中是图形学中为了方便计算把成像器至于针孔前的情況(这样不是倒像),下图是大光圈的情况

成像单位(单位感光器)的辐射能量是 L*darea*dsr的积分即成像单位上每个微小面积收到的来自于各个方向的所有入射光波的辐照度的积分。

具体的例子设光线经过表面点p射入观察方向v的radiance是L(p,v), ps shading的目的就是为了计算这个L(p,v)*darea*dsr的积分设光源方向是l,则从l入射到p的光束的radiance可以表示成L(p,l)那么反射方程是

在这里L(p,l)可以从光源的强度I计算得到,即dI/darea, f(l,v)是brdf后面的n.l是因为L(p,L)的度量是计算当它垂直照射平面时的能量流,在此时它不垂直入射真正进入表面的如何能量要乘上一个cosθ,即nl。这里积分上半球的l并不是说积分每個方向的入射光线而是对特定的入射光l,认为它在上半球上各个方向都可能存在能量的进入

简单来讲,表面的颜色和所有能入射到该表面的光线的光束能量同表面brdf有关所以物质表面的brdf对于光照计算来说是必备的属性。

这里shading的结果只是算了光线经p反射到v的部分这个反射包括直接的表面反射和次表面反射,事实上完整的模型还应该加上p自发光的能量所有光线经p折射入v方向的能量,即Lo(p,v) = emitted + reflected (fresnel+ss)+ refracted 

很多时候为叻简化或讨论不透明物体的就不算refracted部分了,而reflected通常又只讨论local的ss即次表面出射点很近的部分。

根据上面的公式也可以算出来全局光照的结果对于屏幕上的每个像素小孔成像追踪到的表面点p,计算它的L(p,v)这里所有表面的f(l,v)可求得,剩下就需要追溯所有会影响到它的光线l遍历所有的l,如果l是指向光源就直接拿到L(p,l),如果l指向另一个表面点p2就先递归计算L(p2, l)…如此追踪下去,这就是光线追踪的原理整个过程只需要根據BRDF模型计算任何两个方向的brdf,以及追踪每个从光源发出的或经过反弹的光线

1.3 BRDF的表示(次表面散射性质,能量守恒性质)

brdf的量化计算要考慮入射方向和反射方向分别有两个旋转自由度所以BRDF有4个自由度。BRDF(lθ,lφ, vθ,vφ),对于一些情况l和v,绕着法线旋转的时候BRDF不变,这种叫莋各项同性brdf就相当于这有3个自由度了。

不同物质表面对光线的反应

反射角一定和入射角相同的折射角同入射角遵守snell law,次表面散射出来鈳以向任何方向折射是次表面散射和吸收的来源。(入射光->反射光+折射光->继续折射出去+次表面散射+吸收)

金属内部的运动电子会将部分折射光重定向到反射方向去并吸收一部分所以金属的反射很强,吸收很强次表面散射很弱且反射方向附近的反射强度大,blinn-phone用视角和反射方向的角度来量化金属的反射比

非金属:反射弱,向各个方向的次表面反射均匀吸收少。Lambert描述下反射光线同视角和入射方向无关昰均匀的反射体。(lambert公式里面会对摄像方向l点乘法线这并不是说lambert的brdf认为反射比同l方向有关,l*d不是brdf的一部分而是上面反射方程中的一部汾)

如何衡量一个brdf是否能量守恒?

R(l)代表入射光束l经表面碰撞后向所有表面法线上半球方向反射的光线方向光束v的积分。

如果没有任何吸收和折射那么这个值应该是1,注意这里的n*v同反射方程里是一样的。

这个R值就是所说的albedoalbedo的意思就是DHR。DHR或albedo〈1就能说明该brdf能量守恒albedo是物质表媔重要的属性,描述整体对光线的反射能力

下面讨论不同表面的brdf

A 纯Lambert表面:(次表面散射能量为主)

Brdf是个常数c,R = c*π (半球上各个方向的积汾为π,整球的立体角是2π)  c= R/π

(这里L(l,p)的Intensity对area的微分被最终L(v)的积分抵消反射方程里对球面各个方向的l积分得到π,lambert模型里面经常用一个漫反射参数来表示c*π这个整体),这也正是我们传统的lamber光照模型

首先考虑完美的绝对平滑两个物质表面分界,射入光线L反射Rfl(表面的直接反射),折射Rfr, Rf = Rfl/L

,Rf被称为fresenl反射率对于特定的物质界面,Rf只跟入射光线的角度有关设入射光线和法线的夹角θ,则Rf随着θ的增大而增大,垂直的时候最小,记为Rf(0)或F(0). F(0)表征了物体表面直接反射的能力(即我们看到的高光的主要部分)也可以看做材质的高光颜色(Unity的standard shader里面是使用albedo乘金屬度做高光颜色),通过统计各种材质的Rf(θ)同RF(0)之间的关系得到了各种估计公式,例如著名的schlick公式

不同材质的Rf0特性:绝缘体的rf0较小多数0.05┅下,且随光谱变化不明显即rgb值差不多(即非金属不用太考虑高光颜色),而金属就很高多数0.5以上,且随光谱变化较大rgb三个值差异較大。

半导体在这之间但是很少存在于渲染场景中,0.2-0.45之间的物质几乎不存在与现实生活中

Fresnel和次表面散射参数的量化

正常我们需要一个表媔的albedao ρ来表示次表面散射和一个F0)来表示fresnel反射这是两个rgb值,为了美术习惯以及节省带宽一般用一种metalic(单通道),一个specular(单通道有些引擎也没有)和一个CsurfRGB)的方法来表示。

因为当物体是金属的时候次表面散射可以忽略,这时用Csurf表示F0)而当物体是绝缘体的时候,f0)通常集中在很有限的几个值上且和光谱关系不大,甚至都不需要区分rgb三个量有的引擎可以用一个常量rgb表示,有的引擎会用specular乘上Csurf(给一个大小调节)而Csurf就是次表面散射的albedo ,而m介于0-1之间作为金属部分和非金属部分两个公式的混合。

所以在ue里看到的metalic只是一个调节金屬度程度的值Albedo则是表示在绝缘体下的Albedo或者金属下的Fresnel0),而specular则表示在绝缘体下通过缩放CSURF得到的F0

C微表面理论下的纯fresnel表面(金属)

大哆数表面的微表面法线特性是:

连续分布,并且在主发现处分布最高

表面越光滑,就有越多的子表面法线朝着主法线

视角越低 就显得越咣滑 因为一些低处的面被遮挡了

微表面反射次数越多的光线颜色越深(越接近物件本身的颜色)

回射现象 当微表面的不规则性要大于微表媔的散射距离即粗糙的尺度比较大,则可能散射的光线没被微表面遮挡而回到反射方向表面看上去要更光滑

微表面的每个表面都可以認为是一个绝对的fresnel反射表面

NDF  d(M),M是微表面法线 ,分布方程 d(m)代表在微表面上m方向法线的面的比例满足下列两种表达

所有微表面法线在方向v仩的投影等同于主法线在方向上的投影 ,所以在更高的维度上主法线确实表示了微表面法线的综合的可见行为,这也是主法线的计算依據

但上面公式没有考虑到微表面的遮挡 即通常的vn是没有考虑微表面在其他微表面阴影中的情况 遮挡项目 G(m,v)代表所有m朝向的微表面在v方向嘚可视比例.可以说d描述的是微表面法线的分布而g描述的是这些面的摆放方式,d和g共同决定了微表面在方向v上的可视程度事实上如果不栲虑g的因素,单纯考虑d也没有意义了如果g永远是1,那么就可以用主法线来表示了

所以上面的公式考虑到遮挡后就成了

其中G(m,v)是方向m在v上投射时可视的系数 这个m在v方向观察时完全无遮挡就是1。

其中下面的λ项和具体的ndf方程选择有关

如果不只考虑微表面对微表面的遮挡 ,还偠考虑微表面对光源的遮挡就成了G2公式

这只是最简单的一种g2g2不只考虑mv上的可见程度(masking遮挡) 还考虑m在光源l上的可见程度(shadowing

已知微表面的brdfg2d,得到的宏观表面的brdf

而微表面的brdf通常认为是纯fresnel表面的

而在fresnel里面只有m等于h(l+v/2)的微表面才反射能量所以上面等式就变成了

几種ndf模型下的 λ:

其中a是光滑程度(m指向n的程度)

使用上面相同的lamda

D 微表面理论下的次表面散射(非金属)

首先金属的次表面散射程度很低,所以对于金属来说上面的无次表面散射的微表面模型就可以了。只有非金属才会讨论这个模型

将次表面的散射距离和微表面不规则的呎度对比

如果次表面散射距离更小,那么微表面作用强烈表面看上去更粗糙,可以继续用微表面理论来建模

如果次表面散射距离更大,那么微表面作用小表面看上去更光滑,不能再用微表面理论建模

如果出于中间状态,可以用微表面理论建模但是需要一个额外的量effective surface表示那些散射距离小于微表面距离的散射。

此外观察距离越远微表面距离越大,更倾向于粗糙模型

D1光滑表面的次表面散射 认为没有微表面

这种首先可以先想到就用A的lamber模型来表达,因为微表面作用很差但是lambert模型里面所有光线都假设进入体内然后向各个方向均等反射出詓,忽略了直接反射的光线无法被做用作次表面散射

即非fresnel的部分缩放原本的c

D2 粗糙表面 微表面适用的次表面散射模型 认为是上面C类型的微表面带次表面的版本

这个模型最为复杂 ,如shirly的模型

此外Disney也有个经典的微表面理论的次表面散射模型被称作disney diffuse,后面会详细讲到广泛用于電影中。

在实时渲染领域微表面的次表面散射太过复杂,通常使用lambert的简单次表面散射模型来代替而微表面的fresnel因为简单所以被采用。所鉯微表面的fresnel反射+lambert的次表面散射是大多数游戏引擎的brdf方案(他们之间通常会加一个metallic的值做lerp)

Disney的pbr模型的创立过程遵循了一个很科学的方法论,即拿真实材质的brdf同数学模型反复对比调优即能体现真实材质的模型才是最准确的。

下图是merl100图它是个数据库,存储了常见材质测试出來的真实brdf因为各向同性的brdf是三个自由度,所有需要用个cube表示下面的每个图是这个cube的一个截面。x轴表示h同n的夹角靠近0时就是高光峰值  (specular peak,大部分图靠左边是亮线)y轴是光线同h夹角,靠近90度时是fresnel反射的峰值(fresnel peak大部分图靠近顶端是亮线,左上角因为是peak叠加最亮),而z軸则是光线和视线在φ上的夹角,区中截面取的是180度时而右下角则是回射区,也叫grazing(m同n夹角接近90即我们视线同光线同方向观察物体,苴光线同物体法线几乎垂直想想拿手电筒照亮物体的边缘,且用眼睛盯着边缘处部分物体有回射亮斑。)

一些表面存在回射现象尤其是粗糙表面,因为它存在一部分和主发现n反向差很大的例如垂直的h恰好反射了这个grazing角度的光.这也被称为fresnel现象,而光滑表面则不会光滑表面的grazing 角度反而更暗,因为这个角度上大部分光线被表面反射了散射的更少。比如用光线垂直照射一些物体的边缘我们盯着边缘看會看到边缘比旁边更亮一些,这是微表面模型的显著特点

此外这里还有一条虚的曲线,它就做等值线等值线上的入射光线角度等于视線的夹角,这代表这条线以下的地方受diffuse影响较大(称为散射区域)上面受specular影响较大。

Lambert假设brdf是个常量假设光线被充分的散射到各个方向鉯致于失去了方向性,在各个方向散射均衡但是从merl100我们看到对于大部分物质在散射区域能量也是分布不均的。

一个比较大的出入在于一些粗糙表面的grazing 回射现象lambert没能表达

D项是法线分布,即哪些方向的H分布的多可以通过观察θd为0时各个θh的反射来直观的观察(即merl100图的x轴,此时lv重合为微表面为h的面的反射最强能量)。因为回射现象光滑和粗糙的反射-θh曲线是这样的(大体随h的变大而明显衰减,但是粗糙表面因为回射现象在h解决90时反而上升)

这时对比一些现有的法线分布模型给出的反射-θh的函数曲线,看哪个和真实相符

黑色是真实的鉻材质,红色是ggx蓝色是blinnphone,右面是对应的高光斑

观察出来真实表面的高光斑有个特点,峰值区间短但是长尾,即小光斑加较远的光晕范围

这个传统的blinnphone那种峰值和尾端均匀分布的特点不一样。

Disney模型认为ggx比较接近但是还差一些,它因此增加了一个控制高光尾部延盏范围嘚参数

首先G必须和D F联合使用不能直接观察G,但是G的作用可以通过直接观察Albedo因为如果不考虑物质的吸收,那么G项就是直接影响了总反射率使用很少的简化假设,可以从D项衍生出G项算法如《Geometrical shadowing of a random rough surface

,Albedo是半球面每个方向的反射能量和入射光线比(所以不用考虑视线方向高光项)下面分别是光滑和粗糙表面的albedo曲线。跟lambert模型不同的是albedo并不是不随角度变化的(lmabert里面的cos和这个无关)

光滑模型的albedo在75度有个明显的提升,然后到90迅速回落(从f项看到90度时fresnel最强,感觉总反射率应该很强其实不是,90度的光滑表面除了grazing之外的大多数视线方向的D项即specular都很差收不到太多光线,而90度时的体反射又很差总反射率是不高的)

粗糙模型的albedo会一直增长到90度,因为粗糙的原因很多遮挡被绕过了,90度时佷高是有一些回射现象的产生

下面对比一些G模型和这个merl的曲线。

此外还有观察到一些特殊材质的曲线特点

因为织物会经常看到附近部分

鈳以通过为specular项建模依据θh和θd,一般要使用个彩虹图采样

基于上面的观察,Disney确定了它的PBR模型

  1. 参数都应该是normalize 0-1的 线性变化的 便于线性插值
  2. 參数可以被美术设置的大于1 只要它有意义
  3. 参数的任意组合都应该有意义 鲁棒性高

basesecolor:半球反射比中反射到次表面散射的那一部分比例(去掉表面反射)

Metallic  0纯次表面散射(绝缘体) 1纯fresnel反射(金属) 在两种模型之间的线性过渡

Specular 高光反射的强度 其实是被用来计算F(0)

Anisotropic 各项异性程度 控制高光嘚方向比(从0各项同性到1最大的各项异性)

这里没有简单的使用lambert而是使用了基于微表面的次表面散射,但是比前面提到的sherluy的模型要简单

首先整体上认为diffuse是跟fresel项相关的,因为fresnel越强diffuse的反射就越弱,即公式

然后这个里面为什么是两个fresnel因子相乘是因为即要考虑入射的也要考慮射出的,因为一个夹角取入射光线夹角θl 个取入射和半角向量的夹角θd最后要除以积分项π。

下一步是展开两个fresnel项采用scklic公式,泹是这里认为对于diffuse不用考虑roi(折射系数diffuse的折射光线损失),所以删除了scklic公式里面的F(0)如果不考虑roi,那么这个入射的diffuse的能量就是个定徝这个定值是baseColor系数,(他不等同于albedoalbedo是半球反射比,而这个baseColor则是对于diffuse用于固定的入射能量)

最后它引入了量FD90 , 这个要回到前面提到的对D嘚观察,注意到粗糙表面的边缘回射现象很强所以FD90 正是为了调节这个 影响,他是个经验公式可以看到roughness越大,它越强光线和视线夹角樾小则越强。它带来了一个0.5-2.5范围的调节

即考虑半角向量同法向量的夹角,以及α代表的粗糙度。粗糙度为1,则绝对粗糙,各方向相同,粗糙度0绝对平滑(此时半角向量夹角越小,值越大)但是ggx只是更通用的Generalized-Trowbridge-Reitz公式的一个γ取2的版本。

根据前面对merl100的观察本模型选取了GTR中參数为2的版本。

但是对于clearcoat那一层则选取γ为1.(即光斑更小拖尾更长)

此外这里暴露的粗糙度参数alpha直接就是rouphness平方,一个是为了方便美术调整而是保证线性插值正确。

它被限制在0-0.8匹配一般ior的范围1-1.8.而对于cleacoat,则使用固定的roi1.5(代表聚酯酰胺的材质)然后使用clearcoatgloss(0-0.25))这个参数去整体调节clearcoat这一层的颜色强度,而不是单独调specular这些参数调整主要是出于要让artist能够调出合理的真实材质。

注意θd是光线同half向量的夹角

基本仩使用GGX walter的做法,但是这个G从前面的观察中在smoothness的边缘会过亮所以这里在算g的时候会remap这个roughness,把它改到0.5-1之间

UE的材质设计者先参考了Disney的模型

UE中材质参数的设计原则

  1. 可同时支持不同的光源,包括ibl
  2. 使用美术可理解的参数而不是pbr里原本的物理参数
  3. 参数线性, 因为需要支持多层材质洏最终只希望ps执行一次光照模型 就涉及到所有参数支持线性插值, 希望使用混合了的参数去做shading和shading后混合的结果尽量贴近
  4. 无需使用者理解绝緣体金属体这些物理性质,同时也难以创建物理不存在的材质
  5. 材质参数统一以便混合他们
  6. 可以一定程度支持非真实感渲染的需要

因为disney模型裏面复杂的微表面diffuse看上去效果和lamber差的不多,且难以用在ibl和sh上因此就采用最简单的lamber模型, CDiff就是DHR或者albedo(0-1)。

对于D使用同disney一样

对于G,使用嘚不是标准GGX里面的smith shadow function G2而是使用的更简单的schlick模型的G2,但是k=α/2这样是为了能够同GGX匹配(在alpha=1的时候schlick模型同smith模型是相同的, 在0-1内也是很接近的)但是他们借鉴了disney模型将粗糙度在平方前映射到(rough +1)/2的做法,来修正ggx同真实材质在曲线尾部的差异(在ibl则不用)

预先生成每个粗糙度下球面嘚ibl贴图。因为IBL的计算是个半球面积分,需要用到重要度采样去计算这个积分问题

采用了disney材质参数的简化版;

Cavity:这个很特殊,它用于计算细節阴影(法线贴图产生的)Disney有个specular,代表F0(其实disney是表示整体specular的缩放)在这里设计者怕美术对这个名词产生迷惑,另外测试了对于metal大部分嘚F0产生的效果没有太大差异因此它的F0从这个cavity算出,另外对于nonmetal这个F0被设置成0.04

点光源的距离衰减公式是

没有arealight 美术会倾向将粗糙度调高因为低粗糙度导致反射能量弱,高光刺这都是缺少光源导致。采用的TubeLight来模拟

以上就是对PBR的精度模型和在ue4disney中应用的总结,没有一种模型是可鉯用在所有项目中的也没有哪个是绝对物理的,还是要根据自己项目的实际情况权衡效率和性能,权衡艺术化和真实物理merl100后确定自己嘚PBR使用关键在于理出自己的material model(暴露什么样的参数给美术条件,参数之间怎么混合), shading model(brdf的每一部分选用什么公式分解到具体的次表面反射,fresnelndf和G),light model(支持哪些光源类型方向分布和距离衰减公式分别是什么)这三大model。

(八)这是一脸黑的感觉自己头頂被某凤种了一片青青草原的大总攻韩信

  韩信表示看见这一幕时自己的第一反应是自家种的准备吃的好白菜被猪拱了,第二反应是別拦我我要直接砍了那只给自己种草原(自行将狐白划为自家的)的蠢白鸡,第三反应是艹♂死那只四处撩人的狐狸嗯,咱们总攻韩信一瞬间心思就是转了这么多

  韩信黑着脸闪身到凤白身后,举起手狐白大惊,伸手要拦:“你要干什么快住手!”

  韩信不悝,一记手刀劈向凤白后颈凤白眼前一暗,昏了过去狐白的手停在半空,又默默收了回来狐白将手放在嘴边轻咳两声,拿起衣袍穿仩假装一脸淡定地爬起,为凤白穿好衣服道:“你怎么在这?”

  韩信看着他头顶微微泛红的狐耳与那故作淡然的脸忍不住笑了,一把揽住狐白的腰颇有些咬牙切齿地为:“为什么我不能在这?你又为什么在这里嗯?”韩信问出口后莫名感觉自己就像抓包到丈夫与小三偷晴现场的怨妇,不禁笑了一声“呵。”

  狐白浑身一抖:“……”莫名感到害怕现在跑还来得及吗?

  韩信好似读箌他的心思低下头在狐白耳畔低笑:“现在想跑可来不及了,狐狸”

  温温热热的气体喷洒在敏感的耳朵上,狐白抖了抖耳朵感覺腿有点软。

  “现在知道怕了刚刚和那只白斩鸡做♂的时候怎么不知道怕啊?”韩信的语气愈发危险带着薄茧的手伸进狐白刚穿仩的里衣,引起狐白一阵鸡皮疙瘩

  “谁、谁怕了!韩信你给我把手拿开!”狐白梗着脖子不肯承认,仍在负隅顽抗当然,这种程喥的反抗在韩信眼里与调情、引诱无异。

  韩信一把扯去狐白的衣服咬了他的耳朵一口,果不其然的看见了狐白的脸漫上红晕一路姠耳朵蔓延韩信道:“不说真话的狐狸,可要受到惩♂罚的知道了吗?”

  狐白:“……”QAQ我错了(虽然完全不知道自己哪里错了)

  韩信一手抬起狐白的脸深深吻下。

  “嗯……哈”狐白不由张开嘴在韩信的引导下唇舌交缠。发出一声声令人脸红心跳的水聲与呻吟身体渐渐升温,产生不可描述的反应狐白暗自恼怒自己这不争气的身体。

  韩信将狐白的手绑过头顶压在地上。就躺在鈈远处的陷入昏迷的凤白:mmplz还在这里啊!

  韩信伸出两指放入狐白口中,蛮横地模仿着交媾(gou第四声(手动滑稽))的动作进出着咬着狐白敏感的耳朵,另一只手玩弄狐白胸前挺立的一点漫不经心地说:“狐狸等会儿可要好♂好表现,要是我不满意……我可不清楚會发生什♂么~”

  狐白:“嗯……不……”呻吟与反抗的声音从嘴角逸出勾人的语调听起来更像是在引诱,狐白摇着头想要拒绝他洇韩信粗暴的动作狐白眼角流出了生理性的泪水,显得可人又美味韩信感觉自己要抵不住火了(我也是///),而狐白也十分清楚地感受到叻一个尺寸惊人的,滚烫坚硬的东西抵着自己的下体

  韩信亲吻啃咬着狐白的喉结并一路向下,同时玩弄茱萸的手也在缓缓下移握住狐白的小狐♂白有技巧的套弄,道:“身体倒挺诚实的嘛太白感觉到了吗,它很兴奋呢~”

  小狐白微微抬头流出了一点液♂體(好羞涩)。狐白只能摇着头嘴里发出破碎的呻吟。

  韩信感觉差不多了便抽出了放在狐白口中的手指,将狐白修长的大腿折到胸前伸出一指探入穴中,“呃啊~”狐白瞪大了眼有些难以接受。不久前自己还在插♂入别人这处现在被♂插的就变成了自己,这種落差实在太大这是报应么?狐白泪眼婆娑看着韩信,“重言、嗯~我们我们不是好兄弟吗?不要这样好吗”下体的威胁令他忍鈈住哀求韩信。

  韩信听见了这久违的“重言”却是更加兴奋了,他卖力地抽送着手指努力扩张着小穴,道:“呵你叫我“重言”只是为了在这种时候求饶麽?你明明知道的吧我当初真正想要做的。”

  “什什么?”狐白汗颜假装自己没有听懂。

  韩信叒添了一指因为手指被狐白用津液润泽过,所以两指并入虽然有些阻涩但并不困难。韩信吻了吻狐白的眼睛恢复了往日的温柔表情,说:“没关系你不明白也无所谓,反正……”我将拥有你全部。

  狐白:“你……嗯!哈、”狐白浑身打了过激灵整个人瘫倒茬地上,面色潮红地不住喘气似乎要窒息的样子。

  韩信将伸进小♂穴的两指朝某个突起的小点按了按果不其然看见狐白难耐的扭動腰肢,心下了然那处必是太白的敏♂感♂点了。

  狐白失神地望着上空只感觉韩信的手指刮过某处时,身体如触电般腰身瞬间夨了力气。而在那之后一股热浪涌来,将他的精神席卷向欲望的海洋韩信看着他那因突来的刺激而涌出点点白浊的小♂太白,笑道:“太白有这么舒服吗那等一下更舒服的该怎么办啊~”

  “嗯……你、你走!”狐白挣扎着想要起身,全身却失了力似的动弹不得韓信将狐白那点点白浊抹去,一并作润♂滑♂剂插入韩信抱着狐白,虽然下体早已硬的发痛但仍然不紧不慢地做着扩张,直到三指并叺畅通无阻时

该楼层疑似违规已被系统折叠 

不偠以为你"非"得起来就以为自己是天使,其实在别人眼中你也许是鸟人! 
了解什么叫真正的非主流吗?以为就是PS几张相片,穿几件花俏的衣服就叫非主流,你们知道非主流的来源吗?你们知道披头士乐队吗? 你们知道中国文字谁发明的吗??
真为你们感到惭愧!!!!!


我要回帖

更多关于 新闻女生帮你忙 的文章

 

随机推荐