Unity Shader学习总结(一)

最简单的Shader

Shader "MyShader/FirstShader"{
    
    
	SubShader{
    
    
		pass {
    
    
			CGPROGRAM
				//顶点函数 这里只是声明了定点函数的函数名
				//把模型空间坐标转换到 剪裁空间
			#pragma vertex vert
				//片元函数
				//返回模型在屏幕中每个像素的颜色值
			#pragma fragment frag
			float4 vert(float4 v : POSITION) : sv_POSITION	//通过语义告诉系统参数是干嘛的
			{
    
    				//sv_POSITION  : 返回值是剪裁空间下的定点坐标	POSITION:参数为顶点坐标
				return UnityObjectToClipPos(v);		//模型空间坐标转换成剪裁空间坐标
			}
			fixed4 frag() : sv_Target  
			{
    
    				//sv_Target : 返回值为颜色
				return fixed4(1,1,1,1);
			}
			ENDCG
		}
	}

	Fallback "VertexLit"
}


在这里插入图片描述

为了接收更多unity输入,比如:法线,贴图。需要使用结构体

Shader "MyShader/SecondShader"
{
    
    
	Properties
	{
    
    
		_Color("Color",Color) = (0,0,0,0)
	}
		SubShader
		{
    
    
			Pass
			{
    
    
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag

				//只有在CGPROGRAM内再次定义一个与属性块名字类型相同的变量,属性块才起作用
				fixed4 _Color;


			struct a2v
			{
    
    
				float4 vertex : POSITION;  //模型顶点填充v
				float3 normal : NORMAL;
			};

			struct v2f
			{
    
    
				float4 vertex : SV_POSITION;  //告诉Unity pos 为裁剪空间位置信息
				fixed3 color : COLOR0;
			};


			v2f vert(a2v v)
			{
    
    
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				//将-1到1区间转变为0到1
				o.color = v.normal*0.5+fixed3(0.5,0.5,0.5);
				return o;
			};

			fixed4 frag(v2f i) : SV_Target
			{
    
    
				fixed3 c = i.color;
				c*=_Color.rgb;
				return fixed4(c,1);
			}
		ENDCG
		}
	}
}

在这里插入图片描述

使用Shader库中的输入输出结构体

需要添加语句#include “UnityCG.cginc”
例如输入结构体

struct appdata_base {
    
    
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float4 texcoord : TEXCOORD0;
    UNITY_VERTEX_INPUT_INSTANCE_ID
};

vert修改参数为appdata_base 显示效果不变

v2f vert(appdata_base v)
{
    
    
	v2f o;
	o.vertex = UnityObjectToClipPos(v.vertex);
	//将-1到1区间转变为0到1
	o.color = v.normal*0.5+fixed3(0.5,0.5,0.5);
	return o;
};

输出结构体

struct v2f_img
{
    
    
    float4 pos : SV_POSITION;
    half2 uv : TEXCOORD0;
    UNITY_VERTEX_INPUT_INSTANCE_ID
    UNITY_VERTEX_OUTPUT_STEREO
};

总结

顶点着色器输入结构中常用语义
在这里插入图片描述
顶点着色器输出结构体中常用语义
在这里插入图片描述
片元着色器输出时常用语义
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42368728/article/details/110097670