反射的原理很简单,只要知道对象的位置、镜面的法线,就能获得反射后的图像:
不过,如何知道对象的位置呢?
一般做法是在镜子的位置放个摄像机,或者用反射探针,不过今天就先不考虑这些问题,先实现最简单的反射效果。
如果只是反射天空盒,其实比较简单,因为天空盒的位置是固定的,只要通过反射计算就能获得镜像效果。
Shader "MyShader/SS_26"
{
Properties
{
_CubeTex ("CubeTex", Cube) = ""{}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
fixed4 vertex : SV_POSITION;
fixed3 refDir : TEXCOORD0;
};
uniform samplerCUBE _CubeTex;
v2f vert (appdata_base v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
fixed3 worldViewDir = WorldSpaceViewDir(v.vertex);
o.refDir = reflect(-worldViewDir, worldNormal);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = texCUBE(_CubeTex, i.refDir);
return col;
}
ENDCG
}
}
}
返回目录:https://blog.csdn.net/yzy1987523/article/details/107561997