最近为了实现多光源和多阴影的渲染,把渲染系统改成了多Pass的,对每一个可见光源进行一次光照、ShadowMap和最终阴影的渲染,虽然这样等于是把整个场景重复渲染了很多次,但为了实现灵活的实时光照系统,这似乎是唯一的办法了。 但实践后发现,阴影和光照会随着骨骼动画的播放而闪烁,甚至镜头的移动也会造成闪烁,究其原因,还是逻辑线程和渲染线程的同步问题,由于对场景内的同一个物体渲染了多次,而逻辑线程又在不停的更新摄像机和骨骼动画数据,导致了两Pass渲染取到的数据很可能不一致,造成了光照和阴影的闪烁。 所以共享数据结构必须做一些修改,在多Pass渲染开始前进行一次备份,渲染中只取备份数据,这样就保证了多次渲染的数据一致性了
也就是加这么两个简单的set和get方法,在渲染相关数据读取时调用get,逻辑相关时调用read
|