概念理解
- BRDF,雙向反射分布函數(shù)。大致就是在給定表面點(diǎn)上,輸入入射向量和出射向量,算出出射輻射率和入射輻照度的比率。
-
,這樣定義能夠配平渲染方程。
-
資料
- 匯總講解PBR https://www.cnblogs.com/timlly/p/10631718.html
- 非常棒,文末還介紹了一些工具。
- 講了0.04的使用,提到一個(gè)基于物理的Blinn-Phong。https://zhuanlan.zhihu.com/p/21961722
- 補(bǔ)充閱讀(很多被第一篇引用了)
- LearnOpenGL的PBR章節(jié)【非常適合全部讀一遍】
- 分析了BRDF怎么推導(dǎo)的 https://zhuanlan.zhihu.com/p/21376124
- 講了很多數(shù)學(xué)理論 https://blog.selfshadow.com/publications/s2013-shading-course/hoffman/s2013_pbs_physics_math_notes.pdf
- 一些數(shù)學(xué)公式 http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
- Unreal 的實(shí)現(xiàn) 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原理實(shí)現(xiàn)以及對LightProbe數(shù)據(jù)的修改 https://www.cnblogs.com/murongxiaopifu/p/8997720.html
- Unity custom shader中調(diào)用內(nèi)置Lightmap和Light Probes http://www.itdecent.cn/p/6dfe403f75f6
Unity
- 如何在Unity中造一個(gè)PBR Shader輪子 https://zhuanlan.zhihu.com/p/68025039
- 擴(kuò)張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 同時(shí)包含絕緣體的漫反射顏色和導(dǎo)體的反射率(鏡面反射)(base color 用的sRGB的方式存儲的)
- Metal map 用起來像一個(gè)黑白二分圖,黑色絕緣體(非金屬),白色導(dǎo)體(金屬)
- 只是像,因?yàn)檫€有半導(dǎo)體來著。
- 當(dāng)metal gray value 低于 235 sRGB 時(shí),需要降低base color對應(yīng)的反射率
- 絕緣體也有4%的反射率,這個(gè)0.04可以寫死在shader里,
- 具體實(shí)現(xiàn)應(yīng)該是類似這個(gè)優(yōu)化:https://zhuanlan.zhihu.com/p/21961722
diffuse = albedo * (1 - metalness)specular = lerp(0.04, albedo, metalness)
- Substatance提供了一個(gè) SpecularLevel 來控制絕緣體的反射率,
- 只是像,因?yàn)檫€有半導(dǎo)體來著。
- roughness tex 粗糙度貼圖,1是最粗糙
- 優(yōu)點(diǎn):使用廣泛,不容易弄錯(cuò)絕緣體的反射率(多數(shù)情況下寫死0.04),紋理內(nèi)存用的少。
- 缺點(diǎn):不能控制絕緣體的反射率,邊緣副作用更加明顯。
- Specular/glossiness
- diffuse map 顏色貼圖,金屬部分顏色是黑色(只有高光顏色沒有反射顏色)
- specular map 反射率貼圖,非金屬也有單獨(dú)的反射率設(shè)置,而不是定死0.04
- glossiness map 光澤度貼圖,1是最光滑
- 優(yōu)點(diǎn):邊緣副作用不明顯,可以控制非金屬的反射率
- 缺點(diǎn):容易搞錯(cuò)非金屬的反射率導(dǎo)致光照過亮,紋理內(nèi)存用的多,據(jù)說是用起來更麻煩。
- 兩種worlflow公共的部分
- Normal map 法線貼圖,豐富光照細(xì)節(jié)
- AO(ambient occlusion) map 主要作用于環(huán)境光,乘法運(yùn)算
- Height map 可以做一些視差效果,最好是用低精度的模糊高度圖,細(xì)節(jié)部分讓normal map 控制
- 一般不真的移動(dòng)頂點(diǎn),意味著邊緣部分還是原來的幾何邊緣。但是可以做到移動(dòng)頂點(diǎn)。
- 其他
- 按理來說粗糙度和光澤度應(yīng)該也可以是公共的。
- 其他
- 反射率分布:金屬70%-100%,大部分非金屬2%-5%,有效范圍0%-8%
- 副作用
- 金屬會有白色邊緣,原因是紋理插值導(dǎo)致的,Metal workflow的albedo的金屬區(qū)域是白色的(鏡面反射率靠近1)。
- Specular worlflow 金屬會有黑色邊緣,但是感官不明顯。
- 提高紋理像素密度能減輕這個(gè)問題。
- 金屬會有白色邊緣,原因是紋理插值導(dǎo)致的,Metal workflow的albedo的金屬區(qū)域是白色的(鏡面反射率靠近1)。
- Unity 的兩種物理shader standard + standard(specular setup)
- https://docs.unity3d.com/Manual/StandardShaderMetallicVsSpecular.html
- 大致和substance的兩種工作流對應(yīng)
- 額外的貼圖,相對于上面 subtance
- Emission map 自發(fā)光貼圖
- Unity 提供了第二套貼圖
- 目的是當(dāng)鏡頭靠近時(shí)有更多的細(xì)節(jié),有些像lod。一般是縮小重復(fù)平鋪
- 可以用于:皮膚毛孔
- Second Normal Map 提供更細(xì)力度的法線信息,
- Second albedo map
- 目的是當(dāng)鏡頭靠近時(shí)有更多的細(xì)節(jié),有些像lod。一般是縮小重復(fù)平鋪
- Unity一個(gè)簡單的設(shè)計(jì)參照表格
- Substance與PBR工作流總結(jié):https://blog.csdn.net/linuxheik/article/details/81914184
- 比較簡單。