Unity 3D 图形学 Shader之定义属性(三)
什么是材质球:
形象来说可以比喻成人的衣服。
什么是Shader?
看到的衣服为什么是蓝色的呢?就是太阳光把其他颜色吸收了只反射出蓝色;
类比到虚拟世界里shader 决定材质跟灯光的作用,涉及到如何计算 ,举个例子来说:
Shader之在Properties模块儿定义属性:
代码如下所示:
Shader "Custom/Test1" //Shader路径名
{
Properties
{
_MainTex ("Texture", 2D) = "white" {} //定义属性显示,可调节属性
_TestColor ("TestColor", Color) = (0,0,0,0)
_TestVector ("TestVector", Vector) = (2,2,2,2)
_TestRange ("TestRange", Range (1, 10)) = 3
_TestFloat ("TestFloat", Float) = 1.2 //定义数字类型
_TestInt ("TestInt", Int) = 1
_TestCube ("TestCube", Cube) = "" {}//cubeMap是六个面的纹理,天空盒其实就在一个很大的CubeMap里面
_Test3D ("Test3D", 3D) = "" {}//3D纹理只能用脚本去创建,Opengl 3.0及以上才支持,用的比较少
}
SubShader //可以有多个SubShader Subshader对应一个显卡,U3d进来以后会找对应的Subshader, //如果第一个SubShader代码块里面运行不报错,就会把第一个Subshader在显卡里运行,否则接着往下找,如果都达不到那么就会
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
// just invert the colors
//col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
}
FallBack "diffuse"//diffuse 适合所有的显卡
}