凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

Unity で画面出力を変形するイメージエフェクトを作ってみた

はじめに

Unity で作ったアプリをプロジェクタを使って投影したい際、以前Syphon を使って MadMapper に送ったりしていましたが、単純に 1 枚の画を対象となる矩形の物体に映したいだけの時が多く、フレームの転送の遅延があったり、複数アプリを立ち上げないとならないなど面倒だったため、簡単にビューポートを変形できるだけのイメージエフェクトを作ってみました。

デモ

ダウンロード

github.com

解説

シェーダ単に頂点を動かすだけだとそれぞれの三角形を変形させるだけで上手く動きません。本アセットでは、頂点シェーダでの変形だけでなく、フラグメントシェーダ側でも適切な UV 座標を引っ張ってこれるようホモグラフィ変換を使っています。

yaju3d.hatenablog.jp

入力座標が (0.0, 0.0)(1.0, 0.0)(1.0, 1.0)(0.0, 1.0) と出来るため 8 次元連立一次方程式は割りと綺麗に解くことが出来ます。興味がある方はコードを覗いてみて下さい。

その他 API

変形後の点に変換したい場合や、逆にクリック点を変形前に変換したい場合は次の API を使って求めることが出来ます:

  • Vector2 GetHomographyPosition(Vector2 pos)
  • Vector2 GetInverseHomographyPosition(Vector2 pos)

おわりに

複数カメラ対応など、ご要望がありましたらどしどしご連絡下さい。