首页 > 编程语言 > 详细

UnityShader Syntax

时间:2019-10-06 17:51:28      阅读:73      评论:0      收藏:0      [点我收藏+]

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. ambient, main directional light, vertex/SH lights and lightmaps are applied

ForwardAdd

Used in Forward renderingadditive per-pixel lights are applied, one pass per light.

Deferred

Used in Deferred Shading, renders g-buffer

ShadowCaster

Renders object depth into the shadowmap or a depth texture

MotionVectors

Used to calculate per-object motion vectors

PrepassBase

Used in legacy Deferred Lighting,渲染法线和高光

PrepassFinal

Used in 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变种知识补充

UnityShader Syntax

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!