LoginSignup
3
2

More than 5 years have passed since last update.

ShaderForge での Grab Pass Texture が iOS 環境において上下反転する問題への対処

Last updated at Posted at 2017-11-10

要旨

 Unity において屈折表現などを行うには、直前までの描画内容を取得する Grab Pass1 という機能が用いられる。 Grab Pass で得られる Grab Texture はプラットフォームによって座標系が異なる2 ため、直接 Shader を記述する場合は ComputeGrabScreenPos マクロを使用して座標を得る。しかし ShaderForge の Screen Position ノード3ComputeGrabScreenPos を使用しておらず、 iOS 環境などで上下が反転する問題がある。
 この記事では ShaderForge のノードエディタ上で ComputeGrabScreenPos を用いて Grab Texture を正しく取得する。

環境

  • Unity 2017.2.0f3
  • ShaderForge v1.38

実装

実装ノード

以上!

解説

 この問題に対処する一番シンプルな方法は、出力済みのシェーダコードに含まれる ComputeScreenPosComputeGrabScreenPos に置換することである。しかしこのシンプルな方法はシェーダファイルを ShaderForge で編集したが最後、置換内容はすべて吹き飛んでしまう。また ComputeGrabScreenPos マクロの内容をノードエディタ上で再実装することもできるが、今後の Unity の仕様変更で いつの間にか バグってしまう恐れがある。
 そこでこの記事の手法はポリゴンのワールド座標を用いて Projection 座標を Fragment Shader で再計算することで ComputeGrabScreenPos マクロを使用可能とし、今後の Unity の仕様変更にも追従可能としている。

脚注

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2