1. 程式人生 > >知識點3 shader_基礎紋理

知識點3 shader_基礎紋理

逆矩陣 變換 要求 視角 位置 頂點 under 正是 方向

在美術人員建模的時候,通常會在建模軟件中利用紋理展開技術把紋理映射坐標存儲在每個頂點上。紋理映射坐標定義了該頂點在紋理中對應的2D坐標。通常,這些坐標使用一個二維坐標(u,v)來表示,其中u是橫向坐標,而v是縱向坐標。因此,紋理映射坐標也被稱為UV坐標。

1. 單張映射

2. 凹凸映射

凹凸映射的目的是使用一張紋理來修改模型表面的法線,以便為模型提供更多的細節。這種方法不會真的改變模型的頂點位置,只是讓模型看起來好像是“凹凸不平”的,但可以從模型的輪廓處看出“破綻”。

2_1.在切線空間下計算

在切線空間下計算光照模型。基本思路是:在片元著色器中通過紋理采樣得到切線空間下的法線,然後再與切線空間下的視角方向、光照方向扥進行計算,得到最終的光照結果。為此,我們首先需要在頂點著色器中把視角方向和光照方向從模型空間變換到切線空間中,即我們需要知道從模型空間到切線空間的變換矩陣。這個變換矩陣的逆矩陣,即從切線空間到模型空間的變換矩陣是非常容易求得的,即我們再頂點著色器中按切線(x軸)、副切線(y軸)、法線(z軸)的順序按列排列即可得到。我們已經知道,如果一個變換中僅存在平移和旋轉變換,那麽這個變換的逆矩陣就等於它的轉置矩陣,而從切線空間到模型空間的變換正是符合這樣要求的變換。因此,從模型空間到切線空間的變換矩陣就是從切線空間到模型空間的變換矩陣的轉置矩陣,我們把切線(x軸)、副切線(y軸)、法線(z軸)的順序按行排列即可得到。

2_2.在世界空間下計算

在世界空間下計算光照模型。我們需要在片元著色器中把法線方向從切線空間變換到世界空間下。這種方法的基本思想是:在頂點著色器中計算從切線空間到世界空間的變換矩陣,並把它傳遞給片元著色器。變換矩陣的計算可以由頂點的切線、副切線和法線在世界空間下的表示來得到。最後,我們只需要在片元著色中把法線紋理中的法線方向從切線空間變換到世界空間下即可。盡管這種方法需要更多的計算,但在需要使用Cubemap進行環境映射等情況下,我們就需要使用這種方法。

3. 漸變紋理

知識點3 shader_基礎紋理