UnityShader Syntax

0x01 基本语法

Shader "name" { [Properties] __Subshaders__ [Fallback] [CustomEditor] }

名字

解释

name

Shader文件中name是唯一存在,且不能与其他shader文件重名

Properties

属性表

 

Properties:属性表组成 及其 语法:Properties { Property [Property ...] }

variable

Inspect ui name

data type

default value

_Color

"Color"

Color

(1,1,1,1)

_TestVector

"TestVector"

vector

(0.1,0.2,0.3)

_MainTex

"Albedo (RGB)"

Texture 2D

"white" {}

_Glossiness

"Smoothness"

Range

0.5

_TestFloat

"TestFloat"

float

0.5

_TestInt

"TestInt"

int

2

_TestCube

"TestCube"

CUBE

""{}

Properties

{

     _Color ("Color", Color) = (1,1,1,1)//颜色指示器

    _TestVector("TestVector", vector) = (0.1,0.2,0.3)//坐标

   _MainTex ("Albedo (RGB)",2D)="white" {}//纹理带tilling xyoffset zw

    _Glossiness("Smoothness", Range(0,1)) = 0.5//滑块

    _TestFloat("TestFloat",float) = 0.5//单精度值

    _TestInt("TestInt", int) = 2//整形

    _TestCube("TestCube", CUBE) = ""{}//cube纹理

}

 

Properties属性映射到Subshaders(Cg/HLSL code)中的变量对应表

Property Type

Subshader Type

ColorVector

float4half4fixed4

Rangefloat

floathalffixed

Texture

sampler2D

CUBE

samplerCUBE

3DTexture

sampler3D

 

属性前缀(可选属性)

Attribute

Describe

[HideInInspector]

inspector面板隐藏该属性

[NoScaleOffset]一般纹理专用

inspector面板隐藏纹理平铺/偏移。

[Normal]

指示纹理属性需要一个法线映射

[HDR]

指示纹理属性需要高动态范围(HDR)纹理

[Gamma]

指示在UI中将浮点数/向量属性指定为sRGB(就像颜色一样),可能需要根据使用的颜色空间进行转换。

[PerRendererData]

指示纹理属性用MaterialPropertyBlock每次渲染数据的形式呈现纹理

[KeywordEnum(None, Add, Multiply)]

#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY

[Toggle]

开关

[PowerSlider(3.0)]

非线性响应的滑块

[Space]…[Space(value)]

创建一个垂直空间

[Header(…)]

加标题文字说明

 

0x02 Subshader

Subshader { [Tags] [CommonState] Passdef [Passdef ...] }

一个Shader可以有一组subshader。每个subshader可以设置标签、一组通道。

 

以下标签 只在subshader内部被识别,不能在pass内。

Tag key

Tag Value

Describe

Queue”

Background| Geometry| AlphaTest| Transparent| Overlay”

渲染队列

RenderType

Opaque| Transparent| TransparentCutout| Background| Overlay| TreeOpaque| TreeTransparentCutout| TreeBillboard| Grass| GrassBillboard

着色器分类标签,可被替代

DisableBatching

True(总是禁用)False(总是关闭) LODFading(fading激活就禁用)

禁用批处理

ForceNoShadowCasting

True(关闭投射阴影)

 

IgnoreProjector

True(不受投影仪影响)不想投影仪影响半透物就开

 

CanUseSpriteAtlas

False(图集对该精灵合批失效)

 

PreviewType

Plane|Sphere|Cube等等,修改材质球的默认预览

 

RenderPipeline

LightweightPipeline (LWRP) HighDefinitionRenderPipeline (HDRP)

 

 

渲染队列Rendering Order

Name

Base Order Value

Describe

Background

1000

最先渲染,会被遮挡

Geometry

2000

适用用于大多数不透明几何物体

AlphaTest

2450

是阻止像素被写到屏幕的最后机会

Transparent

3000

任何alpha混合(例如着色器不写入深度缓冲)都应该到这里(玻璃,粒子效果)

Overlay

4000

叠加效果,最后渲染,一般做后处理

 

着色器分类RenderType Tag    

Name

Describe

Opaque

大多数着色器(正常, 自动照明,反射,地形着色器等等)

Transparent

大多数半透明着色器(透明,粒子,字体,地形添加通过着色器)

TransparentCutout

masked transparency例如一片有洞的树叶、打碎了的玻璃窗

Background

Skybox

Overlay

UIHaloFlare

TreeOpaque

Terrain engine tree bark

TreeTransparentCutout

Terrain engine tree leaves

TreeBillboard

Terrain engine billboarded trees

Grass

Terrain engine grass

GrassBillboard

Terrain engine billboarded grass

备注: 现在有了SpeedTree第三方插件,可以很好的替换上Terrain engine关于树花草等

 

0x03 Pass

Pass { [Name and Tags] [RenderSetup] }

Name “PassName” UsePass shaderName/passName

 

光照标签:Tags { "TagName1" = "Value1" "TagName2" = "Value2" }光照标签只能在Pass内识别

Lighting Mode

Descripe

Always

总是开启渲染,没有光照计算

ForwardBase

Used in Forward rendering. 该pss会计算环境光、主方向光、逐顶点/SH lighting以及光照贴图

ForwardAdd

Used in Forward rendering,该pass会计算额外的逐像素光,每个pass对应一个光源

Deferred

Used in Deferred Shading, 该pass会渲染g-buffer

ShadowCaster

把物体的深度信息渲染到阴影纹理或一张深度纹理

MotionVectors

Used to calculate per-object motion vectors

PrepassBase

(Legacy)Deferred Lighting,该pass渲染法线和高光反射的指数部分

PrepassFinal

 legacy Deferred Lighting,通过合并纹理、灯光、散射光渲染最终颜色

Vertex

Used in legacy Vertex Lit rendering when object is not lightmapped顶点着色

VertexLMRGBM

Used in legacy Vertex Lit rendering when object is lightmapped;顶点着色

VertexLM

Used in legacy Vertex Lit rendering when object is lightmapped顶点着色

PassFlags

OnlyDirectional指示该Pass只接受main directional light and ambient/lightprobe data。

RequireOptions

SoftVegetation指示该Pass只应用于软植被

 

Render state set-up    //渲染状态

Name

Describe

Cull Back | Front | Off

多边形剔除模式

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

深度缓冲测试模式

ZWrite On | Off

深度缓冲写入模式

Offset OffsetFactor, OffsetUnits

设置z缓冲深度偏移量

Blend src dest  详细参考UnityEngine.Rendering.BlendMode

混合模式

ColorMask RGB | A | 0 | any combination of R, G, B, A

颜色模板,用于模板缓冲

 

0x04 Culling & Depth Testing & Blending& Stenci详解

0x05 Render Pipeline & 光照渲染路径

0x100待续

keyword变种知识补充

原文地址:https://www.cnblogs.com/baolong-chen/p/11627617.html