2017-05-10 29 views
1

heightmap中的單個像素/值僅爲您提供高度不同的頂點的2D網格,因此您必須將它們與四邊形連接起來。如果一個四邊形的所有4個頂點都是共面的,那麼這很容易,但是當它們不是時,您需要一些分割規則。一種方法是選擇較短/較長的邊緣,另一種使用較高的邊緣,等等......另一個我發現的作品是計算四個中心頂點(所有4個高度的平均值),儘管這使得數量增加了一倍三角形遠不是最優的。正確的方法來分裂四邊形由高度圖製成的地形?

拆分四邊形的正確方法是什麼?還是有替代四邊形?

回答

1

一般規則是分割應該與局部表面曲率捲曲對齊。對於高斯曲率爲0的平面(平面,圓柱體),簡單的對角線分割適用,但對於非零高斯曲率,推薦使用中點細分分割細化。

1

我根本不會使用四邊形。對於實際的地形高度圖,高度永遠不會是共面的,並且GPU不喜歡四邊形到三角形,事實上,它會內部將四邊形分成兩個三角形。

但是,我不會在乎分裂規則。從我在地形渲染器中工作的經驗來看,您可以做的最好的事情之一是創建一個小的二維三角形網格拼貼(如128x128頂點),並根據需要重複多次,每個拼貼一個高度貼圖作爲紋理傳遞。

重複相同的2D瓦片而不是更典型的3D網格的原因是內存使用和內存帶寬會減少很多,因爲如果使用3D網格,您可能需要3xFP32值(每個頂點)這將被填充到4xFP32(128位),但如果您使用我的二維平鋪方法,您只需要2xU8(16位)+ 1xFP16(16位)= 32位。這是4倍的內存帶寬減少,內存使用率會更好:內存使用量減少8倍。請記住,除非你有一個非常複雜的片段着色器(對於地形渲染器來說不太可能),否則在大多數GPU中你都將成爲內存帶寬的瓶頸。

將此與四叉樹(用於LOD)和法線貼圖相結合,您將獲得非常好的質量/性能比。

+0

這樣的二維三角網格是如何工作的?你能提供/鏈接到一個例子嗎?另外,當我說quad時,我的意思是一對形成四邊形的兩個三角形,即我在CPU上進行四邊形分割並使用「GL_TRIANGLES」進行渲染。 – Wingblade

+0

我沒有鏈接,但... 2D三角形網格只是一個這樣的網格:http://photos1.blogger.com/blogger2/2483/1050461954730077/320/Mesh.0.jpg它只是一個規則的網格,分裂總是在同一個方向。每個頂點的高度將通過採樣2D紋理(高度圖)來計算。 – dv1729