欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity创建SurfaceShader注解

程序员文章站 2022-03-29 16:04:46
...
Shader "Loong/SurfaceShader" {
	Properties {
		_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 {
		Tags { "RenderType"="transparent" "Queue"="transparent"}		//RenderType描述渲染类型,Opaque(不透明),Transparent(半透明),TransparentCutout(蒙皮透明),Background(天空盒),Overlay(光晕),还有部分地形引擎中的渲染类型
		LOD 200			//层级细节

		CGPROGRAM		//CG代码块
		//#pragma surface surf Standard fullforwardshadows	//#pragma编译指令,surface是指按照surface方式进行编译,surf是指下面的运算函数surf,Standard是指光照模型(LightModel,也是一个函数),后面可以添加多个参数,fullforwardshadows是指在forward渲染模式下支持所有阴影,添加alpha使shader支持透明通道
		#pragma surface surf Standard alpha	//添加alpha使shader支持透明通道

		#pragma target 3.0			//使用3.0的shader model,以获取更绚丽的视觉效果


		struct Input {				//纹理坐标的结构体,结构体内部uv变量命名要注意以uv开头,后续跟上贴图纹理名称,否则无法完成纹理采样
			float2 uv_MainTex;
		};
		
		//属性说明
		sampler2D _MainTex;			//二维纹理声明,sampler2D与属性中2D对应
		half _Glossiness;			//浮点值声明,	half与属性中float对应
		half _Metallic;
		fixed4 _Color;				//四维向量声明,fixed4与属性中color对应

		

		void surf (Input IN, inout SurfaceOutputStandard o) {		//inout既是输入又是输出,SurfaceOutputStandard结构体可查看Unity官方文档
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;	//从纹理中采样获取颜色
			o.Albedo = c.rgb;										//漫反射颜色
			o.Metallic = _Metallic;									//用于计算金属光泽
			o.Smoothness = _Glossiness;								//用于计算高光强度
			o.Alpha = c.a;											//描述采样过后alpha值
		}
		ENDCG
	}
	FallBack "Diffuse"			//若硬件不支持以上算法则用默认shader替换
}