これは、Vulkanサポートとミッションパックを含む公式Quake 2コードv3.21です。このプロジェクトの目標は、元のゲームとできるだけ多くの互換性を維持することです。1997年に知っていた純粋なバニラQuake 2の経験です。しかし、さまざまな理由でカットされたいくつかの顕著な違いがあります。
vk_postprocessコンソールコマンドで切り替えることができますhudscale Consoleコマンドでオーバーライドできます)aimfixコンソールコマンドを追加しましたこのプロジェクトの背後にある思考プロセスのより詳細な説明は、私のブログ投稿、全体的なデザイン、いくつかの問題の攻撃方法、そして最初のリリース後に物事がどのように発展したかを説明します。
余分なチャレンジのために、私は元のIDソフトウェアコードにVKQUAKE2を基にすることにしました。このため、外部SDLのようなライブラリに依存関係がなく、プロジェクト全体がほとんど自己完結型です。これは、元のバグのいくつかが存在する可能性があることも意味します。
quake2.slnを開き、ターゲットアーキテクチャ(x86/x64)を選択します - 追加の手順なしで構築する必要があります残念ながら、Quake 2のLinuxコードはうまく老化しておらず、そのため、現時点ではVulkanレンダラーのみが使用できます。ビルドステップUbuntuがターゲット分布であると仮定します。
sudo apt install make gcc g++ mesa-common-dev libglu1-mesa-dev libxxf86dga-dev libxxf86vm-dev libasound2-dev libx11-dev libxcb1-dev
.bashrcファイル(SDKバージョンと場所をシステムに対応するものに置き換える)に次のセクションを追加して、適切な環境変数がその後設定されていることを確認してください。 export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1/x86_64
export PATH=$VULKAN_SDK/bin:$PATH
export LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH
export VK_LAYER_PATH=$VULKAN_SDK/etc/explicit_layer.d
vulkaninfoを実行して検証します) - そうでない場合は、次のように取得できます。 sudo apt install mesa-vulkan-drivers
linuxディレクトリとタイプを入力してmake release 、 make debug作成するか、どのバリアントを構築するかに応じて、出力バイナリはそれぞれlinux/releasex64およびlinux/debugx64サブディレクトリに配置されます。 VULKAN_SDK環境変数を場所/カスタムパスに追加します - ダウンロードしたSDKを指し示しますmacos/vkQuake2.xcworkspace追加の手順なしで構築する必要があります.bash_profile変更して、次のエントリを追加します(SDKバージョンと場所をシステムに対応するものに置き換えます): export VULKAN_SDK=/home/user/VulkanSDK/1.3.224.1
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
export VK_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
macosディレクトリを入力して、 make release-xcodeか、作成するバリアントに応じてmake debug-xcode - 出力バイナリはmacos/vkQuake2 Subdirectoryに配置されますmake releaseか、 make debug - 出力バイナリはそれぞれmacos macos/releaseとmacos/debug Subdirectoriesに配置されます。このプロジェクトでは、 MoltenVK.frameworkと直接リンクするのではなく、SDKにバンドルされたVulkanローダーを使用しています。これは、検証レイヤーがデバッグに使用できるように行われます。ビルドは、macOS 10.14.2を使用してテストされています。
pkg install vulkan-tools vulkan-validation-layers
vulkaninfoを実行して確認してください) - そうでない場合は、それらを更新するか、ハードウェア構成に最適なパッケージを見つける必要がありますlinuxディレクトリとタイプを入力してmake release 、 make debug作成するか、どのバリアントを構築するかに応じて、出力バイナリはそれぞれlinux/releasex64およびlinux/debugx64サブディレクトリに配置されます。 IgaliaとそのV3DVドライバーの努力のおかげで、Raspberry Pi 4でVkquake2をコンパイルして実行することができます。Linux適用と同じビルド命令。
Visual Studio C ++の再分配可能なアプリケーションを実行するには、選択したアーキテクチャに応じて32ビットまたは64ビットが必要です。ビジュアルスタジオがインストールされている場合、これらは自動的に提供されます。
リリースパッケージには、Vulkan機能を紹介するQuake 2デモコンテンツのみが付属しています。完全な経験のために、小売.pak 、モデル、ビデオファイルをbaseq2ディレクトリにコピーし、実行可能ファイルを実行します。ミッションパックの場合、必要なデータをrogue (「グラウンドゼロ」)、 xatrix ( "The Reckoning")、 zaero ( "Quake II:Zaero")、およびsmd ( "Sime Mechanical Destruction")ディレクトリにコピーします。その後、 ./quake2 +set game rogue 、 ./quake2 +set game xatrix 、 ./quake2 +set game zaeroまたは./quake2 +set game smdでゲームを開始できます。
このプロジェクトは、元のゲームCDが利用できない場合、音楽再生にMiniaudioを使用します。標準のQuake 2の場合、すべてのトラックをbaseq2/musicディレクトリにコピーしてtrackXX.[ogg,flac,mp3,wav] 「グラウンドゼロ」と「レコーン」については、それぞれトラックをrogue/musicとxatrix/music Directoriesにコピーします。再生をさらに制御するには、 miniaudio [on,off,play [X],loop [X],stop,pause,resume,info]コンソールコマンドを使用します。
Vulkanレンダラーを使用する場合、次のコマンドが利用可能です。
| 指示 | アクション |
|---|---|
vk_validation | 検証レイヤーのトグル:0無効(リリース中のデフォルト)1エラーと警告のみ2完全な検証(デバッグのデフォルト)3 - VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXTを有効にします |
vk_strings | いくつかの基本的なVulkan/GPU情報を印刷します。 |
vk_mem | ダイナミック頂点/インデックス/ユニフォーム/三角ファンバッファメモリと記述子設定使用統計を印刷します。 |
vk_device | 複数のGPUを備えたシステム上の優先Vulkanデバイスのインデックスを指定します。-1最初のdiselete_gpu(デフォルト)を好む0..nデバイス#Nを使用します(デバイスの完全なリストはvk_stringsコマンドによって返されます) |
vk_msaa | トグルmsaa(マルチサンプリング):0オフ(デフォルト)1 -MSAAX22 -MSAAX43 -msaax84 -MSAAX16 |
vk_sampleshading | MSAAのサンプルシェーディング(スーパーサンプリング)を切り替えます。 (デフォルト: 0 ) |
vk_mode | Vulkanビデオモード(デフォルト: 11 )。これを-1に設定すると、 r_customwidth (デフォルト: 1024 )およびr_customheight (デフォルト: 768 )コンソール変数によって定義されたカスタム画面解像度を使用します。 |
vk_flashblend | 環境へのライトのブレンドを切り替えます。 (デフォルト: 0 ) |
vk_polyblend | ブレンドフルスクリーン効果:血、パワーアップなど(デフォルト: 1 ) |
vk_skymip | SkyグラフィックスのMIPMAP情報の使用法を切り替えます。 (デフォルト: 0 ) |
vk_finish | vkDeviceWaitIdle() call on frame render start(default: 0 )を挿入します。これを使用しないでください、それは gl_finishに相当するためだけにあります! |
vk_point_particles | 粒子レンダリングのために、Point_Listとテクスチャトライアングルを使用して切り替えます。 (デフォルト: 1 ) |
vk_particle_size | レンダリングされた粒子サイズ。 (デフォルト: 40 ) |
vk_particle_att_a | 粒子の強度A属性。 (デフォルト: 0.01 ) |
vk_particle_att_b | 粒子B属性の強度。 (デフォルト: 0 ) |
vk_particle_att_c | 粒子C属性の強度。 (デフォルト: 0.01 ) |
vk_particle_min_size | レンダリングされた粒子の最小サイズ。 (デフォルト: 2 ) |
vk_particle_max_size | レンダリングされた粒子の最大サイズ。 (デフォルト: 40 ) |
vk_lockpvs | 現在のPVSテーブルをロックします。 (デフォルト: 0 ) |
vk_clear | 各フレームのカラーバッファーをクリアします。 (デフォルト: 0 ) |
vk_modulate | テクスチャ輝度修飾子。 (デフォルト: 1 ) |
vk_shadows | 実験的なエンティティの影を描きます。 (デフォルト: 0 ) |
vk_picmip | テクスチャの縮小係数。 (デフォルト: 0 ) |
vk_round_down | テクスチャサイズの丸みを切り取ります。 (デフォルト: 1 ) |
vk_log | ファイルするログフレーム検証データ。 (デフォルト: 0 ) |
vk_dynamic | 動的照明を使用します。 (デフォルト: 1 ) |
vk_showtris | メッシュの三角形を表示します。 (デフォルト: 0 ) |
vk_lightmap | LightMapsを表示します。 (デフォルト: 0 ) |
vk_aniso | 異方性フィルタリングを切り替えます。 (デフォルト: 1 ) |
vk_vsync | 垂直同期を切り替えます。 (デフォルト: 0 ) |
vk_postprocess | 追加の色/ガンマ補正を切り替えます。 (デフォルト: 1 ) |
vk_underwater | 水中のときにプレーヤーのビジョンワープを切り替えます。 (デフォルト: 1 ) |
vk_restart | Vulkanサブシステム全体を再作成します。 |
vk_mip_nearfilter | MIPMAPSには、最近ニーバーフィルタリングを使用します。 (デフォルト: 0 ) |
vk_texturemode | 現在のテクスチャフィルタリングモードを変更します。VK_NEAREST -Coist -Neighborの補間、MIPMAPSなしVK_LINEAR線形補間、MIPMAPSなしVK_MIPMAP_NEAREST -MIPMAPSとの最近隣人の補間VK_MIPMAP_LINEAR -MIPMAPSとの線形補間(デフォルト) |
vk_lmaptexturemode | vk_texturemodeと同じですが、ライトマップテクスチャに適用されます。 |
vk_fullscreen_exclusive | Windowsのみ:排他的なフルスクリーンモードの使用(デフォルト: 1 )を切り替えます。このオプションが有効になっている場合、システムで排他的なフルスクリーンを取得できるという保証はないことに注意してください。 |
vk_sampleshading有効になっている場合、アプリケーションはいくつかのMacBookに固執する場合があります