首頁> 遊戲競技> 目錄頁> 第545章 簡單的優化,5倍的性能提升

第545章 簡單的優化,5倍的性能提升

2026-10-19 13:38:52 作者: 哈娜歐菲手

  霧,現代電子遊戲必備技術。

  只不過在如今這個90年代,大家還沒有意識到霧效的重要性。

  原因無他,在8位時代,想要運行一個稍大點的地圖,就需要可憐的內存不斷進行數據交換。

  幾kb的內存,完全不足以創造出龐大的世界。

  哪怕是到了16位時代,大世界也仍然還是一個偽命題。

  幾mb的內存容量,雖然已經可以支撐那些瓦片式的大規模地圖,但也就僅此而已了。

  但《戰地風雲》不一樣。

  它是一個真正3d大戰場。

  這意味著整個世界不可能像以前那樣,僅僅保存一點兒瓦片數據。

  【x:0-y:1-tile:0】

  以往的時候,只需要這樣三個參數,就能完整保存下一整格的信息。

  客戶端在嘗試渲染時,可以直接從內存里拉取對應的瓦片,拍在坐標所對應的位置。  當然還要加上一點位移變換和視野剔除。

  這一招在2d的時代屢試不爽,尤其是在有了顯卡這樣一個天生擅長批量並行處理的硬體之後,瓦片的性能更是呈幾何倍數上升。

  本書首發 追書就上 101 看書網,101𝑘𝑘𝑠.𝑐𝑜𝑚超讚 ,提供給你無錯章節,無亂序章節的閱讀體驗

  如果用現在這個規格的硬體去開發《超級馬力歐》,瓦片的密度甚至能翻幾個倍,同時還能確保幀數穩定。




  這也是林立新很確信3do註定失敗的原因。

  3do的賽璐璐疊畫法看起來似乎很巧妙,似乎是個繞開三角形計算限制的巧思。

  但真正深入到幾何空間之中就不難看出,這條路絕對是走不通的。

  或許在未來,等到ai技術高速發展,補幀、幀生成技術趨於完善之後,它還會重新被提起來。

  但至少在短期內,在未來幾十年內,三角形都是3d計算的絕對主流。

  計算機理解3d空間,靠的是……頂點。

  除了x和y的坐標點外,又多了一層z軸。

  它們互相配合,就足以在計算機中構建一個真正包含深度的3d空間。  那麼問題來了,這麼多的頂點,計算機怎麼知道要如何把它們渲染出來?

  難道就直接無腦地連接所有點,然後糊一層蒙皮上去嗎?

  這群追求完美的極客們自然不會選擇這麼綠皮的方法。

  對於不熟悉圖形學的圈外人,其實在面對這個問題的時候,經常會出現一個疑問。

  為什麼是三角形?

  如果是矩形的話,渲染起來不是會更方便嗎?像瓦片那樣把地圖割成一塊一塊的,既方便又好理解。

  答案就出在3d上。

  在立體幾何中,如果存在四個頂點,它們不一定會在同一個平面。

  別說是顯卡不知道怎麼畫出來了,哪怕是讓真人來,把四個不在同一平面的點畫成一個面,那也根本是無稽之談。

  怕是只有高維生物或是在非歐空間裡才有可能達成吧。

  但是三角形就不一樣了。

  圖形學跟數學本質是相生的,在幾何學中,三個點必定共面,四個點不一定共面。  三個非共線點可以唯一確定一個平面。

  這就是3d加速顯卡的立足之本了。

  只要有三個點,靠索引規定如何連接它們,顯卡就能輕鬆地為其填充像素。

  想要矩形?簡單,四個頂點拼兩個三角形不就完了嗎?

  誰也沒規定說一個頂點只能對應一個平面。

  這麼一來,不難發現3d空間的渲染便一下子豁然開朗了起來。

  遊戲只需要不斷地繪製三角形,各種角度各種形狀的三角形,當它們靠著共線不斷拼接,最終就能圍成一整個完整閉合的模型。

  沙漠是無數個三角形,坦克是無數個三角形,槍也是,人物也是,一切的一切。

  3d空間中的任何東西,都可以靠著足夠多的三角形呈現出來。


  不過這又產生了新的問題。

  就像以前研究視差滾動動畫時的經驗那樣。

  人是通過二維的圖像來理解3d空間的。  這意味著一個大活人實際上是根本不可能看到模型背面的內容的。

  就算能看到,顯示器到底也是個平面吶。

  圖形學家們自然也早早地發現了這一點,早在初代的quake引擎中,其實林立新他們就已經大量地使用過遮擋剔除的方案。

  凡是看不到的,一律不渲染。

  這個思想非常重要。

  它能讓顯卡節約大部分渲染壓力,還不會影響玩家的視覺效果。

  一直到後世,《minecraft我的世界》,其實也用的這套方案。

  玩得多的玩家或許經常碰到一個詭異的情況。

  如果伺服器很卡,或者自己因為某種bug卡進了方塊里。

  自己會直接透視整個世界,看到地下亂七八糟的洞穴和隱藏的岩漿湖。

  老老年間甚至在民間論壇上還流傳著一套靠礦車把自己強行卡出這種狀態,方便尋找礦洞的技巧。

  這其實就是很經典的遮擋剔除。  mc在渲染世界的過程中,除了區塊化地有限動態加載之外還會做『面剔除』。

  整個世界雖然全部由方塊構成,卻並不是真正以方塊為單位渲染的。

  每一個方塊,都只會顯示自己能看得到的那一面。

  假設整個區塊是一大片草原。

  這麼一剔除,絕大部分的草方塊就只剩下了頂面需要渲染,直接爆省5個面的渲染開支。

  當然在日後模組社群的高速發展之下,還誕生了『遮擋剔除』之類的看不見就不渲染的方案。

  不過那就是另一條路線了。

  總而言之,在理解了3d渲染的基本原理之後,『霧效』的存在,就不是什麼難理解的東西了。

  3d的世界需要霧。

  如果300米開外起了霧,那300米以後的東西顯卡就都不用渲染了。

  簡單粗暴。

  「所以是一種……軟性的視距限制?」  卡馬克點了點頭。

  如果說霧效這個概念還有些陌生的話,說起視距限制,那就到了他的舒適圈了。

  《德軍總部3d》中,其實就大量進行過刻意的視距控制。

  每個地圖都是大量的小房間,橫平豎直,到處都是牆壁。

  為的就是儘可能節約視角。

  霧只不過是把這些東西挪到了3d裡面去。

  「對,更重要的是它很自然,很多玩家甚至玩完都不會注意到有霧效的存在。」

  林立新笑著說道。

  沙漠比起其他地方,有一個得天獨厚的優勢。

  「我們可以把霧效做成……沙塵暴。」

  霧效只是一個抽象的籠統的概念,霧氣是霧效,霧霾是霧效,雲霧也可以是霧效。

  區別只在於設計師如何去呈現而已。  在這方面玩的特別厲害的專家,其實是溝槽的科樂美。

  不得不承認,科樂美雖然十分操蛋,但它的旗下一直都有很多有能力也有想法的製作人。

  放眼整個遊戲史,第一個把霧效玩出花了的,其實是科樂美的《寂靜嶺》。

  ps1的時代,大家都知道可以做3d了,但也都知道ps1的機能實在有限。

  一旦涉及到包含遠景的3d空間,ps1就傻眼了。

  處理器和顯卡一起罷工。

  你就算去吧,一秒能跑完一幀都算盡力了。

  於是《寂靜嶺》的製作組靈機一動,想到了一招。

  遠景不好渲染,那就不讓玩家看到遠景不就完了?

  直接讓距離玩家幾十米以外的地方起霧。

  這可不是渲染完了再蓋一層霧這種純粹浪費性能的氛圍渲染技巧。

  而是實打實的只有一層霧,霧後面啥也沒有,什麼都不渲染。  結果這玩意兒偏偏還真就運行得非常不錯。


  玩家非但不感覺惱怒,反倒是對此讚不絕口。

  寂靜嶺的鎮子就該是這樣啊!

  濃霧瀰漫、能見度低下、怪物徘徊……

  真他媽絕了!

  大概這就是優化的藝術吧。

  不但不會引發玩家的反感,反倒還能成為遊戲的特色,成為烘托氛圍的工具。

  「熱霾效應讓遠處的模型被lod降精度,沙塵暴可以降低遠處的能見度,進一步限制視距。」

  重新梳理一下整個優化思路,整個項目一下子就明朗了起來。

  大地圖做不做得了?

  「好像……還真的有機會?」

  身邊的東西用高模,遠了換低模,再遠直接變成貼圖,再遠的話就被沙塵暴整個吞掉。  一來一回,不管是處理器還是顯卡,在性能上都是徹底的釋放。

  卡馬克在腦內估測了一下,得出了一個嚇人的結論。

  光是處理器的性能提升,大概就能懟到接近……3倍……

  顯卡這個主要受益者更是誇張,整體甚至能達到近5倍的提升。

  這特麼……簡直就是魔法!

  代碼的魔法!

  硬體?

  只有見到困難就軟腳的軟腳蝦才會被硬體的限制嚇退。

  我們可是gamenova!

  gamenova從來不會輸,也從來不會被這種事情限制住。

  做到極致!

  做到硬體的極致,做到算法的極致,做到優化的極致!  榨乾硬體里的每一滴機能,不讓任何一個電晶體閒下來。

  這才是一位偉大的開發者該有的思想!

  硬體不夠用了?

  先問問自己到底有沒有把優化做到極致吧。

  坐在靠後一些位置的麥可·阿布拉什目光灼灼地盯著還在滔滔不絕講述優化思想的林立新。

  他忽然理解了為什麼林立新這麼執著於組建一個真正的優化團隊。

  為此不惜開高價到處挖角。

  他想要做的東西實在是太多了。

  硬體的發展又不可能以一人之力就瘋狂加速。

  唯有優化,才是解決問題的真正出路。


關閉
Δ