unity之shader

GLSL shader语言用于OpenGL、HLSL shader语言用于DirectX、ShaderLab用于unity。1.表面着色器 surface shader  2.定点/片元着色器 vexter/fragment

1.Shader的基本结构。

shader由名字,属性,一个或多个SubShader,后备方案四部分组成。

Shader "Yanzi/myshader"{

	Properties{
		//属性
		_Color("_Color",Color) = (0.5,0.6,0.6,1)
		_Vector("Vector",Vector) = (1,2,3,4)
		_Int("Int",Int) = 12324
		_Float("Float",Float) = 4.5
		_Range("Range",Range(1,11)) = 6
		_2D("Texture",2D) = "red"{}
		_Cube("Cube",Cube) = "white" {}
		//_3D{"texture",3D}="blue"{}
	}
	//SubShader可以有多个
	SubShader{
	//至少有一个Pass
		Pass{
		//在这里编写shader代码 HLSLPROGRAM
		CGPROGRAM
		//使用CG语言编写Shader
		float4 _Color;   //float half fixed  颜色一般用fixed存储,因为fixed位数是-2到2;
		float3 t1;
		float2 t2;
		float4 _Vector;
		float _Int;
		float _Float;
		float _Range;
		sampler2D _2D;
		samplerCube _Cube;
		sampler3D _3D;

		ENDCG
		}
	}
	Fallback "VertexLit"  //后备方案
}

2.顶点/片元着色器

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Yanzi/02-secondshader"{
	SubShader{
		Pass{
			CGPROGRAM
		
#pragma vertex vert   //顶点函数  基本作用:完成顶点坐标从模型空间到剪裁空间的转换(从游戏环境转换到视野相机屏幕上)
		
#pragma fragment frag   //片元函数  基本作用:返回模型对应的屏幕上的每一个像素的颜色值
		float4 vert(float4 v:POSITION) :SV_POSITION { //通过语义告诉系统,我这个参数是干嘛的,比如POSITION是告诉系统我需要顶点坐标
		//SV_POSITION这个语义是用来解释说明返回值,意思是返回值是剪裁空间下的顶点坐标
		return UnityObjectToClipPos(v); 
		}
		fixed4 frag():SV_Target {
			return fixed4(0.5f,0.5f,1,1);
		}
			ENDCG
		}
	}
	Fallback"VertexLit"
}

3.片元函数和顶点函数之间的数据传递

从应用程序传递到顶点函数的语义有哪些

POSITION 顶点坐标(模型空间下的)/ NORMAL 法线(模型空间下的)/ TANGENT 切线(模型空间下的)/ TEXCOORD0~n 纹理坐标 / COLOR 顶点颜色

 从顶点函数传递到片元函数的语义

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)/ COLOR0 可以传递一组值、四个值,并不单指颜色 / COLOR1 传递四个值 / TEXCOORD0~7 传递纹理坐标 

片元函数传递给系统

SV_Target 颜色值,显示在屏幕上的颜色

扫描二维码关注公众号,回复: 1091772 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_35669619/article/details/78754500