SurfaceShader-基本结构

SurfaceShader是一种经过Unity封装的非常方便的Shader,它既可以不用写代码就能实现一些很好的效果,又可以满足一些非常复杂的需求,是一种很强大的Shader,那么不多说,我们先来新建一个SurfaceShader,发现其结构是这样的:

Shader "Custom/NewSurfaceShader" {
	Properties {//这里是一些属性定义,跟Shader1.0和2.0完全一样
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		_Glossiness ("Smoothness", Range(0,1)) = 0.5
		_Metallic ("Metallic", Range(0,1)) = 0.0
	}
	SubShader {
		//我们会发现,SurfaceShader没有Pass通道
		//这里是一些如渲染队列,渲染类型等标签的定义
		Tags { "RenderType"="Opaque" }

		//Level Of Detail的缩写,是细节渲染的级别,LOD数值越大,细节渲染的越好,同样性能越差,反之亦然
		LOD 200  

		//使用CG语法
		CGPROGRAM   

		//surface surf,这句话定义了表面着色器的入口函数,
		//Standard:表面着色器的输出结构体
		//fullforwardshadows:表示有一个完整的向前的阴影
		#pragma surface surf Standard  fullforwardshadows

		//与前面的完全一样,只是这是一种具有高光的表面着色器,使用时可以选择其中一个
		//#pragma surface surf StandardSpecular fullforwardshadows

		//使用model 3.0 可以得到一个更好的光照效果, 默认是2.0
		#pragma target 3.0  

		//这里到下一行注释为止,是一些变量的声明,与Shader2.0完全相同
		sampler2D _MainTex;
		struct Input {
			float2 uv_MainTex;
		};
		half _Glossiness;
		half _Metallic;
		fixed4 _Color;

		UNITY_INSTANCING_BUFFER_START(Props)

		//这两行代码之间添加一些支持这个Shader的实例,博主这里先简单说一下,后面会详细解释
		UNITY_INSTANCING_BUFFER_END(Props)

		//这个是表面着色器的入口函数
		//IN:顾名思义,就是输入结构
		//o:这里这个参数既是输入结构,又是输出结构,结构体的具体定义可以查看官方文档,后文都是,这里不再解释
		//ps:如果前面是支持高光的表面着色器定义,那么这里的类型应换成对应的SurfaceOutputStandardSpecular
		void surf (Input IN, inout SurfaceOutputStandard o) {
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			o.Metallic = _Metallic;
			o.Smoothness = _Glossiness;
			o.Alpha = c.a;
		}
		ENDCG
	}
	//这句话的意思是当我们的surfaceshader编译后没有一个阴影通道时,会自动添加一个默认的阴影通道
	FallBack "Diffuse"
}

 

博主自我感觉注释已经简单解释了整个表面着色器的结构,所以不再作解释,如果还有不懂,建议读者学会查阅Unity的官方文档,毕竟中文的全都是二手资料,总是会有一些不准确和一些个人理解,官方资料才是最好的教科书。博主前一阵子在忙一些其他事,没时间写博客,这里很久不写,感觉手有点生,果然坚持才是王道啊。哈哈哈,扯多了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱摸鱼的隔壁老王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值