コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
マルチプルレンダーターゲット
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
2019年9月24日 (火) 02:47時点における
imported>Administrator
による版
(
→記述例
)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''マルチプルレンダーターゲット'''([[英語]]:Multiple Render Target、略称:MRT)とは、一回の[[シェーダー]]呼び出しで複数のレンダーターゲットに描画する機能である。 == 対応状況 == * DirectX 9から使えるが、DirectX 9.0cくらいまでは対応・非対応の製品が乱立していた。 ** [[ATI]]製品はほとんどいけた。 ** [[NVIDIA]]製品はGeForce 6x00シリーズくらいから対応だと思う。 ** 現行製品はすべて対応している。 * [[MonoGame]]ではHiDefに設定すると使える。 * [[OpenGL ES]]では[[OpenGL ES 3.0]]以降で使える。 == 概要 == === 3DテレビやVR === [[3Dテレビ]]や[[VR]]向けに映像を出力する際には、人間の目と目の間隔分だけ微妙にカメラ視点をズラした2つの画像を出力する。つまり1フレームを表示するには「右目用」と「左目用」の2枚の画像を描くことになる。 [[シェーダー]]は「実行速度」よりも「起動速度」が段違いに遅いので呼び出す回数を減らせれば劇的に速くなる。つまりカメラの座標がちょっと違うだけなのに2回もシェーダーを回すとかまったくイケてない。 そこで出力先の[[レンダーターゲット]]([[テクスチャ]])を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。 === 遅延レンダリング === [[遅延レンダリング]]では「[[色]]」や「[[法線]]」、「[[深度]]」などを複数の[[レンダーターゲット]]に出力する。 ならば出力先の[[レンダーターゲット]]を複数指定できるようにすれば1回のシェーダー呼び出しで完結できるじゃないか、という代物である。 == メリット == シェーダーの呼び出し、いわゆる「Drawコール」が減る。 == デメリット == 当然ながらMRT向けに[[シェーダー]]を書き直さなければならない。 [[COBOL]]や[[Java]]や[[PHP]]を愛する[[IT土方]]的な考えであれば「既存のシェーダーを2回呼び出せばいいじゃん」となるところである。この世界では「[[車輪の再発明]]だ」と批判されることであろう。 一方、ゲーム業界はそこへ突撃して「この[[ゲーム]]のここがすごい!」と宣伝材料にしようとする。なお[[ゲーム]]の面白さには一切関係ない。 彼らは相見えない。「[[プログラマー]]」と一括にはできないほど根本的な思想に違いがある。 == 記述例 == [[ピクセルシェーダー]]の戻り値を構造体にして一度に複数の色を返す感じになる。 [[HLSL]]の記述例。 <source> // Rec. 709グレースケール変換定数 const float3 luma = float3(0.2126, 0.7152, 0.0722); // ピクセルシェーダー出力 struct PS_OUTPUT { float4 rgba:COLOR0; //RendarTargetの0番目に出力 float4 gray:COLOR1; //RendarTargetの1番目に出力 }; // ピクセルシェーダー本体 // 一般的なピクセルシェーダーの戻り値はRGBAを表す「float4」だが、 // マルチプルレンダーターゲットでは構造体で複数の色を返す。 PS_OUTPUT psMain( float2 texCoord:TEXCOORD ) { PS_OUTPUT psout; // そのまま出力 float4 color = tex2D(ScreenTexSampler,texCoord); psout.rgba = color; // グレースケールに変換して出力 float gray = dot(color.rgb, luma); psout.gray = float4(gray,gray,gray,1); return psout; } </source> == 関連項目 == * [[Rec. 709]] * [[グレースケール変換定数]] [[category: コンピューターグラフィックス]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化