debug过程。先使用RenderDoc抓帧,
先在左侧的Event Browser找到一个用于分析的glDrawElements,然后在Texture viewer窗口里右键像素,右下角的Pixel Context就会取到对应颜色(图中模型马赛克处理)。点击右下角的History会出现窗口
,图中的EID 284执行后RGB异常,Tex After里的RGB都变成了0.00,而我点击一个正确渲染的像素则不是全0。
然后打开Pipeline State窗口,选择FS(因为是OpenGL渲染),然后能点击Edit编译Shader。RenderDoc能汇总执行的shader生成一个main.glsl,RnederDoc可以直接编辑shader代码并应用。抓了正常和非正常的两帧,查看Pipline State里的FS窗口,对比后发现Teature绑定的贴图不同,修改Shader去掉AO的因素影响后模型上的黑影消失,相比正常的模型偏亮。
最后排查出问题的原因。没有添加AO贴图,但模型的材质使用了AO,导致AO绑定的贴图是之前的残留。相机移动重新计算AO,导致了模型有时会变暗的问题。
解决方法:出问题的模型是因为使用的需要AO贴图的材质但没有AO,换不用AO的材质或者给那些模型加上AO。