//在inspector的shader列表中显示名字
Shader "Custom/shader_1" {
//shader的属性 也就是当前shader可操作的属性 和C++中类的属性一样 这里是通过关键字Properties来定义相关的属性的
Properties {
_Color ("Color", Color) = (1,1,1,1)//颜色属性,在可视化界面中是一个颜色面板;Color:显示在UI界面上的,用户可见,_Color:颜色变量,程序使用;
_MainTex ("Albedo (RGB)", 2D) = "white" {}//texture 在UI界面中选择的贴图,white:默认颜色是白色,可以换成其他(black,黑色);
_Glossiness ("Smoothness", Range(0,1)) = 0.5//光滑系数,数值越大越光滑,范围是从 0 到 1 值为1的时候,形成了一个光点
_Metallic ("Metallic", Range(0,1)) = 0.0//金属光泽度,数值越大光泽度越强,范围是从 0 到 1
}
//子着色器
SubShader {
//渲染类型 Opaque:不透明
Tags { "RenderType"="Opaque" }
//它是Level of Detail的缩写,在这里例子里我们指定了其为200(其实这是Unity的内建Diffuse着色器的设定值)。
//这个数值决定了我们能用什么样的 Shader。在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,
//这个SubShader将不可用。Unity 内建Shader定义了一组LOD的数值,我们在实现自己的Shader的时候可以将其作为参考来设定自己的LOD数值,这样在之后调整根据设备图形性能
//来调整画质时可以进行比较精确的控制。
LOD 200
//这是一个开始标记,表明从这里开始是一段CG程序
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
//surface – 声明的是一个表面着色器 surf函数
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
//sampler2D:贴图类型 由于这这里是在CG程序里面 要访问Properties中定义的变量 需要再次声明 并且名字要一样
sampler2D _MainTex;
struct Input {
//float2:float可以跟1个2到4的数字,表示打包在一起的同类型的2到4个数
//如果你对3D开发稍有耳闻的话,一定不会对uv这两个字母感到陌生。UV mapping的作用是将一个2D贴图上的点按照一定规则映射到3D模型上,
//是3D渲染中最常见的一种顶点处理手段。在CG程序中,我们有这样的约定,在一个贴图变量(在我们例子中是_MainTex)之前加上uv两个字母,
//就代表提取它的uv值(其实就是两个代表贴图上点的二维坐标 )。我们之后就可以在surf程序中直接通过访问uv_MainTex来取得这张贴图当前需要计算的点的坐标值了。
float2 uv_MainTex;
};
//half:半精度浮点数
half _Glossiness;
half _Metallic;
fixed4 _Color;
//只能够有2个参数 第一个参数是Input(输入)结构,inout输出结构
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
//tex2D:CG程序中用来在一张贴图中对一个点进行采样的方法,返回一个float4
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
//金属光泽度
o.Metallic = _Metallic;
//平滑
o.Smoothness = _Glossiness;
//透明度
o.Alpha = c.a;
}
//表明CG程序到此结束。
ENDCG
}
//在没有执行以上shader的时候 会默认执行回滚
FallBack "Diffuse"
}
//struct SurfaceOutput {
//half3 Albedo; //像素的颜色
//half3 Normal; //像素的法向值
//half3 Emission; //像素的发散颜色
//half Specular; //像素的镜面高光
//half Gloss; //像素的发光强度
//half Alpha; //像素的透明度
//};
Shader之学习笔记一
最新推荐文章于 2023-04-12 15:19:45 发布