作為3d兩年多來的乙個分界線吧,所以寫了,不管懂與不懂的,內行或許一眼看出點東西,外行的就別浪費時間了。後面的工作將花點時間分析下延遲等,整理下思路,就全部code出來吧(ps:過完年就轉遊戲這行去吧(但又能去哪呢?))~
前段時間分析alexander zaprjagaev 早期開源的那渲染**,裡面的實時光照效果確實不錯(我的老電腦才跑7+幀,現在的跑了200幀。),一直不明白是怎麼回事,直到進入現在的公司之後,靜下心來,從外掛程式到bsp+port,然後是光線追蹤,輻射度光照(cs的光照預處理),到最後整了段時間物理引擎(沒大學物理基礎,所以暫時放了放),最後分析了這個的實時光照。
在這裡所採用的陰影效果和我們普通的體積陰影有點點差別,他採用相反的方式,即通過模板的地方才進行光照,這樣未被光照到的地方就產生了陰影。
我們很清楚,體積陰影方法有兩種,用z-pass的話,會出現人在陰影體的時候模板值生成不正確,而採用z-failed的方法則有另外個問題(在bsp場景中,正面是向裡的,當燈光通過port射出去,這時候的陰影體是反向的,這個時候用z-failed的話,陰影體是無法封底的,所以***x)。
而alexander zaprjagaev 採用的是用z-pass,通過計算在多少重陰影體內,然後確定穿過了多少重陰影體才到達光照的地方。在下面我就介紹下他的整個渲染流程。
if(bsp) bsp->render();通過呼叫他完成了深度的寫入和環境光照的寫入(此時因為活動燈光數為0,所以採用了ambient shader渲染)。
接下來是render_light();整個過程關閉了深度寫進行光照的渲染,所有的動態燈光照是在此時渲染上去的,他對每個一燈光渲染一次,然後對目標進行1:1累加的混合進去,此時候我們看到他採用了只輸出深度值的渲染陰影體(只寫深度比普通渲染的2-8倍--看延遲的時候這麼說的),同時注意stencil_value這個東西,他是計算穿透多少陰影來決定的,用來作為最後決定模板值為多少才做ps。可以去認真分析下stencil_value的計算過程,你會發現挺有意思的。我們這裡同時要注意個地方,他這個渲染燈光的時候採用的深度測試是等於才通過,認真想想我們前面用環境光照渲染的時候已經有深度了,所以只有等於這個深度的地方才用得著渲染,這個可以剔除n多無謂的複雜ps計算,整個的至少渲染場景次數為(可見燈光數+1)次,或許只有在室內的場景中才能夠跑起來。
就囉嗦這麼多,到此為止除了物理那塊,這整個算是都熟悉了怎麼回事,要碼出**來也是很簡單的事情(ps:人家多少年前的水平,我直到現在才有所挨到邊,真的是人比人,累死人)。
還有兩個月,補物理力學吧,所有的一切為了進入次時代遊戲的開發,路真的很遠~
最後廢話一句,其實他的渲染就是卡馬克提到的用於doom3 的z pre-pass 光照渲染方式。不過好像效率兩者間差別滿大的(我以前的老電腦都可以玩doom3,而他才7+幀)。。。
Unreal 光照單位與基於物理的燈光
醜話說在前面,基於物理的燈光引數有沒有用呢?看如何對待,如果我只要效果,你如何進行燈光的調節只要最後好看,就沒有問題 但是如果我們想要乙個能夠復用的燈光資源庫,這就是乙個非常好的一種方法。現在來說等白嫖 別人把理論研究清楚,因為現在還沒有基於這種做法而商業成功的專案 而不是自己去研究是乙個非常務實的...
軒轅展覽 企業展廳設計,燈光照明如何設計
一 營造舒適的參觀環境和洽談氛圍 舒適的照明會增加參觀者的停留時長,使得參觀者能夠仔細全面的了解展品,從中找到更多的細節,並以此找到契合自身的購買理由。企業展廳設計在通常情況下,商業展示的空間以通透的照明為主,空間顯得寬敞明亮,展品清晰可見。二 照明燈位層次分明 結合商業展示功能的需要,可以調整燈光...
Lightmap與動態光照的實時切換
hello,我是kitstar。以下文章整理的不對。還請見諒。在專案中,常常因為效率與顯示效果的多方面考慮,來選擇是使用lightmap 還是 動態光照。在頁遊和微端遊戲中,還要考慮遊戲資源包的大小。怎麼找到乙個平衡?由此想到乙個解決方案,根據使用者配置,決定,使用動態光照還是lightmap。2....