Unity-Shader编写基础及注意事项(二)

Unity-Shader编写基础及注意事项(二)

  1. 坐标系规则:Unity中存在空间坐标系模型坐标系相机坐标系以及屏幕坐标系。注意:空间坐标系和模型坐标系均是左手坐标系,+z在物体的正前方,相机坐标系是右手坐标系,+z指向相机后方。
  2. 坐标系变换:包含平移、旋转和缩放变换。注意:三维坐标的平移不能用3X3矩阵表示,所以扩展到4X4的齐次坐标。Unity-Shader中大多数用到4X4齐次矩阵变换,如下公式为坐标变换原理。
  1. 点积(内积)与叉乘(外积):记住一句顺口溜就好,点积计算角度,叉乘判断方位。比如:你要判断敌人在你什么方位,通过点积可以计算敌人与你的夹角度数,但不知道敌人在你的左边还是右边,这个时候叉乘便可以计算你与敌人的方位。

  2. Unity中的Shader一般包括四种:
    (1)Standard Surface Shader:包含标准光照模型,基于物理渲染的标准表面着色器,这个可以使用于大多数的模型渲染,除非需要添加其他特效才需要自己编写,否则一般unity自带的shader就够用了。
    (2)Unlit Shader:不包含光照模型,包含雾效的顶点/片元着色器。
    (3)Image Effect Shader:为实现各种屏幕后效提供了一个模板。
    (4)Compute Shader:不参与渲染流程,这可以说是CPU利用GPU并行高效计算的接口。

  3. unity中所谓的表面着色器实质上是顶点/片元着色器的更加高级抽象的表示而已。

  4. 顶点/片元着色器的基本结构如下:

//每个Shader都有一个专属 名字,冒号里面的便是Unity面板显示的shader名字
Shader "MyShader"{
//shader中计算或是传递所需要的属性,在Unity面板中可以显示所需要的属性,如贴图,颜色等
Properties{
}
//针对显卡A的Shader
SubShader{
//及其重要的部分,一个pass代表一次2渲染,基本上大部分代码都写在Pass块中
Pass{
   	//先设置渲染状态和标签
   	//这里开始CG代码的编写
   	CGPROGRAM
   	//声明顶点/片元着色器函数名分别为vert和frag
   	#pragma vertex vert
   	#pragma fragment frag
   	//顶点着色器函数
   	//POSITION以及SV-POSITION为CG/HLSL中的语义,该语义不可忽略,他告诉函数需要哪些输入和输出,其中POSITION告诉vert函数的输入v,将模型顶点坐标填入v中;SV-POSITION告诉函数输出返回值为裁剪空间的顶点坐标。
   	float4 vert(float4 v:POSITION:SV_POSITION
   	{
   		return mul(UNITY_MATRIX_MVP,v);
   	}
   	//片元着色器函数
   	float4 frag():SV_Target
   	{
   		return fixed4(1.0,1.0,1.0,1.0);
   	}
   	//这里结束CG代码的编写
   	ENDCG
   	}
}
//针对显卡B的Shader
SubShader{

}
//上述SubShader都失败时调用低级的渲染Shader
Fallback “VertexLit”
}
  • ShaderLab属性类型和CG变量类型关系:
ShaderLab属性类型CG变量类型
Color,Vectorfloat4,half4,fixed4
Range,Floatfloat,half,fixed
2Dsampler2D
3Dsampler3D
  • 内置包含文件,类似于C++中头文件的引用:
CGPROGRAM
......
#include "UnityCG.cginc"
......
ENDCG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能驾驶小管家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值