Unity Shader的结构(续)

本文介绍了Unity中的Shader类型,包括表面着色器和顶点/片元着色器。表面着色器简化了光照处理,适合与多个光源交互,但可能影响移动平台性能。顶点/片元着色器则提供更高的灵活性,适用于自定义渲染效果和少量光源场景。选择合适的Shader类型对于优化性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码介绍

Shader"MyShader"
{
	Properties
	{
	//所需的各种属性
	}
	SubShader
	{
		//真正意义上的Shader代码会出现在这里
		//表面着色器(Surface Shader)
		//顶点/片元着色器(Vertex/Fragment Shader)
		//固定函数着色器(Fixed Function Shader)
	}
	SubShader
	{
		//和上一个SubShader类似
	}
}
表面着色器
  • 表面着色器(Surface Shader)是Unity自己创造的一种着色器代码类型
  • 背后依旧把它转换成对应的顶点/片元着色器
  • Unity为我们处理了很多关照细节,是的我们不需要在操心这些
  • 表面着色器被定义在SubShader语义块(而非Pass语义块)中的CGPROGRAM和ENDCG之间。原因是,表面着色器不需要开发者关心使用多少个Pass。每个Pass如何渲染等问题,Unity会在背后为我们做好这些事情。
  • CGPROGRAM和ENDCG之间的代码是使用Cg/HLSL编写的,也就是说,我们需要把Cg/HLSL语言嵌套在ShanderLab语言中。
顶点/片元着色器
  • 在Unity中我们可以使用Cg/HLSL语言来编写顶点/片元着色器(Vertex/Fragment/Shader)
  • 它们要更加复杂,但灵活性也更高
  • 和表面着色器类似,顶点/片元着色器的代码也需要定义在CGPROGRAM和ENDCG之间,但不同的是,顶点/片元着色器是编写在Pass语义块内,而非SubShader内的
  • 原因是,我们需要自己定义每个Pass需要的Shader代码
固定函数着色器

现在使用的比较少

如何选择Unity Shader形式
  1. 除非有非常明确的需求使用固定函数着色器,如需要在非常旧的设备上运行你的游戏,否则请使用可编程管线着色器,即表面着色器或顶点/片元着色器
  2. 如果你想和各种光源打交道,你可能更喜欢用表面着色器但需要小心它在移动平台的表现
  3. 如果你需要使用的光源数目非常少,例如只有一个平行光,那么使用顶点/片元着色器是一个更好的选择
  4. 如果你有很多自定义的渲染效果,顶点/片元着色器是个不错的选择
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值