注意:此页面上的 ShaderLabUnity 定义着色器对象结构的语言。 更多信息
在 术语表中查看 功能是旧版,仅为向后兼容性而保留。如果您的 着色器在 GPU 上运行的程序。 更多信息
在 术语表中查看 源文件包括 HLSL 代码,Unity 会完全忽略这些命令。如果您的着色器源文件不包括 HLSL 代码,Unity 会在导入时将这些命令编译成常规着色器程序。
功能名称 | 内建 渲染管线一系列针对场景内容进行处理的操作,并将结果显示在屏幕上。Unity 为您提供预置的渲染管线,或供您自定义。 更多信息 在 术语表中查看 |
通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定 SRP |
---|---|---|---|---|
旧版光照 | 是 | 否 | 否 | 否 |
材质和光照参数用于控制内置顶点光照。顶点光照是针对每个顶点计算的标准 Direct3D/OpenGL 光照模型。Lighting on 可以将其打开。光照会受到 材质定义如何渲染表面的资产。 更多信息
在 术语表中查看 块、ColorMaterial 和 SeparateSpecular 命令的影响。
顶点着色和光照是计算任何渲染几何体时第一个要计算的效果。它在顶点级别运算,并计算在应用纹理之前的基础色。
最高层命令控制是否使用固定功能光照以及一些配置选项。主要设置位于 材质块中,详见下文。
Color color
将对象设为纯色。颜色既可以为括号中的四个 RGBA 值,也可以是方括号中的颜色属性名称。
Material {Material Block}
材质模块用于定义对象的材质属性。
Lighting On | Off
要让材质模块中定义的设置生效,您必须使用启用照明命令启用照明。如果照明已关闭,则颜色将直接从颜色命令获取。
SeparateSpecular On | Off
此命令将镜面反射光照添加到着色器过程的末尾,以便在纹理处理过程中镜面反射光照不受影响。仅在使用启用照明时有效。
ColorMaterial AmbientAndDiffuse | Emission
使用逐顶点颜色,而不是材质中设置的颜色。环境光和散射光替换材质的环境光和散射光值;自发光替换材质的自发光值。
此模块包含材质对光照的反应方式设置。任何这些属性都可以留空,在这种情况下,它们默认为黑色(即,没有效果)。
散射光颜色:散射光颜色分量。这是对象的基色。
环境光颜色:环境光颜色分量。这是对象在被环境光不会从任何特定方向射来的光,并且从各个方向为场景贡献均匀的光照。更多信息
请参见 术语表照射到时呈现的颜色,在照明窗口中设置。
镜面反射颜色镜面反射高光的颜色。
请参见 术语表:对象的镜面反射高光的颜色。
光泽度数值:高光的锐度,介于 0 和 1 之间。在 0 时,您会得到一个巨大的高光,看起来非常像散射光照明,在 1 时,您会得到一个很小的亮点。
自发光颜色:对象在没有照射到任何光时呈现的颜色。
照射到对象上的光线的完整颜色为
环境光 * 照明窗口的环境光强度设置 + (光线颜色 * 散射光 + 光线颜色 * 镜面反射) + 自发光
方程式(括号内)中的光线部分会对照射到对象的所有光线重复计算。
通常,您希望保持散射光和环境光颜色一致(所有内置着色器均执行此操作)。
始终以纯红色渲染对象
Shader "Solid Red" {
SubShader {
Pass { Color (1,0,0,0) }
}
}
将对象着色为白色并应用顶点照明的基本着色器
Shader "VertexLit White" {
SubShader {
Pass {
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
}
}
}
增加了一个将材质颜色添加为材质检查器在 Unity 中显示选定游戏对象、资源或项目设置的信息的窗口,可让你查看并编辑值。 更多信息
可在 术语表 中查看 中可见属性的扩展版本
Shader "VertexLit Simple" {
Properties {
_Color ("Main Color", COLOR) = (1,1,1,1)
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
}
}
}
最后,一个成熟的顶点光照着色器(另请参阅 SetTexture 参考页)
Shader "VertexLit" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0)
_SpecColor ("Spec Color", Color) = (1,1,1,1)
_Emission ("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range (0.01, 1)) = 0.7
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
Combine texture * primary DOUBLE, texture * primary
}
}
}
}