# 基础结构

1
2
3
4
5
6
7
8
9
10
11
12
Shader "shaderName"{
Properties{
//属性
}
SubShader{
//显卡A使用的子着色器
}
SubShader{
//显卡B使用的子着色器
}
Fallback "VertexLit"
}

# 常见属性

属性类型 默认值的定义语法 例子 :------------: :------------: :------------: Int number _Int (“Int”,Int) = 2 Float number _Float (“Float”,Float) = 1.5 Range (min,max) number _Range (“Range”,Range (0.0,5.0)) =3.0 Color (number,number,number,number) _Color ( “Color”,Color) = (1,1,1,1) Vector (number,number,number,number) _Vector (“Vector”,Vector) = (2,3,6,1) 2D “defaulttexture” {} _2D (“2D”,2D)="" {} Cube “defaulttexture” {} _Cube (“Cube”,Cube) = “white” {} 3D “defaulttexture” {} _3D (“3D”, 3D) = “black” {}

Unity 会挨个扫描所有的 Subshader, 直到第一个可以使用的为止

# SubShader 结构

1
2
3
4
5
6
7
8
9
10
11
SubShader{
//可选的
[Tags]

//可选的
[RenderSetup]

Pass{
}
//Other Passes
}

pass 应该尽量少一点

# 状态设置

SubShader 提供了一系列渲染状态的设置指令,这些指令可以设置各种显卡的状态,如是否开启混合 / 深度测试等。

Cull

Cull Back | Front | Off

设置剔除模式:剔除背面 / 正面 / 关闭剔除

ZTest

ZTest Less Greater | LEqual | GEqual | Equal | NotEqual |Always

设置深度测试时使用的函数

ZWriter

Zwriter On | Off

开启 / 关闭深度写入

Blend

Blend SrcFactor DstFactor

开启并设置混合模式

# SubShader 的标签

SubShader 的标签是一个键值对 (Key/Value Pair), 键与值都是字符串类型。这些键值对是 SubShader 和渲染引擎之间沟通的桥梁。它用来告诉 Unity 渲染引擎,我们希望怎样以及何时渲染这个对象。

1
Tags{"TagName1" = "Value1" "TagName2" = "Value2"}

# 语义

POSITION: 模型顶点坐标信息
SV_POSITION: 输出裁剪空间中的顶点坐标
SV_Target: 把用户的输出颜色存储到一个渲染目标内
TEXCORD0: 纹理信息
NORMAL: 法线信息
TANGENT: 暂时不知道
COLOR0: 颜色信息 上面的信息都是由 Mesh Render 组件提供的.

# 顶点着色器与片元着色器的通信

作为参数传进去就可以了

# Unity 内置的文件和变量

内置的包含文件 (include file)

后缀名是: `.cginc

`

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝