読者です 読者をやめる 読者になる 読者になる

Onoty3D

Unityに関するメモとか

Unity5で鏡面表現

Unity Shader

f:id:onoty3d:20150402133801p:plain

RefrectionProbeを利用しての反射表現、まだ色々調べ中。

docs.unity3d.com

 

単に鏡を作りたい場合は、MirrorReflectionを使うと手軽で便利です。

MirrorReflection4 - Unify Community Wiki

いつの間にか4がでていた。

ユニティちゃんのライブステージの床にもこれを少し修正したのが使われていたかと思います。

for Unity 4.x & 5.0と書いていますが、5で使うとC#スクリプトの方でエラーと警告がでます。
エラーの方は自動アップグレードでも改修できますが、手で修正するなら
reflectionCamera = go.camera;

reflectionCamera = go.GetComponent<Camera>();

reflectionCamera.gameObject.AddComponent("FlareLayer");

reflectionCamera.gameObject.AddComponent<FlareLayer>();
と変更しましょう。

また、警告の部分は自動アップグレードでも改修されないので
GL.SetRevertBackfacing(true);

GL.invertCulling = true;

GL.SetRevertBackfacing(false);

GL.invertCulling = false;
と変更しましょう。

Usageに書いてあるとおり、Planeの様な平らなオブジェクトで利用できます。

(球体等にも適用できますが、平らであることを前提とした鏡像が表示されるので期待通りの反射はしません。)
また、複数のオブジェクトに適用させたい場合は、MirrorReflectionシェーダを適用させたマテリアルを、オブジェクトごとに別々に作って適用させましょう(ひとつのマテリアルを複数のオブジェクトで共有するとうまくいかない)。