做網(wǎng)站需要哪些審核廣州seo效果
1.前言
????????前面幾篇關(guān)于光柵化的文章中介紹了如何計(jì)算物體表面的光照,但是著色并不會(huì)進(jìn)行陰影的計(jì)算,陰影需要單獨(dú)進(jìn)行處理,目前最常用的陰影計(jì)算技術(shù)之一就是Shadow Mapping技術(shù),也就是俗稱(chēng)的陰影映射技術(shù)。
2.陰影映射
????????Shadow Mapping是一種圖像空間的算法。所謂圖像空間就是使用Shadow Mapping在生成陰影的這一步,是不需要考慮場(chǎng)景中幾何信息的。Shadow Mapping還會(huì)產(chǎn)生走樣現(xiàn)象。
????????Shadow Mapping最重要的核心思想是:不在陰影中的點(diǎn)必須同時(shí)被光線(xiàn)和相機(jī)看到。
2.1 陰影映射過(guò)程
? ? ? ? 1.先從光源看向場(chǎng)景,得到深度圖。如下圖所示,在一個(gè)點(diǎn)光源位置上放一個(gè)虛擬的相機(jī)看向場(chǎng)景,做一遍光柵化得到光源能看到的圖,這張圖不需要著色,只需要把深度記錄下來(lái)即可,此時(shí)得到的這個(gè)深度圖即為Shadow Map。
? ? ? ? 2.從相機(jī)視角渲染場(chǎng)景,得到對(duì)應(yīng)深度圖對(duì)應(yīng)深度值。如下圖所示,從相機(jī)視角渲染場(chǎng)景,將所有相機(jī)視角可見(jiàn)的點(diǎn),利用光源視角下的那一套投影矩陣的逆矩陣,將坐標(biāo)從世界坐標(biāo)轉(zhuǎn)換到光源視角的空間坐標(biāo),得到光源視角下的深度值,并找到在深度圖上對(duì)應(yīng)的深度值。
????????如果該點(diǎn)投影回光源視角的實(shí)際深度值不大于在深度圖上對(duì)應(yīng)的深度值(注意這里的深度值是浮點(diǎn)數(shù),因?yàn)榫葐?wèn)題難以比較兩個(gè)值相等),則說(shuō)明此點(diǎn)可被光源照射,因此不在陰影中,如上圖黃色線(xiàn)的這種情況。
????????如果該點(diǎn)投影回光源視角的實(shí)際深度值大于在深度圖上對(duì)應(yīng)的深度值,則說(shuō)明該點(diǎn)前方有物體遮擋,因此在陰影中,如上圖紅色線(xiàn)這種情況。
? ? ? ? 這樣就能判斷哪些像素在陰影中了。下面舉一個(gè)例子,如下圖所示,是一個(gè)生成了陰影的場(chǎng)景。
? ? ? ? 先來(lái)比較有陰影和無(wú)陰影的區(qū)別,如下圖所示。
? ? ? ? 從光線(xiàn)角度看生成的Shadow Map如下圖所示。距離光源越近代表深度越小,所以顏色越黑,反之亦然。
? ? ? ? 將相機(jī)視角方向渲染的投影到光源視角,通過(guò)深度圖得到對(duì)應(yīng)的深度值。如下圖所示,球上對(duì)應(yīng)的陰影信息看起來(lái)很臟,那是因?yàn)榕袛喔↑c(diǎn)數(shù)相等是很難的,只能判斷大于。還會(huì)存在精度和走樣的問(wèn)題。
2.2 Shadow Map的問(wèn)題
? ? ? ? 1.Shadow Map只能產(chǎn)生硬陰影(Hard Shadows)。雖然有其他辦法可以用來(lái)生成軟陰影(Soft Shadows),但是理論上只用來(lái)生成硬陰影,只適用于沒(méi)有體積的點(diǎn)光源。
????????軟硬陰影區(qū)別示意如下,上方棱角分明為硬陰影,下方為軟陰影。軟陰影效果更加真實(shí)。
????????產(chǎn)生這種問(wèn)題的原因是因?yàn)楣庠淳哂畜w積,導(dǎo)致有的地方完全看不到光源(本影, Umbra),有的地方能看到一部分光源(半影,Penumbra)。所以陰影的邊緣在本影與半影之間會(huì)有過(guò)渡的情況,從而產(chǎn)生軟陰影現(xiàn)象,就像上圖中太陽(yáng)與地球的角度導(dǎo)致的日食現(xiàn)象一樣。所以點(diǎn)光源也無(wú)法產(chǎn)生軟陰影,因?yàn)辄c(diǎn)光源沒(méi)有體積大小。
? ? ? ? 2.陰影質(zhì)量取決于Shadow Map的分辨率。分辨率越高性能消耗也更多。
? ? ? ? 3.涉及相等比較的浮點(diǎn)深度值意味著尺度、偏差、容差等問(wèn)題。