什么是材质球:

形象来说可以比喻成人的衣服。

什么是Shader?

看到的衣服为什么是蓝色的呢?就是太阳光把其他颜色吸收了只反射出蓝色;

类比到虚拟世界里shader 决定材质跟灯光的作用,涉及到如何计算 ,举个例子来说:

Unity 3D 图形学 Shader之定义属性(三)

Shader之在Properties模块儿定义属性:Unity 3D 图形学 Shader之定义属性(三)

代码如下所示:

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 适合所有的显卡
}

 

分类:

技术点:

相关文章: