【Godot4】GDScriptでビルボードを実装する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【Godot4】GDScriptでビルボードを実装する

2023-3-7 | , ,

Godot4でGDScriptを使ってY軸ビルボード的なものを実装したい!

概要

今回の記事では、Godot4でGDScriptを使ってY軸ビルボード的なものを実装する手順を掲載する。

GodotのSprite3DはInspectorからビルボードを設定できるんだけども、なぜわざわざスクリプトでビルボードを実装するのか?
理由は、前者のビルボードではUnityのShaderLabで実装したビルボードのように影の表現に違和感があるからだ。

こんな感じ。
キャラクターから発生してる影がキャラクター自体に表示されてしまってる。キャラクターから発生してる影自体もキャラクターの回転が反映されてない。

スクリプトで実装したビルボードはビルボードとしては微妙だが、影の表現は自然に見えるようになる。

仕様書

環境

  • Gogot 4.0

手順書

ビルボードさせたいノードに下記のスクリプトをアタッチする。

extends Sprite3D

@onready var camera = $"../CharacterBody3D"

func _process(_delta):
    var p:Vector3 = camera.position
    p.y = position.y
    look_at(p, Vector3.UP)
    rotate_y(PI)

コード自体もやってることもUnityのときとだいたい同じ感じ。

カメラのノードを取得してる部分@onready var camera = $"../CharacterBody3D"は、それぞれのプロジェクトの設定合わせて変更してね。

このコードは4.0向けで、3.xで同じことをしたい場合は

extends Sprite3D

@onready var camera = $"../CharacterBody3D"

func _process(_delta):
    var p:Vector3 = camera.translation
    p.y = position.y
    look_at(p, Vector3.UP)
    rotate_y(PI)

になる。

カメラの位置を取得する部分var p:Vector3 = camera.positionvar p:Vector3 = camera.translationにする。
4.0ではposition、3.xではtranslationから座標データにアクセスできる。

4.0は3.xからいくつか関数名が変更になってるみたい。

まとめ(感想文)

ビルボードってかなり昔からある技術だけど、完璧なビルボードを目指そうとするとかなり難しいと感じる今日この頃。