第687章 面數不變,效果翻倍!
細胞階段,也就是整個遊戲伊始的第一階段沒什麼意外。
畢竟是林立新親自操刀,外加本就是2d的玩法。
整個開發流程比預想中還要順利得多。
但等到了第二階段開始,情況就開始有些不同了。
按照計劃,《孢子》畢竟利用了novafusion這台五代機誇張的圖形性能。
為了帶來最前衛的遊戲體驗,自然是要做3d的。
但一個3d化的大世界?
不說圖形計算來不來得及,就是以現在的顯存,那也是不可能夠用的。
「總之……目前就是這麼個情況,我們正在考慮降低面數來穩定性能表現。」
卡馬克解釋道,
「有霧效和流式加載的話,顯存能被壓縮得差不多,不過視覺效果肯定會大打折扣。」
不同於他們這兒。 林立新所負責的2d階段,可以在視覺效果上打磨得非常精細。
因為以現在的圖形性能,已經可以支撐他們去做很多很不錯的細膩像素效果了。
相較對比之下,3d後的階段只會讓玩家有更強的落差感。
這種事情,顯然是很難讓人接受的。
「我嘗試過幾種不同的優化方案,但……因為《孢子》的生物是玩家捏的,我們根本無法預先確認最終的樣子,沒有辦法做針對性的優化。」
卡馬克調出開發機里的其他幾個優化方案,分別跟林立新展示了一番。
不得不說,他的技術絕對是圈內僅次於林立新的存在。
隨便哪個方案,都有非常不錯的表現。
但或許這也是時代的局限了。
因為時間線變動的關係,卡馬克這段時間一來並沒有真正著手過ugc項目,對這種最終結果不確定的問題有些找不到著手點。
他更擅長在條件全部已知的情況下進行極限優化。
「原來如此。」 林立新瞭然地點點頭。
怪不得引擎組這幾天都聚在一塊兒了呢。
「其實咱們可以換個思路。」
他說著,坐到卡馬克跟前,
「這套技術等日後咱們的新fps項目也會用到,而且會大量用到。」
畢竟fps也算是gamenova發家的核心類型之一了。
作為第五世代的第一方作品,肯定少不了它。
至於到時候要做什麼,林立新早就已經有了方向。
「其實我們不必一定糾結面數的問題,適當的減面完全沒有關係。」
林立新隨手摸起一團橡皮泥,揉成個球,又在桌子上輕輕輥壓了幾下。
簡單幾下,這坨橡皮泥便變成了一個正多面體。
「我們是在搞遊戲,而不是計算機圖形學,很多時候,我們的目標並不是讓它完美,讓電腦也覺得它完美。我們的目標只有一個——讓玩家滿意。」 這就是遊戲行業跟其他計算機前沿行業的差距了。
假如是通用汽車他們,建模里的任何一點誤差那可是都會有大問題的。
連鎖甚至會影響到風洞的氣動模擬,對整個研發產線都造成影響。
也是因此,通用汽車的數字設計部門對參數有著近乎苛刻的要求。
同時,這也讓他們成了gamenova最大的高端工業顯卡採購商之一。
但遊戲不一樣。
只要玩家的肉眼看著是那麼回事,那就完全沒問題。
「所以我們就需要請出計算機圖形學幫一點小忙了。」
卡馬克是編程天才,這部分才華溢出了一點,讓他在圖形學領域也有了不菲的成就。
可他到底是自學成才的車庫奇才,並不是真正的科班出身。
在面對一些經典圖形學問題時,他總會靠自己的實力強行大力出奇蹟。
雖然有的時候能帶來驚喜,順手再拿一堆獎,再幫圖形學界解決一些千古難題。 但很多時候,這種性格也會讓他很容易重複造輪子,在沒必要的事情上浪費精力。
「高洛德著色法(gouraud shading)。」
計算機三維圖形學的世界,存在著三種主流的著色方案。
第一種,也是以當下圖形性能條件最靠譜,也是最簡單最傳統的方案,平面著色(flat shading)。
由於在計算機的世界裡,三維物體由大量的三角片構成的關係,著色方案也可以非常容易地設計。
在上色的時候,整個三角形只計算一次顏色,整個三角形都應用同一個顏色。
這種方案的好處是顯而易見的,速度奇快、性能開銷奇低無比。
但缺點也很明顯,同時也是目前卡馬克始終找不到對策的原因。
僵硬。
顏色之間缺少過渡,整個3d物體的稜角感非常明顯,根本不像一個平滑的物體。
誠然,這一點可以通過增加面數得到改善。
前往「必」應」搜「索旗」」可查看最「新章「節! 但這種大力出奇蹟的綠皮思路,顯然讓這些圖形學家們非常不爽。
於是在70年代,有兩位奇才站了出來,分別拿出了兩套解決方案。
亨利·高洛德提出的高洛德著色法,與裴祥風提出的phong著色法。
高洛德的思路是直接通過面的頂點進行計算,隨後面上的每個像素都做一個過渡插值。
這樣整個面上的顏色就一定是流暢的漸變。
phong要更加極端一些,直接每個像素都進行完整的著色計算,結合光照、材質等因素,綜合計算。
相較下來,不難發現phong一定是渲染效果最優秀最漂亮的那一個。
但它也不是完美的。
就像平面著色犧牲了視覺效果換來了絕對的速度優勢那樣。
phong便是犧牲了性能換來了絕對的畫面。
它只適合給影視行業等高度依賴精度,又不需要實時計算的場合使用。
而高洛德…… 它則是從這兩者之間取得了一個折中點。
較低的運算強度,卻能換來比平面著色強得多的效果。
面數沒有增加,整個模型卻一下子就像那麼回事了。
這就足夠了。
騙得過玩家的眼睛就已經足夠了。
林立新坐到開發站跟前,上手迅速修改了一下著色器的代碼。
重新編譯運行。
原本屏幕上那坨面數有限的模型,一下子便光滑了起來。
高端的開發者,往往能夠神不知鬼不覺地偷工減料,為顯卡減少負擔。
「原來如此……」
卡馬克掃了一眼源碼,便立刻get到了這套策略的精妙之處,
「逆向思維……嗎?」 他念叨著,像是忽然想明白了什麼,隨即眼神一亮,
「啊!這倒是提醒我了,我突然有了一個好主意。」
「怎麼?」
「山姆昨天問過我,他想知道有沒有什麼辦法在不確定生物會長什麼樣的情況下,為它設計靈活擬真的運動動畫。」
卡馬克興奮地說道,迅速打開文檔將自己腦袋裡的思路記錄下來,以防這些靈感稍縱即逝,
「林你知道的,咱們以前做3d動畫,都是用現有的骨骼數據去做。」
「的確,但這次咱們的骨骼是後確定的。」
「對,所以沒有辦法預先為生物設計好移動方式,因為我們甚至都無法確定它的腿長在哪裡,甚至無法確認它有幾條腿。」
卡馬克點點頭,這個問題同樣困擾了他有段時間了。
但剛才林立新的話給他提了個醒。
有的時候,解決問題其實只需要換個角度去思考,去逆向思考一下就成了。
【inverse kinematics(逆向運動學)】 他將上面的字展示給林立新看:
「我們不去控制肢體如何運動,而是告訴肢體它要放在哪。」
按照常理來說,一個抬腿動畫的確立應該是個順序的鏈條。
大腿率先移動,在骨骼系統的帶動下,膝蓋、小腿、腳脖子以及腳丫子都會被牽引著發生移動。
這就是典型的正向運動學。
但ik,則是完全換了一種思路。
它先確定最終的落點。
通過落點去倒推肢體該如何運動。
不論地面長什麼樣,不論這個生物長什麼樣。
它的腿永遠都能很好地貼合在地面上。
當然,代價則是處理器的開銷也會大一些。
「這套系統甚至能支持多組腿一起移動!而且能極大地減少咱們的資源開支。」 既然一切都是程序實時計算的了,那他們當然也不需要把這些東西存進光碟里。
3d時代有個讓所有廠商都頭疼的問題。
隨著角色越來越多,場景越來越恢弘,動畫資源也在跟著不斷膨脹。
即便是光碟這种放在幾年前還是外星科技一般的容量,如今也開始有些捉襟見肘了。
尤其是《孢子》這樣一個玩家可以發揮無窮想像力的作品。
理論上來說,無限的組合等同於無限的動作,也就等同於無限的開支。
可在程序化後,他們便可以像做2d遊戲那樣,只做l2d拆分,大大節約容量。
當然,也節約了工時。
畢竟再也不需要動畫師去一幀一幀地k動畫了,只要程式設計師把規則寫好,剩下的一切,遊戲自己都能處理好的。
「將ik逆向動力學跟剛才的高洛德著色法結合在一起,根據參數化的脊柱節點動態生成mesh並繪製蒙皮,用ik骨骼控制步態,再加上威爾的jazz人工智慧架構……」
卡馬克興奮地在文檔里整理著。
一個嶄新的世界此刻似乎已經向他敞開了。 一個完全程序化的,完全自由的世界。
也是一個擁有無限可能的無限大的世界。
如果程序化沙盒這個思想進一步延伸……
(還有更新耶)