最新のクロスプラットフォーム低レベルの3Dグラフィックスライブラリとレンダリングフレームワーク
勤勉なエンジンは、軽量のクロスプラットフォームグラフィックスAPI抽象化ライブラリとレンダリングフレームワークです。 Direct3D11、OpenGL、OpenGles、WebGLを介して古いプラットフォームをサポートしながら、Direct3D12、Vulkan、Metal、およびWebGPUを最大限に活用するように設計されています。勤勉なエンジンは、一般的なフロントエンドAPIを公開し、すべてのプラットフォームでHLSLをユニバーサルシェーディング言語として使用し、バックエンドをレンダリングします。プラットフォーム固有のシェーダー表現(GLSL、MSL、DXバイトコードまたはSPIRV)は、対応するバックエンドで使用できます。エンジンは、ゲームエンジンまたは他の3Dアプリケーションのグラフィックサブシステムとして使用することを目的としています。 Apache 2.0ライセンスの下で配布されており、自由に使用できます。
プラットフォーム | D3D11 | D3D12 | opengl/gles | バルカン | 金属 | webgpu | ステータスを構築します |
---|---|---|---|---|---|---|---|
![]() | ✔✔️ | ✔✔️ | ✔✔️ | ✔✔️ | - | ✔✔️3 | ![]() |
![]() | ✔✔️ | ✔✔️ | - | - | - | - | ![]() |
![]() | - | - | ✔✔️ | ✔✔️ | - | ✔✔️3 | ![]() |
![]() | - | - | ✔✔️ | ✔✔️ | - | - | ![]() |
![]() | - | - | ✔✔️ | ✔✔️1 | ✔✔️2 | ✔✔️3 | ![]() |
![]() | - | - | ✔✔️ | ✔✔️1 | ✔✔️2 | - | ![]() |
![]() | - | - | - | ✔✔️1 | ✔✔️2 | - | ![]() |
![]() | - | - | ✔✔️ | - | - | ✔✔️ | ![]() |
1 Vulkan APIは、MACO、iOS、およびTVOSプラットフォームでネイティブにサポートされておらず、MoltenVKやGFX-PortabilityなどのVulkanの移植性実装を必要とします。
2商業ライセンスの下で入手可能 - 詳細についてはお問い合わせください。
3 WebGPUのネイティブ実装が必要です。Dawnが推奨されます。
#if defined(_WIN32)
... #elif defined(LINUX)
... #elif defined(ANDROID)
...#if defined(D3D11)
... #elif defined(D3D12)
... #elif defined(OPENGL)
...最小限のサポートされている低レベルAPIバージョン:
これは、4つのサブモジュールを含むマスターリポジトリです。リポジトリとすべてのサブモジュールを取得するには、次のコマンドを使用します。
git clone --recursive https://github.com/DiligentGraphics/DiligentEngine.git
既存のリポジトリを更新するときは、すべてのサブモジュールを更新することを忘れないでください。
git pull
git submodule update --recursive
また、最新バージョンを取得した後、CMakeを再実行してClean Rebuildを実行することもお勧めします。
マスターリポジトリには、次のサブモジュールが含まれています。
勤勉なエンジンは、CMAKEをクロスプラットフォームビルドツールとして使用します。 Cmakeの使用を開始するには、最新リリースをダウンロードします(3.20以降が必要です)。別のビルドの前提条件は、Pythonインタープリターです(3.0以降が必要です)。以下の指示に従った後、ビルド/実行の問題がある場合は、トラブルシューティングをご覧ください。
前提条件を構築する:
.NETサポートには.NET SDK 6.0以降が必要です。
Cmake GUIまたはコマンドラインツールのいずれかを使用して、ビルドファイルを生成します。たとえば、Visual Studio 2022 64ビットソリューションとプロジェクトファイルをBuild/Win64フォルダーで生成するには、エンジンのルートフォルダーに移動し、次のコマンドを実行します。
cmake -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
次のコマンドを使用して、Win8.1 SDKをターゲットにするWin32ソリューションを生成できます。
cmake -D CMAKE_SYSTEM_VERSION=8.1 -S . -B ./build/Win64_8.1 -G "Visual Studio 17 2022" -A x64
MINGWを使用する場合、以下のコマンドを使用してMakeファイルを生成できます(ただし、機能は制限され、MINGWはエンジンを構築するための推奨方法ではないことに注意してください):
cmake -S . -B ./build/MinGW -D CMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
Vulkan検証レイヤーを有効にするには、Vulkan SDKをダウンロードし、VulkansdkインストールフォルダーのBINディレクトリへのパスを含む環境変数VK_LAYER_PATH
を追加する必要があります。
Build/Win64フォルダーでwirnigentEngine.slnファイルを開き、構成を選択してエンジンを構築します。目的のプロジェクトをスタートアッププロジェクトとして設定し(デフォルトでは、GLTFビューアが選択されます)、実行します。
デフォルトでは、サンプルおよびチュートリアルアプリケーションには、バックエンド選択のレンダリングダイアログボックスが表示されます。次のコマンドラインオプションを使用して、 D3D11 、D3D12、OpenGL、またはVulkanモードを強制します。 Visual Studio環境以外でアプリケーションを実行する場合は、アプリケーションのAssetsフォルダーを作業ディレクトリとして設定する必要があります。 (Visual Studioの場合、これはCmakeによって自動的に構成されます)。または、ビルドターゲットに移動するか、フォルダーをインストールして、そこから実行可能ファイルを実行できます。
Universal Windowsプラットフォーム用のビルドファイルを生成するには、次の2つのcmake変数を定義する必要があります。
CMAKE_SYSTEM_NAME=WindowsStore
CMAKE_SYSTEM_VERSION=< Windows Version >
たとえば、Visual Studio 2022 64ビットソリューションとプロジェクトファイルをBuild/UWP64フォルダーで生成するには、エンジンのルートフォルダーから次のコマンドを実行します。
cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -S . -B ./build/UWP64 -G "Visual Studio 17 2022" -A x64
目的のプロジェクトをスタートアッププロジェクトとして設定し(デフォルトでは、GLTFビューアが選択されます)、実行します。
デフォルトでは、アプリケーションはD3D12モードで実行されます。次のコマンドラインオプションを使用して、 D3D11またはD3D12を選択できます。
注:cmake_system_version = 8.1 cmake変数を定義することにより、Windows 8.1をターゲットにするソリューションを生成することができますが、適切なC ++ 14サポートを欠くVisual Studio 2013(V120)ツールセットを使用するため、構築できません。
Linux環境は、C ++開発のために設定する必要があります。既にある場合は、勤勉なエンジンが最新のC ++機能を使用するため、C ++ツールが最新であることを確認してください(Clang 10以降が推奨されます)。
次のパッケージをインストールする必要がある場合があります。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install libx11-dev
sudo apt-get install mesa-common-dev
sudo apt-get install mesa-utils
sudo apt-get install libgl-dev
sudo apt-get install python3-distutils
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libxrandr-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libxcursor-dev
sudo apt-get install libxi-dev
Vulkanを構成するには、次のことも必要です。
デバッグ構成のファイルを作成するには、エンジンのルートフォルダーから次のCmakeコマンドを実行します。
cmake -S . -B ./build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Debug"
エンジンを構築するには、次のコマンドを実行します。
cmake --build ./build
Ubuntu 23以降では、libtinfo5がインストールされていないとクラッシュする可能性があります。追加する必要があります。
エンジンのルートフォルダーには、エンジンを構築するためにIDEを構成するVisual Studioコード設定ファイルが含まれています。 IDEから直接アプリケーションを実行できます。コマンドラインからアプリケーションを実行するには、アプリのアセットフォルダーが現在のディレクトリでなければなりません。
Android開発のためにマシンが設定されていることを確認してください。 Android Studioをダウンロードし、NDKとCMAKEおよびその他の必要なツールをインストールして構成します。 NDK R24以降が必要です。 Android StudioにバンドルされたCmakeバージョンを使用していない場合は、ビルドファイルが適切に構成されていることを確認してください。環境が適切にセットアップされていることを確認するには、TeapotsサンプルとVulkan Androidチュートリアルを作成してみてください。
Android Studioを搭載したDiligentAmples/Androidフォルダーを開いて、Androidでチュートリアルとサンプルを構築および実行します。
デフォルトでは、アプリケーションはVulkanモードで実行されます。 Vulkanモードでそれらを実行するには、次の--es mode gles
フラグを追加します。
前提条件:
リポジトリをクローンしたら、エンジンのルートフォルダーから次のコマンドを実行して、Xcodeプロジェクトを生成します。
cmake -S . -B ./build/MacOS -G "Xcode"
このプロジェクトはbuild/MacOS
フォルダーにあります。
Cmakeがコンパイラを見つけられなかった場合、次のコマンドを実行する必要がある場合があることに注意してください。
sudo xcode-select --reset
デフォルトでは、MacOSに関するVulkanの実装はありません。勤勉なエンジンはVulkanを動的にロードし、MoltenVKやGFXポータビリティなどのVulkanの移植性実装を使用できます。 Vulkansdkをインストールし、ここで説明するようにシステムが適切に構成されていることを確認してください。特に、次の環境変数を定義する必要があるかもしれません(Vulkan SDKが/Users/MyName/VulkanSDK/1.3.290.0
にインストールされ、溶融vkを使用すると仮定します):
export VULKAN_SDK=/Users/MyName/VulkanSDK/1.3.290.0/macOS
export PATH=$VULKAN_SDK/bin:$PATH
export DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH
export VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
export VK_DRIVER_FILES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
シェルに設定された環境変数は、LaunchPadまたは他のデスクトップGUIから起動したアプリケーションでは見られないことに注意してください。したがって、アプリケーションがVulkanライブラリを見つけられるようにするには、コマンドラインから開始する必要があります。同じ理由により、Xcodeプロジェクトファイルもopen
コマンドを使用してシェルから開く必要があります。 Xcodeバージョン7以降、この動作は、次のコマンドを使用して最初に有効にする必要がある場合があります。
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
詳細については、このページを参照してください。
DYLD_LIBRARY_PATH
およびLD_LIBRARY_PATH
環境変数は、システムの整合性保護が無効になっていない限り、macosで無視されます(通常は推奨されません)。実行可能ファイルがVulkanライブラリを見つけるためには、RPathにある必要があります。 VULKAN_SDK
環境変数が設定され、位置を修正するためのポイントがある場合、勤勉なエンジンはすべてのアプリケーションのRPATを自動的に構成します。
最新のテストVulkan SDKバージョン:1.3.290.0。
前提条件:
以下のコマンドをエンジンのルートフォルダーから実行して、iOSビルド用に構成されたXcodeプロジェクトを生成します。
cmake -S . -B ./build/iOS -DCMAKE_SYSTEM_NAME=iOS -G "Xcode"
必要に応じて、iOS展開ターゲット(13.0以降が必要)およびその他のパラメーターを提供できます。
cmake -S . -B ./build/iOS -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 -G "Xcode"
iphonesimulator
システムルートを使用します。また、 CMAKE_OSX_ARCHITECTURES
変数を使用して、ターゲットアーキテクチャを指定することもできます。
cmake -S . -B ./build/iOSSim -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=arm64 -G "Xcode"
build/IOS
フォルダーでXcodeプロジェクトファイルを開き、エンジンを構築します。 iOSデバイスでアプリケーションを実行するには、プロジェクト設定に適切な開発チームを設定する必要があります。
iOSでVulkanを有効にするには、Vulkansdkをダウンロードしてインストールします。 iOSにはvulkanローダーはなく、勤勉なエンジンリンクはMoltenvk xcFramework(Moltenvkインストールガイドを参照)に直接リンクしています。 iOSの勤勉なエンジンでVulkanを有効にするには、たとえばCmakeを実行するときにVulkan SDKへのパスを指定します(Vulkan SDKが/Users/MyName/VulkanSDK/1.3.290.0
にインストールされていると仮定します):
cmake -DCMAKE_SYSTEM_NAME=iOS -DVULKAN_SDK=/Users/MyName/VulkanSDK/1.3.290.0 -S . -B ./build/iOS -G "Xcode"
デフォルトでは、エンジンはVulkan SDKにあるMoltenvk XCFrameworkとリンクします。これが望ましくない場合、またはアプリケーションが特定のライブラリを使用したい場合、 MOLTENVK_LIBRARY
cmake変数を介してライブラリへの完全なパスを提供できます。
MoltenVKのインストールと使用の詳細については、MoltenVKユーザーガイドを参照してください。
最新のテストVulkan SDKバージョン:1.3.290.0。
前提条件を構築する:
現在の端末でパスやその他の環境変数をアクティブにする
source ${PATH_TO_EMSDK} /emsdk/emsdk_env.sh
${PATH_TO_EMSDK}/emsdk/emsdk_env.bat
source ${PATH_TO_EMSDK}/emsdk/emsdk_env.sh
を実行します
プロジェクトを生成するには、エンジンのルートフォルダーから次のcmakeコマンドを実行します。
emcmake cmake -S . -B ./build/Emscripten -G "Ninja"
エンジンを構築するには、次のコマンドを実行します。
cmake --build ./build/Emscripten
emscriptenアプリケーションをテストするには、基本的なWebサーバーを実行します
cd ./build/Emscripten
python https_server.py
ブラウザを開き、 http://localhost
に移動します
たとえば、Hello Triangleチュートリアルはで利用可能になります
http://localhost/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
ローカルネットワーク上の別のコンピューターからサーバーにアクセスするには、HTTPSサーバーを使用します。これを有効にするには、最初にcryptography
モジュールをインストールします。次のコマンドを実行することで、次のことを行うことができます。
pip install cryptography
HTTPSサーバーを起動するには、次のコマンドを使用します。
python https_server.py --mode=https
HTTPSプロトコルを使用してページを開きます。例えば:
https://localhost/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
HTTPSサーバーを使用する場合、HTTPサーバーとは異なり、ページをロードするときに次のエラーが発生する可能性があります: net::ERR_CERT_AUTHORITY_INVALID
。
この問題を解決するには2つの方法があります。
Advanced
ボタンをクリックしてから、 Proceed to localhost (unsafe)
を選択します。python https_server.py --mode=https --register
HTTP/HTTPSプロトコル( 80
および443
のデフォルトポートをそれぞれ使用します。これらのポートでサーバーが既に実行されている場合は、 --port
引数を使用して異なるポート番号を指定し、IPアドレスの後にURLに対応するポート番号を含めることができます。例えば:
http://localhost:${YOUR_PORT}/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
勤勉さにはモジュール構造があるため、プロジェクトでは、必要な機能を実装するサブモジュールのみを使用できます。以下の図は、モジュール間の依存関係を示しています。
Core
|
+------>Tools----------.
| | |
| V |
+------->FX---------. |
| | |
| V V
'----------------->Samples
プロジェクトにサブモジュールとして勤勉なレポスを追加する場合、サブモジュールを再帰的に初期化することを忘れないでください。
プロジェクトがcmakeを使用している場合、勤勉なエンジンを追加するには、コードの数行しか必要ありません。ディレクトリ構造が次のように見えるとします:
|
+-DiligentCore
+-HelloDiligent.cpp
次に、次の手順を実行する必要があります。
add_subdirectory(DiligentCore)
に電話してください以下は、cmakeファイルの例です。
cmake_minimum_required ( VERSION 3.6)
project (HelloDiligent CXX)
add_subdirectory (DiligentCore)
add_executable (HelloDiligent WIN32 HelloDiligent.cpp)
target_compile_options (HelloDiligent PRIVATE -DUNICODE)
target_link_libraries (HelloDiligent
PRIVATE
Diligent-GraphicsEngineD3D11-shared
Diligent-GraphicsEngineOpenGL-shared
Diligent-GraphicsEngineD3D12-shared
Diligent-GraphicsEngineVk-shared
)
copy_required_dlls(HelloDiligent)
copy_required_dlls()
システムがそれらを見つけてロードできるように、実行可能ファイルの横にある共有ライブラリをコピーする利便性関数です。また、WindowsとLinuxの開始チュートリアルをご覧ください。
ほとんどのプラットフォームでは、コアエンジンライブラリは静的バージョンと動的バージョンの両方に組み込まれています(たとえば、 Diligent-GraphicsEngineD3D12-static
およびDiligent-GraphicsEngineD3D12-shared
)。 target_link_libraries()
cmakeコマンドでターゲット名を変更して、リンクするバージョンを選択できます。動的ライブラリとリンクする場合、 ENGINE_DLL
マクロが定義され、ライブラリを実行時にロードする必要があります。たとえば、direct3d12バックエンドの場合:
# if ENGINE_DLL
// Load the dll and import GetEngineFactoryD3D12() function
auto GetEngineFactoryD3D12 = LoadGraphicsEngineD3D12();
# endif
auto * pFactoryD3D12 = GetEngineFactoryD3D12();
静的リンクを使用する場合、 ENGINE_DLL
マクロは定義されず、 GetEngineFactoryD3D12
関数は実行可能ファイルと静的にリンクされます。
sampleapp.cppファイルは、静的または動的リンクを使用して異なるプラットフォームでエンジンを初期化する方法の例を提供します。
FetchContentを使用して、勤勉なエンジンモジュールをダウンロードできます。唯一の注意点は、ヘッダーファイルを見つけることができるように、各モジュールのソースディレクトリをモジュール名と同じに指定する必要があることです。以下は、fetchContentを使用するcmakeファイルの例です。
cmake_minimum_required ( VERSION 3.6)
project (HelloDiligent CXX)
include (FetchContent)
FetchContent_Declare(
DiligentCore
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentCore.git
SOURCE_DIR _deps/DiligentCore
)
FetchContent_Declare(
DiligentTools
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentTools.git
SOURCE_DIR _deps/DiligentTools
)
FetchContent_Declare(
DiligentFX
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentFX.git
SOURCE_DIR _deps/DiligentFX
)
FetchContent_MakeAvailable(DiligentCore DiligentTools DiligentFX)
add_executable (HelloDiligent WIN32 HelloDiligent.cpp)
target_include_directories (HelloDiligent
PRIVATE
${diligentcore_SOURCE_DIR}
${diligenttools_SOURCE_DIR}
${diligentfx_SOURCE_DIR}
)
target_compile_definitions (HelloDiligent PRIVATE UNICODE)
target_link_libraries (HelloDiligent
PRIVATE
Diligent-BuildSettings
Diligent-GraphicsEngineD3D11-shared
Diligent-GraphicsEngineD3D12-shared
Diligent-GraphicsEngineOpenGL-shared
Diligent-GraphicsEngineVk-shared
DiligentFX
)
copy_required_dlls(HelloDiligent)
プロジェクトがcmakeを使用していない場合は、cmakeでライブラリを構築してビルドシステムに追加することをお勧めします。 GitHubから最新のビルドアーティファクトをダウンロードできます。
グローバルCMAKEインストールディレクトリは、CMAKE_INTALL_PREFIX変数によって制御されます。 unixで/usr/local
にデフォルトであることに注意してください。Windowsでc:/Program Files/${PROJECT_NAME}
、あなたが望むものではないかもしれません。 -D CMAKE_INSTALL_PREFIX=install
を使用して、代わりにローカルinstall
フォルダーを使用します。
cmake -S . -B ./build/Win64 -D CMAKE_INSTALL_PREFIX=install -G "Visual Studio 17 2022" -A x64
ライブラリとヘッダーファイルをインストールするには、ビルドフォルダーから次のcmakeコマンドを実行します。
cmake --build . --target install
勤勉なコアインストールディレクトリには、エンジンを統合するために必要なすべてが含まれます。
より簡単な方法は、動的ライブラリとリンクすることです。静的にリンクする場合、エンジンが使用するすべてのサードパーティライブラリと同様に、勤勉なコアをリストする必要があります。それに加えて、プラットフォーム固有のシステムライブラリを指定する必要もあります。たとえば、Windowsプラットフォームの場合、プロジェクトに対してリンクする必要があるライブラリのリストは次のようになります。
DiligentCore.lib glslang.lib HLSL.lib OGLCompiler.lib OSDependent.lib spirv-cross-core.lib SPIRV.lib SPIRV-Tools-opt.lib SPIRV-Tools.lib glew-static.lib GenericCodeGen.lib MachineIndependent.lib dxgi.lib d3d11.lib d3d12.lib d3dcompiler.lib opengl32.lib
勤勉なエンジンヘッダーには、次のプラットフォームマクロのいずれかを1
: PLATFORM_WIN32
、 PLATFORM_UNIVERSAL_WINDOWS
、 PLATFORM_ANDROID
、 PLATFORM_LINUX
、 PLATFORM_MACOS
、 PLATFORM_IOS
として定義する必要があります。
次のCmakeオプションを使用してインストールするエンジンのコンポーネントを制御できます: DILIGENT_INSTALL_CORE
、 DILIGENT_INSTALL_FX
、 DILIGENT_INSTALL_SAMPLES
、およびDILIGENT_INSTALL_TOOLS
。
エンジンを統合する別の方法は、ビルドファイル(Visual Studio Projectsなど)を生成し、ビルドシステムに追加することです。以下で説明するカスタマイズのビルドは、特定のニーズの設定を調整するのに役立ちます。
利用可能なcmakeオプションは、以下の表にまとめられています。
オプション | デフォルト値 | 説明 |
---|---|---|
DILIGENT_NO_DIRECT3D11 | いいえ | Direct3D11バックエンドを構築しないでください |
DILIGENT_NO_DIRECT3D12 | いいえ | Direct3D12バックエンドを構築しないでください |
DILIGENT_NO_OPENGL | いいえ | OpenGLバックエンドを構築しないでください |
DILIGENT_NO_VULKAN | いいえ | Vulkanバックエンドを構築しないでください |
DILIGENT_NO_METAL | いいえ | 金属製のバックエンドを構築しないでください |
DILIGENT_NO_WEBGPU | いいえ | WebGPUバックエンドを構築しないでください |
DILIGENT_NO_ARCHIVER | いいえ | アーキバーを構築しないでください |
DILIGENT_NO_RENDER_STATE_PACKAGER | いいえ | Render Render State Packagerツールを構築しないでください |
DILIGENT_ENABLE_DRACO | いいえ | GLTFローダーでドラコ圧縮サポートを有効にします |
DILIGENT_USE_RAPIDJSON | いいえ | GLTFローダーのRapidJSONパーサーを使用します |
DILIGENT_BUILD_TOOLS | はい | ツールモジュールを構築します |
DILIGENT_BUILD_FX | はい | FXモジュールを構築します |
DILIGENT_BUILD_SAMPLES | はい | サンプルモジュールを構築します |
DILIGENT_BUILD_SAMPLE_BASE_ONLY | いいえ | サンプルベースプロジェクトのみを構築し、他のサンプル/チュートリアルはありません |
DILIGENT_BUILD_TESTS | いいえ | ユニットテストを構築します |
DILIGENT_NO_GLSLANG | いいえ | GlslangとSpriv-Toolsを構築しないでください |
DILIGENT_NO_HLSL | いいえ | 非Direct3DバックエンドでHLSLサポートを無効にします |
DILIGENT_NO_FORMAT_VALIDATION | はい | ソースコードのフォーマット検証を無効にします |
DILIGENT_LOAD_PIX_EVENT_RUNTIME | いいえ | PIXイベントサポートを有効にします |
DILIGENT_NVAPI_PATH | Nvapi SDKへのパス | |
DILIGENT_INSTALL_CORE | はい | コアモジュールをインストールします |
DILIGENT_INSTALL_TOOLS | はい | ツールモジュールをインストールします |
DILIGENT_INSTALL_FX | はい | FXモジュールをインストールします |
DILIGENT_INSTALL_SAMPLES | はい | サンプルモジュールをインストールします |
DILIGENT_INSTALL_PDB | いいえ | プログラムデバッグデータベースをインストールします |
DILIGENT_DEAR_IMGUI_PATH | ユーザーが提供する親愛なるimguiプロジェクトへのオプションのパス | |
DILIGENT_ARGS_DIR | ユーザーが提供するARGSプロジェクトへのオプションのパス | |
DILIGENT_NUKLEAR_DIR | ユーザーが提供するNuklearプロジェクトへのオプションのパス | |
DILIGENT_MSVC_COMPILE_OPTIONS | すべての構成の追加のMSVCコンパイルオプション | |
DILIGENT_MSVC_DEBUG_COMPILE_OPTIONS | デバッグ構成のための追加のMSVCコンパイルオプション | |
DILIGENT_MSVC_RELEASE_COMPILE_OPTIONS | /gl /arch:avx2 | リリース構成の追加のMSVCコンパイルオプション |
DILIGENT_CLANG_COMPILE_OPTIONS | すべての構成の追加のClangコンパイルオプション | |
DILIGENT_CLANG_DEBUG_COMPILE_OPTIONS | デバッグ構成用の追加のClangコンパイルオプション | |
DILIGENT_CLANG_RELEASE_COMPILE_OPTIONS | -mavx2 | リリース構成の追加のClangコンパイルオプション |
DILIGENT_USD_PATH | USDインストールフォルダーへのパス |
デフォルトでは、現在のプラットフォームで利用可能なすべてのバックエンドが構築されています。特定のバックエンドを無効にするには、次のオプションを使用してください: DILIGENT_NO_DIRECT3D11
、 DILIGENT_NO_DIRECT3D12
、 DILIGENT_NO_OPENGL
、 DILIGENT_NO_VULKAN
、 DILIGENT_NO_METAL
、 DILIGENT_NO_WEBGPU
。 Web用のBackEndは、Web用に構築するときにデフォルトで有効になります。他のプラットフォームで有効にするには、 DILIGENT_NO_WEBGPU=OFF
使用します。以下の例のように、オプションはCmake UIまたはコマンドラインから設定できます。
cmake -D DILIGENT_NO_DIRECT3D11=TRUE -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
さらに、次のオプションを使用して、個々のエンジンコンポーネントを有効にするか、無効にすることができます: DILIGENT_BUILD_TOOLS
、 DILIGENT_BUILD_FX
、 DILIGENT_BUILD_SAMPLES
。 SampleBase
プロジェクトのみを作成する場合は、 DILIGENT_BUILD_SAMPLE_BASE_ONLY
オプションを使用できます。
デフォルトでは、Vulkanのバックエンドは、実行時にHLSLとGLSLシェーダーをSPIRVにコンパイルできるGlslangとリンクしています。ランタイムコンパイルが不要な場合、GlslangはDILIGENT_NO_GLSLANG
cmakeオプションで無効にすることができます。さらに、非Direct3DバックエンドでのHLSLサポートは、 DILIGENT_NO_HLSL
オプションで無効にすることができます。オプションを有効にすると、VulkanとOpenGLバックエンドのバイナリのサイズが大幅に削減されます。これは、モバイルアプリケーションにとって特に重要な場合があります。
勤勉なエンジンは、Clang-formatを使用して、コードベース全体で一貫したフォーマットを確保します。検証は、 DILIGENT_NO_FORMAT_VALIDATION
cmakeオプションを使用して無効にすることができます。フォーマットの問題が見つかった場合、任意のプル要求は失敗することに注意してください。
勤勉なエンジンは、デバッグビルドで常に有効にされる広範な検証を使用します。一部のチェックは、 DILIGENT_DEVELOPMENT
cmakeオプションを設定することにより、リリース構成で有効にする場合があります。
pixイベントサポートを有効にするには、 DILIGENT_LOAD_PIX_EVENT_RUNTIME
cmakeフラグを設定します。
NVIDIA GPUでいくつかの高度な機能を有効にするには、NVAPIをダウンロードして、 DILIGENT_NVAPI_PATH
cmake変数をダウンロードして、NVAPIをダウンロードします。
勤勉なエンジンは、複数のサードパーティライブラリを使用します。アプリケーションのcmakeファイルがこれらのライブラリのいずれかを定義している場合、勤勉は既存のターゲットを使用します。アプリケーションは、ビルド設定が勤勉と互換性があることを確認する必要があります。
勤勉なエンジンを使用すると、クライアントは、次のオプションのcmake関数を定義する構成スクリプトファイルを提供することにより、ビルド設定をカスタマイズできます。
custom_configure_build()
- ビルド構成、c/c ++コンパイルフラグ、リンクフラグなどのグローバルビルドプロパティを定義します。custom_pre_configure_target()
- ビルド内のすべてのターゲットのカスタム設定を定義し、エンジンのビルドシステムがターゲットの構成を開始する前に呼び出されます。custom_post_configure_target()
- エンジンのビルドシステムにより、クライアントがエンジンによって設定されたプロパティをオーバーライドできるようにターゲットを構成した後に呼び出されました。構成スクリプトへのパスは、cmakeを実行するときにBUILD_CONFIGURATION_FILE
変数を介して提供する必要があり、例えばcmakeルートフォルダーに関連している必要があります。
cmake -D BUILD_CONFIGURATION_FILE=BuildConfig.cmake -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
定義されている場合、Buildターゲットが追加される前に、 custom_configure_build()
関数が呼び出されます。デフォルトでは、Cmakeは次の4つの構成を定義します:Debug、Release、RelwithDebinfo、Minsizerel。必要に応じて、 CMAKE_CONFIGURATION_TYPES
変数を設定して、独自のビルド構成を定義できます。たとえば、2つの構成のみが必要な場合は、debug and leasemtのみで、次の行をcustom_configure_build()
関数に追加します。
set (CMAKE_CONFIGURATION_TYPES Debug ReleaseMT CACHE STRING "Configuration types: Debug, ReleaseMT" FORCE )
ビルドシステムは、デバッグとリリース(最適化)構成のリストを知る必要があるため、 CMAKE_CONFIGURATION_TYPES
変数が定義されている場合は、次の2つの変数も設定する必要があります。
set (DEBUG_CONFIGURATIONS DEBUG CACHE INTERNAL "" FORCE )
set (RELEASE_CONFIGURATIONS RELEASEMT CACHE INTERNAL "" FORCE )
cmakeの詳細により、 DEBUG_CONFIGURATIONS
とRELEASE_CONFIGURATIONS
にリストされている構成名を大文字にする必要があることに注意してください。
4つの標準Cmakeの構成以外の構成を定義する場合は、新しい構成ごとに次の変数を設定する必要もあります。
CMAKE_C_FLAGS_<Config>
-C cコンパイルフラグCMAKE_CXX_FLAGS_<Config>
-C ++コンパイルフラグCMAKE_EXE_LINKER_FLAGS_<Config>
- 実行可能なリンクフラグCMAKE_SHARED_LINKER_FLAGS_<Config>
- 共有ライブラリリンクフラグ例えば:
set (CMAKE_C_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_CXX_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_EXE_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
set (CMAKE_SHARED_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
以下は、custom_configure_build()関数の例です。
function (custom_configure_build)
if (CMAKE_CONFIGURATION_TYPES)
# Debug configurations
set (DEBUG_CONFIGURATIONS DEBUG CACHE INTERNAL "" FORCE )
# Release (optimized) configurations
set (RELEASE_CONFIGURATIONS RELEASEMT CACHE INTERNAL "" FORCE )
# CMAKE_CONFIGURATION_TYPES variable defines build configurations generated by cmake
set (CMAKE_CONFIGURATION_TYPES Debug ReleaseMT CACHE STRING "Configuration types: Debug, ReleaseMT" FORCE )
set (CMAKE_CXX_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_C_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_EXE_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
set (CMAKE_SHARED_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
endif ()
endfunction ()
定義されている場合、 custom_pre_configure_target()
は、ビルドシステムによって作成されたすべてのターゲットに対して呼び出され、ターゲット固有のプロパティの構成を可能にします。
デフォルトでは、ビルドシステムはいくつかのターゲットプロパティを設定します。 custom_pre_configure_target()
が必要なすべてのプロパティを設定する場合、 TARGET_CONFIGURATION_COMPLETE
親スコープ変数をTRUE
に設定することで、さらに処理が必要であることをビルドシステムに伝えることができます。
set (TARGET_CONFIGURATION_COMPLETE TRUE PARENT_SCOPE )
以下はcustom_pre_configure_target()
関数の例です。
function (custom_pre_configure_target TARGET )
set_target_properties ( ${TARGET} PROPERTIES
STATIC_LIBRARY_FLAGS_RELEASEMT /LTCG
)
set (TARGET_CONFIGURATION_COMPLETE TRUE PARENT_SCOPE )
endfunction ()
クライアントが一部の設定のみをオーバーライドする必要がある場合、エンジンがターゲットの構成を完了した後に呼び出されるcustom_post_configure_target()
関数を定義する場合があります。
function (custom_post_configure_target TARGET )
set_target_properties ( ${TARGET} PROPERTIES
CXX_STANDARD 17
)
endfunction ()
このページを参照してください。また、以下にリストされているチュートリアルとサンプルは、開始するのに適した場所です。
勤勉なレンダリング状態表記は、シェーダー、パイプライン状態、リソース署名、その他のオブジェクトを便利な形式で説明するJSONベースの言語です。
{
"Shaders" : [
{
"Desc" : {
"Name" : " My Vertex shader " ,
"ShaderType" : " VERTEX "
},
"SourceLanguage" : " HLSL " ,
"FilePath" : " cube.vsh "
},
{
"Desc" : {
"Name" : " My Pixel shader " ,
"ShaderType" : " PIXEL "
},
"SourceLanguage" : " HLSL " ,
"FilePath" : " cube.psh " ,
}
],
"Pipeleines" : [
{
"GraphicsPipeline" : {
"DepthStencilDesc" : {
"DepthEnable" : true
},
"RTVFormats" : {
"0" : " RGBA8_UNORM_SRGB "
},
"RasterizerDesc" : {
"CullMode" : " FRONT "
},
"BlendDesc" : {
"RenderTargets" : {
"0" : {
"BlendEnable" : true
}
}
}
},
"PSODesc" : {
"Name" : " My Pipeline State " ,
"PipelineType" : " GRAPHICS "
},
"pVS" : " My Vertex shader " ,
"pPS" : " My Pixel shader "
}
]
}
JSONファイルは、実行時に動的に解析できます。あるいは、アプリケーションは、パッケージャーツールを使用して、パイプラインの説明(ターゲットプラットフォームのシェーダーをコンパイルし、内部リソースレイアウトを定義するなど)をプリプロースしたバイナリアーカイブに合わせて実行時間の読み込みパフォーマンスに最適化されています。
チュートリアル | スクリーンショット | 説明 |
---|---|---|
01-ハロートライアングル | ![]() | このチュートリアルは、勤勉なエンジンAPIを使用して単純な三角形をレンダリングする方法を示しています。 |
02-キューブ | ![]() | このチュートリアルでは、実際の3Dオブジェクトであるキューブをレンダリングする方法を示しています。ファイルからシェーダーをロードし、頂点、インデックス、均一なバッファーを作成および使用する方法を示しています。 |
03-テクスチャリング | ![]() | このチュートリアルでは、3Dオブジェクトにテクスチャを適用する方法を示しています。ファイルからテクスチャをロードし、シェーダーリソースバインディングオブジェクトを作成し、シェーダーでテクスチャをサンプリングする方法を示します。 |
03 -Texturing -C | ![]() | このチュートリアルはチュートリアル03と同じですが、C APIを使用して実装されています。 |
03-テクスチャリングドットネット | ![]() | このチュートリアルでは、.NETアプリケーションで勤勉なエンジンAPIを使用する方法を示しています。 |
04-インスタンス | ![]() | このチュートリアルでは、インスタンスを使用して、コピーごとに一意の変換マトリックスを使用して、1つのオブジェクトの複数のコピーをレンダリングする方法を示しています。 |
05-テクスチャアレイ | ![]() | このチュートリアルでは、インスタンスとテクスチャアレイを組み合わせて、すべてのインスタンスに一意のテクスチャを使用する方法を示しています。 |
06-マルチスレッド | ![]() | このチュートリアルは、複数のスレッドから並行してコマンドリストを生成する方法を示しています。 |
07-ジオメトリシェーダー | ![]() | このチュートリアルは、ジオメトリシェーダーを使用してスムーズなワイヤーフレームをレンダリングする方法を示しています。 |
08-テッセレーション | ![]() | このチュートリアルは、ハードウェアテッセレーションを使用して、単純な適応地形レンダリングアルゴリズムを実装する方法を示しています。 |
09-クワッド | ![]() | このチュートリアルは、複数の2Dクワッドをレンダリングする方法を示しており、テクスチャを頻繁に切り替えてモードをブレンドします。 |
10-データストリーミング | ![]() | このチュートリアルは、 MAP_FLAG_DISCARD とMAP_FLAG_DO_NOT_SYNCHRONIZE FLAGSを使用して、さまざまな量のデータをGPUに効率的にストリーミングする動的バッファマッピング戦略を示しています。 |
11-リソースの更新 | ![]() | このチュートリアルでは、勤勉なエンジンのバッファとテクスチャを更新するさまざまな方法を示し、各方法に関連する重要な内部の詳細とパフォーマンスの意味を説明しています。 |
12-ターゲットをレンダリングします | ![]() | このチュートリアルでは、3Dキューブをオフスクリーンレンダリングターゲットにレンダリングし、単純な後処理効果を実行する方法を示しています。 |
13-シャドウマップ | ![]() | このチュートリアルでは、シャドウマップを使用して基本的な影をレンダリングする方法を示しています。 |
14-シェーダーを計算します | ![]() | このチュートリアルは、コンピューティングシェーダーを使用して単純な粒子シミュレーションシステムを実装する方法を示しています。 |
15-複数のウィンドウ | ![]() | このチュートリアルでは、勤勉なエンジンを使用して複数のウィンドウにレンダリングする方法を示しています。 |
16-バインドリソース | ![]() | このチュートリアルは、バインドレスリソースを実装する方法を示しています。これは、次世代APIによって有効になっている動的シェーダーリソースインデックス機能を活用して、レンダリングパフォーマンスを大幅に改善する方法です。 |
17 -MSAA | ![]() | このチュートリアルでは、マルチサンプルアンチエイリアス(MSAA)を使用して、幾何学的なエッジをよりスムーズで一時的に安定させる方法を示しています。 |
18-クエリ | ![]() | このチュートリアルでは、クエリを使用してGPU操作に関するさまざまな情報を取得する方法を示しています。 |
19-レンダリングパス | ![]() | このチュートリアルでは、Render Passes APIを使用して単純な延期シェーディングを実装する方法を示しています。 |
20-メッシュシェーダー | ![]() | このチュートリアルでは、新しいプログラム可能な段階であるアンプシェーダーとメッシュシェーダーを使用して、GPUでの表示フラストムカリングとオブジェクトLOD計算を実装する方法を示しています。 |
21-レイトレース | ![]() | このチュートリアルは、勤勉なエンジンでRayトレースAPIを使用することの基本を示しています。 |
22-ハイブリッドレンダリング | ![]() | このチュートリアルでは、ラスター化とレイトレースを組み合わせたシンプルなハイブリッドレンダラーを実装する方法を示しています。 |
23-コマンドキュー | ![]() | このチュートリアルでは、複数のコマンドキューを使用して、コピー操作と計算操作と並行してレンダリングを実行する方法を示しています。 |
24-可変レートシェーディング | ![]() | このチュートリアルでは、可変レートシェーディングを使用してピクセルシェーディング負荷を減らす方法を示しています。 |
25-状態パッケージをレンダリングします | ![]() | このチュートリアルは、単純なパストレーサーの例でレンダリング状態パッケージのオフラインツールを使用して、パイプライン状態を作成およびアーカイブする方法を示しています。 |
26-状態キャッシュをレンダリングします | ![]() | このチュートリアルでは、以前のチュートリアルに実装されたパストレーステクニックを拡張し、Render State Cacheを使用して実行時に作成されたパイプライン状態を保存し、アプリケーションの開始時にロードする方法を示します。 |
27-後処理 | ![]() | このチュートリアルでは、SiligentFXモジュールからの後処理効果の使用方法を示しています。 |
サンプル | スクリーンショット | 説明 |
---|---|---|
雰囲気のサンプル | ![]() | このサンプルは、エピポーラ光散乱後のプロセッシング効果をアプリケーションに統合して、物理的にベースの大気をレンダリングする方法を示しています。 |
GLFWデモ | ![]() | この迷路のミニゲームは、GLFWを使用してウィンドウを作成し、キーボードとマウスの入力を処理する方法を示しています。 |
GLTFビューアー | ![]() | このサンプルは、Asset LoaderとPBR Rendererを使用してGLTFモデルをロードおよびレンダリングする方法を示しています。 |
USDビューア | ![]() | このサンプルは、Hydrogentを使用してUSDファイルをレンダリングする方法を示しています。これは、HydraレンダリングAPIの勤勉なエンジンでの実装を実装しています。 |
影 | ![]() | このサンプルは、シャドーイングコンポーネントを使用して高品質の影をレンダリングする方法を示しています。 |
親愛なるimguiデモ | ![]() | このサンプルは、エンジンと親愛なるIMGUI UIライブラリとの統合を示しています。 |
Nuklear Demo | ![]() | このサンプルは、エンジンとNuklear UIライブラリとの統合を示しています。 |
こんにちはar | ![]() | このサンプルは、基本的なAndroid ARアプリケーションで勤勉なエンジンを使用する方法を示しています。 |
小惑星 | ![]() | このサンプルは、50,000個のユニークなテクスチャの小惑星をレンダリングし、異なるレンダリングモードのパフォーマンスを比較できるパフォーマンスベンチマークです。 |
Unity Integration Demo | ![]() | このプロジェクトでは、勤勉なエンジンとユニティの統合を実証しています。 |
高レベルのレンダリング機能は、siligentFXモジュールによって実装されています。これで、次のコンポーネントが利用可能になりました。
![]() | ![]() |
![]() | ![]() |
一時的な抗拡張
トーンマッピングシェーダーユーティリティ
製品が勤勉なエンジンを使用している場合に備えて、リンクを送信できれば感謝します。
ELBITシステムによるパイロットトレーニングシミュレーター用の大規模な地形視覚化システム
Lumenrt:Bentley Systemsによる視覚化と現実モデリングソフトウェア
ゴッドス:22カンスによる受賞歴のあるサンドボックスゲーム
VRMACグラフィックス:.NET用のクロスプラットフォームグラフィックライブラリ
勤勉なエンジンは、誰もが自由に使用できるオープンプロジェクトです。 We started it to empower the community and help people achieve their goals. Sadly enough, not everyone's goals are worthy. Please don't associate us with suspicious projects you may find on the Web that appear to be using Diligent Engine. We neither can possibly track all such uses nor can we really do anything about them because our permissive license does not give us a lot of leverage.
See Apache 2.0 license.
Each module has some third-party dependencies, each of which may have independent licensing:
To contribute your code, submit a Pull Request to this repository. Diligent Engine is licensed under the Apache 2.0 license that guarantees that content in the DiligentEngine repository is free of Intellectual Property encumbrances. In submitting any content to this repository, you license that content under the same terms, and you agree that the content is free of any Intellectual Property claims and you have the right to license it under those terms.
Diligent Engine uses clang-format to ensure consistent source code style throughout the code base. The format is validated by CI for each commit and pull request, and the build will fail if any code formatting issue is found. Please refer to this page for instructions on how to set up clang-format and automatic code formatting.
Coding Guidelines
Performance Best Practices
Code Formatting
See Release History
diligentgraphics.com