最近為了實現多光源和多陰影的渲染,把渲染系統改成了多Pass的,對每一個可見光源進行一次光照、ShadowMap和最終陰影的渲染,雖然這樣等于是把整個場景重復渲染了很多次,但為了實現靈活的實時光照系統,這似乎是唯一的辦法了。 但實踐后發現,陰影和光照會隨著骨骼動畫的播放而閃爍,甚至鏡頭的移動也會造成閃爍,究其原因,還是邏輯線程和渲染線程的同步問題,由于對場景內的同一個物體渲染了多次,而邏輯線程又在不停的更新攝像機和骨骼動畫數據,導致了兩Pass渲染取到的數據很可能不一致,造成了光照和陰影的閃爍。 所以共享數據結構必須做一些修改,在多Pass渲染開始前進行一次備份,渲染中只取備份數據,這樣就保證了多次渲染的數據一致性了
也就是加這么兩個簡單的set和get方法,在渲染相關數據讀取時調用get,邏輯相關時調用read
|