こんにちは、Cave Engineのメイン開発者のGuilhermeです。このリリースノートを書けることをとても嬉しく思います。
この4ヶ月間、スタジオではかつてないほどにゲームやツールの開発に取り組んできました。Uniday Studioで制作中の次のゲームは、これまでのどれよりも複雑で、それに伴いエンジンも大きく進化しました。このリリースノートで、その進化を実感していただければ幸いです。
Cave Engine 1.4は、文字通りこれまでで最高のバージョンです。数え切れないほどの改善や修正が施され、WindowsとLinux両方でより安定しました。より良いユーザー体験、パフォーマンスの向上、多くのツール、高度な機能を手に入れて、ゲーム制作がより快適になります。
新機能は何?
ここでは特に興味深い機能をピックアップして紹介します。さっそく見ていきましょう。
新規ユーザー向けオンボーディングチュートリアル
Caveをこれから始めるなら、今回のバージョンはまさに最高のスタート地点です。1.4ではエンジン内のUIに統合されたオンボーディングシステムが搭載され、ゲームのテスト方法、変更方法、ランタイムとしてのエクスポートの仕方まで学べます。また、エンジン内チュートリアルやドキュメントも大幅に改善しました。

これはチュートリアルを作る代わりに、チュートリアルが不要になるほどエンジンを簡単にしようという試みの一部です。:)
新しいプロジェクト作成体験
Caveでの新規プロジェクト作成が格段に楽しくなり、新機能も盛りだくさんです。

新規プロジェクトメニューを完全に書き直しました。空のプロジェクトのほか、ファーストパーソン、サードパーソン、トップダウンゲームのテンプレートから選べます。さらに新しいゲームテンプレートは安定性と完成度が向上しています。後で詳しく説明しますが、その前に新しいプロジェクトシステムの追加機能としてランダムゲーム名ジェネレーターがあります。ゲームアイデアが浮かばなければ、このボタンを押すとインスピレーションをくれるランダムなプロジェクト名を生成できます。
新規プロジェクト用のデフォルトアセット
新しいプロジェクト作成時に様々なオプションが選べ、デフォルトのアセットでゲームを初期化できます。これには既にCaveにあった以下のものが含まれます:
- メインメニュー
- ポーズメニュー
- ファーストパーソンキャラクターコントローラ
- サードパーソンキャラクターコントローラ
- トップダウンキャラクターコントローラ
- 逆運動学付きの完全アニメーションプロトキャラクター
- ヘルスバーとゲームオーバーシステム
- レベルクリアおよび次レベル移行システム
- 生成された地形を持つデフォルトシーン
- デフォルトメッシュのプリミティブ(キューブ、球体、シリンダー、平面、円錐)
- デフォルトテストマテリアル
- プロシージャルな空のテクスチャ(雲、星、太陽など付き)
- 追加されたものの説明や拡張方法を書いたREADMEファイル
さらに今回新たに追加されたのは:

- 地形生成の改善。シーンに追加したオブジェクトが地形に沿うようになりました。
- メッシュと物理がセットになった車両コントローラのテンプレート。
- Caveのステートマシンシステムを利用した基本的なWander AIを持つ敵のテンプレート。
- ブロックメッシュ構築用アセット(壁、ドア、窓、階段など)の新しいメッシュプリミティブ。
- 新しいデフォルトの「Ramp」メッシュ。
無数のエディターUIとUXの改善
エディターのユーザーインターフェースと総合的なユーザー体験に大幅な改善を加えました。主な点をピックアップするので、他はぜひ実際に触ってみてください。
新しいUIエレメントコンポーネントのUI

UIElementの位置、スケール、アンカーポイントの設定がより簡単かつ直感的になりました。Behaviorタブの改善も行っています。
Pythonスクリプトエディターの改善
Asset BrowserからPythonスクリプトを開くと、Propertiesタブ内のフルハイトエディターでスクリプト全体を編集できるようになりました。これにより、外部タブで開くために2回クリックする必要はなくなり、Cave内でのコード作成が格段に楽になります。

また、Inspectタブでスクリプトの内容を確認できるようになり、エディターツール専用のタブも追加。ツールの登録、リロード、エディター内でのスクリプト実行が可能です。
シェーダープログラムエディターの改善
Pythonスクリプトエディターと同様に、Shader Programの頂点およびフラグメントシェーダーもPropertiesタブ内で編集できるようになりました。もちろん、必要に応じて別タブでも開けます。
コンソールタブの改善
すべてのメッセージをクリップボードにコピーするボタンが追加されました。デバッグやログ共有に便利です。
"New Entity..." メニューのプロトキャラクターと車両

デフォルトで新規プロジェクトに含まれるプロトキャラクターや車両を削除していなければ、Shift + Aで新規エンティティ追加時に素早くシーンに配置できるオプションとして現れます。
剛体の自動生成
Asset Browserからメッシュをシーンにドラッグする際にCtrlキーを押しながらドラッグすると、剛体を自動的に作成できます。
Blender風カメラ操作(3Dビュー)
Cave Engineリリース以来、最も要望の多かった機能の一つがついに実装されました。3Dビューのナビゲーション時に、Blenderのように中クリックでオブジェクトを中心に回転できます。
この機能は実験的段階なので、改善要望や不具合報告はDiscordサーバーへお寄せください。
ステートマシンシステムの改善

状態遷移のコードを書く際、これまでは"from state"のローカル変数へ辞書のようにアクセスする必要がありましたが、今後はローカル変数として直接利用可能になります。
アップデート前の遷移コード例:
result = state.get("myVar") == 3
アップデート後の例:
result = myVar == 3
パスコンポーネントシステムの改善

前バージョン1.3で実験的に追加されたPath ComponentとPath Toolは大きく進化しました。1.4の主な特徴は新しいPathComponentメソッド、GetSampleAdvance(...) と GenerateProceduralMesh(...) です。
GetSampleAdvanceは与えられた位置に最も近いパス上の位置を取得し、さらに進行量を返します。これによりキャラクターや車両などをパスに沿って動かすのに必要な機能が揃いました。
GenerateProceduralMeshはメッシュを受け取り、それをパスに沿って配置・生成し、新たなメッシュを作成できます。道路や壁、建物などの生成に役立ちます。
地形システムの改善
今回のバージョンで地形システムは多くの改善を受けました。なかでもレンダリング速度が大幅に向上しています。

ついにUNDOが可能に!(Ctrl + Z)
地形ツールでのスカルプトやその他の操作を元に戻せるようになりました。これは大きなQOL向上です。
地形レンダリングの最適化
地形全体の描画に使用するドローコール数を約100分の1に減らし、理論上の最小値に近づけました。内部システムも改良し、さらに高速化しています。パフォーマンス向上を期待してください。
新しいパスアライメントモード
前述のパスシステムの改善は地形システムにも影響し、シーン内のパスを選んで地形を整形する新しいモードが追加されました。これにより道路などの作成が簡単になります。
改良されたハイトマップ生成
これまで標準のハイトマップ生成は平凡でしたが、より面白い地形を作れるよう調整しました。同じシードを使って毎回同じ地形が生成されてしまう問題も修正され、コードからランダムシードを設定することも可能です。これにより地形生成のシードも適切に更新されます。
新しい地形レイキャスティング方法
起点とターゲット位置を指定して、地形コンポーネントにレイキャストを実行し、地形との衝突位置と法線を取得できます。
レンダリングパフォーマンスの向上
内部のOpenGLキャッシュシステムに多くの改善を加え、ドライバーのオーバーヘッドを更に削減しました。Cave Engineはすでにドライバーオーバーヘッド削減のための広範なキャッシュとシステムを備えていましたが、今回さらに一段とレベルアップしています。
場合によっては以前よりもオーバーヘッドが約1000倍少なくなるベンチマークも取得しています。これは環境によりますが、もし以前ドライバーオーバーヘッドでパフォーマンスが制限されていたなら、今回のバージョンで大きな改善を感じられるでしょう。
新しい内部最適化には以下が含まれます:
- シェーダープログラムバインディングキャッシュ
- ユニフォーム値キャッシュ
- キャッシュ無効化ロジック
これらの変更により、冗長なOpenGL呼び出しが削減され、レンダリングパフォーマンスが向上します。
さらに:
- ユニフォームバインディングの安全性向上
- AMDの深度クリア問題に対する可能なワークアラウンド
Linux版の修正
Linuxユーザーの中には、特に新しいプロジェクトを作成する際に発生していた数多くのPythonパスの問題を修正しました。
新しいPython API
上記で触れた機能の多くをサポートするため、新しいPython APIの追加や更新が行われていますが、それだけではありません。ここでいくつかを紹介します。
VehicleComponent.SetSteering(...)
Mesh.AddMeshAsLod(...)
PathComponent.GenerateProceduralMesh(...)
PathComponent.GetSampleAdvance(...)
PathEdge.GetPointA()
PathEdge.GetPointB()
Transform.AlignAxis(...)
VSyncやFPS制限の新しいオプションも追加されました。すべての新機能はPythonスタブを確認してください。
さらなるcave.ui APIとより良いツール開発
ゲーム制作や開発支援のためにエディター用のカスタムツールを作成したい方、作成が必要な方へ、より良い環境が整いました。cave.uiコードのAPIスタブを確認でき、より安定したエディターツーリング体験を期待できます。デバッグタブはゲームのリロード時に再読み込みされるようになりました。
バグ修正
本リリースに含まれる修正は以下の通りです:
- Linuxのエクスポート問題を修正
- 不正なPythonパスによるLinuxのクラッシュを修正
- 地形のハイトマップが常に同じ結果を生成していた問題を修正
- テンプレートリロードの再帰クラッシュを修正
- マニュアル露出を使用した際の黒いサムネイルを修正
- デフォルトのDebugTabコードの不正を修正
- 空文字列のときにCodeEditorが編集不可だった問題を修正
- アニメーションメッシュの不正なAABB境界を修正
- 地形チャンクのカリングエラーを修正
- StateMachineコンポーネント参照の欠落を修正
- エディターUIの誤字を修正
- ドキュメントの誤字を修正
- EntityMapのクラッシュを修正
- CodeEditorの文字列ハイライト問題を修正
- CodeEditorの文字列後のコメントハイライトを修正
- クリップボードコピーがSDLを使っていなかった実装を修正
既知の問題
いくつかの既知の問題があります。まだ修正されていない理由は、優先順位が低いか、再現が一貫しないためです。もし何か手がかりがあれば、ぜひDiscordサーバーで教えてください。
- Caveは一部の(または多くの)Wayland Linuxシステムで動作しません(現状はX11のみ対応)。
- カメラアングルによって地形チャンクが消えることがあります(誤検知によるカリング問題)。非常に稀な不具合で、まだ再現できていません。