ShaderLab语法汇总

您所在的位置:网站首页 lumion怎么导出通道图 ShaderLab语法汇总

ShaderLab语法汇总

2023-04-20 13:35| 来源: 网络整理| 查看: 265

默认汇总

ShaderLab

https://docs.unity.cn/cn/2021.1/Manual/shader-shaderlab-commands.html

Properties

Ø  类型有:Integer,Float,2D,2DArray,3D,Cube,CubeArray,Color,Vector

注:Texture3D和CubeMap的区别:二者都是立方体,CubeMap是由6张图片组成立方体的六个面空心立方体,而Texture3D是由128x128x128组成的实心立方体。

Ø  材质属性特性

[Gamma]  指示浮点数或矢量属性使用 sRGB 值,这意味着如果项目中的颜色空间需要,则它必须与其他 sRGB 值一起转换。

[HDR]  指示纹理或颜色属性使用高动态范围 (HDR) 值。对于纹理属性,如果分配了 LDR 纹理,则 Unity 编辑器会显示警告。

[HideInInspector]  隐藏此属性。

[MainTexture]  为材质设置主纹理,可以使用 Material.mainTexture 进行访问。默认情况下,Unity 将具有属性名称“_MainTex”的纹理视为主纹理。

[MainColor]  为材质设置主色,可以使用 Material.color 进行访问。默认情况下,Unity 将具有属性名称“_Color” 的颜色视为主色。

[NoScaleOffset]  隐藏此纹理属性的平铺和偏移字段。

[Normal]  指示纹理属性需要法线贴图。如果分配了不兼容的纹理,则 Unity 编辑器会显示警告。

[PerRendererData]  指示纹理属性将来自每渲染器数据,形式为 MaterialPropertyBlock。材质 Inspector 会将这些属性显示为只读。

[Header(text)]  会在这个标签上方生成一个文本,text不要打双引号

[Toggle]  允许您启用或禁用单个着色器关键字,可以与配合着色器关键字一起使用。它使用浮点数来存储着色器关键字的状态,并将其显示为切换开关。

[ToggleOff]  与[Toggle]类似,不过切换功能相反

[IntRange]  把参数调整限制为整数

[PowerSlider(Value)]  power即幂,也就是指数级的缩放滑动条的疏密程度,靠近Range的左值会拥有更精确的调整范围,Value接受指数等级控制,值为1时相当于普通Range。显示一个具有对应于 Range 着色器属性的非线性响应的滑动条。

[Enum(List)]  枚举类型,把参数限制下拉列表的可选项中

[Space(Value)]  在着色器属性之前创建垂直空间

FallBack

Fallback "" 如果找不到兼容的 SubShader,则使用指定的 Shader 对象。

Fallback Off   默认是此项,不使用回退 Shader 对象代替这个对象。

CustomEditor

https://docs.unity.cn/cn/2021.1/Manual/SL-CustomEditor.html

 

CustomEditor “[custom editor class name]”   Unity 使用在命名类中定义的自定义编辑器,除非它被 CustomEditorForRenderPipeline 代码块覆盖。

CustomEditorForRenderPipeline “[custom editor class   name]” “[render pipeline asset class name]”  当活动渲染管线资源是命名类型时,Unity 使用该命名类中定义的自定义编辑器。

CategorySubShaderTags 

Ø  “RenderPipeline“ = ”UniversalRenderPipeline“ ”HighDefinitionRenderPipeline“

Ø  “Queue“ = ”value“ //value越小越先渲染,取值如下

Background 指定背景渲染队列。

Geometry 指定几何体渲染队列。

AlphaTest  指定 AlphaTest 渲染队列。

Transparent  指定透明渲染队列。

Overlay  指定覆盖渲染队列。

整数  指定 Unity 渲染未命名队列处的索引(相对于命名队列)。

Ø  “RenderType” = “”

在运行时替换着色器https://docs.unity3d.com/Manual/SL-ShaderReplacement.html

Ø  DisableBatching

l  True      禁用动态批处理。

l  False       启用动态批处理。这是默认值。

l  LODFading    对于属于 Fade Mode 值不为 None 的 LODGroup 一部分的所有几何体,Unity 会阻止动态批处理。否则,Unity 不会阻止动态批处理。

Ø  ForceNoShadowCasting

l  True     阻止此子着色器中的几何体投射阴影。在内置渲染管线中,对于前向、旧版顶点光照或旧版延迟渲染路径,Unity 还会阻止此子着色器中的几何体接收阴影。在 HDRP 中,这不会阻止几何体投射接收阴影。

l  False       不会阻止此子着色器中的几何体投射或接收阴影。这是默认值。

Ø  CanUseSpriteAtlas

l  True     使用此子着色器的精灵与 Legacy Sprite Packer 兼容。这是默认值。

l  False       使用此子着色器的精灵与 Legacy Sprite Packer 不兼容。当 CanUseSpriteAtlas 值为 False 的子着色器与带有 Legacy Sprite Packer 打包标签的精灵一起使用时,Unity 会在 Inspector 中显示错误消息。

Ø  PreviewType 如何在材质 Inspector 中显示使用此子着色器的材质

l  Sphere    在球体上显示材质。这是默认值。

l  Plane      在平面上显示材质。

l  Skybox   在天空盒上显示材质。

Ø  在内置渲染管线中,IgnoreProjector 子着色器标签向 Unity 告知几何体是否受投影器影响。此标签在其他渲染管线中无效。

LOD

https://docs.unity.cn/cn/current/Manual/SL-ShaderLOD.html

 

在您的 Shader 代码块中,必须将子着色器按 LOD 降序排列。例如,如果您有 LOD 值为 200、100 和 500 的子着色器,则必须先放置 LOD 值为 500 的子着色器,然后是 LOD 值为 200 的子着色器,然后是 LOD 值为 100 的子着色器。这是因为 Unity 选择所找到的第一个有效子着色器,所以如果它首先找到一个 LOD 较低的子着色器,它将始终使用它。

GrabPass

只有内置管线可以使用,抓取当前屏幕纹理

GrabPass { "ExampleTextureName" }

PassName

设置Pass的名称。

 

Tags(Pass)

LightMode

内置管线:

https://docs.unity.cn/cn/current/Manual/shader-predefined-pass-tags-built-in.html

 

URP:

https://docs.unity.cn/Packages/[email protected]/manual/urp-shaders/urp-shaderlab-pass-tags.html#urp-pass-tags-lightmode

Conservative

Conservative True/False 启用或禁用保守光栅化,默认禁用。

保守光栅化是指 GPU 对被三角形部分覆盖的像素进行光栅化,无论覆盖范围如何。这在需要确定性时很有用,例如在执行遮挡剔除、GPU 上的碰撞检测或可见性检测时。

Offset

设置该几何体到相机的深度偏差

Offset ,

factor  float[-1,1]  缩放最大 Z 斜率,也称为深度斜率,以生成每个多边形的可变深度偏移。不平行于近剪裁平面和远剪裁平面的多边形具有 Z 斜率。调整此值以避免此类多边形上出现视觉瑕疵。

units  float[-1,1]  缩放最小可分辨深度缓冲区值,以产生恒定的深度偏移。最小可分辨深度缓冲区值(一个 _unit_)因设备而异。负值意味着 GPU 将多边形绘制得更靠近摄像机。正值意味着 GPU 将多边形绘制得更远离摄像机。

Cull

剔除操作:

Cull Back/Front/Off 默认剔除背面

ColorMask

指定该着色器是否输出颜色通道

ColorMask

AlphaToMask

减少将多样本抗锯齿 (MSAA) 与使用 Alpha 测试的着色器一起使用时出现的过度锯齿。为此,它根据片元着色器结果输出中的 Alpha 值按比例修改多样本覆盖率遮罩。

AlphaToMask On/Off

透明度测试

也叫透明度裁剪,使用clip的方法剔除透明度低于阈值的片元,对于树的阴影,镂空效果很有用。

例如:

fixed4 texColor = tex2D(_MainTex, i.uv);

clip (texColor.a - _Cutoff);

// 等价于

//if ((texColor.a - _Cutoff)

//    discard;//丢弃

//}

Stencil

模板测试:https://docs.unity.cn/cn/2020.3/Manual/SL-Stencil.html

模板缓冲区为帧缓冲区中的每个像素存储一个 8 位整数值。为给定像素执行片元着色器之前,GPU 可以将模板缓冲区中的当前值与给定参考值进行比较。这称为模板测试。如果模板测试通过,则 GPU 会执行深度测试。如果模板测试失败,则 GPU 会跳过对该像素的其余处理。这意味着可以使用模板缓冲区作为遮罩来告知 GPU 要绘制的像素以及要丢弃的像素。

Ø  使用 Ref、ReadMask 和 Comp 参数可配置模板测试。

Ø  使用 Ref、WriteMask、Pass、Fail 和 ZFail 参数可配置模板写入操作

ZClip

ZClip True/False 将深度剪辑模式设置为clip(默认)/clamp(比近平面更近的片元正好在近平面,而比远平面更远的片元正好在远平面。)

ZTestZWrite

深度写入:更新深度值,ZWrite Off/On,默认是开启深度写入,开启深度写入表示物体存在遮挡关系

Blend

颜色混合:启用混合会禁用 GPU 上的一些优化(主要是删除隐藏的表面/Early-Z),这些优化会增加 GPU 帧时间。

 

混合等式为:

finalValue = S(sourceFactor * sourceValue) operation D(destinationFactor * destinationValue)

其中:

Ø  finalValue 是 GPU 写入目标缓冲区的值,也就是最终颜色值。

Ø  sourceFactor 在 Blend 命令中定义。

Ø  sourceValue 是片元着色器输出的颜色。

Ø  operation 是混合操作,在BlendOp命令中定义。

Ø  destinationFactor 在 Blend 命令中定义。

Ø  destinationValue 从颜色缓冲中读取到的颜色。

Blend命令

Ø  Blend Off/On,默认是关闭的。

Ø  Blend ,

 

Factor的取值如下

BlendOp命令

BlendOp operation



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3