LoginSignup
17
12

More than 1 year has passed since last update.

[Unity]Cube map テクスチャをモデルに投影する

Posted at

小ネタ。
XR関係が多いと思いますが、何らかの経緯で取得したテクスチャがキューブマップ(Cube map)で、それをモデル上に投影しようと思ったとします。というのが今回の課題。

texCUBE を使う

シェーダには3次元ベクトルでキューブマップを参照する関数 texCUBE があり、これを利用することになるでしょう。

Skybox シェーダを使う

すでに texCUBE を使用した Skybox シェーダがありますから、これを使えばよさそうです。が、そのままではうまくいきません。

Skybox シェーダの何が足りないのか

Unity はバージョンごとに組み込みシェーダのソースコードが公開されていますので、

ここから Built in Shaders をダウンロードして

DefaultResourcesExtra/Skybox.shader

を見てみますと、頂点シェーダに

o.texcoord = v.vertex.xyz;

という記述があります。Cube map を引くための座標にモデルのベクトルを直接投入していますね。通常の Skybox は移動することがないのでこれで良いのですが、カメラや物体座標も適用しないと任意のモデルには貼り付けられません。

修正

//o.texcoord = v.vertex.xyz;
o.texcoord = mul(UNITY_MATRIX_MV, v.vertex);

先ほどの行をこのように修正して、Quadなどでも Cubemap(のうちそのモデルが視界を覆っている部分)を表示できるようになりました。

実際に修正したものを利用するには、この Skybox.shader を自身のプロジェクトにコピーして、シェーダの名前を変更するのがいいでしょう。

17
12
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
17
12