This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold は基本的に 3D エンジンです。2D 素材だけを扱う場合でも、レンダリングはすべて 3D で行われ、画面には正投影されます。Defold では、3D アセット、つまり モデル(model) をコレクション(collection)に追加することで、完全な 3D コンテンツを利用できます。3D アセットだけを使って完全に 3D のゲームを作成することも、3D と 2D のコンテンツを自由に組み合わせることもできます。
モデルコンポーネントは、ほかのゲームオブジェクト(game object)のコンポーネント(component)と同じ方法で作成します。次の2つの方法があります。

モデルを作成したら、いくつかのプロパティを指定する必要があります。
Id、Position、Rotation のほかに、次のコンポーネント固有のプロパティがあります。
上記のプロパティに加えて、モデルの各メッシュにマテリアル(material)を割り当てるフィールドもあります。
マテリアルに応じて、1つ以上のテクスチャプロパティがあります。
モデルコンポーネントを配置したら、通常の Scene Editor ツールでコンポーネントやそれを含むゲームオブジェクトを自由に編集、操作し、モデルを必要に応じて移動、回転、拡大縮小できます。
さまざまな関数やプロパティを使って、実行時にモデルを操作できます(使い方は API ドキュメントを参照してください)。

Defold は、実行時にアニメーションを制御するための強力な機能を備えています。詳しくはモデルアニメーションのマニュアルを参照してください。
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
アニメーションの再生カーソルは、手動でもプロパティアニメーションシステムでもアニメーションできます。
-- set the run animation
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animate the cursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
モデルでは、glTF のモーフターゲットアニメーションも使用できます。モーフターゲットのウェイトは、ほかのモデルアニメーションと同様に model.play_anim() でアニメーションし、実行時に model.get_blend_weights() と model.set_blend_weights() を使って読み取りや上書きができます。詳しくは、モデルアニメーションのマニュアルのモーフターゲットのセクションを参照してください。
モデルには、go.get() と go.set() で操作できるさまざまなプロパティもあります。
animationhash)(読み取り専用)です。アニメーションを変更するには model.play_anim() を使います(上記を参照)。cursornumber)です。materialhash)です。マテリアルのリソースプロパティと go.set() を使って変更できます。例については API リファレンスを参照してください。playback_ratenumber)です。textureNhash)です。N は 0-15 です。これらのプロパティは go.get() で読み取り、テクスチャのリソースプロパティと go.set() を使って変更できます。Defold は1回の描画で最大16個のテクスチャをサポートしますが、テクスチャサンプラーの上限が低いグラフィックスアダプターでは、シェーダーで使用できる数がこれより少ない場合があります。3D ソフトウェアでは通常、オブジェクトの頂点に色やテクスチャなどの属性を設定できます。この情報は、3D ソフトウェアからエクスポートする glTF .gltf または .glb ファイルに格納されます。ゲームの要件に応じて、オブジェクトに適した 性能の高い マテリアルを選択したり作成したりする必要があります。マテリアルは、シェーダープログラム と、オブジェクトのレンダリングに使う一連のパラメーターを組み合わせたものです。
出発点として利用できる組み込みマテリアルがいくつかあります。
組み込みのモデルマテリアルは、頂点空間にローカル空間を使用します。スキニングされたモデルでは、頂点空間をローカル空間にすることで、頂点シェーダーがボーン行列テクスチャを使って GPU 上でスキニングを実行できます。また、モデルのインスタンシングにもローカル頂点空間が必要です。そのため、GPU でスキニングするモデルやインスタンシングするモデル用のカスタムマテリアルでは、頂点空間の設定に Local を使用することをお勧めします。
ボーン行列キャッシュは RGBA32F テクスチャを使用します。使用中のグラフィックスアダプターがこのテクスチャ形式をサポートしていない場合、Defold はローカル空間のマテリアルを使用するアニメーション付きモデルコンポーネントを作成できません。そのため、OpenGL ES 2.0 と WebGL 1.0 では、サポートの有無はアダプターの浮動小数点テクスチャ拡張に依存します。この拡張を持たないアダプターとの互換性を確保するには、ワールド空間のカスタムマテリアルを使います。このマテリアルは CPU スキニングを使用し、モデルのインスタンシングは使用できません。キャッシュの寸法は、Model のプロジェクト設定で調整できます。
モデル用のカスタムマテリアルを作成する必要がある場合は、マテリアルのドキュメントを参照してください。シェーダーのマニュアルでは、シェーダープログラムの仕組みを説明しています。
既定の model マテリアル(material)には、go.set() または go.animate() を使って変更できる以下の定数があります(詳しくはマテリアルのマニュアルを参照してください)。例:
go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tintvector4)です。vector4 を使って色調を表し、x、y、z、w はそれぞれ赤、緑、青、アルファの色調に対応します。デフォルトのレンダースクリプト(render script)は 2D ゲーム向けに作られており、3D モデルでは動作しません。ただし、デフォルトのレンダースクリプトをコピーして数行のコードを追加すれば、モデルをレンダリングできるようになります。たとえば、次のようにします。
function init(self)
self.model_pred = render.predicate({"model"})
...
end
function update()
...
render.set_depth_mask(true)
render.enable_state(graphics.STATE_DEPTH_TEST)
render.set_projection(stretch_projection(-1000, 1000)) -- orthographic
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
レンダースクリプトの仕組みについて詳しくは、レンダリングのドキュメントを参照してください。