简介
Shader 即着色器,是一种用于描述如何渲染图形和计算图形外观的程序
主要用于控制图形的颜色、光照、纹理和其他视觉效果
着色器通常由着色器语言编写,这些着色器语言提供了指令和语法,用于编写描述光照、纹理映射、阴影、反射等图形外观的代码
简单理解:Shader就是着色器,是用于编写图形表现效果的程序代码 (可以类比理解为网页的CSS)
shader开发主要针对 几何阶段-顶点着色器、光栅化阶段-片元着色器的数据进行自定义处理,进而决定最终的渲染效果
简单理解:通过Shader来处理数据,实现渲染效果
分类
unity中的3种shader
1、Fixed function shader:固定功能着色器,用于高级shader在老式显卡无法显示时的fallback。
2、Surface shader:表面着色器,unity推崇的shader类型,使用unity预制的光照模型来进行光照运算,只需要一个表面处理函数surf即可,使用CG/HLSL语法。
3、Vertex & Fragment shader:顶点&片段着色器,属于可编程渲染管线,使用CG/HLSL语法。
Shader程序的基本结构
shader 主要有三部分组成:Properties属性、N(N≥1)个子着色器、Fallback回滚。

Shader "Custom/myShader"{
Properties{}
SubShader{}
Fallback "ShaderName"
}
属性,用来指定代码的输入数据;
子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果;
回滚,保底手段,用来处理所有Subshader都不能运行时(比如目标设备实在太老,所有Subshader中都有其不支持的特性),会执行回滚中设置的 Shader 。ShaderName` 必须是系统提供或者自建存在的 shader,当有重名时考虑其目录名。
注:在实际开发过程中,主要在SubShader中编写代码
Shader程序实例
首先,新建一个Shader,可以在Project面板中找到,Create,选择Shader,然后将其命名为Diffuse Texture,打开刚才新建的Shader
代码如下:
Shader "Custom/Diffuse Texture" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Properties 属性
在Properties{}中定义着色器属性,定义的属性作为输入提供给所有的子着色器。
属性定义的语法:
_Name("Display Name", type) = defaultValue[{options}]
分别对应:名称、显示名称、属性类型、默认值
举例说明:

最低0.47元/天 解锁文章
593

被折叠的 条评论
为什么被折叠?



