2010-03-21 49 views
2

我注意到,大多數3D遊戲/渲染環境都將固體表示爲(通常爲三角形)網格(通常爲三角形)3d多邊形。然而,一些示例(例如Second LifePovRay)使用可以在其上執行各種操作以創建更復雜的形狀的一組3d基元(立方體,球體,錐體,圓環等)構建的固體。Prims vs Polys:每個的優缺點是什麼?

所以我的問題是:爲什麼選擇一種方法而不是其他代表3d數據?

我可以看到,複雜的光線跟蹤操作可能會有好處,可以將曲面描述爲單個數學函數(如PovRay所做的那樣),但SL肯定不會嘗試任何如此雄心勃勃的渲染引擎。同樣,我可以想象,服務廣義實體而不是任意網格的描述可能更具帶寬效率,但它是否真的值得SL的負面影響(即建模的東西是真的是硬,通常結果是醜陋的) - 這是SL開發早期做出的一個糟糕的決定,他們現在堅持着?或者它是OpenGL/DirectX中最容易實現的人造物嗎?


編輯: 讀了到目前爲止的答案,現在我在想,我的兩個例子都使用prims非常不同的原因:

  • 的povray對於,prims可能是一個副作用將固體描述爲數學函數的效果,這爲複雜的光線追蹤提供了好處。

  • 由於性能的原因,Second Life似乎主要關注參數化他們的三維元素(既作爲主體又作爲參數化人物)......我認爲這對於在線遊戲來說非常合理。

回答

2

更高級別的「原始人」(球體,立方體等),他們攜帶他們是什麼,用較低的帶寬/存儲需求以及更多的語義信息(球體需要2個參數 - 中心位置和半徑 - 同時,比如說,一個同位球需要儘可能多的三角形來渲染球體)。

與原語也將允許基於本地的能力,客戶端引擎,以調整其渲染。如果你說「球體」,一個客戶可以用M個細分和另一個用N來渲染;如果您發送三角形,則會丟失以不同分辨率重新渲染所需的信息。此外,它使您有機會做一些事情,例如在靠近對象時增加細分計數。

我不知道林登實驗室在想什麼,因爲我從來沒有和第二人生合作過,但如果我建立像SL一樣的東西,我可能會傾向於原始圖像,因爲它們隨身攜帶更多的信息可以用於重新渲染,命中檢測等等。當然,最終它們會被轉換爲多邊形進行渲染,但這是一個實現細節。

+0

使用基本元素來處理類似人物的問題是,您很快需要大量的基元並執行布爾運算(並集和交集)來構建模型。與使用多邊形建模相比,這可能在計算上更加昂貴並且佔用更多的帶寬。 – ChrisF 2010-03-21 18:05:00

+0

@ChrisF:也許做客戶端的布爾操作可以節省帶寬?此外,SL是否可能以參數方式代表人類?這將是帶寬友好的... – 2010-03-21 18:33:07

+0

@MichaelE:+1我沒有考慮過碰撞檢測,但這很有道理。也讓客戶選擇多少細節來渲染是一個聰明的優化。 – 2010-03-21 18:37:24

0

根據定義,多邊形可以表示任何其他幾何圖元。多邊形上的每個操作(例如找到其中一個曲面的法線向量)與多邊形是一個立方體,一個球體或任何其他物體的作用相同。這種方法的缺點是,您需要專門針對邊緣案例進行優化(再次,多維數據集就是一個很好的例子)。使用法線貼圖等先進技術可以減少這種影響,因爲可以預先計算重要的物體指標。

我可以想像PovRay是一種場景,其中將對象表示爲簡單函數並針對邊緣案例進行優化的能力可以產生巨大的性能提升,但需要更復雜的場景設計器。

使用多邊形爲設計者提供了更多的自由度,您可以通過簡單地增加或減少所涉及的多邊形數來表示任何細節(LoD調整)的任意級別。

我不知道爲什麼SL的創造者決定跟原始遊戲一起玩,我也不知道遊戲的細節,但我想高端渲染是它的第二個關注點。

+0

「根據定義,多邊形可以表示任何其他幾何圖元」 - 除了球體,圓錐體和圓錐體外,其需要無限多個多邊形。 – Kylotan 2010-03-22 11:04:09

+0

@Kylotan:的確如此。我試圖通過LoD來解決這個問題。使用Prim將LoD解釋轉移到客戶端,Polys允許您更好地進行手動優化。 – 2010-03-22 11:46:13

1

有描述和呈現的3D對象的方法有兩種:

  1. 描述3D對象爲多邊形(破碎成三角形,三角形條帶,等,等)。然後,從對象空間到屏幕空間進行多次投影,並使用一些聰明的數學來模擬照明。一旦你進入屏幕空間,用像素着色器做一些更聰明的數學來模擬更好的照明。這是加速圖形API使用的方法,如Direct3D和OpenGL。 所有實時遊戲(如第二人生)使用此方法或類似的東西。
  2. 描述使用任何形狀對該特定對象有意義的對象(是的,甚至允許「真」曲線或無限平面)。通過跟蹤圖像平面中像素的光線路徑並模擬與虛擬對象相遇的效果,獲得每個像素的顏色。這是通過使用仿真來反映光線如何在真實生活中與物體相互作用的。這需要很長時間,而且非常昂貴。像POVRay這樣的光線追蹤器使用這種方法。

SL 威力使用原語在某種意義上說,他們的引擎API可以讓你像做

Sphere mySphere = engine->createSphere(x,y,z); 
mySphere->moveTo(x,y,z); 

但這些只是輔助功能(最現代的發動機具有基本能力),這樣做並不意味着他們呈現「原始」。他們仍然呈現三角形。

所以基本上,這不是真的,當你使用「對象」的問題,做當您使用「多邊形」。這是一個的問題你想要光線追蹤你想交互渲染

+0

好的,但是那裏沒有很多基於網格的光線追蹤器嗎? (Yaffray,3dsmax等)是什麼讓PovRay特別? – 2010-03-21 17:58:33

+0

POV-Ray使用其數學定義內部表示物體;所有POV-Ray原始對象都可以用數學函數來描述。 (來自維基百科)。這就是它特別的原因:) – 2010-03-21 18:01:05

1

它幾乎肯定無關用OpenGL,和OpenGL(和DirectX)與三角合作,而不是與曲面或幾何圖元。因此,Linden實驗室不太可能使用更高級別的庫,因此比三角形網格更容易渲染原始圖像。因爲幾何表示幾乎總是小於tesselated三角形表示的同一對象(代價是使得詳細調整昂貴或不可能),所以我期望它幾乎完全取決於希望節省帶寬。這對於大多數用戶創建的內容的在線遊戲很重要,因爲很多流量都是將這些數據發送給客戶端。

+0

這是關於OpenGL的有用信息;是的,我開始認爲帶寬是林登實驗室的主要考慮因素。 – 2010-03-22 12:14:10

相關問題