Castle Game Engine – Pascalベースの無料オープンソース・クロスプラットフォーム 3D/2Dゲームエンジン
(castle-engine.io)- Pascal開発者が3D・2DゲームとUIを1つのプロジェクトで作成し、複数のプラットフォームへ配布できる無料のオープンソースエンジン
- ビジュアルエディタとコンポーネント体系により、シーン、カメラ、ナビゲーション、照明、ボタン・画像・ラベルといったゲーム・UI構成要素をまとめて扱える
- 3Dモデル、2Dアニメーション、スプライトシートベースのワークフローをサポートし、glTF、X3D、IFCとBlender・Sketchfab連携を活用できる
- シェーダー効果、影、鏡、物理ベースレンダリング、バンプマッピング、ガンマ補正などのレンダリング機能を提供し、基本エンジンだけで多様なグラフィック表現が可能
- コマンドラインビルドツール、Dockerイメージ、主要なCIドキュメントを備え、オープンソース・商用アプリケーションの両方に適用しやすい構成
エディタと開発方式
- Castle Game Engineはデスクトップ、モバイル、コンソール、Web向けの3D/2Dゲームエンジン
- ビジュアルエディタで3D・2Dゲームとユーザーインターフェースを設計できる
- UIの自動スケーリングとアンカーをサポート
- Visual Studio Code、Lazarus、Delphiなど複数のIDEと統合可能
- コンポーネントはビューポートとUI構成を分けて扱う
- 3D/2Dワールドではシーン、カメラ、ナビゲーション、プリミティブ、照明などを使用できる
- UIではボタン、画像、ラベルなどを使用できる
- コード基盤はmodern Object Pascalで、高速ビルドと高速実行を標準で提供
アセット、グラフィックス、配布
- データ定義方式には3Dモデル、2Dアニメーション、スプライトシートが含まれる
- オープン標準のglTFとX3Dを使い、BlenderやSketchfabのような制作ツール・アセットリポジトリと連携できる
- グラフィック機能には、組み合わせ可能なシェーダー効果、影、鏡、物理ベースレンダリング、バンプマッピング、ガンマ補正が含まれる
- クロスプラットフォームの対応先はWindows、Linux、macOS、FreeBSD、Raspberry Pi、Android、iOS、Nintendo Switch、Web
- どのデスクトッププラットフォームからでも作業できる
- オープンソースとCI親和性はコマンドラインビルドツールとDockerイメージによって支えられている
- GitHub Actions、GitLab CI、Jenkins、Woodpecker CIなど各種CI向けのドキュメントと準備済みファイルを提供
- エンジンは完全なオープンソースであり、独自仕様アプリケーションを含むあらゆるアプリケーションの開発に利用できる
1件のコメント
Hacker News の意見
https://castle-engine.io/why_pascal
ここには少し冷や水を浴びせる必要がありそう。挙げられている理由の大半は、安全性、クロスプラットフォーム、ライブラリのように、ほかのモダンな言語にもあるものだし、その一つに可読性が挙げられているのは納得しにくい。
毎日8時間 Pascal のコードを扱っているが、一般的な C の構文より読みやすいとは思わないし、むしろはるかに読みにくいと思う。構文を表すのに単語全体を使う必要があるので、脳が「これはコード構造だ」と「これは実際のコードだ」を即座に区別しにくく、単語を実際に読まなければならない。非常に非生産的な設計だと思う。
このページは20年前に書かれたもののように感じる。特に型安全性のような理由は、当時ならずっと説得力があっただろうと思う。
ほかの言語でもこういうことが可能なのかは分からない。
極端な場合、たとえば難解な言語や命令型機能しかない XML ベースの言語でオブジェクト指向コードを書こうとするような場合でなければ、可読性は読む人次第だと思う。
Go も、言語自体をよく知らなかったのに追いやすかった唯一の別の言語だったが、Go は機能がずっと単純で制限されている。一方 Free Pascal は何でも入っているキッチンシンク型言語なのに、それでも読みやすいほうだ。
ただし Free Pascal を使う一番の理由は、言語自体というより Lazarus IDE、FCL、LCL フレームワークだと思う。高速なコンパイラとまともな最適化器、さらに性能が必要なときに使える新しい LLVM バックエンド、多数の対応プラットフォームも利点だ。
後方互換性も非常に重要だ。数年前に問題なく動いていたコードが外部要因なしに壊れるなら、その言語がどれほどきれいで一貫していて優雅でも関係ない。自分にとって重要なのは、動いていたコードが動き続けることだ。
そしてある単語を何度か見れば、ここで言う意味で「読む」のではなく、頭の中の語彙にある別の単語やイメージと照合するようになる。言語の語彙に非常によく似た単語が使われないという前提なら、単語を読むことは中括弧を読むことより難しいわけではない。
一文字の記号は、人によっては、あなたにとって単語がそうであるように、把握しにくいことがある。良い IDE とコード構造があれば、構造とコードを区別するのも容易になる。
ただ、ゲームに Pascal のゲームエンジンを使いたい主な理由は、ガベージコレクションを避けられるからだ。
関連記事:
Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - 2023年7月、コメント307件
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - 2023年6月、コメント3件
Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - 2023年6月、コメント10件
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - 2021年8月、コメント3件
Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - 2020年7月、コメント20件
Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - 2018年1月、コメント2件
Pascal 系の言語を最後に使ったのがいつだったか、もう覚えていない。2001年の大学のプログラミング授業で Delphi を使う必要があり、学校は Delphi 4 だったが、自分は Delphi 5 を買った。その後1〜2年くらいはさらに触っていたと思うが、2005年以降はほとんど使っていないはず
大学では在庫管理プログラムを作る必要があった。IT コースだったので、ほとんどの人はプログラミングが自分の進む方向ではなく苦労していたが、自分は「プログラミングの神童」に近かったので Delphi にはすぐ順応できた
Delphi 自体はよく知らなかったが、コーディングを始めて
var、begin、end、:=などを入力した瞬間に Pascal 系だと分かった。高校時代に Turbo C と Turbo Pascal を持っていたおかげで、少し先に進めた難しかったのは、在庫データをバイナリファイルに保存し、二分探索でデータを探すことだった。チューターが旧式だったので、現代の Go や C# では当たり前とされる、より多くの組み込みの解決策が Delphi にもあったのかもしれない
みんなビルドを通すのに苦労していて、今思えば良い思い出だ。今では Pascal は Basic と同じカテゴリに置いている。面白いプロジェクトに見えるが、Pascal を使う気はないので、自分にとっては選択肢から外す要因になる
それでも、いまだにかなり大きな Pascal 支持層がいても驚かない。そうなら彼らにとっては良いことだ
昔は Pascal のコードを C に移すとき、
begin/endを波かっこに置き換え、インターフェース宣言をヘッダーファイルに移し、分かりやすい名前の付いた関数を暗号のようなstrtok呼び出しに置き換えたりしていた。比べると不必要に見た目が悪かった今では C がいちばん好きな言語だが、Pascal のすっきりした感じと Delphi のユーザーフレンドリーさは、優れた開発者体験とは何かを今も思い出させてくれる
10年にわたって Android Studio を使っているが、20年前の Borland Delphi Architect の体験にはまったく及ばない。今はより高度な機能があるのかもしれないが、比べると互いに分離した混沌に近い
家で Basic を学んだ後、高校に行って初めて学んだ「本格的な」プログラミング言語が Pascal だった
だが1〜2年後に C を見つけてからは、Pascal を振り返ることはなくなった。C のほうがより「プロ」っぽく、より柔軟で、ハードウェアにより近いように見えた。Pascal は GUI アプリ開発により向いていて、C は OS の深い内部からドライバー、ゲーム、GUI アプリまで何でも扱えるように見えた
もちろん Pascal も C がすることはすべてできたので愚かな考えだったが、若い自分にはより「本格的」でなく、より「プロ」っぽくないように見えた
1996〜97年ごろ Turbo Pascal で炎のエフェクトを作って遊んでいたが、ほとんどのチュートリアルは
asmとmode 13hを使っていて、自分が持っていたのはasmキーワードをサポートしない Turbo Pascal 5.5 だけだった少しいじった後、1997年末に C を知り、C の
forループを見てからは Pascal には二度と触れなかったいいね。プロジェクトがうまくいくといい。言語選択が興味深いし、ずっと Pascal を古い言語だとばかり思っていたが、どうやら自分が間違っていたようだ
大きな Pascal コードベース がどんなものか気になってコードを見てみた。2001年ごろ以降、意味のある規模の Pascal コードを見たことがなかった
目についたのはファイル名で、すべてのソースファイルの前に
castleを付ける方式は好きではない。ファイルが何に関するものなのか把握しにくくなり、全部が似たように見えてしまう実際のコードについては Pascal を使ったことがないので言いにくいが、エンジン自体は良さそうに見える
yyプレフィックスを付けるのと変わらない。どのファイルが Castle のファイル なのか分かりやすく、他のライブラリのファイルやユニットとの衝突も避けられるほとんど意味のない揚げ足取りだ
あの Pascal 開発者たちは、ものすごく生産的に仕事をこなしていそうな気がする
一方、自分がプロジェクトで使う Rust のような、より人気のある言語では、多くのプロジェクトが「grep を1000回目に作り直したが、今回はちゃんと作った」系に見えるという印象がある
Delphi 製品が Borland/Embarcadero であれほどひどく管理されていたのは本当に残念です。
Object Pascal は優れた言語です。今ではほぼすべてのプラットフォーム向けにネイティブコードを生成できます。生成されるバイナリは小さく速度も速く、C に近いレベルなので、通常は同等の Python コードより 100〜10000 倍速く動くと考えられます。
Castle Engine は巨大なプロジェクトで、RAD 方式でゲームや 3D アプリケーションを非常に簡単に作れるようにしてくれます。他の巨大な Pascal フレームワークと違ってレガシー製品ではなく、非常に活発に開発されています。開発者たちを本当に深く尊敬しています。
同じように巨大で印象的なプロジェクトとして、高度に最適化されたコードベースの ORM/SOA/MVC フレームワークである Mormot があります。
Object Pascal と Mormot でサーバーアプリケーションを作るのは簡単で、NodeJS が秒間 500 リクエストを処理できる状況なら、Pascal コードは秒間 10000 件以上の領域に入ることができます。
そのため、他の言語では負荷を処理するために何十台ものサーバーが必要になる場合でも、Object Pascal ベースのサーバーコードなら単一サーバーで容易に動かせます。この言語を使えばコストを大幅に削減できます。
多くの人は Object Pascal を教育用言語としてしか覚えていませんが、言語は進化しており、他の言語にはない機能も今なお備えています。特に重要なのは RTTI、つまりリフレクションです。現在の潮流に遅れている領域は 1 つだけで、Go のようにマルチスレッド/コルーチンが言語自体に統合されていない点です。
最後に、40 年前に書いたコードを今でもコンパイルして実行できます。その 40 年の間に数多くの言語が流行しては消えていきましたが、Pascal はまだ残っています。
Castle Engine に話を戻すと、Object Pascal に慣れていなくても、彼らのビジュアルエディタはぜひ使ってみることをおすすめします。本当に驚くほどです。
Pascal(Turbo/Borland) でプログラミングしていた時代が一番楽しかったです。コンパイル単位である「Unit」がそのままうまく機能し、依存関係の階層は DAG 形式だけが許されていました。コンパイルも利用も非常に速く、編集やデバッグも速かったです。
Delphi に移行する中で、何かを失ってしまったように感じます。悪い製品だったという意味ではありませんが、人々は別の場所に目を向け始めました。
それでも Pascal のおかげで Apple Basic から C/C++ へ移るための足がかりを得られ、インラインアセンブリも少しずつ使いながら学べたあの時代を、今でも大切に思っています。