小談CAD製圖和遊戲3D的區別

小談CAD製圖和遊戲3D的區別

並不是所有人學3D都是爲了做遊戲,但如今3D學習資料大多是遊戲背景的情況下,會讓不少走CAD路線的人走錯路。

遊戲領域,3D向着實時電影級效果發展,強調視覺效果,爲了獲得足夠的運行時性能,要把儘可能多的計算放到製作階段預處理。而CAD領域,畫線能力遠比視覺效果重要,模型往往需要實時編輯,對單純的三角面的吞吐量需求很高,需要在大量的線和麪中作精準的選取操作,而對硬件加速需求上,OpenGL 1.2的功能基本就夠了。

這些年GPU技術的飛速發展,主要是爲了遊戲。但這些改進,大多對CAD影響很小。這也是OpenGL ARB委員會的傳統CAD廠商對改進OpenGL並不熱衷的原因。與遊戲代碼若干年就重寫一次不同,CAD的程序可不希望經常重寫,他們需要一個穩定的API,最好50年都不變,但是新的硬件需要提供更好的性能。這些軟件大多推薦用戶使用專業級顯卡,而專業級顯卡的一個特點就是圖元吞吐量都非常大。

當然,CAD有時也需要效果迷人的成品圖,但這一般都是使用高級離線渲染,多花點時間,做成遠勝實時渲染的效果。軟件離線渲染器似乎可以算是另一個領域。對於工業3D而言,一般會選用一個現成的離線渲染器,而不是自己花時間寫一個。

不過,隨着GPU通用計算的興起,也爲CAD領域帶來了一些新的可能性。大量的計算,尤其是曲面三角化等,有可能交由GPU來處理。不過,這應該不會導致架構上的變化,而只是一些底層API實現上的優化,因爲OpenGL本來就是一個良好的工業3D的繪圖抽象層。

但這和遊戲領域的需求是矛盾的。OpenGL ARB在爭論中曾經提出分成兩個profile,一個CAD profile,一個game profile。但這個提議被否決了,因爲人們不希望出現兩個OpenGL。爭論在持續了若干年後終於有了進展,新的方案是一個面向新硬件加速架構的core profile和兼容舊程序的compatibility profile。但這對CAD領域來說仍然是很不理想的,因爲這意味着compatibility profile的支持會越來越少,他們早晚得重寫渲染代碼。至於CAD廠商爲什麼會接受這個提案,從Autodesk公開的的一篇report裏能看出一點,他們頗受參差不齊的OpenGL驅動質量之苦。OpenGL是在硬件加速時代之前的產物,功能繁雜,並不是所有功能組合都可以加速,以致很多驅動實現不但bug多多,而且行爲不一。這導致測試、補救的代價非常之高,以致3DSMAX 7之後缺省使用D3D做加速後端。如此,則一個新的精簡的OpenGL core profile是一個合理的選擇。

但是,並不是所有的CAD軟件都像3DSMAX這樣可以切換渲染後端,有一個渲染抽象層。而且,core profile的API非常的貼近硬件,並不適合直接用來做高層渲染邏輯。總體來說,傳統的OpenGL API本身就是一個面向CAD的良好的抽象層,很多年內它仍然會是,構架在OpenGL之上的CAD程序並不十分需要一個新的抽象層。所以OpenGL compatibility profile其實就是用core profile API實現的傳統OpenGL API,就是這個抽象層的一個標準實現。如果顯卡不提供compatibility profile了,CAD廠商仍然可以自己提供這個實現,又不用重寫以前的代碼,又可以利用未來新硬件的加速功能。而且,鑑於3D硬件的發展速度,D3D沒幾年就更新一代,每代之間完全不兼容,貼近硬件的OpenGL core profile也有這種風險。compatibility profile則爲CAD軟件提供了一層安全墊,只要更換不同的實現就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章