Shader学习的基础知识

以下内容基本解释与协助回忆,初学的同学还请在书中好好学习,推荐《Unity Shader入门精要》人民邮电出版社的。如果错误的地方,请多多提点。

Material是什么?

Material是材质,包含渲染脚本和资源和各个参数.
在Unity中Shader需要和材质(Material)放在一起才能发生效果。
Shader用于编写材质的内容以什么样的方法进行渲染显示。

ShaderLab是什么?

是Unity专门为Unity Shader提供的语言,让开发人员可以更轻松的控制Shader,所有的Unity Shader都是用ShaderLab来编写的。

Unity Shader的基本结构

Shader "Custom/TestShader1" {
	Properties
	{
		//Name:属性名 DisplayName:显示名 PropertyType:类型 DefaultValue:默认值
		Name("DisplayName",PropertyType)=DefaultValue
		//更多属性...
	}
	SubShader{
		Pass{
			CGPROGRAM

			ENDCG
		}
	}
}

Unity中的着色器有哪些?

表面着色器 代码量少,因为Unity在背后做了很多工作,渲染代价较大。是片元/顶点着色器更高一层的抽像,可以使用Cg/HLSL来写,CGPROGRAM和ENDCG在SubShader之间是因为不用关心有多少个Pass每个怎么渲染他将会自行处理。

Shader "Custom/TestShader1" {
	SubShader{
		Tags {"RenderType"="Opaque"}
		CGPROGRAM
		#pragma surface surf Lambert
		struct Input{
			float4 color:COLOR;
		};
		void surf(Input IN,inout SurfaceOutput o){
				o.Albedo=1;
		}
		ENDCG
	}
	Fallback "Diffuse"
}

顶点/片元着色器
CGPROGRAM和ENDCG在Pass之间好处是可以控制细节,可以使用Cg/HLSL来写。

Shader "Custom/TestShader3" {
	
	SubShader{
	Pass{
		CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			float4 vert(in float4 v:POSITION):POSITION
			{
				return UnityObjectToClipPos(v);
			}

			float4 frag(in float4 col:COLOR):COLOR{
				return float4(1,0,0,1);
			}
		ENDCG
		}
	}
}

固定管线着色器
用于一些较旧的设备,需要完全用ShaderLab的语法而非Cg/HLSL。

Shader "Custom/TestShader4" {
	Properties{
		_Color("Main Color",Color)=(1,0,0,1)
	}
	SubShader{
		Pass{
			Material{
				Diffuse [_Color]
			}
			Lighting On
		}
	}
}

如何选择着色器呢?

1、需要或必须在旧设备上运行的就要固定函数着色器
2、如果需要和很多光源打交到的,用表面着色器,但要小心移动平台的性能表现。
3、如果光照非常少或有很多自定义效果的则使用顶点/片元着色器
从本质上来说UnityShader只有两种形式,顶点/片元着色器和固定函数着色器,在Unity5.2以后固定函数着色器也转了顶点/片元着色器。所以本质上来说都是顶点片元着色器。

可以用GLSL来写吗?

可以,但是跨平台会有问题,目标平台只有Mac OS X、 OpenGL ES 2.0 或是Linux。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小盖子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值