Render Monkey 1.6 でしょうもないテクスチャービューアを作ろう

Render Monkey Paint


※添付画像は次の「ペイントツール」の画像です。あしからず。

FX Composer, Render Monkey 等シェーダーツールがたくさんあるのですが、どうも参考資料が少ないので、遊んでみます。Render Monkey を選んだ理由は、単に僕の家のビデオカードATI であることと、よりツールっぽい(書くべきコード量が少なく、シェーダーを書く以外はほとんどマウス操作)ところです。レンダーターゲットのサポートはRender Monkeyの方が早かったので、こちらの方が使い慣れているというのも大きいです。どちらのツールにも言えることなのですが、見た目と裏腹に、使い方がとっても「素朴」です。MSあたりがXNAでとんでもないツールを作ってくれることを密かに期待しています。

Render Monkey は ATI のツールです。ATIディベロッパーサイトに行って、ダウンロードしてきてください。DirectX9cが必要ですので、そっちのインストールもお忘れなく。

現在、皆さんに説明する気満点なのですが、ただ、「はてな」がしょうもないので、Render Monkeyのスクリーンショットを多用した説明ができません。

まずは、テクスチャーを表示します。お料理番組のように3分後の大根をとってくる感覚で、テクスチャーをすでに画面いっぱいに表示したエフェクトを取ってくることができます。

  1. ウインドウ右にある「Workspace」のEffect Workspaceを右クリック
  2. Add Effect Group -> Effect Group w/OpenGL Effect

これだけで、丸いオブジェクトが表示されるはずです。GL と書いたアイコンの Effect1 というエフェクトをさっさと削除してください。左クリックした後キーボードの「Delete」ボタンを押してください。いよいよテクスチャーを表示します。

  1. 先ほどできた Effect Group を右クリック
  2. Add Effect -> OpenGL -> Screen-Aligned Quad

やったー。これで終わりです。あとは、Screen-Aligned Quad の下にある base をいじればテクスチャーが編集差し替えも可能です。楽しんでください。ただ、これって、上下逆なんです。シェーダーを見てみましょう。右にあるWorkspaceツリービューにはScene-Aligned Quad 以下がこんな感じになっているはずです。

  • Screen-Aligned Quad
    • Single Pass
      • Vertex Program
      • Fragment Program

ここで Vertex Program をダブルクリックしてください。

varying vec2  texCoord;

void main(void)
{
   gl_Position = vec4( gl_Vertex.xy, 0.0, 1.0 );
   gl_Position = sign( gl_Position );
    
   // Texture coordinate for screen aligned (in correct range):
   texCoord = (vec2( gl_Position.x, - gl_Position.y ) + vec2( 1.0 ) ) / vec2( 2.0 );
}

gl_Position.y が逆だべさ。ということで、以下のように直します。

varying vec2  texCoord;

void main(void)
{
   gl_Position = vec4( gl_Vertex.xy, 0.0, 1.0 );
   gl_Position = sign( gl_Position );
    
   // Texture coordinate for screen aligned (in correct range):
   texCoord = (gl_Position.xy + vec2( 1.0 ) ) / vec2( 2.0 );
}

完。