「マルチプルレンダーターゲット」の版間の差分
imported>Administrator |
imported>Administrator |
||
| 1行目: | 1行目: | ||
''' | '''マルチプル・レンダー・ターゲット'''([[英語]]:Multiple Render Target、略称:MRT)とは、一回の[[シェーダー]]呼び出しで複数のレンダーターゲットに描画する機能である。 | ||
== 対応状況 == | ==対応状況== | ||
*DirectX 9から使えるが、DirectX 9.0cくらいまでは対応・非対応の製品が乱立していた。 | |||
**[[ATI]]製品はほとんどいけた。 | |||
[[ | **[[NVIDIA]]製品はGeForce 6x00シリーズくらいから対応だと思う。 | ||
**現行製品はすべて対応している。 | |||
*[[MonoGame]]では「HiDef」に設定すると使える。 | |||
*[[OpenGL ES]]では[[OpenGL ES 3.0]]以降で使える。 | |||
[[ | ==概要== | ||
[[遅延レンダリング]]では「[[色]]」や「[[法線]]」、「[[深度]]」などを複数の[[レンダーターゲット]]に出力する。ならば出力先の[[レンダーターゲット]]を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。 | |||
[[遅延レンダリング]]が大流行しだした時期にXbox 360とPS3が発売した。 | |||
これらには遅延レンダリングを高速化する目的でMRTが搭載された。 | |||
== | ==メリット== | ||
[[ | [[シェーダー]]の呼び出し、いわゆる「[[Drawコール]]」が減る。 | ||
==デメリット== | |||
== デメリット == | |||
当然ながらMRT向けに[[シェーダー]]を書き直さなければならない。 | 当然ながらMRT向けに[[シェーダー]]を書き直さなければならない。 | ||
| 34行目: | 28行目: | ||
彼らは相見えない。「[[プログラマー]]」と一括にはできないほど根本的な思想に違いがある。 | 彼らは相見えない。「[[プログラマー]]」と一括にはできないほど根本的な思想に違いがある。 | ||
== 記述例 == | ==記述例== | ||
[[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。 | [[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。 | ||
[[HLSL]]の記述例。 | [[HLSL]]の記述例。 | ||
| 67行目: | 61行目: | ||
</source> | </source> | ||
== 関連項目 == | OpenGLやOpenGL ESでも似たような感じである。通常はシステム予約の変数「gl_FragColor」に色を設定するが、MRTの場合は「gl_FragData」配列に各種の値を設定する。 | ||
* [[Rec. 709]] | <source> | ||
* [[グレースケール変換定数]] | vec4 ps_c0 = vec4(0.0, 0.5, 1.0, 0.0); | ||
gl_FragData[0] = ps_c0.xxxx; | |||
gl_FragData[1] = ps_c0.yyyx; | |||
gl_FragData[2] = ps_c0.zzzz; | |||
</source> | |||
OpenGL ES 3.0(GLSL ES 3.0)では「gl_FragColor」も「gl_FragData」も廃止された。 | |||
代わりにlayoutを使う。これによりgl_FragDataは問答無用でvec4の配列であり無駄が多かったのが改善された。ただHLSLのstructの方がわかりやすいね。 | |||
<source> | |||
layout (location = 0) out vec3 position; | |||
layout (location = 1) out vec3 normal; | |||
layout (location = 2) out vec4 color; | |||
</source> | |||
==関連項目== | |||
*[[Rec. 709]] | |||
*[[グレースケール変換定数]] | |||
[[category: コンピューターグラフィックス]] | [[category: コンピューターグラフィックス]] | ||