【笔记】PBR,BRDF总结

bsdf = brdf + btdf

brdf:用于描述光(辐射能量)在两个物体交界处怎么反射、怎么折射
这个定律的前提是两个表面是光学光滑的,而现实世界中基本不存在这样的表面,所以又搞出来个微表面理论
蒙特卡洛路径追踪:就是计算漫反射的。
pbr就是物理光照建模,然后合理的数学解法
D为法线分布函数(NDF)
F为反射函数(Fresnel 函数)
G为阴影遮罩函数(几何函数),未被shadow或mask的比例

Unity采用pbr材质其实有多种选择的;
1.Standard Shader:建议只作为参考,实际用效率不高,pass太多、变体有三万多、内存占用太大、编译打包时间长、pbr部分可选的宏开关不多,主要是BRDF1-3,得大改才行。
2.shaderforge:pbr写法倒是简单的多,F是5次方的schlick近似、D是GGX,G是SmithJointGGXVisibilityTerm,而漫反射是disney diffuse,也支持lightmap和光泽反射,当然shaderforge本身也有多余代码,要手动处理。
3.Alloy:是一整套pbr框架,brdf部分采用的公式也都是优化的,比如基于LH优化GGX(参考http://filmicworlds.com/blog/optimizing-ggx-shaders-with-dotlh/)、Sebastien Lagarde's cheap Environment BRDF、Brent Burley's diffuse scattering BRDF等,接口方式有点像jquery(比喻不一定恰当),一个函数用完传到下一个函数,使用也挺方便的。
4.Uber shader:基于Unity standard修改的,尤其以POM、散射、glitter等为卖点,比如雪、冰块、蜡烛、皮肤等在自带的demo中看起来是不错的。
5.Amplify shader Editor:这其实和shaderforge一样是个shader编辑器,不同之处主要生成surface shader,而不是vertex shader、pixel shader,用于pbr也很方便,还有它是开放源码的,编辑器很容易扩展,发展挺快,Unity大会都推荐了,而且价格比shaderforge便宜多了。另外这家开发商的其他插件也不错,比如用于扫描材质的Amplify texture、用于色彩分离的Amplify Color、用于运动模糊的Amplify Motion等。


https://juejin.im/post/5e55f0436fb9a07cc747408d
基于精确的计算公式,使得pbr材质在任何光照下都是结果正确的
遵循各种物理原理
    能量守恒(也就是物体反射出去的光量不可能超过所接收的光量):反射光 + 折射光 ≤ 入射光
    Fresnel反射(所有表面反射在掠射角(grazing angles)处更加强烈)
    物体表面是如何自我遮挡等原理
1、金属工作流:(不易出错,省内存,但是白边现象更明显),
    1.1 Base Color :( RGB-sRGB ) 包含信息:绝缘体,反射颜色。金属,反射率。最亮色不应超越 240RGB ;最暗色应在 30-50RBG 之间;Base Color 不要包含其他光照信息,比如 Amblient Occlusion ;金属反射率应该在 70%-100% 之间。也就是RGB 范围在 180-255 。
    1.2 Matallic Map :( Grayscale-Linear ):描述哪些区域是金属,那些是绝缘体。1 表示纯金属,0 表示绝缘体。如果Matalic Map 的灰度值低于 235 ,那么对应的 BaseColor 的反射率也应该降低一些。
    1.3 Roughness Map :( Grayscale-Linear ):描述表面引起光纤漫反射的不规则程度。这将改变光纤的方向,但是不会改变光线的强度。光滑表面会有小而亮的高光,而粗糙表面将会出现大而暗淡的高光。在这个灰度图里面, 0 代表光滑表面,而 1 代表粗糙表面。Roughness Map 是一个“有故事”的贴图,它会告诉你这个表面经历过那些严酷(或者平和)的环境。而公用的贴图为环境光吸收,法线和高度贴图。
2、Specular工作流
     2.1 Diffuse :( RGB-sRGB ):包含 Albedo Color ,但是不包含任何反射率信息。纯金属为黑色,因为纯金属没有颜色,油漆和锈迹是需要带有颜色的。基础颜色应不包含光照信息,除了 Micro-Occlusion。黑色不应低于 30-50sRGB ,亮色不应高于 240sRGB。
     2.2 Specular:( RGB-sRGB ):灰度值,表示非金属 F0 。RGB 值,表示金属吸收的不同波长的光线这种贴图允许使用不同的 F0 值来表现非金属。
     2.3 Glossiness:与 Roughness 相反, 0 代表粗糙表面,而 1 代表光滑表面
3、Ambient Occlusion :表示有多少环境光,可以被表面上的一个点吸收。AO 应该只影响 Diffuse 部分,而不应该阻塞Specular部分。
4、Height Map:用于视差映射,通过增加可见的深度感来提高渲染的真实性。
5、Normal Map:不论PBR还是非PBR

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值