Godotで動的ライティングとシャドウを追加する方法

動的ライティングとシャドウは、Godotゲームのビジュアルクオリティとゲームプレイ体験を高めることができます。これらは奥行き、雰囲気、リアリズムを追加し、ゲームの世界をより没入感のある魅力的なものにします。

CanvasModulateやPointLight2DなどのGodotの強力な機能を使用すると、動的ライティングとシャドウの作成とカスタマイズは簡単なタスクです。

Godotゲームの設定

動的ライティングに飛び込む前に、Godotゲームエンジンで基本的な2Dゲームを設定します。新しいシーンを作成し、プレイヤー用にCharacterBody2Dを追加します。

この記事で使用されているコードは、このGitHubリポジトリで入手でき、MITライセンスに基づいて無料で使用できます。

CharacterBody2D内で、長方形の形状を持つCollisionShape2Dと、プレイヤーのキャラクターを表すSprite2Dを追加します。また、StaticBody2Dノードを使用していくつかのプラットフォームを作成します。

次に、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)

このコードを使用すると、プレイヤーは画面の境界内に制約されながら、左右上下に移動できます。

シーンの残りの部分を暗くする

動的ライティングの効果を実現するには、光源によって照らされた領域を除いて、シーンの残りの部分を暗くする必要があります。これを行うには、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にアタッチします。CanvasModulateノードは半透明の黒のオーバーレイを適用し、ライトで照らされた領域を除いて、シーン全体を暗くします。

シーンに適用される暗さの強度を決定する定数変数DARKNESSを作成します。DARKNESSの値を調整することにより、ライトで照らされていないときにシーンがどれだけ暗くなるかを制御できます。値が高いほどシーンは暗くなり、値が低いほどシーンは暗くなりません。

ライトの影を投射する

影を投射するには、光を遮断する障害物にLightOccluder2Dノードを設定する必要があります。たとえば、影を投射する必要がある壁、プラットフォーム、またはその他のオブジェクトがある場合は、それぞれにLightOccluder2Dを追加します。

新しいLightOccluder2Dノードを作成し、その形状をゲーム内の障害物の形状に合わせて調整します。polygonssegmentsなどのオクルータのプロパティを調整して、影の投射動作を微調整することもできます。

全方向ライトを追加する

次に、テクスチャ付きのPointLight2Dノードを追加して、光源を表します。ポイントライトは全方向に光を放射し、リアルな照明効果を作成します。

extends PointLight2D
var light_color = Color(1, 1, 0.8)
func _ready():
energy = 2.5
color = light_color

プロパティをカスタマイズして、PointLight2Dによって放出される光の範囲と色を制御できます。

カスタムライトテクスチャを作成またはインポートして、光源の形状と外観を定義することもできます。作成したい雰囲気に応じて、単純な円にすることも、より複雑な形状にすることもできます。

PointLight2Dノードにテクスチャを適用するには、次の手順に従います。

  1. シーンツリーでPointLight2Dノードを選択します。
  2. インスペクターパネルで、Textureセクションの下にあるTextureプロパティを見つけます。
  3. 空のテクスチャボックスをクリックし、ファイルブラウザーから目的のライトテクスチャを選択します。

これで、光源は定義された形状と色で光を放射し、動的ライティングとシャドウに視覚的に魅力的なタッチを追加します。

追加機能を含める

動的ライティングとシャドウの基本的な設定に加えて、さまざまな追加機能を導入して、ビジュアルアピールとゲームプレイ体験をさらに向上させることができます。考慮すべきアイデアをいくつか紹介します。

ライトアニメーション

ライトソースにアニメーションを追加して、命を吹き込みます。たとえば、松明やろうそくのちらつきを作成したり、キャンプファイヤーの動きをシミュレートしたり、魔法のオーブに脈動効果を追加したりすることができます。

昼夜サイクル

ゲーム内の時間が経過するにつれて、ライトの強度と色が徐々に変化する動的な昼夜サイクルを実装します。この機能により、没入感が高まり、1日の時間帯に応じてさまざまなムードが作成されます。

光のフェード

光の強度の変化にスムーズな遷移を作成して、没入感を損なう可能性のある突然のシフトを回避します。ライトを徐々にフェードインおよびフェードアウトさせることで、より自然で視覚的に満足のいく効果を実現できます。

ダイナミックシャドウ

静的なシャドウを使用する代わりに、動くオブジェクトやキャラクターにダイナミックシャドウを追加することを検討してください。キャラクターの動きを追従する追加の光源を使用することで、リアルタイムのシャドウの更新の錯覚を与えることができます。

著作権フリーの効果音

効果音は、ゲームの世界を生き生きと動的に感じさせるために重要な役割を果たします。著作権フリーの効果音を組み込んで、ダイナミックライティングとシャドウを補完することを検討してください。

ダイナミックライティングとシャドウのベストプラクティス

ダイナミックライティングとシャドウはゲームを大幅に向上させる可能性がありますが、不適切な実装はパフォーマンスとビジュアルの品質に悪影響を及ぼす可能性があります。心に留めておくべきベストプラクティスをいくつか紹介します。

光源の最適化

アクティブな光源の数を、目的の視覚効果に必要な最小限に制限します。過剰な光は、特にローエンドのデバイスでパフォーマンスに大きな影響を与える可能性があります。

ライトベーキングを使用する

静的なシーンやオブジェクトの場合、パフォーマンスを向上させるためにライティング情報をベイクすることを検討してください。ライトベーキングはライティングデータを事前に計算することにより、ゲームプレイ中のリアルタイム計算の必要性を軽減します。

シンプルなオクルータを選択する

LightOccluder2Dノードを設定する場合は、可能な限りシンプルな形状を選択します。頂点の多い複雑なオクルータは、パフォーマンスの問題につながる可能性があります。可能であれば、オクルータには単純なポリゴンまたは線分を使用してください。

カリングとレイヤー

Godotの可視性とレイヤーシステムを利用して、ライトとシャドウが可視領域に対してのみ計算されるようにします。画面外のライトとシャドウをカリングすると、パフォーマンスが大幅に向上する可能性があります。

これらのベストプラクティスに従い、追加機能を慎重に実装することで、プラットフォーマーゲームの全体的な品質を向上させる、見事な魅力的なダイナミックライティングとシャドウを作成できます。

ダイナミックライティングとシャドウでGodotゲームをより魅力的にする

ダイナミックライティングとシャドウは、ゲームの世界に命を吹き込みます。より没入感のある大気のある環境を作り出し、プレイヤーをゲームプレイ体験に引き込みます。光と影の相互作用は、感情を呼び起こし、トーンを設定し、ゲームのビジュアルストーリーテリングを強化することができます。

それが神秘的な暗いダンジョンであろうと、静かな月明かりの夜であろうと、ダイナミックライティングはゲームプレイを豊かにし、プレイヤーに永続的な印象を残します。