您的位置:首页 > 其它

Shader学习之案例—《镜子1》

2016-08-26 09:38 323 查看
废话不多说先上效果图,我使用的是在unity5.3.3版本。


 

[align=left]一、原理[/align]

[align=left]1、首先要准备的素材是三个,对没错,就是三个因为镜子里面的那个物体其实是实物的复制体而已;一个Plane作为镜子,还有一个实物和虚物体。[/align]

[align=left]2、新建一个材质使用下面的Shader代码,并将此材质球赋给那个虚物体[/align]

[C#] 纯文本查看 复制代码
[code= csharp; gutter: true">Shader "Custom/Cg shader for virtual objects in mirrors" {

        Properties{

                _Color("Virtual Object's Color", Color) = (1, 1, 1, 1)

        }

                SubShader{

                Tags{ "Queue" = "Transparent+20" }

                Pass{

                Blend OneMinusDstAlpha DstAlpha

                CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

                uniform float4 _Color;

        uniform float4x4 _WorldToMirror;

        struct vertexInput {

                float4 vertex : POSITION;

        };

        struct vertexOutput {

                float4 pos : SV_POSITION;

                float4 posInMirror : TEXCOORD0;

        };

        vertexOutput vert(vertexInput input)

        {

                vertexOutput output;

                output.posInMirror = mul(_WorldToMirror,

                        mul(_Object2World, input.vertex));

                output.pos = mul(UNITY_MATRIX_MVP, input.vertex);

                return output;

        }

        float4 frag(vertexOutput input) : COLOR

        {

                //如果镜子里的物体出来了就剔除掉

                if (input.posInMirror.y > 0.0)

                {

                        discard;

                }

        return float4(_Color.rgb, 0.0);

        }

                ENDCG

        }

        }

}


[align=left]3、另外在建一个材质使用下面的Shader代码,并将此材质球赋值给实物体[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: