shader入门2 了解顶点片段着色器

代码结构

先贴一下代码,看一眼大概的结构,之后再慢慢解释

Shader "Custom/NewSurfaceShader"
{
	Properties{
		
	}
    SubShader
    {
		pass {
			CGPROGRAM
			//定义一个顶点处理函数
			#pragma vertex vert
			//定义一个片段处理函数
			#pragma fragment frag
			float4 vert(float4 v : POSITION) : SV_POSITION {
				return UnityObjectToClipPos(v);
			}
			float4 frag(float4 c : COLOR) : SV_Target {
				return c;
			}
			ENDCG
		}
    }
    FallBack "Diffuse"
}

语义

被老外定义好的,不要像我一样纠结为什么POSITION可以输入给一个值,SV_POSITION会返回给系统…

从应用程序传递给顶点函数的语义:

POSITION 顶点坐标

NORMAL 法线

TANGENT 切线

TEXCOORD0~n 纹理坐标

COLOR 顶点颜色

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

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)

COLOR0 可以传递一组值 4个

COLOR1 可以传递一组值 4个

TEXCOORD0~7 传递纹理坐标

从片元函数传递给系统的语义:

SV_Target 颜色值,输出到屏幕上的颜色

解释

一个pass就是对物体进行一次渲染,pass可以写多个,会按照顺序依次渲染

pass{
	
}

和上一篇里定义光照的方式相似,这里是定义顶点函数与片段函数

//定义一个顶点处理函数
#pragma vertex vert
//定义一个片段处理函数
#pragma fragment frag

这两个函数是这个shader的核心部分,它究竟执行了什么呢?
它大概什么都没执行…

float4 v : POSITION 我们定义了一个float4类型的变量 v,值来自POSITION,上面解释过了,POSITION是模型的坐标
float4 vert : SV_POSITION 定义了返回值会赋值给SV_POSITION
UnityObjectToClipPos(v);我们传进来的坐标是模型空间的,这个函数的作用是把这个坐标转换成相机中的2d坐标,也就是屏幕中显示的坐标.实现的原理是矩阵变换,矩阵是向量的函数,一个向量乘矩阵可以得到一个向量,所有的点与0点的向量乘矩阵,也就是坐标变换了.具体怎么算变换矩阵,我已经还给老师了- -有需求的时候再去复习线性代数就好了
float4 c : COLOR 定义了float4类型数据c,值取自顶点颜色COLOR
float4 frag : SV_Target 输出值frag传给了SV_Target

至此本次渲染就结束了,他的作用就是把物体投影到屏幕上,然后赋值了一个顶点的颜色,比默认的shader还敷衍2333
默认的shader还带了个白色

float4 vert(float4 v : POSITION) : SV_POSITION{
	return UnityObjectToClipPos(v);
}
float4 frag(float4 c : COLOR) : SV_Target{
	return c;
}

效果

5毛都没有的效果
最简单的shader

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值