3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界

遊資網發表於2019-12-03
3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界

從更一般和更概念的角度來看,這是有關我如何處理遊戲照明的系列文章的一部分。我在Unity中構建了大部分示例,但這通常適用於任何3D遊戲引擎,其中大多數具有類似的照明工具。

我們開始思考了有關光照的文化和概念,在第一部分。在第二部分,我們在關卡設計和可讀性方面更有效地處理了光照。然後在第三部分中,我們調查了用於遊戲中的三點照明方法。但是,如果我們不能在計算機圖形學的約束下真正實現這一理論,那麼任何的理論都無關緊要。

傳統上,光照是在遊戲引擎中計算和渲染較慢或者是“昂貴”的事物之一。考慮一下可見光的科學原理:無數個不同波長的光子以難以想象的速度反彈,以某種方式進入您的眼睛。為了以合理的幀速率進行任何此類操作,遊戲引擎必須從策略上以特定的方式去簡化光照計算,然後希望玩家不要注意到這些不一致不協調之處。這是“冰箱邏輯” -我們希望玩家能夠點頭,只要它“看起來正確”即可。

好的,那麼在3D遊戲引擎中通常是如何照明的呢?

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


最簡單的照明形式是“環境光”,這是恆定的預設照明水平,適用於世界上的每個模型,甚至是陰影中的零件。這一點都不現實,因此環境光通常更多地充當“補光燈”(請參閱第3部分),尤其是對於室外空間,在室外空間,通常使用深色海軍藍來確保陰影不會終止漆黑。

但是環境光會平均地在每個物件上施加平坦平均的光照效果,因此有人可能會說它甚至不符合照明條件,因為它並不能真正幫助我們瞭解空間表面的深度或拓撲(幾何造型),這對於基本的遊戲或者是尋路來說,通常是至關重要的。(請參閱第二部分)(“我可以在這座山上走嗎?還是說太陡了?”)……要使光看起來像光,必須根據表面的方向進行更改和調整,而標準的環境照明不會做到這一點

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


好的,調整角度後,這樣看起來變得更好了,現在我們有了一些形狀上的差異。

定向光” 是陽光或任何其它地方的全域性光源,從一個給定的旋轉方向產生恆定的光照。它會一次性的直接影響整個世界,因此可以放置在任何地方,甚至是牆壁內。只有它的方向很重要。接著,定向燈光將在朝向它的每個表面上發光,並且與太陽/月亮的距離無關緊要。因為大多數場景和遊戲世界都只有一個定向光,所以它們通常更像“主光”。(請參閱第2部分)

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


聚光燈”是施放在Y向X度範圍的錐形燈光。如果你要製作具有很多舞臺燈光,嵌入式天花板燈或路燈的遊戲,那麼你可能會嚴重依賴聚光燈。聚光燈最常見的用途是高處的聚光燈指向下方,不強調天花板,而是突出凹顯出地板。通過這種方式,聚光燈非常適合暗示特定的方向或者是強調特定的位置,無論它們發出的具體光芒如何。

根據你對聚光燈調整傾斜的角度,讓玩家並不是很清楚光源實際來自何處(參考第一部分的內容),學會利用這個優勢和技巧。

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


最後,“點光源”是一個看不見的全範圍的光球,它以X強度向所有的方向投射光照。通常這種型別常常用於檯燈,燈籠或枝形吊燈。點光源確實擅長於吸引給定的光源,因為它們通常必須要靠近它們需要照亮的任何物體,並且附近所有的被投射物體實際上都將指向該光源。(相對於聚光燈,尚不十分清楚光源到底來自何處,我們也不會在乎。)

總體而言,這4種光源型別通常在每個3D遊戲引擎或渲染器中都可以找到。它們有點像一個完整的域:

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


但實際上,這僅僅是一個開始。

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


直接照明即初始發射時的第一束光線,這就是為什麼它被稱為“直接照明”的原因,而不是“間接照明”,後者試圖模擬光如何反彈或與表面相互作用。在上面最右邊的影像中,請注意三角形中的紅色燈光是如何被反彈到地板上,立方體中的藍色如何反彈到牆壁上的陰影中,背景通常只是更亮。這些效果來自周圍空間內所產生的光線的反射。傳統上,嘗試實時計算這些效果並以每秒60幀的速度去渲染你喜歡的角色面部,所需要消耗的效能對於遊戲來說非常的昂貴。(在以後的文章中,我將對此進行更多討論。)

嘗試將手舉在明亮的光源之前-手輪廓周圍的紅色條紋稱為“次表面散射”,因為光線實際上在皮膚表面下方通過並從血液中反射出來。我們可以說標準的直接照明模型沒有考慮到不同的材質或陰影型別,因此這意味著我們必須設計一個系統來解決該問題……眩光或者你的眼睛最終應該以什麼樣的方式去適應?黑暗還是明亮的空間?我們也必須設計這些系統!

因此,這基本上就是遊戲照明的技術歷史:試圖彌補此基本照明模型中的所有漏洞。因此,四種基本光源型別僅僅是遊戲照明的開始。我們還有更多的事情要考慮和實施:

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


假設你是在製作遊戲中某個城市的夜景。

首先,從全域性設定開始。我的環境光設定為深藍紫色,而定向光光源在整個場景上投射出令人驚訝的明亮藍光。(請參閱 “黑暗好萊塢”:我們只希望它感到黑暗,而不是實際上物體是黑暗的。)

然後開始新增本地燈光。在這種情況下,下面有一個聚光燈和一個微弱的點光源,以模擬光線的反射和濺射。

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


現在讓我們開始新增不是“光”的東西,但是會強烈影響我們對光的感知

燈具的模型現在具有自發光的發光材質,看起來很明亮。光暈是一個單獨的2D精靈,它會根據玩家鏡頭的距離淡入和淡出。有一個粒子系統在燈光下以錐形噴灑灰塵。我呢吧還對相機應用了光暈,環境光遮擋和色差效果。並且不要忘記天空盒(Skybox),這是“好萊塢黑暗”真正起作用的唯一方法。最後,我在背景中新增了一些霧,以模擬一些黑暗/大氣散射,並將場景背景再推回一點。

請記住,燈光的感知亮度取決於兩件事:(1)燈光的實際亮度(2)燈光周圍區域的相對亮度/暗度。通常,嘗試使不重要的事物變暗或變暗,以便更重要的事物得到更多關注。連續性的環境中的上下文真的很重要!

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


鏡面反射(Specular Reflection),邊緣照明和自發光(Emission),投影與陰影,色差,螢幕空間環境光遮擋(SSAO),立方體貼圖(Cubemap)和球諧光照(球面對映),高動態範圍色調對映(HDRI),眩光和光暈...在遊戲引擎中,這些技術可作為單獨的功能執行,有選擇地啟用或禁用該功能以優化遊戲以達到某個幀速率或達到某種藝術風格,但在現實生活中,這些都是我們所知道的統一的光照現象的一部分。

最終,玩家只會在那裡看到一個光源。但是我們會更好地瞭解,我們將能夠看到我們精心製作的微妙的效果處於一個什麼樣的系統...

3D遊戲的照明設計理論(四):如何在遊戲引擎中照亮遊戲世界


遊戲照明不是一個統一的系統。而是,這是所有這些隨機的雜物的拼湊而成,希望它們可以一起使用。作為一名設計師,使所有的這些不同的效果看起來是一件連貫的事情是我們的工作內容。

有時候,當你可以建立不帶任何可見燈具的浮動光源時,此控制元件確實非常好。(換句話說,我的照明設計老師說:“我會殺了那種力量。”)但是有時候,所有的這些責任都是令人討厭的,因為您必須手動新增每個部分並與其他所有部分進行微調,並且可以做很多工作。(這就是為什麼許多Triple-A工作室現在已經從關卡設計師那裡取消了費時的照明工作,並將這項工作交給了環境藝術家和/或專門的照明藝術家的原因。有關關卡設計歷史的詳細資訊,請參閱作者的GDC2015討論-關卡設計的歷史與未來。)

遊戲中的照明不僅僅是照明。這是關於整體形象和你想要建立什麼樣的情緒的,同時在你的世界中似乎足夠的合理,以至於玩家不會經常的“恍然大悟”(發現不合理的地方)。但是這種“合理性”的想法取決於“什麼是現實的”的概念-這影響了開發什麼型別的新照明技術,這影響了我們的工具集在美學上潛在的可能性,從而推動了更多的“現實主義”等等。

下次,我將分解一些關於什麼是“良好的遊戲照明”的基本假設,以及我們如何能夠超越這些假設(如果有的話)。

相關閱讀:
3D遊戲的照明設計理論(一):光源和固定裝置
3D遊戲的照明設計理論(二):正式的照明設計方法,用燈光作為深度

3D遊戲的照明設計理論(三):三點照明法的異端與誤區

作者:Katana
專欄地址:https://zhuanlan.zhihu.com/p/88042832

相關文章