メインメニューを開く

差分

マルチプルレンダーターゲット

121 バイト追加, 2023年10月26日 (木) 07:09
編集の要約なし
'''マルチプル・レンダー・ターゲット'''([[英語]]:Multiple Render Target、略称:MRT)とは、一回の[[シェーダー]]呼び出しで複数のレンダーターゲットに描画する機能である。呼び出しで複数の[[レンダーターゲット]]に描画する機能である。
==対応状況==
[[遅延レンダリング]]では「[[色]]」や「[[法線]]」、「[[深度]]」などを複数の[[レンダーターゲット]]に出力する。ならば出力先の[[レンダーターゲット]]を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。
[[遅延レンダリング]]が大流行しだした時期にXbox 360とPS3が発売した。が大流行しだした時期に[[Xbox 360]]と[[PS3]]が発売した。これらには遅延レンダリングを高速化する目的でMRTが搭載された。これらには[[遅延レンダリング]]を高速化する目的でMRTが搭載された。
==メリット==
[[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。
[[HLSL]]の記述例。
<sourcelang=c>
// Rec. 709グレースケール変換定数
const float3 luma = float3(0.2126, 0.7152, 0.0722);
</source>
OpenGLやOpenGL ESでも似たような感じである。通常はシステム予約の変数「gl_FragColor」に色を設定するが、MRTの場合は「gl_FragData」配列に各種の値を設定する。[[OpenGL]]や[[OpenGL ES]]でも似たような感じである。通常はシステム予約の変数「gl_FragColor」に色を設定するが、MRTの場合は「gl_FragData」配列に各種の値を設定する。<sourcesource lang=c>
vec4 ps_c0 = vec4(0.0, 0.5, 1.0, 0.0);
gl_FragData[0] = ps_c0.xxxx;
</source>
[[OpenGL ES ]] 3.0(GLSL ES 3.0)では「gl_FragColor」も「gl_FragData」も廃止された。
代わりにlayoutを使う。これによりgl_FragDataは問答無用でvec4の配列であり無駄が多かったのが改善された。ただHLSLのstructの方がわかりやすいね。
<sourcelang=c>
layout (location = 0) out vec3 position;
layout (location = 1) out vec3 normal;
* [[グレースケール変換定数]]
* [[MonoGameで遅延レンダリングをする]]
* [[ハードウェアインスタンシング]]
[[category: コンピューターグラフィックスコンピューター・グラフィックス]][[category: GPU]]