Unity3D Shader入门小实验

     Unity3D的所有渲染工作都离不开着色器(Shader)。Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。

这个是一个雪堆积的Shader


当这个山体旋转的时候,覆盖的方向也会改变物体的mat



Shader "Custom/snow" {
Properties{
_MainTex("Base (RGB)", 2D) = "white" {}


//1
_Bump("Bump", 2D) = "bump" {}
_Snow("Snow Level", Range(0,1)) = 0
_SnowColor("Snow Color", Color) = (1.0,1.0,1.0,1.0)
_SnowDirection("Snow Direction", Vector) = (0,1,0)
}
SubShader{
Tags{ "RenderType" = "Opaque" }
LOD 200


CGPROGRAM
#pragma surface surf Lambert


sampler2D _MainTex;


//2
sampler2D _Bump;
float _Snow;
float4 _SnowColor;
float4 _SnowDirection;
struct Input {
float2 uv_MainTex;


//3
float2 uv_Bump;
float3 worldNormal; INTERNAL_DATA
};


void surf(Input IN, inout SurfaceOutput o) {
half4 c = tex2D(_MainTex, IN.uv_MainTex);
o.Normal = UnpackNormal(tex2D(_Bump, IN.uv_Bump));


if (dot(WorldNormalVector(IN, o.Normal), _SnowDirection.xyz) > lerp(1, -1, _Snow)) {
o.Albedo = _SnowColor.rgb;
}
else {
o.Albedo = c.rgb;
}


o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"

}


代码如上所示,之后在物体的材质哪里选择 Custom->然后找到之前你创建的shader的位置

更改参数,就可以改变石头的Meterial

猜你喜欢

转载自blog.csdn.net/m0_37702975/article/details/80009008