Contents

如何在 Godot 中添加動態光照和陰影

動態光照和陰影可以提升 Godot 遊戲的視覺質量和遊戲體驗。它們增加了深度、氛圍和真實感,讓您的遊戲世界更加身臨其境、引人入勝。

Godot 提供了多種工具,通過其先進的功能(例如 CanvasModulate 和 PointLight2D)來促進複雜燈光效果和陰影的創建和個性化。

設置戈多遊戲

要開始在 Godot 遊戲引擎中實現動態光照,請通過創建一個新場景並合併一個代表玩家角色的“CharacterBody2D”實體來建立一個基本的 2D 遊戲。

本出版物中使用的源代碼可以通過專用的 GitHub 存儲庫訪問,該存儲庫作為一個開源平台,供開發人員自行閱讀和實施。此外,它可以根據廣泛採用的 MIT 許可證條款免費訪問,授予用戶改編和分發該軟件的權利,而無需支付任何費用或版稅。

通過利用八叉樹或 kd 樹等空間分區技術,將游戲環境的三維表示納入程序生成領域,從而實現更高效的資源管理和優化。此外,還採用動態照明系統,考慮到一天中的時間、天氣條件和環境因素等各種因素,為用戶提供身臨其境的體驗。最後,集成Havok或PhysX等先進物理模擬算法,對遊戲世界中物體的行為進行精確建模,打造高度互動、逼真的遊戲體驗。

使用 GDScript 將玩家的移動和交互與屏幕限制結合起來,如下所示:

 extends CharacterBody2D

var speed = 200

func _physics_process(delta):
    var velocity = Vector2()

    if Input.is_action_pressed('ui_right'):
        velocity.x \+= 1

    if Input.is_action_pressed('ui_left'):
        velocity.x -= 1

    if Input.is_action_pressed('ui_down'):
        velocity.y \+= 1

    if Input.is_action_pressed('ui_up'):
        velocity.y -= 1

    velocity = velocity.normalized() * speed
    move_and_collide(velocity * delta)

該程序允許用戶在各個方向上導航虛擬環境,不受設備屏幕上顯示區域的限制。

/bc/images/simple-movement-in-godot.jpg

使場景的其餘部分變暗

要在 Godot 中創建動態照明效果,必須使用 CanvasModulate 功能來調暗整個場景,同時僅突出顯示被光源照亮的區域。

 extends Node2D

const DARKNESS = 0.7

func _ready():
    var canvas_modulate = CanvasModulate.new()
    canvas_modulate.color = Color(0, 0, 0, DARKNESS)
    add_child(canvas_modulate) 

請將此腳本附加到新創建的 Node2D 中,該 Node2D 用作場景的根。然後,將使用 CanvasModulate 節點在整個視野上施加微妙的半透明黑色陰暗,遮蔽其中的所有元素(除了那些被發光源照亮的元素)。

為了建立控制環境中黑暗程度的維度屬性,我們引入了一個名為“DARKNESS”的命名常量變量。該參數允許操縱在未照明期間應用於視覺表示的模糊強度。通過改變“DARKNESS”變量的指定值,可以調節不存在光源時場景內經歷的不透明程度。 “黑暗”值的增加將導致更深刻的黑暗狀態,而減少的值將產生相應降低的黑暗程度。

/bc/images/dark-scene-in-godot.jpg

投射光影

為了讓實體創建陰影效果,有必要在任何旨在阻礙照明的障礙物上使用 LightOcclusionr2D 組件。此類結構的示例包括障礙物、凸起表面和其他旨在投射陰影的建築元素。這些遮擋物的安裝有利於在遊戲環境中生成逼真的陰影效果。

為了有效地模擬視頻遊戲環境中對象的真實陰影,有必要創建一個自定義的 LightOcclusionr2D 組件,該組件精確地符合所討論的障礙元素的輪廓。此外,可以校準各種屬性,例如多邊形計數和分割,以實現對陰影現象投射的最佳控制。

添加全向燈

考慮通過為其分配紋理材質來將“PointLight2D”對象添加到場景中。這將模擬全向光源,有助於形成更令人信服的環境照明場景。

 extends PointLight2D

var light_color = Color(1, 1, 0.8)

func _ready():
    energy = 2.5
    color = light_color 

您可以對屬性進行個性化設置,以調節 PointLight2D 對象產生的照明的範圍和色調。

您可以選擇生成個性化的光紋理,以確定照明源的形式和視覺特徵。這可以是從簡單的圓形圖案到更複雜的配置,反映您想要建立的所需氛圍。

要為 PointLight2D 實體賦予紋理質量,請遵循以下步驟:

請選擇場景層次結構中的 PointLight2D 節點。

請導航到“文本”組件上下文中“檢查器”面板的“紋理”部分中的“紋理”屬性。

請單擊未佔用的紋理區域,然後仔細閱讀文件資源管理器,從可用選項中選擇首選的照明紋理。

您選擇的光源提供的照明將呈現預定的形式和色調,為場景中光影的動態相互作用帶來美觀的效果。

包括附加功能

為了增強項目的美學質量和交互方面,存在多個可選組件,可以將它們與動態照明和陰影的基本配置結合起來。一些潛在的補充包括:

燈光動畫

通過使光源栩栩如生的動畫效果增強光源的氛圍和真實感。例如,您可以為火把或蠟燭製作閃爍的火焰,模擬劈啪作響的火焰的舞動,或者為發出超凡脫俗光芒的神秘球體賦予跳動的動畫。

晝夜循環

在遊戲中融入動態的晝夜循環,實時修改光源的亮度和色調以反映時間的進展。這樣的實現可以通過根據一天中的時間創建不同的大氣條件來增強玩家的沉浸感,從而有助於整體體驗。

光衰

為了防止沉浸式體驗中斷,建議在更改亮度級別時採用無縫過渡。這種方法可以使環境逐漸變暗或變亮,從而產生更真實、更美觀的結果。

動態陰影

使用靜態陰影的另一種方法是為運動中的物體加入動態陰影。這可以通過利用跟踪角色運動的補充光源來實現,從而產生令人信服的實時陰影變化表示。

無版權的音效

結合適當的音效可以顯著增強視頻遊戲的沉浸式體驗,使其充滿活力和活力。為了實現這種效果,請考慮使用無版權的音頻元素,與真實的燈光和陰影動態無縫集成。

動態光照和陰影的最佳實踐

為了在視頻遊戲中有效利用動態光照和陰影,確保正確實施以避免對性能或視覺質量產生任何負面影響非常重要。遵守某些最佳實踐將有助於實現這一目標。

優化光源

通過堅持與期望的美學效果相一致的保守方法來優化照明元素的利用。過多的燈具可能會給系統功能帶來巨大的負擔,特別是在涉及功能較弱的硬件的情況下。

使用輕度烘焙

在處理固定環境或無生命實體時,建議採用一種稱為“輕烘焙”的技術來提高效率。該方法涉及提前計算和存儲照明信息,從而減少游戲過程中對即時計算的需求。

選擇簡單的遮擋器

配置 LightOccluder2D 節點時,建議在可行的情況下使用簡單的幾何形狀。使用包含多個頂點的複雜遮擋器可能會帶來效率挑戰。在這種情況下,如果認為合適,請考慮部署不復雜的多邊形形式或線性段作為遮擋物。

剔除和分層

Godot 提供了強大的可見性和分層系統,通過將光和陰影計算限制在場景的可見部分,可以有效地管理光和陰影計算。通過剔除屏幕外元素,可以通過減少計算需求來顯著增強性能。

採用先進技術在平台遊戲中創建引人注目的動態光照和陰影可以顯著增強其視覺吸引力和整體質量。

通過動態光照和陰影使 Godot 遊戲更具吸引力

動態燈光和陰影可以為遊戲體驗增添活力和真實感。通過創造一個越來越身臨其境且氛圍豐富的環境,這些元素能夠喚起玩家的一系列情感反應,同時也建立獨特的情緒並增強遊戲的視覺敘事。

動態照明可以通過增加怪異和寧靜環境的深度來創造身臨其境的遊戲體驗。火把、火光、月光等多種光源的融合,可以產生多樣化的視覺效果,增強玩家的參與度,留下難忘的印象。