3DWorld ブログ: https://3dworldgen.blogspot.com
3DWorld は、2001 年にカリフォルニア大学バークレー校で CS184 コンピューター グラフィックス コースを受講して以来、私が取り組んできたクロスプラットフォームの OpenGL ベースの 3D ゲーム エンジンです。次の機能があります。
OpenGL の 3D グラフィックス関数、クラス、ラッパー
ホットリロードを備えたシェーダジェネレータ/プロセッサ
地形、植生、都市、建物の内外装などのプロシージャルコンテンツ生成。
銀河、星、惑星、月などを含む手続き型宇宙ジェネレーター。
リアルタイムのユーザー編集による手続き型ボクセル 3D 地形生成
さまざまなノイズ機能、エロージョン、リアルタイム ユーザー編集、ハイトマップ読み取り/書き込みを含む地形ジェネレーター
プロシージャルな建物 (内部および外部)、道路、および都市の生成
プリミティブ オブジェクト タイプおよびその他の物理シミュレーション (10K を超える動的オブジェクト)
天気(雨、雪、ひょう、風、雷)に応じたリアルタイムの昼夜サイクル
反射と屈折を備えた物理ベースのマテリアル
ダイナミック シャドウ、アンビエント オクルージョン、最大 1024 個のダイナミック光源、後処理効果
スケルトンアニメーションとプロシージャルアニメーション
一人称シューティングゲーム「スマイリーキラー」を内蔵
組み込みの宇宙船 + 惑星植民地化ゲーム
オープンワールドのアイテムコレクションとゾンビゲームプレイモードの構築
FPS ゲーム、ゲームプレイの構築、宇宙ゲームのプレイヤー向けのコンピューター AI
Lightwave オブジェクト ファイル、3DS 形式のインポーター、および他のファイル形式の Assimp
テクスチャの読み取りサポート: JPEG、PNG、BMP、TIFF、TGA、DDS
大規模なモデル (1GB を超える頂点/テクスチャ データ) の高速ロードとリアルタイム レンダリング用に最適化されています。
コミット 6607 でプロジェクトを svn から git に変換しました。コードの大部分は C++ で書かれており、シェーダーには GLSL が使用されています。これはクロスプラットフォーム プロジェクトであることを目的としています。 Microsoft Visual Studio 2022 プロジェクト ファイルが含まれています。 linux/gcc makefile も含まれていますが、より実験的なものです。詳細については、README.linux を参照してください。プロジェクトは少し作業すれば Linux 上の gcc でビルドできるはずですが、これを試してからしばらく経ちました。古い Makefile がありますが、古いものですが、修正して使用できるようにするのにそれほど手間はかかりません。
これは大規模なリポジトリであり、現在約 1GB であることに注意してください。ソース コード、構成ファイル、テクスチャ、サウンド、小さなモデル、照明ファイル、シーン データ、ハイトマップ、プロジェクト ファイルが含まれています。このリポジトリには、一部のシーンで使用される大きなモデル ファイルが含まれていないため、これらを個別にダウンロードする必要があります。これは、参照データが見つからないために一部のシーン設定ファイルが機能しないことを意味します。現在の依存関係のリストは次のとおりです。
OpenGL 4.5 (Windows 8/10/11 の最新グラフィックス ドライバーが付属している必要があります)
OpenAL 1.1 (オプション) (システムインストール: https://www.openal.org/downloads/ または、新しい openal-soft: https://github.com/kcat/openal-soft を試すことができます)
freeglut-2.8.1 (現在の 3.0 バージョンはおそらく動作します: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (オプション) (1 つのバージョンはここにあります: https://github.com/vancegroup/freealut)
zlib-1.2.11 (新しいバージョンはここからダウンロードできます: https://zlib.net/)
glew-2.0.0 (おそらく 2.1.0 も同様に動作します: http://glew.sourceforge.net/)
gli (最新バージョン: https://github.com/g-truc/gli / ヘッダーのみ、依存関係ディレクトリに含まれます)
glm-0.9.9.0 (最新バージョン: https://glm.g-truc.net/0.9.9/index.html または https://github.com/g-truc/glm / ヘッダーのみ、依存関係ディレクトリに含まれています) )
libpng-1.2.20 (オプション) (私のバージョンは非常に古いです。最新バージョン: https://libpng.sourceforge.io/index.html);地図画像のエクスポートを除き、ほとんどの場合は stb_image に置き換えることができます。)
libtiff-4.3.0 (オプション) (最新バージョン: http://www.simplesystems.org/libtiff/)
Assimp (オプション) (https://github.com/assimp/assimp/blob/master/Build.md でビルド手順を参照してください。おそらく vcpkg ビルド手順が最も簡単です。)
libtarga (ソースが含まれています)
STB ヘッダー: stb_image、stb_image_write、stb_dxt (ソースが含まれています)
これらのライブラリのほとんどの機能を取り除いたバージョンを依存関係ディレクトリに含めました。 3DWorld に必要のない大きなファイルをすべて削除し、場合によってはサンプル/テスト/ドキュメントも削除しました。これらは Windows 11 上の MS Visual Studio 2022 Community で構築されています。 これらを使用する場合は、ディレクトリをルート ディレクトリにコピーし、他のバージョンの Windows または Visual Studio に必要なライブラリを再構築する必要があります。 vcpkg を複製/インストールする場合、それは 3DWorld ディレクトリと同じレベルにある必要があります。
これらの依存関係の多くは古いため、新しいライブラリに置き換えられる可能性があることに注意してください。私はコンテンツを追加することに集中していて、これにはあまり興味がありません。 Freeglut はおそらく SDL に置き換えられ、イメージ ライブラリは STB または DevIL に置き換えられるはずです。 (STB はフォールバックとして使用されますが、使用されるすべてのイメージをサポートしているわけではありません。)
3DWorld をビルドする場合は、dependency/ フォルダー内のプロジェクトを使用することも、自分でダウンロードしてビルドし、それらを使用するようにプロジェクト設定を変更することもできます。現在、3DWorld には x64 MS Visual Studio 2022 Community ビルド ターゲットを使用していますが、win32 ビルド ターゲットも機能します。 MSVS 2019 プロジェクト 3DWorld_msvs2019.vcxproj は現在期限切れですが、機能する可能性があります。 DLL を lib64/ フォルダーからリポジトリのルートにコピーし、その他のプロジェクト設定を変更すると、32 ビット モードでコンパイルして実行できるはずです。
Linux を使用している場合は、提供された makefile を使用してビルドを試みることができます。ファイル README.linux が役立つはずです。私は 3DWorld をビルドし、主に gcc 7 を備えた Ubuntu 18.04 と gcc 9 を備えた Ubuntu 20.04 で実行できるようにしました。
3DWorld はコマンド ラインで設定ファイル名を受け取ります。見つからない場合は、defaults.txt を読み取り、そこにリストされている構成ファイルを使用します。これらの congig ファイルの一部には、Sponza Atrium、Stanford Dragon、スポーツカーなどのモデルが含まれています。これらのファイルは大きすぎて git リポジトリに保存できません。モデルが見つからない場合に、3DWorld に致命的ではないエラーを生成させようとしました。より大きなモデルの多くは、McGuire Computer Graphics Archive: http://casual-Effects.com/data/ で見つけることができます。
GitHub リポジトリには大きすぎる 3D モデルをパッケージ化し、ここの Google ドライブに置きました (現在 v6 まで): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing これらのモデルの一部は 3DWorld の内部形式で保存されているため、他のプロジェクトで再利用しないでください。その他は、Mixamo などの Web サイトからのものです。プロジェクトのテクスチャ ディレクトリとマージできる、建物の内装で使用される追加のテクスチャを含むテクスチャ ディレクトリもあります。
システム要件:
Windows 8/10/11。 Linux で gcc で makefile を使用する場合。
Microsoft Visual Studio 2019 または 2022。OpenMP のサポートには、プロフェッショナル バージョンまたはコミュニティ バージョンが必要です。 Linux で gcc を使用してみることもできます。
比較的新しい世代の Nvidia または AMD GPU (Intel グラフィックスを搭載したラップトップで動作しますが、12 ~ 20 FPS で動作します)
大規模なシーンには少なくとも 8 GB のシステム メモリ
大規模なシーンには少なくとも 4GB GPU メモリ。私のGPUには12GBのメモリが搭載されています
トラブルシューティング: 一部のシステム (特に AMD カード) では OpenGL コア コンテキストが必要なようです。これは、設定ファイルに「use_core_context 1」を追加することで選択できます。これは、他のすべてのトップレベル設定ファイルを読み取った後に適用されるファイルである scene_config/config_post.txt でも有効にすることができます。状況によっては(一部の Nvidia カード)、コア コンテキストを使用すると速度が低下する可能性があるため、デフォルトでは有効にしていません。
便利なキー (キー バインドの詳細については、readme-keys.txt を参照してください):
a、s、d、w: 動き
q、e: 武器の変更 (ゲームプレイ モード)
「スペース」: ジャンプ/発射
'esc': 終了
'tab': オンスクリーン メニュー (矢印キーと 'X' でメニューを切り替えます)
b: オブジェクト/物理/AI を有効にする (地上モードおよびユニバース モードのゲームプレイ用)
F1: 地上/宇宙/タイル地形モードを切り替えます
F2: ゲームプレイモードを切り替えます
m: 全画面モードを切り替えます
h: 飛行移動の切り替え
v: カメラモードの変更 (クリスタルボール/軌道対一人称)
V: マウスの外観を切り替えます
K: オーバーヘッド マップ モードの切り替え
×:一時停止
マウス左: ターン/アクション
マウス右: 火
私は現在、GPLv3 ライセンスに基づいて教育目的でこのリポジトリを作成しています。一部のサブモジュールは、私の GitHub アカウントで商用利用と互換性のある他のライセンスで利用できます。これは商業ツールとして意図されたものではありませんし、私はここでお金を儲けようとしているわけではありません。また、フィードバック、バグレポート、提案は受け付けていますが、現段階ではこのプロジェクトに携わってくれる人を探していません。これを実際のゲームにすることに決めたら、状況は変わるかもしれません。あなたのプロジェクトでここにあるものを使用したい場合は、お知らせください。
3DWorld に関するこれ以上のドキュメントはありません。ただし、アルゴリズムの説明と多くのスクリーンショットを含むブログを持っています: https://3dworldgen.blogspot.com
私のブログからリンクされているいくつかのスクリーンショットを次に示します。
ここは、棚が並ぶ建物の小売店エリアです。建物には、プレイヤーが手に取って持ち運べる何万ものインタラクティブなオブジェクトを含めることができます。 (config_heightmap.txt)
他の部屋に設置されたカメラは、セキュリティ モニターにリアルタイムのビデオ フィードを表示します。 (config_heightmap.txt)
ゾンビ (経路探索やその他の AI 動作を伴う) が歩き回り、屋内プールに落ちます。水の水面には波紋、飛沫、反射、屈折があります。 (config_heightmap.txt)
駐車した車と天井にスプリンクラーのパイプが配線された駐車場。 (config_heightmap.txt)
人物、間接照明、天井に沿って配線されたパイプを備えたプロシージャルな建物の地下室。 (config_heightmap.txt)
背景にオフィスビルがある、手続き的な住宅街。歩道にも建物の中にも車や人がたくさんいます。 (config_heightmap.txt)
プロシージャルな建物の内部 - プロシージャルに生成された書籍を備えた図書館。 (config_heightmap.txt)
プロシージャルに生成された完全なインテリアを備えた住宅とオフィスビル。 (config_heightmap.txt)
間接照明のある夜間シーンの反射 (金属)、屈折 (ガラス)、発光、および半透明の球体。リアルタイムで描画されます。球体はインタラクティブに移動できます。 (config_white_plane.txt)
建物、道路、車、歩行者が存在する手続き型の都市。 (config_heightmap.txt)
前景に橋がある夜のプロシージャルな都市。 (config_heightmap.txt)
松の木がある初期の手続き型都市。
初期の手続き型都市。
都市を配置する前に、水圧浸食シミュレーションとドメイン ワープ ノイズを使用した地形。 (config_heightmap.txt)
川、木、草などを含むタイル地形モード (config_t.txt)
木、植物、草を含むリアルタイムのインタラクティブな破壊的な火災/煙シミュレーション。 (config_trees.txt)
小惑星帯を持つプロシージャルユニバース太陽系。 (universe/config_universe.txt)
ダイナミックな影を落とす光源と間接照明を備えた Crytek Sponza アトリウム シーン。 (sponza/config_sponza2.txt)
非常に詳細な博物館モデルの 10,000 個のインスタンスがタイル地形モード (ピュージェット湾ハイトマップ) で配置され、影と間接照明を使用してリアルタイムで描画されます。 (config_museum_tt_model.txt)
反射床とリアルタイムの 200 個の動的点光源を備えた Crytek Sponza アトリウム。 (sponza/config_sponza2.txt)
オフィスビルの中庭にある、密度に基づく光の減衰を伴う多くの反射/屈折球体と立方体。 (mapx/config_mapx.txt)
ダイナミックな降雪と、カスタム シェーダーでレンダリングされたパス トレースされた積雪マップを備えたサン ミゲルのシーン。 (config_san_miguel.txt)
サン ミゲルのシーンは、パス トレースされた事前計算された間接照明、法線マップ、およびキューブ マップされた反射面を使用してリアルタイムでレンダリングされます。 (config_san_miguel.txt)
インスタンス化されたビルボードを使用してタイル地形モードでリアルタイムに描画された、200 万のプロシージャル生成 + 配置された松の木 (500K 表示)。 (config_t.txt)
Mapx シーンでの 10,000 個のダイナミック ボックスのインタラクティブなスタッキング。スタックの移動や倒したり、シーンの保存・再読み込み・編集が可能です。 (mapx/config_mapx.txt)
小さな小惑星を含むリングを持つ、手続き的に生成された惑星。 (universe/config_universe.txt)
10,000 個の動的 (回転および周回する) 小惑星、100,000 個のポイント スプライト パーティクル、および塵のボリューム ビルボード雲を含む小惑星帯。 (universe/config_universe.txt)
草、花、松の木、ヤシの木、落葉樹など、手続き的に生成されたさまざまな形の植生を表示するタイル地形モード。これらは実際には影を落とすポリゴン モデルです。 (config_t.txt)
Crytek Sponza シーンでは、リアルタイムでダイナミックなライトがノイズベースのボリュームスモークの中を通過します。 (sponza/config_sponza2.txt)
Crytek Sponza シーンの反射性の金属床。間接的な太陽光と空の照明が使用されます。 (sponza/config_sponza2.txt)
オフィスビルのロビーで、キューブ マップ反射テクスチャを使用してダイナミック シーンにリアルタイムで描画された反射球、トーラス、立方体。マテリアルは、物理ベースのモデルを使用した金属と誘電体の混合物です。 (mapx/config_mapx.txt)
間接照明、反射面、シャドウ マッピングを使用した博物館のシーン。このモデルはプロシージャル テクスチャリングされています。 (config_museum.txt)
10億個の雪の粒子を落とし、降り積もった雪によって生成される雪に覆われた家のシーン。雪は事前に計算されていますが、リアルタイムでレンダリングできます。 (ハウス/config_house_Winter.txt)
各雨滴と濡れた/反射面の衝突検出を含む、雨のシミュレーションとレンダリング。 (ハウス/config_house.txt)
動的オブジェクトに適用されるスポットライトの重なりによる間接照明と影。 (mapx/config_mapx.txt)
タイル地形モードでのハードウェア テッセレーションを使用した波のある水のシミュレーション。 (config_t.txt)
間接照明を使用してプロシージャルに生成された 3D ボクセルの氷の洞窟。この地形は、ブラシや武器の射撃を使用してリアルタイムで編集できます。 (config_ice_caves.txt)
テクスチャを使用せずにフラグメント シェーダーで完全に描画された、手続き的に生成された惑星。これには、地形の生成 (氷、雪、岩、森林、砂漠、土)、水、雲、大気が含まれます。 (universe/config_universe.txt)