如何由Height Map生成Normal Map

2021-07-05 18:57:21 字數 1004 閱讀 4163

其實並不難,

在《3d

遊戲與計算機圖形學方法》中,提供了一種由高度圖生成法向圖的方法。其思想是根據高度圖中的象素與其周圍象素的高度差,在切空間構造s

向量和t

向量,由sxt

得到法線向量。

設h(i,j)

表示在height map

上(i,j)

象素點的高度值,則在切線空間s

和t方向的切向量可以表示成:

s(i,j) = (1,0,h(i+1,j) - h(i-1,j) )

t(i,j) = (0,1,h(i,j+1) - h(i,j-1) )

normal(i,j) = s(i,j) x t(i,j)

h(i+1,j) – h(i-1,j)

為沿s方向的高度差,也就是s

方向的坡度,h(i,j+1) - h(i,j-1)

為沿t方向的高度差,也就是t

方向的坡度。當相鄰象素高度差為0

時,則算出的normal(i,j) = (0,0,1)

,表示法線垂直於平面,當有高度差時,法線就會分別朝s

方向或t

方向偏移。

用shader

來實現也很簡單,vs

和ps**如下,上邊左圖為heightmap,右圖為由下面shader生成的normalmap,這個方法生成的normalmap並不夠好,在rendermonkey中有乙個叫normalmapfilter的sample,會生成更高質理的normalmap,有興趣的朋友可以參考。

vs_output main(float4 pos: position)

float4 main(float2 texcoord: texcoord) : color

由PowerDesigner物理模型生成sql語句

tools execute commands edit run script 在開啟的視窗中 past 下面的 option explicit validationmode true interactivemode im batch dim mdl the current model get the...

如何由XSD自動生成XML和實體類

專案中有時候要用xml作為資料來源,因此需要定義xml檔案和相應的類,最佳方法是首先定義xsd,然後自動生成實體類,最後生成xml和填充資料 讀取xml資料來源的時候,首先用xsd驗證xml資料格式,然後自動讀入實體類使用。自動讀取xml資料到實體類 xmlserializer xs new xml...

由AE到生成模型VAE

vae variational autoencoder 變分自編碼器 1 ae vae 2 vae以及損失函式 學習不僅僅在於學習本身,還有創新,深度學習也一樣,不僅在於其強大的學習能力,更在於它的創新能力。所以,我們將模型分為兩類,一類是判別模型,一類是生成模型。所謂判別模型,通常是利用訓練樣本來...