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