法線對映我也是剛學會的,呵呵
輸入到固定渲染管線的頂點結構雖然可以定製,但也不是完全自由的,比如頂點位置必須是float3,紋理座標float2,法線float3等等。如果使用可程式設計管線,由於vs的輸入可以自由解析,所以相對來說就增加了很多靈活性。
在使用切線空間的法線對映(normalmap)時,一般來說頂點資料中除了法線向量外還需要加入tangent向量和binormal向量資訊,以便在vs中計算切線空間變換矩陣。其中tangent是切平面上紋理座標u的正方向,binormal是切平面上紋理座標v的正方向。normal,tangent和binormal三者互相垂直,構成了切線空間座標系,於是切線空間到世界空間的變換矩陣就是 float3x3( tangent, binormal, normal )
法線對映的實現一般來說有兩種:
1。在vertex shader中計算出切線空間變換矩陣(如上文所述),並將該矩陣輸出。在pixel shader中用得到的矩陣將法線圖中取樣得到的切線空間的法向量變換到世界空間,然後再進行後續的光照計算。
2。同樣在vertex shader中計算出切線變換矩陣,但不輸出,而是在vs中將光線方向逆向變換到切線空間,將切線空間的光線方向輸出。在ps中所有的計算都在切線空間進行。
上述兩種方法本人都試過,得到的畫面有些微差異,但很難說哪一種是「正確」的,因為都涉及到象素對頂點資訊的插值,只不過乙個是對矩陣的插值,乙個是對向量的插值。但是從效率上考慮,一般來說ps的壓力會比vs大,而第二種方法把乙個向量/矩陣乘法從ps端提前到了vs端,所以速度會更快一些。要注意的是如果採用第二種方法並且需要實現基於法線對映的高光的話,視線向量也必須在vs中轉換到切線空間並輸出到ps。
另外,由於normal,tangent和binormal是正交的,實際上三者中的任何乙個都可以通過另外兩個向量的叉乘得到,所以實際上頂點資料只需要提供normal和tangent,binormal可以在vs中通過計算得到。這樣能節省寶貴的視訊記憶體頻寬,而顯示卡瓶頸一般會在ps,vs中增加一些計算不會降低幀率(不要相信我,自己去試驗一下^^)
現在計算一下頂點結構大小。頂點座標float3,紋理座標float2,法線向量float3,tangent向量float3,一共要44個位元組。如果要節省的話,實際上normal和tangent向量可以從float3壓縮到byte3,當然顯示卡不會支援byte3這種格式,浪費乙個位元組就dword(也就是color)吧,這樣頂點結構就一下減到28位元組了。有些情況下這是很有意義的,在處理象地形這種包含大量頂點並且需要每幀生成頂點緩衝的情況下,縮減頂點結構大小就意味著節省大量記憶體,減小cpu複製頂點的開銷,減小視訊記憶體頻寬的占用真是一舉數得嘿嘿……當然,代價是降低了切線空間的精度,但是考慮到最多會引入1/256的誤差,而且本來法線圖的精度也只有0~255(單分量),而且還經過了象素插值,最終的畫面對比用肉眼幾乎看不出差別。
還有更厲害的。如果正好是用在地形渲染,並且一次渲染的地形塊尺寸小於256(均勻網格的情況下),甚至頂點位置和紋理座標也可以壓縮,能再節省12個位元組!宣告一下這個我還沒有試過是否真正可行,不知道是否允許pos不是float3的。。。
再次抱歉,沒有圖
mysql的基本原理 Mysql 基本原理
mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...
pwm控制的基本原理 PWM控制的基本原理
pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...
彩信的基本原理
1 基本概念 8613 mmsc bj rsv.monternet.com 最新更新若干問題 彩信常見問題簡答 手機關機或不在服務區影響彩信的接收嗎?答 手機關機或不在服務區時是無法接收彩信的,但彩信會在系統中保留24小時,一旦開機或進入網路服務區,彩信手機仍然可以正常接收到彩信。如果手機在10分鐘...