MikuMikuDayo
エフェクトリファレンス
読み取り中…
検索中…
一致する文字列を見つけられません
YRZ::FXPass 構造体export
モジュール YRZFx

パスを定義するための構造体 [詳解]

YRZ::FXPass 連携図
[凡例]

公開メンバ関数

bool IsFunctional () const
template<class Archive>
void serialize (Archive &A)

公開変数類

std::string name
 パス名。マクロYRZ_PASS_nameを定義してコンパイラを起動する
std::string type = "postprocess"
 パスの種類。"postprocess", "compute", "raytracing", "rasterizer", "copy", "clearRTV", "clearUAV", "mipmapgen"のいずれか
std::string vertexShader
 vertexShaderのエントリポイント名(postprocess, rasterizerパス用)
std::string pixelShader
 pixelShaderのエントリポイント名(postprocess, rasterizerパス用)
std::string computeShader
 computeShaderのエントリポイント名(computeパス用)
XMUINT3 numthreads = { 0,0,0 }
 1スレッドグループあたりのスレッド数 YRZ_NUMTHREADSマクロの内容を定義する
std::string raygenShader
 raytracingShaderのエントリポイント名
std::vector< std::string > missShader
 raytracingShaderのエントリポイント名
std::vector< FXHitGrouphitGroup
 raytracingShaderのヒットグループの定義
std::vector< std::string > callableShader
 raytracingShaderのエントリポイント名
UINT maxPayloadSize = 64
 raytracingShaderのペイロードの最大サイズ[byte]
UINT maxAttributeSize = 8
 raytracingShaderの交差判定用構造体の最大サイズ[byte]
UINT maxRecursionDepth = 4
 raytracingShaderの最大再帰段数
std::string vsTarget = "vs_6_1"
 vertexShaderのシェーダーモデル
std::string psTarget = "ps_6_1"
 pixelShaderのシェーダーモデル
std::string csTarget = "cs_6_1"
 computeShaderのシェーダーモデル
std::string libTarget = "lib_6_3"
 raytracingShaderのシェーダーモデル
std::vector< std::string > macros
 パスのコンパイル時に定義されるマクロ, MACRO=value の形式で=区切りでマクロを指定する
FXSize outputSize = {}
 シェーダの出力サイズの指定
std::vector< FXRTVRTV
 RTVでアクセスされるテクスチャ群
std::vector< FXUAVUAV
 UAVでアクセスされるリソース群
FXDSV DSV
 DSVでアクセスされるテクスチャ(最大1つ)
std::vector< std::string > conditions
 実行時の条件式。要素数が1以上の時、式がすべて真ならばパスが実行される
FXBlendDesc blendDesc
 αブレンディングについての設定(rasterizerパス・postprocessパス用)
FXRasterizerDesc rasterizerDesc
 プリミティブの描画方法についての設定(rasterizerパス用)
FXDepthStencilDesc depthStencilDesc
 デプスステンシルバッファの使用法についての設定(rasterizerパス用)
std::string primitiveTopologyType = "triangle"
 プリミティブの種類についての設定(rasterizerパス用) D3D12_PRIMITIVE_TOPOLOGY_TYPEを参照
UINT sampleMask = D3D12_DEFAULT_SAMPLE_MASK
 rasterizerパス用(現在のMikuMikuDayoの実装では未対応)
std::string rasterModelTarget = "all"
 ラスタライザのターゲットになるモデル(デフォーマ・ポストプロセス用)
"all":シーン内のモデルとエフェクト起動元に割り当てられたモデル
"other":シーン内のモデル
"self":エフェクト起動元に割り当てられたモデルのみ
"buffer":rasterVB、rasterIBで指定されるリソースによって定義されるモデル
std::string rasterVB
 rasterModelTarget=="buffer"の場合に使われるVertexBufferとなるリソース名
std::string rasterIB
 rasterModelTarget=="buffer"の場合に使われるIndexBufferとなるリソース名
std::vector< FXInputElementDesclayout
 rasterVB, rasterIBがセットされている時はこのレイアウトを使う。空の場合はraterIBのみ参照される
std::string src
 コピー元リソース名 copyパス用 コピー元とコピー先のリソースのサイズ・フォーマット・mipレベル数は同一でなければならない
std::string dest
 コピー先リソース名 copyパス用 コピー元とコピー先のリソースのサイズ・フォーマット・mipレベル数は同一でなければならない
std::string target
 対象リソース名 clearRTV, clearUAV, mipmapgenパス用
XMFLOAT4 value = { 0,0,0,1 }
 クリアする場合に使用する値 clearRTV, clearUAVパス用

詳解

パスを定義するための構造体

outputSizeのデフォルト値の決定法
以下の順序で決定する
  1. RTV[0]に指定されたリソースのサイズ
  2. RTVが空の場合、DSVに指定されたリソースのサイズ
  3. DSVも空の場合、UAV[0]に指定されたリソースのサイズ
  4. UAVも空の場合、エフェクトのdefaultOutputDimension, defaultOutputSize(MikuMikuDayoの実装ではエフェクトのカテゴリがデフォーマの場合は対象モデルの頂点数、それ以外の場合は出力画面の画素数)
numthreadsについて
compute shaderにおいてスレッドグループあたりのスレッド数を指定するためのパラメータ
YRZ_NUMTHREADSマクロが定義され、[numthreads(x,y,z)]に展開されるので、compute shaderのエントリポイントに併記すべし
#ifdef YRZ_PASS_SamplePass
YRZ_NUMTHREADS
void CS(uint3 id : SV_DispatchThreadID)
{
...
}
#endif
outputSizeによって総スレッド数(スレッドグループ数*スレッド数)の下限が決定され、スレッドグループ数はoutputSize/numthreads(端数切り上げ)となる
指定が無い場合、MikuMikuDayoの実装ではデフォルト値として以下のように値が設定される
  1. outputSize.dimension == 1 ならば (1024,1,1)
  2. outputSize.dimension == 2 ならば (16,16,1)
  3. outputSize.dimension == 3 ならば (8,8,8)
DirectX12の仕様上、スレッドグループ数の上限が65535であるため、デフォーマの処理できる最大頂点数は65535*1024となり、この数が1つのモデルに含めることのできる頂点数の上限
conditionsについて
パスの起動条件を記述できる。conditionsが空の場合は常時パスは起動される
"conditions" : [ "OnStart" ]
この場合、OnStart(再生・出力を開始直後のフレームの時1、それ以外では0)が真の時のみパスが起動される
C++同様、真とは式を評価した結果が0以外の場合、偽とは0の場合を指す
使用できる変数は以下の通り
  • hlsl/cb.hlsliにある、constant bufferに格納されている変数
  • エフェクト内で定義されているコントローラ変数のうち、typeが"float"または"int"であるもの

条件文を複数書いた場合、全ての文が真の時のみパスが起動される
"conditions" : [ "OnStart", "OnLoad" ]
この場合、OnStartが真、かつOnLoad(いずれかのエフェクトが読み込まれた直後のフレームでは1、それ以外では0)が真の時にパスが起動される

conditionsには式を用いることが出来る
"conditions" : [ "OnStart || OnLoad" ]
この場合、OnStartが真、またはOnLoadが真の時にパスが起動される

YRZFx.ixx1689 行目に定義があります。


この構造体詳解は次のファイルから抽出されました: