包含此页的版本:
不含此页的版本:
在内置渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表,写作时表面着色器:为内置渲染管线编写着色器的简化方法。更多信息
请参阅术语表,您可以描述表面的属性(例如反照率颜色和法线),然后“照明模型”将计算照明交互。
有两种内置照明模型:Lambert用于漫反射照明,以及BlinnPhong用于镜面反射照明。Unity 中的 Lighting.cginc 文件定义了这些模型(Windows:<unity 安装路径>/Data/CGIncludes/Lighting.cginc;macOS:/Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc)。
有时您可能想要使用自定义照明模型。您可以使用 Surface 执行此作着色器 在 GPU 上运行的程序。更多信息
请参阅术语表.光照模型只是与某些约定匹配的几个 Cg/HLSL 函数。
| 功能名称 | 通用渲染管线(URP) | 高清渲染管线 (HDRP) | 定制 SRP | 内置渲染管线 |
|---|---|---|---|---|
| 表面着色器 | 否 有关在 URP 中创建着色器对象的简化方法,请参阅着色器图表。 |
否 有关在 HDRP 中创建着色器对象的简化方法,请参阅着色器图表。 |
不 | 是的 |
照明模型由名称开头的常规函数组成Lighting.您可以在着色器文件或包含的文件之一中的任何位置声明它们。这些功能是:
half4 Lighting<Name> (SurfaceOutput s, UnityGI gi);在前进使用它渲染路径渲染管道用于渲染图形的技术。选择不同的渲染路径会影响照明和着色的计算方式。某些渲染路径比其他路径更适合不同的平台和硬件。更多信息
请参阅术语表用于不依赖于视图方向的光源模型。
half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi);在前向渲染一种渲染路径,用于在一个或多个通道中渲染每个对象,具体取决于影响对象的光源。光源本身也因前向渲染而异,具体取决于其设置和强度。更多信息
请参阅术语表依赖于视图方向的光源模型的路径。
half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal);在延迟着色 内置渲染管线中的渲染路径,对可能影响游戏对象的光源数量没有限制。所有光源都是按像素计算的,这意味着它们都与法线贴图等正确交互。此外,所有光源都可以有饼干和阴影。更多信息
请参阅术语表路径。
请注意,不需要声明所有函数。照明模型要么使用视图方向,要么不使用视图方向。同样,如果光照模型仅在正向渲染中工作,则不要声明_Deferred功能。这可确保使用它的着色器仅编译为转发渲染。
声明以下函数以自定义解码lightmap:预渲染的纹理,包含光源对场景中静态对象的效果。光照贴图覆盖在场景几何体之上,以创建光照效果。更多信息
请参阅术语表数据和探针:
void Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);请注意,要解码标准 Unity 光照贴图和 SH 探针,您可以使用内置的DecodeLightmap和ShadeSHPerPixel函数,如UnityGI_Base在 Unity 内的 UnityGlobalIllumination.cginc 文件中(Windows:<unity 安装路径>/Data/CGIncludes/UnityGlobalIllumination.cginc;macOS:/Applications/Unity/Unity.app/Contents/CGIncludes/UnityGlobalIllumination.cginc_)。
以下是使用内置 Lambert 光照模型的着色器示例:
Shader "Example/Diffuse Texture" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
sampler2D _MainTex;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
ENDCG
}
Fallback "Diffuse"
}
下面是有纹理和没有纹理的外观,在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表: