3月左右,想着把learnopengl 里pbr章节的东西在vk里做一下,vk官方demo也有pbr的基础demo,最后还是从uvSphere生成球结点开始,发现生成的球正常应该两个三角形组成一个球,结果两个三角形一部分重叠了,整个球非常奇怪,最后在查,没记错好像在gamedev里翻到了个正确的算法,很好,开始着色shader,写完了发现结果非常的白,ambient同官方一样却非常的高,相邻sphere,不同金属都和粗糙度的球光照结果非常不正常,第一个想法是会不会法线生成有点问题?把官方demo的geomerty demo里的法线pipeline抄过来,运行,哎?vk debug layer 一直告诉我uniform块在多个阶段定义有问题,问大佬,大佬让我删了再试试,删了后法线依然报。。debug看代码法线第一帧没问题。然后把所有uniform都注释了,还在报错。。绝望的我把项目清理。。莫名其妙又好了,法线终于画出来了,看了下法线没问题啊,又去排查会不会是shader里数据错了?打开renderDoc,进去看vs阶段,MVP、摄像机位置、材质参数都对,到了fs里uniform数据就乱了,检查uniform块fs和vs里定义和顺序都一样啊。。换nsight看看,发现数据没问题。。。又回到开始的,那为什么真么白,突然想到shader里的映射和矫正,会不会是我帧缓冲、展示、交换链里的iamge format有区别?看了下,果然,一个SRGB,一个SNORMAL…改了结果终于正确了,开始看看filament是怎么做pbr的。。
排查bug,从法线到renderdoc,再到nsight,最后居然是交换链image format不同。。
最新推荐文章于 2023-05-06 04:04:25 发布