Unity3D之Shader入门

本文档介绍了Unity3D中Shader的基础知识,包括Shader的基本属性、定点函数和片元函数的使用,以及如何利用Struct进行更复杂的着色操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本属性

Shader "test/test1"{
	Properties{
		//属性
		_Color("Color",Color) = (1,1,1,1)
		_Vector("Vector",Vector) = (1,2,3,4)
		_Int("Int",Int) = 34234
		_Float("Float",Float) = 4.5
		_Range("Range",Range(1,11)) = 6
		_2D("Texture",2D) = "red"{}
		_Cube("Cube",Cube) = "white"{}
		_3D("Texure",3D) = "black"{}
	}
		//SubShader可以写很多个 显卡运行效果的时候,从第一个SubShader开始,如果第一个SubShader里面的效果都可以实现,那么就使用第一个SubShader,如果显卡这个SubShader里面某些效果它实现不了,它会自动去运行下一个SubShader
		SubShader{
			//至少有一个Pass
			Pass{

			//在这里编写shader代码  HLSLPROGRAM
			CGPROGRAM
			//使用CG语言编写shader代码
			float4 _Color; //float half fixed
			//fixed4
			float3 t1;// half3 fixed3
			float2 t;//half2 fixed2
			float t2;
			float4 _Vector;
			float _Int;
			float _Float;
			float _Range;
			sampler2D _2D;
			samplerCube _Cube;
			sampler3D _3D;
			//float  32位来存储
			//half  16位  -6万 ~ +6万
			//fixed 11位 -2 到 +2,一般颜色直接用fixed,颜色0-1

			ENDCG
		}
	}
	Fallback "VertexLit"
}

定点函数、片元函数


Shader "test/test2"{
	SubShader{
		//至少有一个Pass
		Pass{
			//在这里编写shader代码  HLSLPROGRAM
			CGPROGRAM
			//顶点函数 这里只是声明了,顶点函数的函数名
			//基本作用是 完成顶点坐标从模型空间到剪裁空间的转换(从游戏环境转换到视野相机屏幕上)
			#pragma vertex vert
			//片元函数 这里只是声明了,片元函数的函数名
			//基本作用  返回模型对应的屏幕上的每一个像素的颜色值
			#pragma fragment frag
			float4 vert(float4 v : POSITION) :SV_POSITION{//通过语义告诉系统,我这个参数是干嘛的, 比如POSITION是告诉系统我需要顶点坐标
				//SV_POSITION这个语义用来解释说明返回值, 意思是返回值是剪裁空间下的顶点坐标
				//float4 pos = mul(UNITY_MATRIX_MVP,v); //通过矩阵进行转换
				//return pos;
				return UnityObjectToClipPos(v);
			}
			fixed4 frag() :SV_Target{
					return fixed4(0.5,0.5,1,1);
			}
			ENDCG
		}
	}
		Fallback "VertexLit"
}

使用Struct

Shader "Siki/03 Use struct"{
	SubShader{
		Pass{
			CGPROGRAM

	#pragma vertex vert
	#pragma fragment frag
			
			//application to vertex 应用到定点
			struct a2v {
				float4 vertex:POSITION;//告诉unity把模型空间下的顶点坐标填充给vertex
				float3 normal:NORMAL;//告诉unity把模型空间下的法线方向填充给normal
				float4 texcoord : TEXCOORD0;//告诉unity把第一套纹理坐标填充给texcoord
			};

			struct v2f {
				float4 position:SV_POSITION;
				float3 temp:COLOR0;//这个语义可以由用户自己定义,一般都存储颜色
			};
				
			v2f vert(a2v v) { 
				v2f f;
				f.position = mul(UNITY_MATRIX_MVP,v.vertex);
				f.temp = v.normal;
				return f;
			} 

			fixed4 frag(v2f f) :SV_Target{
				return fixed4(f.temp,1);
			}

			ENDCG
		}
	}
	Fallback "VertexLit"
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值