95736


UnityでCamera.ScreenPointToRayをやるように、ShaderGraphのフラグメントでScreenPositionからレイを飛ばしたいと思っています。

試しに、カメラ座標からフラグメントの座標へレイを飛ばすシェーダーグラフを作成してみたところ、

[![テスト用シェーダーグラフ](https://i.stack.imgur.com/iieC0.png)](https://i.stack.imgur.com/iieC0.png)

[![テスト用シェーダーグラフの結果](https://i.stack.imgur.com/ugS3G.png)](https://i.stack.imgur.com/ugS3G.png)

こんな具合にカメラからレイが飛んでいることがわかりました。

これと同じことを、ScreenPositionから行いたくて、次のシェーダーグラフを作ったところ、

[![ScreenPositionからレイを飛ばしているつもりのシェーダー](https://i.stack.imgur.com/LGcYI.png)](https://i.stack.imgur.com/LGcYI.png)

[![ScreenPositionからレイを飛ばしているつもりのシェーダーの結果](https://i.stack.imgur.com/jHVcP.png)](https://i.stack.imgur.com/jHVcP.png)

真っ黒にしかなりません。

この例は最終的にはScreenPositionにプラスマイナスのオフセットをかけて両隣のピクセルに相当する情報を取得して云々〜としたくて作ったものです。

で、前者のシェーダーの結果と同じにならないどころか、そもそも真っ黒にしかならないのは、  
何か間違っているところがあるのでしょうか？

シェーダー詳しい方居りましたらご教授いただけませんでしょうか。


CC BY-SA 4.0
2023-07-22T13:40:07.807
95728
2023-07-23T18:31:50.153
705
question
unity3d shader shader-graph
UnityのShaderGraphでScreenPositionからレイを求める方法を教えてください


自己解決しました。  
Transformation MatrixノードのInverse〜系で得られる行列の値に不正なものが渡ってきているみたいでした。  
Unityの仕様なのかバグなのかバージョンなのか理由はわかりませんが、  
4x4行列の逆行列を求めるコードをCustom Functionノードで書いてViewProjectionから逆行列を割り出して利用したらうまくいきました。


CC BY-SA 4.0
2023-07-23T18:31:50.153
95736
2023-07-23T18:31:50.153
705
95728
answer