This is the documentation for Enlighten.
6.6. 実装サンプル
基本的な Enlighten 間接ライティングの実装方法を説明するため、ゲーム エンジンなどの実際のアプリケーションをきわめて単純化した例を提供します。
典型的なゲーム エンジンは、ソース シーン データから、ゲーム ランタイムで使用されるランタイム シーン データを生成するビルドパイプラインを含んでいます。ビルド パイプラインは開発マシンで実行されるのに対し、ゲーム ラインタイムはターゲット ハードウェアで実行されます。
パイプラインとランタイムを明確に区別するため、実装サンプルは 2 つの部分、Sample Pipeline と Sample Runtime に分けられています。
サンプルの実行
Sample Pipeline と Sample Runtime アプリケーション用に事前にビルドされた実行ファイルは、Bin\Win64* にあります。完全なソース コードは、Src\Samples\Programs にあります。
以下の Sample Pipeline を使用して、ソース シーン データ MinimalExample.fbx からランタイム シーン データ MinimalExample.rss を生成します。
SamplePipeline.exe Resources\MinimalExample.fbx
SamplePipeline.exe Resources\MinimalExample.fbx
以下のサンプル ランタイムを使用して、ランタイム シーン データ MinimalExample.rss のロードと表示を行います。
SampleRuntime.exe build\Output\MinimalExample\MinimalExample.rss
ソースの確認
サンプル アプリケーションは、サンプル フレームワーク ライブラリ GeoBase、GeoCore、GeoApp、GeoRender を使用して単純な Windows アプリケーションを実装します。
実装サンプルの一部は、サンプル フレームワーク ライブラリ GeoPipeline と GeoRuntime に分けられており、他のサンプル アプリケーションとの共有が可能になっています。
この実装サンプルは、効率性や堅牢性よりも簡素であることを重視しており、本番環境レベルの実装を意図していません。
本番のコードでは、GeoPipeline と GeoRuntime ライブラリの使用はお勧めしません。
以下の で強調された項目は、エンジンにすでに存在している機能を示します。
エンジンに Enlighten を実装する際、ソース シーン データとランタイム シーン データにはエンジンの既存のソリューションを使用することをお勧めします。
Sample Pipeline
このアプリケーションは、典型的なゲーム エンジンのビルド パイプラインを表します。この実装は、プリコンピュートを実行するために Pipeline ライブラリを使用します。
ソースコードは、以下に示すとおり構成されています。
- メイン:Enlighten シーンをエクスポートし、プリコンピュートを実行し、Enlighten ランタイム データを抽出する高レベル パイプラインのステップです。
- (GeoRuntime) GeoEngine::Mesh と GeoEngine::SampleScene:ディスクへの書き込みと読み出しができる基本のランタイム シーン データです。
- (GeoFbx) GeoEngine::LoadFbx:ディスクからソース シーン データをロードします。
- (GeoRuntime) GeoEngine::EnlightenRuntimeData:ディスクへの書き込みと読み出しができる基本的な Enlighten ランタイム データです。
- (GeoPipeline) GeoEngine::CreateEnlightenScene: プリコンピュートのため、中間 Enlighten シーンをエクスポートします。
- (GeoPipeline) GeoEngine::CreateRuntimeData: プリコンピュートの結果から、永続 Enlighten ランタイム データを作成します。
- (GeoPipeline) GeoEngine::CreateMaterialColourData: マテリアル カラー データで Enlighten ランタイム データを拡張します。
Sample Runtime
このアプリケーションは、典型的なゲーム エンジンの最終ゲーム ランタイムを表します。実装では、高レベル ランタイムを使用してラジオシティ更新を実施します。
Main.cpp で Enlighten 間接ライティングを有効にするための部分は、#if ENLIGHTEN
条件付きブロックでラップされています。
Enlighten 間接ライティングなしで実装サンプルをビルドするには、Main.cpp で ENLIGHTEN
が 0
になるよう定義します。
ソースコードは、以下に示すとおり構成されています。
- メイン:Enlighten 間接ライティングでシーンをロードおよび表示できる、高レベル アプリケーション ロジックです。
- ApplicationRuntime:アプリケーションの一部の実装の詳細をカプセル化します。
- EnlightenRuntime:Enlighten ランタイム データをロードし、高レベル ランタイムを実行して Enlighten 間接ライティングでレンダリングする Enlighten 固有の機能をカプセル化します。
- (GeoRuntime) GeoEngine::Dx11GpuTexture:高レベル ランタイムとともに使用する IGpuTexture の DX11 実装です。
- (GeoRuntime) GeoEngine::PppiDx11TextureUpdateHandler:ピクセルごとのプローブ ライティングとともに使用する IPppiTextureUpdateHandler の DX11 実装です。