Vertex and Fragment Shader(可编程渲染管线)

一、引言

Vertex and Fragment Shader:最强大的Shader类型,下文中简称V&F Shader,属于可编程渲染管线. 使用的是CG/HLSL语法。分为2个部分vertex顶点部分和Fragment像素部分。

二、语法

1、例子如下

Shader "Custom/Exam1" 
{
	Properties {
	_MainTex ("Texture", 2D) = "white" { }
	}
	SubShader
	{
		pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"
			
			sampler2D _MainTex;
			///_MainTex_ST的ST是应该是SamplerTexture的意思 ,就是声明_MainTex是一张采样图,也就是会进行UV运算。如果没有这句话,是不能进行TRANSFORM_TEX的运算的。_MainTex_ST.xy为Tiling,zw为offset.
			float4 _MainTex_ST;
			struct v2f {
			    float4  pos : SV_POSITION;
			    float2  uv : TEXCOORD0;
			} ;
			
			v2f vert (appdata_base v)
			{
			    v2f o;
			    //UNITY_MATRIX_MVP 物体空间-视空间-窗口空间的变换矩阵
			   	o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
			   	//TRANSFORM_TEX依据Tiling和offset的设置计算缩放和偏移
				o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
			    return o;
			}
			
			float4 frag (v2f i) : COLOR
			{
				float4 texCol = tex2D(_MainTex,i.uv);
			    float4 outp = texCol;
			    return outp;
			}
			ENDCG
		}
	}
}


2、Shader中的数据类型

有3种基本数值类型:float、half和fixed。

这3种基本数值类型可以再组成vector和matrix,比如half3是由3个half组成、float4x4是由16个float组成。

float:32位高精度浮点数。

half:16位中精度浮点数。范围是[-6万, +6万],能精确到十进制的小数点后3.3位。

fixed:11位低精度浮点数。范围是[-2,2],精度是1/256。

数据类型影响性能,精度够用就好。

颜色和单位向量,使用fixed

其他情况,尽量使用half(即范围在[-6万, +6万]内、精确到小数点后3.3位);否则才使用float。

不要将低精度fixed类型转换为更高的精度,否则会产生性能问题。

低精度fixed不要使用“swizzle”(即形如myFixed4.xyzwmyFixed2.xyxy,中文不知咋译,否则会产生性能问题。

3、Pass渲染管线中的Tag

SubShader有自己专属的Tag类似,Pass也有Pass专属的Tag,且Pass中默认包括SubShader中的Tag

其中最重要Tag是 "LightMode",指定Pass和Unity的哪一种渲染路径(“Rendering Path”)搭配使用。这里需要描述的Tag取值可包括:

Always,永远都渲染,但不处理光照

ShadowCaster,用于渲染产生阴影的物体

ShadowCollector,用于收集物体阴影到屏幕坐标Buff里。

其他渲染路径相关的Tag详见下面章节“Unity渲染路径种类”。
具体所有Tag取值,可参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值