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 実装です。