「マルチプルレンダーターゲット」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | '''マルチプル・レンダー・ターゲット'''([[英語]]:Multiple Render Target、略称:MRT)とは、一回の[[シェーダー]] | + | '''マルチプル・レンダー・ターゲット'''([[英語]]:Multiple Render Target、略称:MRT)とは、一回の[[シェーダー]]呼び出しで複数のレンダーターゲットに描画する機能である。 |
==対応状況== | ==対応状況== | ||
13行目: | 13行目: | ||
[[遅延レンダリング]]では「[[色]]」や「[[法線]]」、「[[深度]]」などを複数の[[レンダーターゲット]]に出力する。ならば出力先の[[レンダーターゲット]]を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。 | [[遅延レンダリング]]では「[[色]]」や「[[法線]]」、「[[深度]]」などを複数の[[レンダーターゲット]]に出力する。ならば出力先の[[レンダーターゲット]]を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。 | ||
− | [[遅延レンダリング]] | + | [[遅延レンダリング]]が大流行しだした時期にXbox 360とPS3が発売した。 |
− | + | これらには遅延レンダリングを高速化する目的でMRTが搭載された。 | |
==メリット== | ==メリット== | ||
31行目: | 31行目: | ||
[[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。 | [[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。 | ||
[[HLSL]]の記述例。 | [[HLSL]]の記述例。 | ||
− | <source | + | <source> |
// Rec. 709グレースケール変換定数 | // Rec. 709グレースケール変換定数 | ||
const float3 luma = float3(0.2126, 0.7152, 0.0722); | const float3 luma = float3(0.2126, 0.7152, 0.0722); | ||
61行目: | 61行目: | ||
</source> | </source> | ||
− | + | OpenGLやOpenGL ESでも似たような感じである。通常はシステム予約の変数「gl_FragColor」に色を設定するが、MRTの場合は「gl_FragData」配列に各種の値を設定する。 | |
− | < | + | <source> |
vec4 ps_c0 = vec4(0.0, 0.5, 1.0, 0.0); | vec4 ps_c0 = vec4(0.0, 0.5, 1.0, 0.0); | ||
gl_FragData[0] = ps_c0.xxxx; | gl_FragData[0] = ps_c0.xxxx; | ||
69行目: | 69行目: | ||
</source> | </source> | ||
− | + | OpenGL ES 3.0(GLSL ES 3.0)では「gl_FragColor」も「gl_FragData」も廃止された。 | |
代わりにlayoutを使う。これによりgl_FragDataは問答無用でvec4の配列であり無駄が多かったのが改善された。ただHLSLのstructの方がわかりやすいね。 | 代わりにlayoutを使う。これによりgl_FragDataは問答無用でvec4の配列であり無駄が多かったのが改善された。ただHLSLのstructの方がわかりやすいね。 | ||
− | <source | + | <source> |
layout (location = 0) out vec3 position; | layout (location = 0) out vec3 position; | ||
layout (location = 1) out vec3 normal; | layout (location = 1) out vec3 normal; | ||
81行目: | 81行目: | ||
* [[グレースケール変換定数]] | * [[グレースケール変換定数]] | ||
* [[MonoGameで遅延レンダリングをする]] | * [[MonoGameで遅延レンダリングをする]] | ||
− | |||
− | [[category: | + | [[category: コンピューターグラフィックス]] |
− |