2008年6月22日 星期日

版本的迷思

忙了幾天,終於把ATi的異常鋸齒情形給避開了;不過,居然又讓我發現了一個ATi的記憶體管理問題,看來又得跟它奮戰一番了。身為程式設計師嘛,本來就有接不完的挑戰,所以我早已習慣了。其實不僅是習慣,我簡直是樂在其中。解問題時雖然痛苦,不過解開時那份成就感卻是讓我快樂得無以附加!

這幾天有人問我,為什麼FancyDesigner為什麼推出到現在還是稱作1.0版?這樣會不會讓人覺得這個軟體還處於剛發展的階段,而有穩定性不佳的錯覺?這真是個值得玩味的問題。軟體的版本編號,原本應該是用來標示功能上的進展或區別,不過望眼目前市面上的軟體生態,版本編號的異動竟已成了收取昇級費的主要用意。軟體公司藉著收取昇級費來支應研發成本,這本是合情合理的。如果大家都想要軟體功能越來越強,但都想免費昇級的話,那誰來支付研發成本呢?但是反過來說,如果軟體只有些微的改進,就急著標上個新的版本編號,來收取昇級費,這是否合理呢?

FancyDesigner上市至今,已陸續推出了十多個免費昇級的程式,有的是改進了軟體的缺失,而絕大部分則是增加了新的功能,但是在版本的主編號上,還是維持1.0版,因為我們不想動不動就跟客戶收昇級費。在我的感覺,一個好的軟體有賴使用者與研發者同心耕耘,特別是研發者不可閉門造車,應該多聽聽使用者的建議,來能開發出符合市場需求的軟體。做為一個程式設計師,其實最大的成就並不是來自於財富的累積,而是使用者滿心的讚賞!因此,在現階段,我們最主要的目標是讓更多的使用者喜歡我們的產品,而不是急著向老客戶收錢,所以,各位看倌,記得呷好逗相報喔!

2008年6月16日 星期一

多了一小步 感覺完全不一樣

從此【物件複製】時可以針對位置使用預覽功能。有這個功能後,使用者不會因一再嘗試錯誤的過程中,失去耐心。期待它能順利通過測試過程。


許多功能與想法,隨著時間一一實現的感覺真好!

過程中最耗時間的其實並不是功能開發,而是功能的測試:『牽一髮而動全身』是最好的寫照。就算測試工程師規畫再多的測試計畫與測試報告,總還是提心吊膽,深怕思慮不周,挂一漏百、掛一漏萬。

因此在考量如何分配資源,投入開發 FancyDesigner 的因素上,首重《穩定 Stable》;其次《效能 performance》;最後才是《功能 function》。相信這樣一步一腳印,建築扎實穩固的基礎,才能在大鵬展翅時,飛的暨高、又遠、更長久。

2008年6月15日 星期日

饒了我吧,ATi …

不知道各位有沒有注意到,FancyDesigner裡的鏡面反射效果是可以有巢狀反射的。什麼是巢狀反射呢?舉例來說,如果有一塊大理石地板反射了地板上的傢俱,而有一面鏡子又反射了這塊地板,則鏡子裡的地板也可以看到所反射的傢俱。

Ati的顯示卡:茶几下的木板周圍可看見明顯的鋸齒狀白邊
(按圖放大)

nVidia的顯示卡:一切正常
(按圖放大)

這種情況在現實生活中常見,不過虛擬實境裡可不容易達成。當然囉,咱們儒思科技的研發團隊照例是責無旁貸,拼了老命來完成這偉大的任務。(有點臉紅了 :P)

話說FancyDesigner團隊所獨家開發的巢狀鏡射演算法(Nest Reflection Algorithm)總算是不付所託,圓滿達成任務;不過為了兼顧效能上的考量,鏡射裡的影像是會出現鋸齒狀的,而這也是要求完美的我們心中的痛。

不過最近隨著顯示卡的效能越來越強,我們倒是想出了解決之道,所以現今的FancyDesigner版本已可在鏡射面裡呈現高畫質反鋸齒的影像。不過,問題可來了,採用新的做法之後,卻發現在ATi的顯示卡上居然會出現奇怪的白邊,我們接連更換了幾次ATi的驅動程式都沒有用,而在nVidia的顯示卡上卻一切正常。唉,這可真是令人喪氣呀!據我推測,應該是ATi為了在反鋸齒(Anti-Aliasing)上取得較好的效能,而出現的錯誤。

ATi與nVidia這兩家公司我可是看著他們成長茁壯的,看著他們這十幾年來如何在3D晶片的市場攻城掠地的。nVidia的3D晶片一向在效能上較為突出,想當年,我還曾經以nVidia的TNT2顯示卡與SGI的Indigo2繪圖工作站做過一場慘烈的對比。結果售價高達一百多萬台幣的Indigo2竟然在效能上慘敗給當時售價僅有8仟多台幣的TNT2顯示卡。至於ATi方面,雖然早期在與nVidia的競爭上,效能並非總是能佔有什麼優勢,不過在畫質上的表現卻是令人印象深刻。特別是在全景反鋸齒(Full Scene Anti-Aliasing)上的表現,即使打開了高達6倍取樣的反鋸齒效果,在效能上的影響並不明顯。所以以往我都會跟人客推薦採用ATi的顯示卡。

不過,看來這次我們算是無意間踩到ATi的痛腳了,當Back Buffer與Render Target同使採用反鋸齒時,竟然會出現明顯的鋸齒狀白邊,而如果所採用的取樣倍數不一致,則下場更慘,連整個Back Buffer的Background color都會被改掉,而且整個Back Buffer都會呈現不堪的白邊鋸齒狀。看來,還是nVidia比較遵循著D3D的規則來發展,不僅畫面一切正常,而且畫質與效能也相當不錯。

不過雖然這是人家驅動程式的瑕疵,但是我們總不能要每個使用者都換用nVidia的顯示卡呀!所以囉,幾經琢磨之下,目前我已經想到了解決之道來避開ATi的這隻臭蟲,只是行不行得通還得實際去測試才知道,各位看倌就敬候佳音吧!

2008年6月14日 星期六

又要馬兒跑,又要馬兒不吃草

看到有這麼多的FancyDesigner愛用者,心裡實在是高興!

不過嘛,有越來越多的使用者抱怨,當場景變大時,執行的速度也會越來越慢!

人客呀,這是當然的嘛!無論如何,場景總不可能無限制的擴充下去呀!場景裡的東西如果越來越多,越來越複雜,執行速度當然會越來越慢的嘛!

這面牆的後面是個浴室

不過話雖如此,我也知道使用者就是因為喜歡FancyDesigner,才會有如此期盼的。

好吧,即使不是十分合理,我還是希望能寵寵使用者,讓他們真的能在兼顧畫質之下,擁有更大更複雜的場景。

浴室裡的物件雖然被牆擋住了 但還是會做3D運算

這個問題到底該怎麼解呢?看來應該可以從遮蔽物的觀念來下手。無論場景多麼的大,除非是百分之百的開放空間,否則使用者應該不可能一眼就看到場景裡所有的東西,所以只要把暫時看不到的東西去除掉,也就是不列入計算,那就能夠大大提高執行的效能。舉例來說,如果人是在客廳的話,那主臥室或其他房間裡的東西就極可能被隔間牆擋住,所以裡面的東西就可暫時不列入計算。

其實這個說穿了就是3D遊戲裡常用的遮蔽演算法,只是人家的3D遊戲在建場景時都會有嚴格的限制,所以遮蔽演算法較為單純,而我們的FancyDesigner卻是要讓每個人都能輕鬆容易地建構場景,所以遮蔽演算法所要考慮的因素可就複雜多了。

啟用遮蔽演算法之後 牆後面的物件運算大幅減少了

不過,…..嘿嘿,經過幾個月的努力,遮蔽演算法總算大功告成了!這都得多感謝Su的協助,因為比較難的數學問題,我都是讓他去傷腦筋!

人客呀,再耐心等個幾天,就可以享受到遮蔽演算法的好處了唷!

2008年6月11日 星期三

處女座的吹毛求疵 ── 光暈特效終於完成

明知道虛擬實境的畫質有其限制,但我就是不死心,總希望能在畫質上再上一層樓,於是就將腦筋動到了光暈效果上。

(按圖放大)

真實世界裡,發光體或者是高亮度的材質表面,通常都會對週遭的環境產生光暈般的反光效果。反過來說,如果能在虛擬實境的場景裡表現出光暈的效果,那麼整體的真實度就會提高許多。
關於光暈的演算法其實難度並不算高,難的是如何讓大部分的顯示卡都能顯示出光暈的特效,否則就變成曲高和寡了!


經過幾個星期的奮戰,心血總算沒有白費,如今只要在FancyDesigner裡簡單地按一個按鈕,就可以啟動光暈特效,看起來效果還真的蠻炫的!

(按圖放大)