概念理解
- BRDF,双向反射分布函数。大致就是在给定表面点上,输入入射向量和出射向量,算出出射辐射率和入射辐照度的比率。
- ,这样定义能够配平渲染方程。
资料
- 汇总讲解PBR https://www.cnblogs.com/timlly/p/10631718.html
- 非常棒,文末还介绍了一些工具。
- 讲了0.04的使用,提到一个基于物理的Blinn-Phong。https://zhuanlan.zhihu.com/p/21961722
- 补充阅读(很多被第一篇引用了)
- LearnOpenGL的PBR章节【非常适合全部读一遍】
- 分析了BRDF怎么推导的 https://zhuanlan.zhihu.com/p/21376124
- 讲了很多数学理论 https://blog.selfshadow.com/publications/s2013-shading-course/hoffman/s2013_pbs_physics_math_notes.pdf
- 一些数学公式 http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
- Unreal 的实现 https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf
- CSDN 上 idovelemon 的blog,也挺有用的,主要讲了IBL(基于图像的光照)
- Disney PBR https://blog.csdn.net/poem_qianmo/article/details/88936992
球谐光照&光照探针方面的资料
- Stupid Spherical Harmonics Tricks http://twvideo01.ubm-us.net/o1/vault/gdc08/slides/S6469i1.pdf
- Spherical Harmonic Lighting: The Gritty Details http://silviojemma.com/public/papers/lighting/spherical-harmonic-lighting.pdf
- Unity的具体使用
- LightProbe原理实现以及对LightProbe数据的修改 https://www.cnblogs.com/murongxiaopifu/p/8997720.html
- Unity custom shader中调用内置Lightmap和Light Probes https://www.jianshu.com/p/6dfe403f75f6
Unity
- 如何在Unity中造一个PBR Shader轮子 https://zhuanlan.zhihu.com/p/68025039
- 扩张Unity PBR https://blog.uwa4d.com/archives/USparkle_PBR.html
- 作者github https://github.com/chenyong2github
PBR工作流(SubStance+Unity)
- SubStance 用的 GGX BRDF,有两套workflow
- https://academy.substance3d.com/courses/the-pbr-guide-part-2
- Metal/roughness
- base color tex 叫做 albedo 同时包含绝缘体的漫反射颜色和导体的反射率(镜面反射)(base color 用的sRGB的方式存储的)
- Metal map 用起来像一个黑白二分图,黑色绝缘体(非金属),白色导体(金属)
- 只是像,因为还有半导体来着。
- 当metal gray value 低于 235 sRGB 时,需要降低base color对应的反射率
- 绝缘体也有4%的反射率,这个0.04可以写死在shader里,
- 具体实现应该是类似这个优化:https://zhuanlan.zhihu.com/p/21961722
diffuse = albedo * (1 - metalness)
specular = lerp(0.04, albedo, metalness)
- Substatance提供了一个 SpecularLevel 来控制绝缘体的反射率,
- 只是像,因为还有半导体来着。
- roughness tex 粗糙度贴图,1是最粗糙
- 优点:使用广泛,不容易弄错绝缘体的反射率(多数情况下写死0.04),纹理内存用的少。
- 缺点:不能控制绝缘体的反射率,边缘副作用更加明显。
- Specular/glossiness
- diffuse map 颜色贴图,金属部分颜色是黑色(只有高光颜色没有反射颜色)
- specular map 反射率贴图,非金属也有单独的反射率设置,而不是定死0.04
- glossiness map 光泽度贴图,1是最光滑
- 优点:边缘副作用不明显,可以控制非金属的反射率
- 缺点:容易搞错非金属的反射率导致光照过亮,纹理内存用的多,据说是用起来更麻烦。
- 两种worlflow公共的部分
- Normal map 法线贴图,丰富光照细节
- AO(ambient occlusion) map 主要作用于环境光,乘法运算
- Height map 可以做一些视差效果,最好是用低精度的模糊高度图,细节部分让normal map 控制
- 一般不真的移动顶点,意味着边缘部分还是原来的几何边缘。但是可以做到移动顶点。
- 其他
- 按理来说粗糙度和光泽度应该也可以是公共的。
- 其他
- 反射率分布:金属70%-100%,大部分非金属2%-5%,有效范围0%-8%
- 副作用
- 金属会有白色边缘,原因是纹理插值导致的,Metal workflow的albedo的金属区域是白色的(镜面反射率靠近1)。
- Specular worlflow 金属会有黑色边缘,但是感官不明显。
- 提高纹理像素密度能减轻这个问题。
- 金属会有白色边缘,原因是纹理插值导致的,Metal workflow的albedo的金属区域是白色的(镜面反射率靠近1)。
- Unity 的两种物理shader standard + standard(specular setup)
- https://docs.unity3d.com/Manual/StandardShaderMetallicVsSpecular.html
- 大致和substance的两种工作流对应
- 额外的贴图,相对于上面 subtance
- Emission map 自发光贴图
- Unity 提供了第二套贴图
- 目的是当镜头靠近时有更多的细节,有些像lod。一般是缩小重复平铺
- 可以用于:皮肤毛孔
- Second Normal Map 提供更细力度的法线信息,
- Second albedo map
- 目的是当镜头靠近时有更多的细节,有些像lod。一般是缩小重复平铺
- Unity一个简单的设计参照表格
- Substance与PBR工作流总结:https://blog.csdn.net/linuxheik/article/details/81914184
- 比较简单。
网友评论