赞
踩
通用渲染管线 (Universal Render Pipeline, URP) 是由Unity制作的预构建可编程渲染管线 (Scriptable Render Pipeline)。URP 提供了对美术师友好的工作流程,可让您在移动平台、高端游戏主机和PC等各种平台上快速轻松地创建图形。
> 要求
有关要求和兼容性的信息,请参阅“要求”一节。
> URP新增功能
有关最新版本的URP中的新增功能的信息,请参阅“URP新增功能”部分
> URP入门
有关从头开始新的URP项目或在现有Unity项目中安装URP的信息,请参阅“URP入门”。
> 升级指南
有关从URP的先前版本升级到当前版本的信息,或有关从轻量级渲染管线(LWRP)升级到URP的信息,请参阅“升级指南”。
此页面包含有关系统要求和此软件包兼容性的信息。
> Unity编辑器兼容性
下表显示了URP软件包版本与不同Unity编辑器版本的兼容性。
Package version | Minimum Unity version | Maximum Unity version |
---|---|---|
10.2.x | 2020.2.0b8 | 2020.2.x |
10.1.x | 2020.2.0b8 | 2020.2.x |
10.0.x | 2020.2.0a20 | 2020.2.x |
9.x.x | 2020.1.0b6 | 2020.2.x |
8.2.x | 2020.1.0b6 | 2020.1.x |
8.1.x | 2020.1.0b6 | 2020.1.x |
8.0.x | 2020.1.0a23 | 2020.1.x |
7.4.x | 2019.3.2f1 | 2019.4.x |
7.3.x | 2019.3.2f1 | 2019.4.x |
7.2.x | 2019.3.0f6 | 2019.4.x |
7.1.8 | 2019.3.0f3 | 2019.4.x |
> 渲染管道兼容性
使用URP进行的项目与高清渲染管线(HDRP)或内置渲染管线不兼容。在开始开发之前,必须确定要在项目中使用哪个渲染管线。有关选择渲染管线的信息,请参见《 Unity手册》中的“渲染管线”部分。
> Unity Player系统要求
该软件包不添加任何其他特定于平台的要求。适用Unity Player的一般系统要求。有关Unity系统要求的更多信息,请参阅Unity的系统要求。
> URP 10.2的新增功能
本节包含有关URP 10.2中已解决的新功能,改进和问题的信息。
URP 10.2是维护更新,其中包含对URP早期版本中发现的问题的修复。
有关在URP 10.2中所做的更改的完整列表,请参考“变更日志”。
较早发行
要查看URP早期版本中的新功能和改进,请参阅"URP 10的新增功能"。
已知问题
有关URP 10中已知问题的信息,请参阅"已知问题"部分。
> URP 10的新增功能
本页概述了URP 10.0和10.1版中的新功能,主要改进和已解决的问题。
有关在URP 10.1中进行的更改的完整列表,请参考“变更日志”。
功能(Features)
本节概述了此版本中的新功能。
1.屏幕空间环境光遮蔽(Screen Space Ambient Occlusion:SSAO)
环境光遮挡效果会使彼此靠近的折痕、孔、交点和表面变暗。在现实世界中,此类区域往往会遮挡环境光,因此它们看起来更暗。
URP将实时屏幕空间环境光遮挡(SSAO)效果实现为渲染器功能。
显示“环境光遮挡”效果的场景已打开和关闭。
有关“环境光遮挡”效果的更多信息,请参见“环境光遮挡”页面。
2.透明涂层(Clear Coat)
透明涂层功能增加了一个额外的材质层,该层模拟了基础材质顶部的透明和薄涂层。该功能在Complex Lit shader中可用。
有关此功能的更多信息,请参见“Complex Lit”页面上的“Surface Inputs”部分。
3.相机法线纹理(Camera Normals Texture)
URP 10.0实现了DepthNormals Pass块,该块为当前帧生成普通纹理_CameraNormalsTexture。
如果至少一个渲染阶段需要,则URP将创建_CameraNormalsTexture。为确保URP渲染器创建_CameraNormalsTexture纹理,请在ScriptableRendererFeature.AddRenderPasses中添加对
ConfigureInput方法的调用。
4.细节贴图&细节法线贴图(Detail Map & Detail Normal Map)
细节贴图可让您在基本贴图的顶部叠加另一个纹理。细节法线贴图是一种特殊的纹理,可让您添加表面细节,例如凹凸,凹槽和划痕,这些细节可以捕捉光线,就像它们存在于网格几何体中一
样。
左:仅使用基本贴图渲染的对象。右:使用细节贴图渲染的对象。
有关更多信息,请参见“Lit shader”页面上的“Details Inputs”部分。
5.阴影距离淡入淡出(Shadow Distance Fade)
使用“阴影距离淡入淡出”,当阴影达到最大阴影渲染距离(渲染管线资源中的Shadows > Max Distance)时,阴影可以平滑淡入。
显示阴影距离淡入淡出效果的插图(右)。
6.阴影级联(Shadow Cascade)
使用阴影级联,您可以避免靠近相机的粗糙阴影,并保持较低的阴影分辨率。有关更多信息,请参见“阴影级联”页面。
URP现在支持1-4个阴影级联,还支持两个工作单位,百分比和米。
Universal Render Pipeline资源中的“阴影”部分。
7.阴影蒙版(Shadowmask)
URP 10.1支持阴影蒙版照明模式。阴影蒙版照明模式将实时直接照明与烘焙的间接照明结合在一起。有关更多信息,请参见页面“照明模式:阴影蒙版”。
照明模式:减法。最大阴影距离内的阴影质量较低。
仅来自实时灯光的阴影。超出最大距离的阴影丢失。
照明模式:阴影蒙版。
8.视差贴图和高度图属性(Parallax mapping and Height Map property)
URP实现了视差映射技术,该技术使用高度图来实现表面级别的遮挡效果。Lit shader中提供了“高度图”属性。要了解有关视差贴图工作原理的更多信息,请参阅“高度图”页面。
下图显示了只有底图(左),底图和法线图(中)以及底图,法线和高度图(右)时网格的外观。
改进之处
本节概述了此版本中的主要改进。
1.阴影线框(Shaded Wireframe)
阴影线框场景视图模式现在可以在URP中使用。阴影线框可帮助您检查和验证场景几何,例如,在检查几何密度以选择适当的LOD级别时。
2.改进的着色器剥离(Improved shader stripping)
URP 10解决了C#着色器预处理器中的一些问题。该修补程序提高了着色器剥离的速度。管道现在为支持它的平台编译不同的顶点和片段着色器集。此改进使流水线带顶点着色器变体更有
效。该改进显着减少了后处理着色器变体的数量,因为大多数变体仅在片段着色器中。
3.减少全局着色器关键字的数量(Reduced number of global shader keywords)
现在,URP软件包中包含的Shader使用本地“材质”关键字而不是“全局”关键字。这增加了可用的全局用户定义的Material关键字的数量。
4.GPU实例化的网格粒子(GPU instanced mesh particles)
与CPU渲染相比,GPU实例化的网格粒子可显着提高性能。使用此功能可以配置粒子系统以渲染“网格”粒子。
解决的问题
有关URP 10中已解决问题的信息,请参阅“变更日志”。
有关URP 10中已知问题的信息,请参阅“已知问题”部分。
与Unity内置渲染管道相比,此表概述了通用渲染管线(URP)支持的当前功能。
注意:如果某个功能标记为“正在研究中”,则URP团队仍在研究如何以及何时实施该功能。如果某个功能标记为“不支持”,那是因为Unity并未计划在任何版本中都支持该功能。
功能 | 内置渲染管线(Unity 2018.x, 2019.x, 2020.x) | Universal Render Pipeline |
---|---|---|
Camera(相机) | ||
HDR rendering(HDR渲染) | 是 | 是 |
HDR output(HDR输出) | 是 | 正在研究中 |
MSAA | 是 | 是 |
Physical Camera(物理相机) | 是 | 是 |
Dynamic Resolution(动态分辨率) | 是 | 是 |
Multi Display(多显示器) | 是 | 是 |
Stacking(堆码) | 是 | 是 |
Flare Layer(耀斑层) | 是 | 不支持 |
Depth Texture(深度纹理) | 是 | 是 |
Depth + Normals Texture(深度+法线纹理) | 是 | 不支持 |
Color Texture(颜色纹理) | 不支持 | 是 |
Motion vectors(运动向量) | 是 | 正在研究中 |
Batching(批处理) | ||
Static Batching (By Shader) = 静态批处理(通过着色器) | 不支持 | 是 |
Static Batching (By Material) = 静态批处理(通过材质) | 是 | 是 |
Dynamic Batching(动态批处理) | 是 | 是 |
Dynamic Batching (Shadows) = 动态批处理(阴影) | 是 | 不支持 |
GPU Instancing(GPU实例化) | 是 | 是 |
Color Space(色彩空间) | ||
Linear(线性) | 是 | 是 |
Gamma(伽玛) | 是 | 是 |
Realtime Lights(实时灯) | ||
Light Types(光源类型) Directional(平行光) Spot(聚光灯) Point(点光源) Area(区域光) | 是 是 是 矩形(烘焙) | 是 是 是 矩形(烘焙) |
Inner Spot Angle(内射角) | 不支持 | 是 |
Shading(底纹) | Multiple Pass | Single Pass |
Culling(剔除) Per-Object(逐顶象) Per-Layer(逐层) | 是 是 | 是 是 |
Light Limits(灯光限制) Main Directional Light Per Object Per Camera | 1 无限制 无限制 |
|
Attenuation(衰减) | Legacy(遗产) | InverseSquared(反平方) |
Vertex Lights(顶点灯) | 是 | 是 |
SH Lights(SH灯) | 是 | 正在研究中 |
Realtime Shadows(实时阴影) | ||
Light Types Directional Spot Point Area | 是 是 是 不支持 | 是-仅1 是 正在研究中 不支持 |
Shadow Projection(阴影投影) Stable Fit(稳定贴合) Close Fit(紧密贴合) | 是 是 | 是 正在研究中 |
Shadow Cascades(阴影级联) Number of Cascades(级联数) Control by Percentage(百分比控制) Control by Distance(距离控制) | 1, 2 or 4 是 不支持 | 1–4 是 是 |
Shadow Resolve Type(阴影解析类型) Lighting Pass(照明Pass) Screen Space Pass(屏幕空间Pass) | 是 是 | 是 否 |
Shadow Bias(阴影偏移) | 恒定的剪辑空间偏移+法向偏移 | 沿光方向+法线偏移偏移阴影贴图纹理 |
Lightmapping(灯光映射) | ||
Enlighten | 是 | 不支持 |
Progressive Lightmapper, CPU(渐进式光照贴图,CPU) | 是 | 是 |
Progressive Lightmapper, GPU(渐进式光照贴图,GPU) | 是 | 是 |
Realtime Global Illumination(实时全局照明) | ||
Enlighten | 是 | 不支持 |
Mixed Lighting Mode(混合照明模式) | ||
Subtractive(减法) | 是 | 是 |
Baked Indirect(间接烘焙) | 是 | 是 |
Shadowmask(阴影蒙版) | 是 | 是(向前渲染路径) |
Distance Shadowmask(距离阴影蒙版) | 是 | 是(向前渲染路径) |
Light Probes(灯光探头) | ||
Blending(混合) | 是 | 是 |
Proxy Volume (LPPV) = 代理量(LPPV) | 是 | 不支持 |
Custom Provided(定制提供) | 是 | 是 |
Occlusion Probes(咬合探头) | 是 | 是 |
Reflection Probes(反射探头) | ||
Realtime(实时) | 是 | 是 |
Baked(烘焙) | 是 | 是 |
Sampling(采样) Simple(简单) Blend Probes(混合探头) Blend Probes and Skybox(混合探头和Skybox) | 是 是 是 | 是 正在研究中 正在研究中 |
Box Projection(Box投影) | 是 | 正在研究中 |
Lightmap Modes(光照贴图模式) | ||
Non-Directional(非平行光) | 是 | 是 |
Directional(平行光) | 是 | 是 |
Environmental lighting(环境照明) | ||
Source Skybox Gradient Color | 是 是 是 | 是 是 是 |
Ambient Mode(环境模式) Realtime Baked | 是 是 | 正在研究中 是 |
Skybox(天空盒) | ||
Procedural(程序) | 是 | 是 |
6 Sided(6面) | 是 | 是 |
Cubemap(立方体贴图) | 是 | 是 |
Panoramic(全景) | 是 | 是 |
Fog(雾) | ||
Linear(线性) | 是 | 是 |
Exponential(指数) | 是 | 是 |
Exponential Squared(指数平方) | 是 | 是 |
Visual Effects Components(视觉效果组件) | ||
Halo(光环) | 是 | 不支持 |
Lens Flare(镜头光晕) | 是 | 不支持 |
Trail Renderer(轨迹渲染器) | 是 | 是 |
Billboard Renderer(广告牌渲染器) | 是 | 是 |
Projector(投影机) | 是 | 不支持 |
Shaders (General) = 着色器(常规) | ||
Shader Graph | 不支持 | 是 |
Surface Shaders | 是 | 不支持 |
Camera-relative Rendering(相机-相对渲染) | 不支持 | 正在研究中 |
Built-in Lit Uber Shader(内置Lit Uber Shader) Metallic Workflow(金属工作流程) Specular Workflow(镜面工作流程) | Standard Shader 是 是 | Lit Shader 是 是 |
Surface Type and Blend Mode(表面类型和混合模式) Opaque(不透明) Faded (Alpha Blend) = 褪色(Alpha混合) Transparent(透明) Cutout Additive Multiply | 是 是 是 是 不支持 不支持 | 是 是 是 是 是 是 |
Surface Inputs(表面输入) Albedo (Base Map) = 反照率(基本贴图) Specular(高光) Metallic(金属) Smoothness(光滑度) Ambient Occlusion(环境光遮蔽) Normal Map(法线贴图) Detail Map Detail Normal Map Heightmap(高度图) | 是 是 是 是 是 是 是 是 是 | 是 是 是 是 是 是 是 是 是 |
Light Cookies | 是 | 正在研究中 |
Parallax Mapping(视差映射) | 是 | 是 |
Light Distance Fade(灯光距离衰减) | 不支持 | 正在研究中 |
Shadow Distance Fade(阴影距离淡入) | 是 | 正在研究中 |
Shadow Cascade Blending | 不支持 | 正在研究中 |
GPU Instancing | 是 | 是 |
Double Sided GI | 是 | 是 |
Two Sided | 不支持 | 是 |
Order In Layer | 不支持 | 是 |
Render Pipeline Hooks | ||
Camera.RenderWithShader | 是 | 不支持 |
Camera.AddCommandBuffer (Camera.Remove[All]CommandBuffer) | 是 | 不支持 |
Camera.Render | 是 | 不支持 |
Light.AddCommandBuffer (LightRemove[All]CommandBuffer) | 是 | 不支持 |
OnPreCull | 是 | 不支持 |
OnPreRender | 是 | 不支持 |
OnPostRender | 是 | 不支持 |
OnRenderImage | 是 | 不支持 |
OnRenderObject | 是 | 是 |
OnWillRenderObject | 是 | 是 |
OnBecameVisible | 是 | 是 |
OnBecameInvisible | 是 | 是 |
Camera Replacement Material(相机更换材质) | 不支持 | 是,使用自定义Pass |
RenderPipeline.BeginFrameRendering | 不支持 | 是 |
RenderPipeline.EndFrameRendering | 不支持 | 是 |
RenderPipeline.BeginCameraRendering | 不支持 | 是 |
RenderPipeline.EndCameraRendering | 不支持 | 是 |
UniversalRenderPipeline.RenderSingleCamera | 不支持 | 是 |
ScriptableRenderPass | 不支持 | 是 |
Custom Renderers | 不支持 | 是 |
Post-processing | 使用Post-Processing Version 2 package | 使用集成的后处理解决方案 |
Ambient Occlusion (MSVO) | 是 | 正在研究中 |
Auto Exposure(自动曝光) | 是 | 不支持 |
Bloom | 是 | 是 |
Chromatic Aberration(色差) | 是 | 是 |
Color Grading(颜色分级) | 是 | 是 |
Depth of Field(景深) | 是 | 是 |
Grain | 是 | 是 |
Lens Distortion(镜头变形) | 是 | 是 |
Motion Blur(运动模糊) Camera Object | 是 不支持 | 是 正在研究中 |
Screen Space Reflections | 是 | 不支持 |
Vignette(小插图) | 是 | 是 |
Particles(粒子) | ||
VFX Graph (GPU) | 不支持 | 是 |
Particles System (CPU) | 是 | 是 |
Shaders Physically Based Simple Lighting (Blinn Phong) Unlit | 是 是 是 | 是(Particles Lit) 是 (Particles Simple Lit) 是 (Particles Unlit) |
Soft Particles(软粒子) | 是 | 是 |
Distortion(失真) | 是 | 是 |
Flipbook Blending | 是 | 是 |
Terrain | ||
Shaders Physically Based Simple Lighting (Blinn-Phong) Unlit Speed Tree Vegetation(植被) Detail | 是 是 不支持 是 是 是 | 是 正在研究中 正在研究中 是 是 是 |
Wind Zone | 是 | 是 |
Number of Layers | 无限制 | 8 |
GPU Patch Generation(GPU补丁生成) | 是 | 是 |
Surface Mask(表面遮罩) | 不支持 | 正在研究中 |
2D | ||
Sprite | 是 | 是 |
Tilemap | 是 | 是 |
Sprite Shape | 是 | 是 |
Pixel-Perfect(完美像素) | 是-使用2D Pixel Perfect Package | 是 |
2D Lights | 不支持 | 是 |
UI (Canvas Renderer) | ||
Screen Space - Overlay | 是 | 是 |
Screen Space - Camera | 是 | 是 |
World Space | 是 | 是 |
Text Mesh Pro | 是 | 是 |
VR | ||
Multipass | 是 | 是 |
Single Pass | 是 | 是 |
Single Pass Instanced | 是 | 是 |
Post-processing Oculus Rift(眼裂) Oculus Quest(眼探索) PSVR(录像机) HoloLens(全息镜头) WMR Magic Leap One | 是 是 是 是 是 是 | 是 是 是 是 是 是 |
AR | ||
AR Foundation | 是 | 是 |
Debug | ||
Scene view modes | 是 | 正在研究中 |
要使用URP,可以启动新项目或升级现有项目。
> 启动新项目:使用Unity Hub创建一个新的URP项目。执行此操作时,Unity会自动安装和配置URP。
> 升级现有项目:如果您使用内置渲染管道启动了项目,则可以安装URP并将您的项目配置为使用URP。执行此操作时,必须自己配置URP。您需要手动转换或重新创建项目的各个部分(例如,着色器或后处理效果),才能与URP兼容。
注意:
1.启动新项目
新项目已安装并配置了URP,并包括一些示例内容,这些内容演示了URP的功能。
2.升级现有项目
您可以通过Package Manager将最新版本的URP下载并安装到现有项目中。
开始之前
安装URP
配置URP
必须先对其进行配置,然后才能开始使用URP。为此,您需要创建URP资源并调整Graphics设置。
URP资源控制着项目的全局渲染和质量设置,并创建渲染管线实例。渲染管线实例包含中间资源和渲染管线实现。
步骤:
> 在编辑器中,转到Project窗口。
> 在Project窗口中右键单击,然后选择Create > Rendering > Universal Render Pipeline > Pipeline Asset(Forward Renderer)。或者,导航至顶部的菜单栏,然后选择Assets > Create >
Rendering > Universal Render Pipeline > Pipeline Asset(Forward Renderer)。
要使用URP,您需要将新创建的URP资源添加到Unity中的Graphics设置中。如果您不这样做,Unity仍将尝试使用内置渲染管线。
步骤:
> Edit > Project Settings... > Graphics。
> 在Scriptable Render Pipeline Settings字段中,添加您之前创建的URP资源。添加URP资源时,可用的图形设置会立即更改。您的项目现在正在使用URP。
升级着色器
如果您的项目使用预建的Standard Shader或为内置渲染管线制作的自定义Unity着色器,则必须将它们转换为URP兼容的Unity着色器。有关此主题的更多信息,请参见“升级着色器”。
要转换为URP兼容的Unity着色器,可以选择Edit > Render Pipeline > Universal Render Pipeline > ? 。
本节介绍可用于配置通用渲染管道的概念和设置。
1.URP资源
要使用URP,必须创建URP资源并在Graphics设置中分配资源。
URP资源控制URP的一些图形功能和质量设置。这是一个可脚本化的对象,继承自RenderPipelineAsset。在Graphics设置中分配资源时,Unity从内置渲染管线切换到URP。然后,您可以直接在URP中调整相应的设置,而不用在其他位置查找它们。
您可以拥有多个URP资源并在它们之间切换。例如,您可以选择一个启用“阴影”,另一个禁用“阴影”。如果您在各种资源之间切换以查看效果,则不必每次都手动切换阴影的相应设置。但是,您不能在HDRP / SRP和URP资源之间切换,因为渲染管线不兼容。
URP资源概述:
> General(常规)
> Quality(质量)
> Lighting(灯光)
> Shadows(阴影)
> Post-Processing(后期处理)
> Advanced(高级)
> Adaptive-Performance(自适应性能)
注意:如果启用了2D Renderer(Experimental)(Graphices > Scriptable Render Pipeline Settings下添加2D Renderer资源),则与URP资源中的3D渲染相关的某些选项不会对最终应用程序产生任何影响。
General(常规)
常规设置控制渲染管线框架的核心部分。
属性 | 描述 |
---|---|
Renderer List(渲染器列表) | 列出此渲染管线资源可用的所有渲染器。 |
Depth Texture(深度纹理) | 使URP可以创建_CameraDepthTexture。然后,默认情况下,URP会对场景中的所有摄像机使用此深度纹理。您可以在摄像机的Inspector面板中为单个摄像机覆盖此设置。 |
Opaque Texture(不透明纹理) | 启用此选项可将_CameraOpaqueTexture创建为场景中所有摄像机的默认设置。类似于内置渲染管道中的GrabPass。不透明纹理可以在URP渲染任何透明网格之前提供场景的快照。您可以在透明Shaders中使用它来创建磨砂玻璃,水折射或热波等效果。您可以在摄像机的Inspector面板中为单个摄像机覆盖此设置。 |
Opaque Downsampling(不透明下采样) | 将不透明纹理上的采样模式设置为以下之一: None :产生与相机相同分辨率的不透明通道的副本。 2x Bilinear:产生具有双线性滤波的半分辨率图像。 4x Box:通过Box过滤生成四分之一分辨率的图像。这将产生柔和模糊的副本。 4x Bilinear:产生具有双线性滤波的四分之一分辨率图像。 |
Terrain Holes(地形洞) | 如果禁用此选项,则在为Unity Player进行构建时,URP会删除所有Terrain Hole Shader变体,这会减少构建时间。 |
Quality(质量)
这些设置控制URP的质量级别。在这里,您可以在低端硬件上提高性能,或者在高端硬件上提高图形外观。
提示:如果要为不同的硬件配置不同的设置,则可以在多个URP资源中进行配置,然后根据需要来切换它们。
属性 | 描述 |
---|---|
HDR | 启用此选项后,默认情况下,场景中的每个摄像机都可以在高动态范围(HDR)中进行渲染。使用HDR,图像的最亮部分可以大于1。这使您的光强度范围更广,因此照明看起来更加真实。有了它,即使在明亮的光线下,您仍然可以看到细节并减少饱和度。如果您想要范围广泛的照明或使用光晕效果,这将很有用。如果您定位的是低端硬件,则可以禁用此功能以跳过HDR计算并获得更好的性能。您可以在摄像机的Inspector面板中为单个摄像机覆盖此设置。 |
MSAA | 渲染时,默认情况下对场景中的每个摄像机使用“多样本抗锯齿”。这样可以柔化几何图形的边缘,因此不会出现锯齿状或闪烁现象。在下拉菜单中,选择每个像素要使用多少个样本:2x,4x或8x。选择的样本越多,对象边缘越平滑。如果您想跳过MSAA计算,或者在2D游戏中不需要它们,请选择Disabled。您可以在摄像机的Inspector面板中为单个摄像机覆盖此设置。 |
Render Scale | 此滑块缩放渲染目标分辨率(而不是当前设备的分辨率)。当出于性能原因而要以较小的分辨率渲染或放大渲染以提高质量时,请使用此选项。这只会缩放游戏渲染。 UI渲染保留为设备的原始分辨率。 |
Lighting(光源)
这些设置会影响场景中的光源。
如果禁用其中一些设置,将从Shader变量中删除相关的关键字。如果您确定某些设置肯定不会在游戏或应用中使用,则可以将其禁用以提高性能并减少构建时间。
属性 | 描述 |
---|---|
Main Light(主光源) | 这些设置会影响场景中的Dirextional Light。您可以通过在Lighting窗口中将其分配给Sun Source。如果您不指定Sun Source,则URP会将场景中最亮的Dirextional Light视为主光源。您可以在Per Pixel和Disabled之间进行选择。如果选择Disabled,则即使设置了光源,URP也不会渲染主光源。 |
Cast Shadows(投射阴影) | 选中此框可使主光源在场景中投射阴影。 |
Shadow Resolution(阴影分辨率) | 可以控制主光源的阴影贴图纹理的大小。高分辨率可提供更清晰,更详细的阴影。如果内存或渲染时间有问题,请尝试使用较低的分辨率。 |
Additional Lights(附加光源) | 可以选择使用附加光源来补充主光源。在逐顶点、逐像素或Disabled之间进行选择。 |
Per Object Limit(逐对象限制) | 此滑块设置了可以影响每个对象的附加光源数量的限制。 |
Cast Shadows(投射阴影) | 选中此框可使附加光源在场景中投射阴影。 |
Shadow Resolution(阴影分辨率) | 可以控制为附加光源投射方向阴影的纹理的大小。这是一个精灵地图集,最多可容纳16个阴影贴图。高分辨率可提供更清晰,更详细的阴影。如果内存或渲染时间有问题,请尝试使用较低的分辨率。 |
Shadows(阴影)
这些设置会影响阴影的外观和行为。它们还会影响性能,因此您可以在此处进行调整,以在视觉质量和阴影渲染速度之间取得最佳平衡。
属性 | 描述 |
---|---|
Max Distance(最大距离) | Unity渲染阴影的相机的最大距离。 Unity渲染阴影的距离不会超过此距离。 注:无论Working Unit属性中的值如何,此属性均以Metric(公制单位)为单位。 |
Working Unit(工作单位) | Unity测量阴影级联距离的单位。 |
Cascade Count(级联数) | 阴影级联的数量。使用阴影级联,您可以避免靠近相机的粗糙阴影,并保持较低的阴影分辨率。有关更多信息,请参见“阴影级联”页面。级联数目的增加会降低性能。
|
Depth Bias(深度偏差) | 使用此设置可以减少shadow acne。 |
Normal Bias(法线偏差) | 使用此设置可以减少shadow acne。 |
Soft Shadows(软阴影) | 选中此复选框可以对阴影贴图进行额外处理,以使它们看起来更平滑。 启用后,Unity使用以下阴影贴图过滤方法:桌面平台:5x5 tent filter,移动平台:4 tap filter。 性能影响:高。 禁用此选项后,Unity将使用默认硬件过滤对阴影贴图进行一次采样。 |
Post-Processing(后期处理)
本部分允许您微调全局后处理设置。
属性 | 描述 |
---|---|
Grading Mode(分级模式) | 选择用于项目的颜色分级模式。 > High Dynamic Range:此模式最适合与电影制作工作流程类似的高精度分级。 Unity在色调映射之前应用颜色分级。 >Low Dynamic Range:此模式遵循更经典的工作流程。色调映射后,Unity会应用有限范围的颜色分级。 |
LUT Size | 设置通用渲染管线用于颜色分级的内部和外部查找纹理(LUT)的大小。较大的值可提供更高的精度,但可能会降低性能和内存使用成本。您无法混合和匹配LUT尺寸,因此请在开始颜色分级过程之前确定尺寸。 默认值32提供了速度和质量的良好平衡。 |
Advanced(高级)
本部分允许您微调较少更改的设置,这些设置会影响更深的渲染功能和Shader组合。
属性 | 描述 |
---|---|
SRP Batcher(SRP配料机) | 选中此框以启用SRP Batcher。如果您有许多使用相同着色器的不同材质,则此功能很有用。 SRP Batcher是一个内部循环,可在不影响GPU性能的情况下加快CPU渲染速度。当您使用SRP Batcher时,它将替换SRP呈现代码内部循环。 |
Dynamic Batching(动态批处理) | 启用动态批处理,以使渲染管线自动批处理共享相同材质的小型动态对象。这对于不支持GPU实例化的平台和图形API很有用。如果目标硬件确实支持GPU实例化,请禁用动态批处理。您可以在运行时更改此设置。 |
Mixed Lighting(混合照明) | 启用混合照明,以告知管线在构建中包括混合照明着色器变体。 |
Debug Level(调试级别) | 设置渲染管线生成的调试信息的级别。值是: Disabled(禁用):禁用调试。这是默认值。 Profiling(分析):使渲染管线提供详细的信息标签,您可以在FrameDebugger中看到它们。 |
Shader Variant Log Level(着色器变体日志级别) | 设置有关您要在Unity完成构建时显示的“Shader Stripping(着色器剥离)和Shader Variants(着色器变体)的信息级别。值是: Disabled(禁用):Unity不记录任何内容。 |
Adaptive-Performance(自适应性能)
如果项目中安装了Adaptive Performance软件包,则此部分可用。使用自适应性能属性使您可以启用自适应性能功能。
属性 | 描述 |
---|---|
Use adaptive performance(使用自适应性能) | 选中此复选框以启用“自适应性能”功能,该功能可在运行时调整渲染质量。 |
2.Forward Renderer(前向渲染器)
本页介绍URP前向渲染器设置。
URP中的前向渲染器实现了前向渲染路径。
有关URP如何实现和使用前向渲染器的详细信息,请参阅“通用渲染管线中的渲染”。
> 如何查找前向渲染器资源
选择一个URP资源。
在Renderer List部分中,单击渲染器项目或渲染器旁边的垂直省略号图标(⋮)。
当您使用Universal Render Pipeline模板创建新项目时,Forward Renderer资源位于以下位置:
/Assets/Settings/ForwardRenderer.asset
> 前向渲染器资源属性
本节描述了前向渲染器资源的属性。
Forward Renderer(前向渲染器)
本部分包含高级定制用例的属性。
属性 | 描述 |
---|---|
Post Process Data | 资源包含渲染器用于后处理的着色器和纹理的引用。 注意:此属性用于高级定制用例。 |
Filtering(过滤)
本部分包含定义渲染器绘制哪些图层的属性。
属性 | 描述 |
---|---|
Opaque Layer Mask | 选择此渲染器绘制的不透明图层。 |
Transparent Layer Mask | 选择此渲染器绘制的透明图层。 |
Shadows(阴影)
本节包含与渲染阴影有关的属性。
属性 | 描述 |
---|---|
Transparent Receive Shadows(透明接收阴影) | 启用此选项后,Unity会在透明对象上绘制阴影。 |
Overrides(覆盖)
本节包含此Renderer覆盖的Render Pipeline属性。
Stencil(模版)
选中此复选框后,渲染器将处理模板缓冲区值。
有关Unity如何与Stencil缓冲区一起使用的更多信息,请参见ShaderLab:Stencil。
Renderer Features(渲染器功能)
本部分包含分配给所选渲染器的渲染器功能列表。
有关如何添加渲染器功能的信息,请参见“如何向渲染器添加渲染器功能”。
URP包含称为Render Objects(渲染对象)的预构建渲染器功能。
3.Renderer Feature(渲染器功能)
渲染器功能是一项资源,可让您向URP渲染器添加额外的渲染通道并配置其行为。
URP包含称为Render Objects的预构建的渲染器功能。
有关如何添加渲染器功能的信息,请参见“如何向渲染器添加渲染器功能”。
Render Objects Renderer Feature(渲染对象渲染器功能)
渲染对象渲染器功能包含以下属性。
属性 | 描述 |
---|---|
Name | 功能名称。 |
Event | Unity执行此渲染器功能时,URP队列中的事件。 |
Filters | 允许您配置此渲染器功能渲染哪些对象的设置。 Queue:选择是渲染不透明对象还是透明对象。 Layer Mask:渲染器功能从您在此属性中选择的图层中渲染对象。 |
Pass Names | 如果着色器中的Pass具有LightMode Pass标签,则此渲染器功能仅处理LightMode Pass标签的值等于Pass Name属性中值之一的着色器。 |
Overrides | 使用此渲染器功能进行渲染时,本节中的设置可让您配置某些属性的替换。 |
Material | 渲染对象时,Unity会使用该材质替换分配给它的材质。 |
Depth | 选择此选项可以指定此渲染器功能如何影响或使用深度缓冲区。此选项包含以下各项: Write Depth(写入深度):此选项定义渲染对象时渲染器功能是否更新深度缓冲区。 Depth Test(深度测试):确定此渲染器功能何时渲染给定对象的像素的条件。 |
Stencil | 选中此复选框后,渲染器将处理模板缓冲区值。 有关Unity如何与Stencil缓冲区一起使用的更多信息,请参见ShaderLab:Stencil。 |
Camera | 选择此选项可让您覆盖以下“摄像机”属性: Field of View(视场):渲染对象时,渲染器功能使用此视场,而不是在相机上指定的值。 Position Offset(位置选中此选项,在此渲染器功能中执行渲染过程后,渲染器功能将还原原始相机矩阵。):渲染对象时,渲染器功能将其移动此偏移量。 Restore(恢复):选中此选项,在此渲染器功能中执行渲染过程后,渲染器功能将还原原始相机矩阵。 |
如何向渲染器添加渲染器功能
要将渲染器功能添加到渲染器:
(1)在Project窗口中,选择一个“渲染器。
Inspector窗口显示渲染器属性。
(2)在Inspector窗口中,选择Add Renderer Feature。在列表中,选择渲染器功能。
Unity将所选的Renderer功能添加到Renderer。
Unity在Project窗口中将渲染器功能显示为渲染器的子项:
本节包含有关从较旧版本的Universal Render Pipeline(URP)升级到较新版本,以及从轻量级渲染管道(LWRP)升级到URP的信息。
> 升级到URP 10.2.x
本页介绍如何从旧版本的通用渲染管线(URP)升级到10.2.x版本。
从URP 10.0.x–10.1.x升级
与URP 10.0.x-10.1.x相比,URP 10.2.x没有重大变化。要将URP升级到版本10.2.x,请安装该软件包的新版本。
从URP 7.2.x和更高版本升级
URP 10.x.x不支持软件包Post-Processing Stack v2。如果您的项目使用软件包Post-Processing Stack v2,请先迁移使用该软件包的效果。
DepthNormals Pass(深度法线Pass)
从10.0.x版本开始,URP可以生成一个称为_CameraNormalsTexture的普通纹理。若要在自定义着色器中渲染此纹理,请添加名称为DepthNormals的Pass。例如,请参阅Lit.shader中的实现。
Screen Space Ambient Occlusion (SSAO)
URP 10.0.x实现了屏幕空间环境光遮蔽(SSAO)效果。
如果要在自定义着色器中使用SSAO效果,请考虑以下与SSAO相关的实体:
_SCREEN_SPACE_OCCLUSION
关键字。
Input.hlsl在InputData结构中包含新的声明float2 normalizedScreenSpaceUV。
Lighting.hlsl包含AmbientOcclusionFactor结构,该结构包含用于计算间接和直接遮挡的变量:
- struct AmbientOcclusionFactor
- {
- half indirectAmbientOcclusion;
- half directAmbientOcclusion;
- };
Lighting.hlsl包含以下用于采样SSAO纹理的函数:
half SampleAmbientOcclusion(float2 normalizedScreenSpaceUV)
Lighting.hlsl包含以下函数:
- AmbientOcclusionFactor GetScreenSpaceAmbientOcclusion(float2
- normalizedScreenSpaceUV)
要在自定义着色器中支持SSAO,请在着色器中添加DepthNormals Pass和_SCREEN_SPACE_OCCLUSION关键字。例如,请参见Lit.shader。
如果您的自定义着色器实现了自定义照明功能,请使用函数GetScreenSpaceAmbientOcclusion(float2 normalizedScreenSpaceUV)获取用于照明计算的AmbientOcclusionFactor值。
从URP 7.0.x-7.1.x升级
1.首先升级到URP 7.2.0。请参阅升级到通用渲染管线7.2.0版。
2.URP 8.x.x不支持软件包Post-Processing Stack v2。如果您的项目使用软件包Post-Processing Stack v2,请先迁移使用该软件包的效果。
> 升级到URP 10.1.x
本页介绍如何从旧版本的通用渲染管道(URP)升级到版本10.1.x。
从URP 10.0.x升级
与URP 10.0.x相比,URP 10.1.x没有重大更改。要将URP升级到10.1.x版,请安装该软件包的新版本。
从URP 7.2.x和更高版本升级
URP 10.x.x不支持软件包Post-Processing Stack v2。如果您的项目使用软件包Post-Processing Stack v2,请先迁移使用该软件包的效果。
DepthNormals Pass(深度法线Pass)
从10.0.x版本开始,URP可以生成一个称为_CameraNormalsTexture的普通纹理。若要在自定义着色器中渲染此纹理,请添加名称为DepthNormals的Pass。例如,请参阅Lit.shader中的实现。
Screen Space Ambient Occlusion (SSAO)
URP 10.0.x实现了屏幕空间环境光遮蔽(SSAO)效果。
如果要在自定义着色器中使用SSAO效果,请考虑以下与SSAO相关的实体:
_SCREEN_SPACE_OCCLUSION
关键字。
Input.hlsl在InputData结构中包含新的声明float2 normalizedScreenSpaceUV。
Lighting.hlsl包含AmbientOcclusionFactor结构,该结构包含用于计算间接和直接遮挡的变量:
- struct AmbientOcclusionFactor
- {
- half indirectAmbientOcclusion;
- half directAmbientOcclusion;
- };
Lighting.hlsl包含以下用于采样SSAO纹理的函数:
half SampleAmbientOcclusion(float2 normalizedScreenSpaceUV)
Lighting.hlsl包含以下函数:
- AmbientOcclusionFactor GetScreenSpaceAmbientOcclusion(float2
- normalizedScreenSpaceUV)
要在自定义着色器中支持SSAO,请在着色器中添加DepthNormals Pass和_SCREEN_SPACE_OCCLUSION关键字。例如,请参见Lit.shader。
如果您的自定义着色器实现了自定义照明功能,请使用函数GetScreenSpaceAmbientOcclusion(float2 normalizedScreenSpaceUV)获取用于照明计算的AmbientOcclusionFactor值。
从URP 7.0.x-7.1.x升级
1.首先升级到URP 7.2.0。请参阅升级到通用渲染管线7.2.0版。
2.URP 8.x.x不支持软件包Post-Processing Stack v2。如果您的项目使用软件包Post-Processing Stack v2,请先迁移使用该软件包的效果。
> 升级到URP 10.0.x
> 升级到URP 9.0.x
> 升级到URP 8.1.0
> 升级到URP 8.0.0
> 升级到URP 7.4.0
> 升级到URP 7.3.0
> 升级到URP 7.2.0
> 从LWRP升级到URP
通用渲染管线(URP)取代了Unity 2019.3中的轻量级渲染管线(LWRP)。如果您的项目使用LWRP,则必须对其进行升级以使用URP才能使用Unity 2019.3。
Unity会自动升级某些内容,您必须进行一些手动更改。请按照本指南中的步骤从使用LWRP过渡到使用URP。
升级之前
更新Assembly Definition资源
URP使用GUID而不是程序集定义字符串名称。如果在项目中使用Assembly Definition资源(ASMDefs),则应确保在每个Assembly上都启用了Use GUIDs。
作为升级过程的一部分,Unity会自动将所有现有的字符串引用升级到LWRP,但是最好的做法是在您的Assembly Definition资源上使用GUID以便将来校对。
对于项目中的每个Assembly Definition资源
有关使用Assembly Definition文件的信息,请参见有关Assembly Definition的文档。
升级程序
升级您的LWRP版本
要开始升级过程:
Unity会自动将LWRP更新到7.x.x版本,并将URP软件包作为已更新LWRP软件包的依赖项引入。 Unity脚本更新程序会自动升级脚本文件。脚本更新程序完成后,所有脚本均应正确编译。
升级着色器搜索路径
如果您的LWRP项目使用Shader.Find搜索LWRP Shaders,则需要更改搜索路径。
Lightweight
以搜索Universal
。升级自定义着色器
> 升级标签
URP使用其自己的脚本标签。如果您的着色器使用LWRP LightMode标签,则它们将在您的URP项目中工作,因为Unity为此使用了内部别名。但是,您应该手动更改标签以使您的项目过时。
除此之外,URP还对LWRP使用了不同的RenderPipeline标签。如果您自己的着色器包含此标签,则需要手动对其进行更改以使着色器正常工作:
> 升级着色器名称
对于URP,以下着色器名称已更改,因此您需要手动更新着色器文件:
UsePass 'Lightweight Render Pipeline/...'
的所有实例更改为UsePass 'Universal Render Pipeline/...'
> 升级包含路径
URP使用到LWRP的不同包含路径。 LWRP 7.x.x包含forwarding includes,因此您的自定义着色器将从LWRP升级到URP。但是,URP 7.x.x不包含forwarding includes,因此您必须随后手动更新包含路径。
> 升级名称空间
在您项目的.cs文件中,找到对LWRP名称空间的引用,并将其替换为新的Universal名称空间。
升级后处理效果
URP版本7.x支持Post Processing Stack v2(PPv2)和其自己的集成后处理解决方案。如果您的项目中安装了Post Processing Version 2软件包,并且要使用URP的集成后处理解决方案,则需要先删除Post Processing Stack v2软件包,然后再将URP安装到Project中。安装URP后,您可以重新创建后期处理效果。
将后处理效果从LWRP升级到URP是一个手动过程。您必须使用URP的后处理实现在项目中手动重新创建每个后处理配置文件。
URP的集成后处理解决方案当前不支持自定义后处理效果。如果您的项目使用自定义后处理效果,则当前无法在URP的集成后处理解决方案中重新创建这些效果。即将发行的URP将支持自定义后处理效果。
安装URP并删除LWRP
作为自动升级过程的一部分,Unity安装了URP作为LWRP的依赖项。现在,您必须将URP安装为Project本身的依赖项,以便在删除LWRP时,Unity不会自动删除URP。
要将URP安装为项目的依赖项,请执行以下操作:
"com.unity.render-pipelines.universal": "[Version number you noted earlier]"
因此,例如,如果URP的版本为7.1.1,则您的依赖项部分将如下所示:
- "dependencies": {
- "com.unity.render-pipelines.universal": "7.1.1",
- ...
- }
这将标记您已作为项目依赖项安装的URP版本。现在,您可以安全地删除LWRP。
1.URP中的渲染
URP使用以下方式渲染场景:
在前向渲染器中,URP实现了一个渲染循环,该循环告诉Unity如何渲染框架。
当Graphics Setting中的渲染管线处于活动状态时,Unity将使用URP渲染项目中的所有摄像机,包括游戏和场景视图摄像机,反射探针以及Inspector中的预览窗口。
URP渲染器为每个摄像机执行一个摄像机循环,该循环执行以下步骤:
> 剔除场景中的渲染对象
> 为渲染器生成数据
> 执行将图像输出到帧缓冲区的渲染器。
UniversalRP提供了回调,您可以使用它们在渲染循环的开始和结束以及每个Camera循环的开始和结束执行代码。
有关每个步骤的更多信息,请参阅摄像机循环。
在RenderPipelineManager类中,URP提供事件,可用于在渲染帧之前和之后以及渲染每个Camera循环之前和之后执行代码。这些事件是:
2.摄像机循环
步骤 | 描述 |
---|---|
Setup Culling Parameters | 配置用于确定剔除系统如何剔除光源和阴影的参数。您可以使用自定义渲染器覆盖渲染管线的这一部分。 |
Culling | 使用上一步中的剔除参数来计算摄像机的可见渲染器,阴影投射器和光源列表。剔除参数和摄像机图层距离会影响剔除和渲染性能。 |
Build Rendering Data | 根据剔除输出、URP资源、摄像机的质量设置以及当前运行的平台来捕获信息,以构建RenderingData。渲染数据告诉渲染器摄像机和当前所选平台所需的渲染工作量和质量。 |
Setup Renderer | 生成渲染通道列表,并根据渲染数据将它们排队执行。您可以使用自定义渲染器覆盖渲染管线的这一部分。 |
Execute Renderer | 执行队列中的每个渲染过程。渲染器将Camera图像输出到帧缓冲区。 |
URP中的照明
使用URP,您可以实现适合各种艺术风格的逼真的照明。
Unity的所有渲染管线共享相同的照明功能,但是每个渲染管线都有一些重要的区别。
URP与Unity的照明功能不同的地方是:
1.灯光组件
属性 | 描述 |
---|---|
Type(类型) | 当前的光源类型。
|
Range(范围) | 定义从对象中心发出的光传播的距离(仅点光源和聚光灯)。 |
Spot Angle(角度) | 定义聚光灯的角度(仅聚光灯)。 |
Color(颜色) | 设置光源的颜色。 |
Mode(模式) | 指定光源模式。
|
Intensity(强度) | 设置光源的亮度。 |
Indirect Multiplier(间接乘数) | 使用此值可以改变间接光的强度。间接光是从一个物体反射到另一个物体的光。间接乘数定义了由全局照明(GI)系统计算的反射光的亮度。如果将间接乘数设置为小于1的值,则每次反射都会使反射光变暗。大于1的值会使每次反射光变亮。例如,当阴影中的深色表面(例如洞穴的内部)需要更亮以使细节可见时,这很有用。 |
Shadow Type(阴影类型) | 确定此光源是否投射硬阴影,软阴影或不投射阴影。
|
Baked Shadow Angle(烘焙阴影角度) | 如果将Type设置为Directional,并将Shadow Type设置为Soft Shadows,则此属性将为阴影的边缘添加一些人工柔化,并使它们看起来更自然。 |
Baked Shadow Radius(烘焙阴影半径) | 如果将Type设置为Point或Spot,并且将Shadow Type设置为Soft Shadows,则此属性将为阴影的边缘添加一些人工柔化,并使它们看起来更自然。 |
Realtime Shadows(实时阴影) | 当Shadow Type设置为Hard Shadpws或Soft Shadows时,这些属性可用。使用这些属性可以控制实时阴影渲染设置。 |
Strength(强度) | 使用滑块控制光源投射的阴影的暗度,以0到1之间的值表示。默认设置为1。 |
Bias(偏差) | 控制是使用URP资源中的阴影偏差设置,还是为此光源定义自定义阴影偏差设置。可能的值为“使用管线设置”或“自定义”。 |
Depth(深度) | 控制阴影被推离光源的距离。对于避免错误的自阴影伪影很有用。仅当Bias设置为“自定义”时,此属性才可见。 |
Normal(法线) | 控制阴影投射曲面将沿着曲面法线收缩的距离。对于避免错误的自阴影伪影很有用。仅当Bias设置为“自定义”时,此属性才可见。 |
Near Plane(近平面) | 渲染阴影时,使用滑块控制近裁剪平面的值,该值定义为0.1到10之间的值。该值被限制为0.1单位或光源的Range属性的1%,以较低者为准。默认情况下设置为0.2。 |
Render Mode(渲染模式) | 使用此下拉菜单可以设置所选光源的渲染优先级。这可能会影响照明保真度和性能。
|
Culling Mask(剔除网格) | 使用此选项有选择地排除对象组不受光的影响。 |
2.照明模式
在Lighting窗口中选择的Lighting Mode确定当前场景中所有混合光的行为。
URP支持以下照明模式:
2.Universal Additional Light Data组件(通用附加光源数据组件)
通用附加光源数据是URP用于内部数据存储的组件。通用附加光源数据组件允许URP扩展和覆盖Unity标准光源组件的功能。
在URP中,具有Light组件的对象还必须具有Universal Additional Light Data组件。如果您的项目使用URP,则在创建Light对象时Unity会自动添加Universal Additional Light Data组件。您不能从Light对象中删除通用附加光源数据组件。
Unity中的摄像机的工作方式类似于现实世界中的摄像机:它捕获3维空间中对象的视图,并将其展平以将其显示在2维表面上。
URP中的摄像机基于Unity的标准摄像机功能,但有一些显着差异。
差异:
有关Cameras在Unity中的工作原理的一般介绍,以及常见Camera工作流程的示例,请参阅Cameras上的Unity手册部分。
1.Universal Additional Camera Data组件
Universal Additional Camera Data组件是URP用于内部数据存储的组件。Universal Additional Camera Data组件使URP可以扩展和覆盖Unity标准摄像机组件的功能和外观。
在URP中,具有摄像机组件的对象也必须具有Universal Additional Camera Data组件。如果您的项目使用URP,则在创建Camera对象时,Unity会自动添加Universal Additional Camera Data组件。您不能从Camera游戏对象中删除Universal Additional Camera Data组件。
如果不使用脚本来控制和自定义URP,则无需对Universal Additiona Camera Data组件执行任何操作。
如果使用脚本来控制和自定义URP,则可以通过以下脚本访问摄像机的通用附加摄像机数据组件:
var cameraData = camera.GetUniversalAdditionalCameraData();
2.渲染类型
URP中有两种类型的摄像机:
> Base Camera是可渲染到渲染目标(屏幕或渲染纹理)的通用摄像机。
> Overlay Camera会在另一个摄像机的输出之上进行渲染。您可以将Base Camera的输出与一个或多个Overlay Camera的输出合并。这称为Camera Stack。
使用摄像机的Render Type属性将其设为Base Camera或Overlay Camera。
要在Unity编辑器中更改相机的类型,请执行以下操作:
> 在场景中创建或选择相机。
> 在摄像机Inspector中,使用渲染类型下拉菜单选择其他类型的摄像机。选择以下任一项:
a.将Render Type更改为Base
b.将Render Type更改为Overlay
您可以通过设置摄像机的通用附加摄像机数据组件的renderType属性来在脚本中更改摄像机的类型,如下所示:
- var cameraData = camera.GetUniversalAdditionalCameraData();
- cameraData.renderType = CameraRenderType.Base;
Base Camera
Base Camera是URP中默认的摄像机类型。Base Camera是可渲染到给定渲染目标的通用摄像机。
要以URP渲染任何东西,您的场景中必须至少有一个Base Camera。一个场景中可以有多个Base Camera。您可以单独使用Base Camera,也可以在Camera Stack中使用它。
当场景中有活动的Base Camera时,此图标将显示在Scene视图中“摄像机Gizmo”旁边:
Overlay Camera
Overlay Camera是将其视图呈现在另一个摄像机的输出之上的摄像机。您可以使用Overlay Camera来创建效果,例如2D UI中的3D对象或车辆的驾驶舱。
您必须使用Camera Stack系统将Overlay Camera与一个或多个Base Camera结合使用。您不能单独使用Overlay Camera。不属于Camera Stack的Overlay Camera不会执行其渲染循环的任何步骤,因此称为孤立相机。
重要说明:在此版本的URP中,仅当使用前向渲染时才支持Overlay Camera和Camera Stack。
当场景中有活动的Overlay Camera时,此图标将显示在Scene视图中“摄像机小控件”旁边:
Camera Stack中的Base Camera确定了Camera Stack的大多数属性。由于只能在Camera Stack中使用Overlay Camera,因此在渲染场景时,URP仅使用Overlay Camera的以下属性:
Unity在Inspector面板中隐藏所有其他未使用的属性。您可以使用脚本访问未使用的属性,但是对这些未使用的属性进行的任何更改都不会影响使用Overlay Camera的任何Camera Stack的视觉输出。
您不能将后期处理应用于单个Overlay Camera。您可以将后处理应用于单个Base Camera或Camera Stack。
3.使用多台摄像机
在URP中,您可以使用多个摄像机来执行以下操作:
> Camera Stack
在URP中,使用Camera Stack对多个摄像机的输出进行分层并创建单个组合的输出。通过Camera Stack,可以创建诸如2D UI中的3D模型或车辆驾驶舱之类的效果。
Camera Stack由Base Camera和一个或多个Overlay Camera组成。Camera Stack使用Camera Stack中所有摄像机的组合输出覆盖Base Camera的输出。这样,您可以对Base Camera的输出进行任何处理,也可以对Camera Stack的输出进行处理。例如,您可以将Camera Stack渲染到给定的渲染目标,应用后处理效果等等。
URP在Camera内执行多项优化,包括渲染顺序优化以减少透支。但是,使用Camera Stack时,可以有效地定义渲染这些摄像机的顺序。因此,您必须小心,不要以导致过度透支的方式订购相机。
将相机添加到Camera Stack
Overlay Camera现在是Base Camera的Camera Stack的一部分。 Unity在Base Camera的输出之上渲染Overlay Camera的输出。
您可以通过直接操纵Base Camera的通用附加摄像机数据组件的cameraStack属性,在脚本中将摄像机添加到Camera Stack中,如下所示:
- var cameraData = camera.GetUniversalAdditionalCameraData();
- cameraData.cameraStack.Add(myOverlayCamera);
从Camera Stack中移除摄像机
Overlay Camera保留在场景中,但不再是Camera Stack的一部分。
您可以通过直接操纵Base Camera的通用附加摄像机数据组件的cameraStack属性,从脚本中的Camera Stack中删除摄像机,如下所示:
- var cameraData = camera.GetUniversalAdditionalCameraData();
- cameraData.cameraStack.Remove(myOverlayCamera);
更改Camera Stack中摄像机的顺序
Base Camera会渲染Camera Stack的基础层,Stack中的Overlay Camera会按照从上到下的顺序在其顶部进行渲染。
您可以通过直接操纵Base Camera的通用附加摄像机数据组件的cameraStack属性,在脚本中对Camera Stack进行重新排序。
将同一Overlay Camera添加到多个Stack中
要将Overlay Camera添加到多个Camera Stack:
现在,Overlay Camera将同时在两个Camera Stack中渲染。
您还可以通过直接操纵Base Camera的通用附加摄像机数据组件的cameraStack属性,在脚本中将摄像机添加到Camera Stack中,如下所示:
- var cameraData = camera.GetUniversalAdditionalCameraData();
- cameraData.cameraStack.Add(myOverlayCamera);
> 从多个摄像机渲染到相同的渲染目标
在通用渲染管线(URP)中,多个Base Camera或Camera Stack可以渲染到同一渲染目标。这使您可以创建效果,例如分屏渲染。
如果有多个Base Camera或Camera Stack渲染到渲染目标的同一区域,则Unity会多次绘制重叠区域中的每个像素。 Unity在先前绘制的像素之上,最后绘制优先级最高的Base Camera或Camera Stack。
您可以使用Base Camera的Output Target属性来定义渲染目标,并使用Viewport Rect属性来定义要渲染到的渲染目标的区域。
设置分屏渲染
Unity将第一个Camera渲染到屏幕的左侧,将第二个Camera渲染到屏幕的右侧。
您可以通过设置其rect属性,在脚本中更改摄像机的Viewport Rect,如下所示:
myUniversalAdditionalCameraData.rect = new Rect(0.5f, 0f, 0.5f, 0f);
> 渲染到Render Texture
在URP中,摄像机可以渲染到屏幕或Render Texture。渲染到屏幕是默认设置,也是最常见的用例,但是渲染到Render Texture使您可以创建诸如CCTV摄像机监视器的效果。
如果您有要渲染为Render Texture的摄像机,则必须有第二个摄像机,然后再将该Render Texture渲染到屏幕上。在URP中,所有渲染到Render Texture的摄像机都将在所有渲染到屏幕的摄像机之前执行其渲染循环。这样可以确保Render Texture已准备好渲染到屏幕上。
渲染到Render Texture,然后将该Render Texture渲染到屏幕
使用Assets > Create > Render Texture在项目中创建Render Texture资源。在场景中创建一个Quad。在您的项目中创建一个材质,然后选择它。在Inspector中,将Render Texture拖动到材质的Base Map字段。在Scene视图中,将材质拖到Quad上。在场景中创建摄像机。它的Render Type默认为Base,使其成为Base Camera。选择Base Camera。在Inspector中,滚动到Output部分。将摄像机的Output Target设置为Texture,然后将Render Texture拖到Texture字段。在场景中创建另一个摄像机。它的Render Type默认为Base,使其成为Base Camera。将Quad放置在新Base Camera的视图内。
第一个Camera将其视图渲染到Render Texture。第二个摄像机将包括Render Texture的场景渲染到屏幕上。
您可以通过设置摄像机的Universal Additional Camera Data组件的cameraOutput属性,在脚本中为摄像机设置输出目标,如下所示:
- myUniversalAdditionalCameraData.cameraOutput = CameraOutput.Texture;
- myCamera.targetTexture = myRenderTexture;
4.清除、渲染顺序和过度绘制
清除
在URP中,摄像机的清除行为取决于摄像机的Render Type。
Base Camera
> 颜色缓存
在渲染循环开始时,Base Camera可以将其颜色缓冲区清除为Skybox、Solid Color或Uninitialized的颜色缓冲区。您可以使用Base Camera Inspector中的Background Type属性选择此行为。
请注意,未初始化的颜色缓冲区的内容因平台而异。在某些平台上,统一的颜色缓冲区将包含前一帧的数据。在其他平台上,统一的颜色缓冲区将包含未初始化的内存。仅当摄像机绘制到颜色缓冲区中的每个像素时,才应该选择使用统一的颜色缓冲区,并且您不希望承担不必要的清除操作的代价。
> 深度缓冲
Base Camera始终在每个渲染循环开始时清除其深度缓冲区。
Overlay Camera
> 颜色缓存
在其渲染循环开始时,Overlay Camera将接收包含来自Camera Stack中先前摄像机的颜色数据的颜色缓冲区。它不会清除颜色缓冲区的内容。
> 深度缓冲
在其渲染循环开始时,Overlay Camera将从Camera Stack中的先前摄像机接收包含深度数据的深度缓冲区。您可以使用Overlay Camera Inspector中的Clear Depth属性选择此行为。
当Clear Depth设置为true时,Overlay Camera将清除深度缓冲区并将其视图绘制到任何现有颜色数据之上的颜色缓冲区。如果Clear Depth设置为false,则Overlay Camera会在将其视图绘制到颜色缓冲区之前针对深度缓冲区进行测试。
摄像机剔除和渲染顺序
如果您的URP场景包含多个摄像机,则Unity将以可预测的顺序执行其剔除和渲染操作。
每帧一次,Unity执行以下操作:
> 剔除Base Camera。
> 将Base Camera渲染到渲染纹理。
> 对于属于Base Camera中的Camera Stack的每个Overlay Camera,按照Camera Stack中定义的顺序:
* 剔除Overlay Camera。
* 将Overlay Camera渲染到渲染纹理。
> 剔除Base Camera。
> 将Base Camera渲染到屏幕。
> 对于属于Base Camera中的Camera Stack的每个Overlay Camera,按照Camera Stack中定义的顺序:
* 剔除Overlay Camera。
* 将Overlay Camera渲染到屏幕。
Unity可以在一帧中多次渲染Overlay Camera的视图,这是因为Overlay Camera出现在多个Camera Stack中,或者是因为Overlay Camera出现在同一Camera Stack中不止一次。发生这种情况时,Unity不会重复使用剔除或渲染操作的任何元素。按照上面详述的顺序完全重复这些操作。
重要说明:在此版本的URP中,仅当使用前向渲染器时才支持Overlay Camera和Camera Stack。如果使用2D渲染器,则Overlay Camera将不执行其渲染循环的任何部分。
过度绘制
URP在摄像机内执行多项优化,包括渲染顺序优化以减少绘制。但是,使用Camera Stack时,可以有效地定义渲染这些摄像机的顺序。因此,您必须小心,不要以导致过度绘制的方式订购相机。
当Camera Stack中的多个摄像机渲染到同一渲染目标时,Unity会为Camera Stack中的每个摄像机绘制渲染目标中的每个像素。此外,如果一个以上的Base Camera或Camera Stack渲染到同一渲染目标的同一区域,则Unity会根据每个Base Camera或Camera Stack的需要再次在重叠区域绘制任何像素。
您可以使用Unity的Frame Debugger或特定于平台的帧捕获和调试工具来了解Scene中过度绘制的位置。然后,您可以相应地优化Camera Stack。
5.摄像机组件属性
URP中,Unity根据摄像机类型在Inspector中公开摄像机组件的不同属性。
Base Camera组件
当摄像机的渲染模式设置为Base时,摄像机具有以下部分。
Projection
Rendering
Environment
Output
Stack
Projection
属性 | 描述 |
---|---|
Render Mode | 控制摄像机类型。 |
Projection | 切换摄像机模拟透视的能力。
|
Size | 设置为“正交”时,摄像机的视口大小。 |
FOV Axis | 设置为“透视”时,摄像机的视野轴。 |
Field of view | 设置为“透视”时,摄像机视野的宽度,沿所选轴的度数。 |
Physical Camera | 勾选此框以启用此摄像机的Physical Camera属性。 启用Physical Camera属性后,Unity将使用模拟真实摄像机的属性(焦距、传感器大小、镜头偏移)来计算“视场”。 除非选中此框,否则物理摄像机属性在Inspector中不可见。 > Focal Length(焦距):设置摄像机传感器和摄像机镜头之间的距离(以毫米为单位)。较低的值会使视野变宽。更改此值时,Unity会相应地自动更新Field of view属性。 > Sensor Type(传感器类型):指定摄像机模拟的真实摄像机格式。从列表中选择所需的格式。选择摄像机格式时,Unity会自动将“传感器尺寸”X“ 和Y”属性设置为正确的值。如果您手动更改传感器尺寸值,则Unity会自动将此属性设置为“Custom”。 > Sensor Size(传感器大小):设置摄像机传感器的大小(以毫米为单位)。选择传感器类型时,Unity会自动设置X和Y值。您可以根据需要输入自定义值。 > Lens Shift(镜头偏移):从中心水平或垂直移动镜头。值是传感器尺寸的倍数;例如,沿X轴偏移0.5,会使传感器偏移其水平尺寸的 一半。您可以使用镜头偏移来校正当摄像机与拍摄对象成一定角度时发生的变形(例如,会聚的平行线)。沿任一轴移动镜头,使摄像机的视锥线倾斜。 > Gate Fit:用于更改分辨率闸门(游戏视图的大小/纵横比)相对于胶片闸门(物理摄像机传感器的大小/纵横比)的大小的选项。
|
Clipping Planes | 从相机开始和停止渲染的距离。 > Near:相对于摄影机的最接近点,它将进行绘图。 > Far:相对于摄像机的最远点,它将进行绘图。 |
Rendering
属性 | 描述 |
---|---|
Renderer | 控制此Camera使用哪个渲染器。 |
Post Processing | 启用后处理效果。 |
Anti-aliasing(抗锯齿) | 使用下拉菜单选择此摄像机用于后处理抗锯齿的方法。摄像机仍可以在进行后期抗锯齿的同时使用多重采样抗锯齿(MSAA),这是一种硬件功能。
> Quality:使用下拉菜单选择SMAA的质量。低和高之间的资源强度差异很小。 Low:最低SMAA质量。这是资源最少的选项。 Medium:SMAA质量与资源强度之间达到良好的平衡。 High:SMAA的最高质量。这是最耗费资源的选项。 |
Stop NaN | 启用该复选框,以使此摄像机用黑色像素替换非数字(NaN)的值。这可以防止某些效果破坏,但这是一个资源密集的过程。仅当遇到无法解决的NaN问题时才启用此功能。 |
Dithering(抖动) | 启用复选框以将8位抖动应用于最终渲染。这可以帮助减少宽梯度和弱光区域的条纹。 |
Render Shadows | 启用阴影渲染。 |
Priority(优先级) | 优先级较高的摄像机绘制在优先级较低的摄像机之上。 [-100,100]。 |
Opaque Texture | 控制Camera是否创建CameraOpaqueTexture,它是渲染视图的副本。
|
Depth Texture | 控制摄像机是否创建CameraDepthTexture,它是渲染的深度值的副本。
|
Culling Mask | 摄像机渲染到的图层。 |
Occlusion Culling | 启用遮挡剔除。 |
Environment
属性 | 描述 |
---|---|
Background Type | 控制如何在此Camera的渲染循环开始时初始化颜色缓冲区。
> Background:摄像机在渲染之前将其颜色缓冲区清除为该颜色。仅当从Background Type下拉菜单中选择Solid Color”时,才会显示此属性。
|
Volume Mask | 使用下拉菜单设置“图层蒙版”,它定义了哪些Volume会影响此摄像机。 |
Volume Trigger | 分配Volume系统用来处理此摄像机位置的Transform。例如,如果您的应用程序使用角色的第三人称视角,则将此属性设置为角色的Transform。然后,摄像机对角色输入的Volume使用后处理和场景设置。如果您未分配Transform,则摄像机将使用其自己的Transform。 |
Output
请注意,当摄像机的渲染模式设置为Base并且其渲染目标设置为纹理时,Unity不会在摄像机的Inspector中公开以下属性:
这是因为“渲染纹理”确定了这些属性。要更改它们,请在“渲染纹理”资源上进行。
属性 | 描述 |
---|---|
Output Texture | 如果分配了此字段,则将此Camera的输出渲染为RenderTexture,否则渲染为屏幕。 |
HDR | 启用此摄像机的高动态范围渲染。仅当从“输出目标”下拉菜单中选择“屏幕”时,此属性才会出现。 |
MSAA | 为该摄像机启用多样本抗锯齿。仅当从“输出目标”下拉菜单中选择“屏幕”时,此属性才会出现。 |
Viewport Rect | 四个值指示此摄像机视图将在屏幕上绘制的位置。在视口坐标中测量(值0-1)。仅当从“输出目标”下拉菜单中选择“屏幕”时,此属性才会出现。
|
Allow Dynamic Resolution | 启用此摄像机的动态分辨率渲染。仅当从“输出目标”下拉菜单中选择“屏幕”时,此属性才会出现。 |
Target Display | 定义要渲染到的外部设备。 1至8之间。仅当从“输出目标”下拉菜单中选择“屏幕”时,此属性才会出现。 |
Stack
Camera Stack可以将多个摄像机的结果合成在一起。Camera Stack由Base Camera和任意数量的Overlay Camera组成。
您可以使用Stack属性将Overlay Camera添加到Stack中,它们将按照Stack中定义的顺序进行渲染。
Overlay Camera组件
使用Camera Stack时,Camera Stack的Base Camera将确定Camera Stack的大多数属性。由于Overlay Camera只能用作Camera Stack的一部分,因此只能在Overlay Camera上配置有限数量的设置。未分配给Camera Stack的Overlay Camera将跳过渲染。
当摄像机的Render Type设置为Overlay时,摄像机Inspector具有以下部分:
可参考Base Camera相同部分。
> URP中的后处理
URP包括其自己的后处理实现,因此您无需安装任何其他软件包。 URP与Post Processing Stack v2软件包不兼容。
URP使用Volume框架进行后期处理效果。
下图显示了使用和未使用URP后处理的场景。
未使用后处理:
使用后处理:
注意:URP不支持OpenGL ES 2.0上的后处理。
1.如何在URP中配置后处理效果
在URP模板场景中使用后处理
后处理是在URP模板的SampleScene场景中预先配置的。
要查看预配置的效果,请在场景中选择Post-process Volume。
要添加额外的效果,请将Volume Overrides添加到Volume中。
要配置基于位置的后处理效果,请参阅如何使用Local Volume。
在新的URP场景中配置后处理
要在新场景中配置后处理:
> 选择一个相机,然后选择Post Processing复选框。
> 在场景中添加带有Volume组件的GameObject。该指令添加Global Volume。选择GameObject>Volume>Gobal Volume。
> 选择Gobal Volume游戏对象。在Volume组件中,通过单击Profile属性右侧的“新建”按钮来创建新的Profile。
> 通过向Volume组件添加Volume Overrides,将后处理效果添加到相机。
现在,您可以在Volume组件中的Overrides中调整后处理效果设置。
2.针对移动设备的URP中的后处理
后处理效果会占用很多帧时间。如果将URP用于移动设备,则默认情况下,以下效果是最“移动友好”的:
注意:对于景深,Unity建议您对低端设备使用Gaussian Depth of Field(高斯景深)。对于控制台和桌面平台,请使用Bokeh Depth of Field(散景景深)。
注意:对于移动平台上的抗锯齿,Unity建议使用FXAA。
3.适用于VR的URP中的后处理
在VR应用程序和游戏中,某些后期处理效果可能导致恶心和迷失方向。要减少快节奏或高速应用程序中的晕车现象,请对VR使用Vignette效果,并避免对VR使用镜头变形,色差和Motion Blur。
> Volume
通用渲染管道(URP)使用Volume框架。根据摄像机相对于每个Volume的位置,Volume可以覆盖或扩展场景属性。
URP使用Volume框架进行后期处理效果。
URP为体积实现了专用的GameObjects:Global Volume、Box Volume、Sphere Volume、 Convex Mesh Volume。
Volume组件包含Mode属性,该属性定义Volume是Global还是Local。
将Model设置为Global时,Volume会在场景中的所有位置影响摄像机。在Model设置为Local的情况下,如果摄像机位于对碰撞器的范围内,则Volume会影响摄像机。有关更多信息,请参见如何使用Local Volume。
您可以将Volume组件添加到任何游戏对象。一个场景可以包含多个带有Volume组件的游戏对象。您可以将多个Volume组件添加到游戏对象。
Volume组件引用一个Volume Profile,其中包含场景属性。Volume Profile包含每个属性的默认值,并默认隐藏它们。使用Volume Overrides,可以更改或扩展Volume Profile中的默认属性。
在运行时,URP将遍历附加到场景中激活游戏对象的所有启用的Volume组件,并确定每个Volume对最终场景设置的贡献。URP使用摄影机位置和Volume组件属性来计算贡献。URP用非零贡
献对所有Volume中的值进行插值,以计算最终属性值。
1.Properties(属性)
属性 | 描述 |
---|---|
Mode | 使用下拉菜单选择URP用于计算此Volume是否会影响摄像机的方法:
|
Blend Distance | 与URP开始融合的Volume碰撞器最远的距离。值为0表示URP在输入后立即应用此Volume Overrides。仅当您从Mode下拉列表中选择Local时,此属性才会显示。 |
Weight | Volume对场景的影响程度。 URP将此乘数应用于它使用摄像机位置和Blend Distance计算出的值。 |
Priority | 当Volume对场景具有相等影响力时,URP使用此值来确定使用哪个Volume。 URP首先使用优先级更高的Volume。 |
Profile | Volume Profile资源,其中包含存储URP用于处理该Volume的属性的Volume组件。 |
2.Volume Profiles
Profile字段存储Volume Profile,它是一种资源,其中包含URP用来渲染场景的属性。您可以编辑该Volume Profile,或为Profile字段分配其他Volume Profile。您还可以分别单击“新建”和“克隆”按钮来创建Volume Profile或克隆当前的Profile。
3.如何使用本地Volume
在此示例中,当摄像机在某个Box Collider中时,URP将应用后处理效果。
Unity创建新的Volume Profile,并将“Add Override”按钮添加到Volume组件。
确保选中“Is Trigger”复选框。
现在,当摄影机位于Volume的Box Collider的范围内时,URP将使用Box Volume中的Volume Override。
> Volume Profile
Volume Profile是一个可编辑的对象,其中包含一些属性,Volume可使用这些属性来确定如何为受影响的摄像机渲染场景环境。Volume在其Profile字段中引用Volume Profile,并使用其引用的Volume Profile中的值。
Volume Profile将其属性组织为控制不同环境设置的结构。这些结构都具有可以使用的默认值,但是您可以使用Volume Override覆盖这些值并自定义环境设置。
1.创建和定义Volume Profile
有多种创建Volume Profile的方法。创建场景设置游戏对象(菜单:Rendering > Scene Settings)时,Unity会自动创建并链接一个Volume Profile。您也可以手动创建Volume Profil,导航至菜单:Assets > Create > Volume Profile.。
在检查器中打开Volume Profile以编辑其属性。为此,您可以:
在Inspector中查看Volume Profile时,您只能看到Volume Profile所包含的Volume Override中的值。Volume Profile隐藏所有其他值。您必须添加Volume Override组件才能编辑Volume Profile的默认属性。
要添加Volume Override组件,请单击Add Override按钮,然后选择要添加到Volume Profile的Volume Override。
例如,单击Add Override按钮,然后选择Motion Blur Volume override。这将公开与URP中的Motion Blur效果有关的属性。
> Volume Overrides
使用Volume Overrides,可以更改或扩展Volume Profile中的默认属性。
URP将后处理效果实现为Volume Overrides。例如,下图显示了URP模板SampleScene中的Vignette后处理效果。
在Volume Override中,每个属性左侧的复选框使您可以启用或禁用特定属性。如果禁用某个属性,则URP会使用该Volume的默认值作为该属性。要打开或关闭所有属性,请使用属性列表上方的“All”或“None”快捷方式。
1.如何向Volume组件添加Volume Override
要将Volume Override添加到Volume组件:
使用搜索字段搜索Override,或从菜单中选择Override。
> Effect List
这些是URP中可用的后处理效果:
Ambient Occlusion(环境光遮挡)
环境光遮挡效果会使彼此靠近的折痕,孔,交点和表面变暗。在现实世界中,此类区域往往会遮挡环境光,因此它们看起来更暗。
URP将实时屏幕空间环境光遮挡(SSAO)效果实现为Renderer Feature(渲染器功能)。
注意:SSAO效果是一个渲染器功能,独立于URP中的后处理效果工作。此效果不依赖于Volume,也不与Volume相互作用。
将SSAO渲染器功能添加到渲染器
URP将环境光遮挡效果实现为渲染器功能。
要在项目中使用环境光遮挡效果:
Inspector窗口显示渲染器属性。
Unity将SSAO渲染器功能添加到渲染器。
现在,将渲染器与SSAO渲染器功能一起使用的相机将具有环境光遮挡效果。
属性
Source:选择法线向量值的来源。 SSAO渲染器功能使用法向矢量来计算曲面上每个点在环境光照下的曝光程度。
性能影响:取决于应用程序。
在Depth Normals和Depth之间切换时,性能可能会有所不同,具体取决于目标平台和应用程序。在广泛的应用中,性能差异很小。在大多数情况下,深度法线可以产生更好的视觉效果。
有关Source属性的更多信息,请参见“实现细节”部分。
Normal Quality
当在Source属性中选择选项Depth时,此属性变为活动状态。
法线向量的较高质量会产生更平滑的SSAO效果。
可用选项:
性能影响:中等。
在某些情况下,Depth选项所产生的结果可与Depth Normals选项相媲美。但是在某些情况下,Depth Normals选项可以显着提高质量。下图显示了这种情况的示例。
有关更多信息,请参见“实施细节”部分。
Intensity(强度)
此属性定义了变暗效果的强度。
性能影响:微不足道。
Direct Lighting Strength(直接照明强度)
此属性定义在暴露于直接照明的区域中效果的可见性。
性能影响:微不足道。
下图显示了“直接照明强度”值如何影响不同区域,具体取决于它们是否在阴影中。
Radius(半径)
在计算环境光遮挡值时,SSAO效果从当前像素获取该半径范围内的正常纹理的样本。
性能影响:高。
降低Radius设置可提高性能,因为SSAO渲染器功能会采样更靠近源像素的像素。这使缓存更加有效
计算环境光遮挡通过距离较近的对象比通过距离较远的对象要长。这是因为Radius属性随对象缩放。
Sample Count(样本数)
对于每个像素,SSAO渲染功能会在指定半径内采用此数量的样本来计算环境光遮挡值。增大此值可使效果更平滑,更细致,但会降低性能。
性能影响:高。
将Sample Count值从4增加到8,会使GPU上的计算负荷增加一倍。
Implementation details(实施细节)
SSAO渲染器功能使用法向矢量来计算曲面上每个点在环境光照下的曝光程度。
URP 10.0实现了DepthNormals Pass块,该块为当前帧生成普通纹理_CameraNormalsTexture。默认情况下,SSAO渲染器功能使用此纹理来计算环境光遮挡值。
如果您实现自定义SRP,并且不想在着色器中实现DepthNormals Pass块,则可以使用SSAO渲染器功能并将其Source属性设置为Depth。在这种情况下,Unity不使用DepthNormals Pass来生
成法线向量,而是使用深度纹理来重建法线向量。
在Source属性中选择Depth选项将启用Normal Quality属性。此属性中的选项(Low, Medium, High)确定Unity从深度纹理重构法线矢量时所采用的深度纹理的样本数。每个质量级别的样本数
量:低:1,中:5,高:9。
1.Bloom
Bloom效果产生从图像明亮区域边界延伸的光条纹。这会产生使摄像机无法承受的极亮光线的错觉。
Bloom效果还具有Lens Dirt(镜头污垢)功能,可用于施加全屏污迹或灰尘来衍射Bloom效果。
使用
Bloom使用Volume系统,因此要启用和修改Bloom属性,必须将Bloom Override添加到场景中的Volume。
要将Bloom添加到Volume中:
属性
Bloom
属性 | 描述 |
---|---|
Threshold(阈值) | 设置URP应用Bloom的空间亮度值。 URP不会将Bloom应用于场景中亮度低于此值的任何像素。最小值为0,不过滤任何内容。默认值为0.9。没有最大值。 |
Intensity(强度) | 设置Bloom滤镜的强度,范围为0到1。默认值为0,这表示Bloom效果被禁用。 |
Scatter(分散) | 设置光晕效果的半径为0到1。值越大,半径越大。默认值为0.7。 |
Tint(着色) | 设置用于Bloom效果的颜色。 |
Clamp(钳) | 设置Unity用于计算Bloom的最大强度。如果场景中的像素强度大于此强度,则URP会以其当前强度渲染它们,但使用此强度值进行Bloom计算。默认值为65472。 |
High Quality Filtering(高品质过滤) | 使用高质量的采样,这样可以减少闪烁并提高整体平滑度,但是会占用更多资源,并且会影响性能。 |
Skip Iterations(跳过迭代) | 处理序列中的最后一次迭代可能对渲染帧的外观几乎没有贡献。在此设置中,您定义要跳过的最终迭代数。增大此值可减少处理负荷并提高性能,尤其是在移动设备上。预设值为1。 |
Lens Dirt(镜头污垢)
属性 | 描述 |
---|---|
Texture(纹理) | 分配一个纹理以将灰尘(例如污迹或灰尘)的效果施加到镜头上。 |
Intensity(强度) | 设置镜头污垢效果的强度。 |
解决性能问题
有多种方法可以改善Bloom的性能影响。按有效性列出,您可以:
2.Channel Mixer(通道混合器)
通道混合器效果可修改每个输入颜色通道对输出通道整体混合的影响。例如,如果您增加绿色通道对红色通道的整体混合的影响,则最终图像中所有绿色(包括中性/单色)的区域都会变得偏红色。
使用
通道混合器使用Volume框架,因此要启用和修改通道混合器属性,必须将Channel Mixer Override添加到场景中的Volume。
要将Channel Mixer添加到Volume中:
属性
输出通道
在修改每个输入通道的影响之前,必须选择要影响的输出颜色通道。为此,请单击要为其设置影响力的通道的按钮。
属性 | 描述 |
---|---|
Red | 使用滑块设置红色通道对所选输出通道的影响。 |
Green | 使用滑块设置绿色通道对所选输出通道的影响。 |
Blue | 使用滑块设置蓝色通道对所选输出通道的影响。 |
3.Chromatic Aberration(色差)
色差沿将图像的深色和浅色部分分开的边界产生彩色条纹。它可以模拟现实世界中摄像机镜头无法将所有颜色融合到同一点时所产生的色彩失真。
使用
Chromatic Aberration使用Volume系统,因此要启用和修改Chromatic Aberration属性,必须将Chromatic Aberration Override添加到场景中的Volume。
要将Chromatic Aberration添加到Volume中:
属性
属性 | 描述 |
---|---|
Intensity(强度) | 设置色差效果的强度。值的范围是0到1。值越高,效果越强烈。默认值为0,将禁用效果。 |
4.Color Adjustments(色彩调整)
使用此效果可以调整最终渲染图像的整体色调,亮度和对比度。
使用
Color Adjustments使用Volume系统,因此要启用和修改Color Adjustments属性,必须将Color Adjustments Override添加到场景中的Volume。
要将Color Adjustments添加到Volume中:
属性
属性 | 描述 |
---|---|
Post Exposure(曝光) | 在EV(不是EV100)中调整场景的整体曝光。 URP在HDR效果之后和色调映射之前应用此功能,这意味着它不影响链中以前的效果。 |
Contrast(对比) | 使用滑块扩大或缩小色调值的整体范围。较大的正值将扩大色调范围,而较小的负值将缩小色调范围。 |
Color Filter(彩色过滤) | 使用哪种颜色来倍增渲染并为结果着色。 |
Hue Shift(色相转移) | 使用滑块移动所有颜色的色调。 |
Saturation(饱和) | 使用滑块推动所有颜色的强度。 |
5.Color Curves(颜色曲线)
颜色曲线是一种调整色调、饱和度或亮度的特定范围的高级方法。您可以调整八个可用图形中的曲线,以获得特定的色相替换或使某些亮度降低饱和度等效果。
使用
Color Curves使用Volume系统,因此要启用和修改Color Curves属性,必须将Color Curves Override添加到场景中的Volume。
要将Color Curves添加到Volume中:
属性
属性 | 描述 |
---|---|
Master | 该曲线影响整个图像的亮度。曲线图的x轴表示输入亮度,y轴表示输出亮度。您可以使用它来进一步调整所有颜色通道同时显示的基本属性,例如对比度和亮度。 |
Red | 该曲线影响整个图像上的红色通道强度。曲线图的x轴表示红色通道的输入强度,y轴表示红色通道的输出强度。 |
Green | 该曲线影响整个图像上的绿色通道强度。曲线图的x轴表示绿色通道的输入强度,y轴表示绿色通道的输出强度。 |
Blue | 该曲线影响整个图像上的蓝色通道强度。曲线图的x轴表示蓝色通道的输入强度,y轴代表蓝色通道的输出强度。 |
Hue Vs Hue | 该曲线根据输入色调(y轴)移动输入色调(x轴)。您可以使用它来微调特定范围的色调或执行颜色替换。 |
Hue Vs Sat | 该曲线根据输入色相(x轴)调整饱和度(y轴)。您可以使用它来调暗特别明亮的区域或创建艺术效果,例如单色(除了一种主要颜色)。 |
Sat Vs Sat | 该曲线根据输入饱和度(x轴)调整饱和度(y轴)。您可以使用它来微调通过“色彩调整”进行的饱和度调整。 |
Lum Vs Sat | 该曲线根据输入亮度(x轴)调整饱和度(y轴)。您可以使用它来降低黑暗区域的饱和度,以提供有趣的视觉对比。 |
6.Depth Of Field(景深)
景深组件将应用景深效果,该效果可模拟摄像机镜头的聚焦特性。在现实生活中,摄像机只能在特定距离上清晰地聚焦在物体上。距离相机较近或较远的物体均未聚焦。模糊提供了关于物体距离的视觉提示,并引入了“散景”,当图像失焦时出现在图像明亮区域周围的视觉伪像。要了解有关散景的更多信息,请参阅Wikipedia article on Bokeh。
通用渲染管道(URP)具有两种景深模式:
使用
Depth Of Field使用Volume系统,因此要启用和修改Depth Of Field属性,必须将Depth Of Field Override添加到场景中的Volume。
要将Depth Of Field添加到Volume中:
属性
属性 | 描述 |
---|---|
Mode | 使用此下拉菜单选择URP用来设置景深效果焦点的模式。
|
Gaussian Depth of Field
属性 | 描述 |
---|---|
Start | 设置到摄像机的距离,在此距离远场开始模糊。 |
End | 设置距摄像机的距离,在该距离处远场模糊达到其最大模糊半径。 |
Max Radius | 设置远模糊可以达到的最大半径。默认值为1。 注意:大于1的值可能会导致视觉欠采样伪像出现在场景中。如果模糊效果不平滑或看起来有静电噪声,请尝试将该值减小回1或更低。 |
High Quality Sampling | 使用更高质量的采样来减少闪烁并提高总体模糊平滑度。这可能会导致性能损失。 |
Bokeh Depth of Field
“散景景深”模式紧密模仿真实摄像机的效果。因此,这些设置基于真实的摄像机设置,并提供许多属性来调整摄像机上的光圈叶片。有关光圈叶片及其对摄像机输出视觉质量的影响的介绍,请参见“改进摄像机指南”中的“光圈叶片:多少是最好的?”。
属性 | 描述 |
---|---|
Focus Distance(对焦距离) | 设置从摄像机到对焦点的距离。 |
Focal Length(焦距) | 设置摄像机传感器和摄像机镜头之间的距离,值越大,景深越浅。(以毫米为单位) |
Aperture(光圈) | 设置光圈比(称为光圈值或f值)。值越小,景深越浅。 |
Blade Count(叶片数) | 使用滑块设置摄像机用于形成光圈的光圈叶片的数量。您使用的叶片越多,散景就越圆。 |
Blade Curvature(叶片曲率) | 使用滑块设置摄像机用来形成光圈的光圈叶片的曲率。值越小,可见的光圈叶片越多。值为1可使散景完全呈圆形。 |
Blade Rotation(叶片旋转) | 使用滑块设置光圈叶片的旋转角度。 |
7.Film Grain(胶片颗粒)
Film Grain效果模拟摄影胶片的随机光学纹理,通常是由物理胶片上存在的小颗粒引起的。
使用
Film Grain使用Volume系统,因此要启用和修改Film Grain属性,必须将Film Grain Override添加到场景中的Volume。
要将Film Grain添加到Volume中:
属性
属性 | 描述 |
---|---|
Type(类型·) | 使用下拉菜单选择要使用的颗粒类型。您可以从URP包含的预设列表中进行选择,也可以选择“Custom”以提供自己的纹理。 |
Texture(纹理) | 指定此效果用作自定义纹理的纹理。仅当“Type”设置为“Custom”时,此属性才可用。 |
Intensity(强度) | 使用滑块设置胶片颗粒效果的强度。 |
Response(响应) | 使用滑块设置噪声响应曲线。将该值设置得越高,在明亮区域的噪音就越少。 |
8.Lens Distortion(镜头变形)
镜头变形效果会变形最终渲染的图片,以模拟真实世界摄像机镜头的形状。
使用
Lens Distortion使用Volume系统,因此要启用和修改Lens Distortion属性,必须将Lens Distortion Override添加到场景中的Volume。
要将Lens Distortion添加到Volume中:
属性
属性 | 描述 |
---|---|
Intensity | 使用滑块设置变形效果的整体强度。 |
X Multiplier | 使用滑块在x轴上设置失真强度。该值用作乘数,因此您可以将此值设置为0以禁用此轴上的失真。 |
Y Multiplier | 使用滑块在y轴上设置失真强度。该值用作乘数,因此您可以将此值设置为0以禁用此轴上的失真。 |
Center | 在屏幕上设置失真效果的中心点。 |
Scale | 使用滑块设置全局屏幕缩放的值。这将缩放渲染以隐藏屏幕的边框。当您使用高失真度时,屏幕边界上的像素可能会破裂,因为它们依赖于屏幕边界之外不存在的像素中的信息。此属性对于隐藏屏幕边框周围的这些损坏的像素很有用。 |
9.Lift Gamma Gain
此效果使您可以执行三向颜色分级。Lift Gamma Gain轨迹球遵循ASC CDL标准。当您调整轨迹球上该点的位置时,它将在给定的色调范围内将图像的色调朝该颜色移动。使用不同的轨迹球影响图像中的不同范围。调整轨迹球下方的滑块以抵消该范围的颜色亮度。
使用
Lift Gamma Gain使用Volume系统,因此要启用和修改Lift Gamma Gain属性,必须将Lift Gamma Gain Override添加到场景中的Volume。
要将Lift Gamma Gain添加到Volume中:
属性
属性 | 描述 |
---|---|
Lift | 用它来控制暗色调。这会对阴影产生更大的影响。
|
Gamma | 使用此功能控制中色调。
|
Gain | 使用此按钮可以增加信号并使高光更亮。
|
10.Motion Blur(运动模糊)
Motion Blur效果可模拟现实世界中的摄像机拍摄运动速度比摄像机的曝光时间快的对象时图像中出现的模糊。这通常是由于快速移动的物体或较长的曝光时间造成的。
URP仅模糊摄像机的运动。
使用
Motion Blur使用Volume系统,因此要启用和修改Motion Blur属性,必须将Motion Blur Override添加到场景中的Volume。
要将Motion Blur添加到Volume中:
属性
属性 | 描述 |
---|---|
Quality | 设置效果的质量。较低的预设可提供更好的性能,但视觉质量较低。 |
Intensity | 将运动模糊滤镜的强度设置为介于0到1之间的值。较高的值会产生较强的模糊效果,但取决于Clamp参数,可能会导致性能降低。 |
Clamp | 设置摄像机旋转产生的速度可以达到的最大长度。这样可以以高速度限制模糊,以避免过多的性能成本。该值是屏幕全分辨率的一部分。取值范围是0〜0.2。默认值为0.05。 |
解决性能问题
要减少运动模糊对性能的影响,您可以:
11.Panini Projection(帕尼尼投影)
此效果可帮助您在具有很大视野的场景中渲染透视图。 Panini Projection是圆柱投影,这意味着它使垂直直线保持垂直。与其他圆柱投影不同,Panini Projection也使穿过图像中心的径向线也保持直线。
有关Panini投影的详细信息,请参阅General Panini Projection。
使用
Panini Projection使用Volume系统,因此要启用和修改Panini Projection属性,必须将Panini Projection Override添加到场景中的Volume。
要将Panini Projection添加到Volume中:
属性
属性 | 描述 |
---|---|
Distance(距离) | 使用滑块设置变形的强度。 |
Crop to Fit(裁剪以适合) | 使用滑块裁剪变形以适合屏幕。值为1会将失真裁剪到屏幕的边缘,但是如果将Distance设置为较高的值,则会导致中心精度下降。 |
12.Shadows Midtones Highlights(阴影中间色调高光)
Shadows Midtones Highlights效果分别控制渲染的阴影,中间色调和高光。与Lift Gamma Gain不同,您可以使用此效果来精确定义阴影,中间色调和高光的色调范围。
使用
Shadows Midtones Highlights使用Volume系统,因此要启用和修改Shadows Midtones Highlights属性,必须将Shadows Midtones Highlights Override添加到场景中的Volume。
要将Shadows Midtones Highlights添加到Volume中:
属性
属性 | 描述 |
---|---|
Shadows | 使用此控件控制阴影。使用轨迹球选择颜色,应将阴影的色调移至该颜色。使用滑块偏移轨迹球颜色的颜色明暗度。 |
Midtones | 使用此按钮控制中间色调。使用轨迹球选择颜色,应将中间色调的色调移至该颜色。使用滑块偏移轨迹球颜色的颜色明暗度。 |
Highlights | 使用此按钮控制高光。使用轨迹球选择颜色,应将高光的色调移到该颜色。使用滑块偏移轨迹球颜色的颜色亮度。 |
图形视图
此图显示了阴影(蓝色),中间色调(绿色)和高光(黄色)的总体贡献。这对于可视化色调区域之间的过渡很有用。
阴影极限
属性 | 描述 |
---|---|
Start | 设置渲染的阴影和中间色调之间过渡的起点。 |
End | 设置渲染的阴影和中间色调之间过渡的终点。 |
高光极限
属性 | 描述 |
---|---|
Start | 设置中间色调和渲染的高光之间过渡的起点。 |
End | 设置渲染的中间色调和高光之间过渡的终点。 |
13.Split Toning(分割色调)
此效果会根据亮度值对图像的不同区域进行着色,以帮助您获得更具特色的外观。您可以使用它为场景中的阴影和高光添加不同的色调。
使用
Split Toning使用Volume系统,因此要启用和修改Split Toning属性,必须将Split Toning Override添加到场景中的Volume。
要将Split Toning添加到Volume中:
属性
在颜色选择器中为每个属性调整颜色时,只应调整“色相”和“饱和度”。值也会改变整体图像亮度。
属性 | 描述 |
---|---|
Shadows(阴影) | 使用颜色选择器选择URP用于着色阴影的颜色。 |
Highlights(高光) | 使用颜色选择器选择URP用于着色高光的颜色。 |
Balance(平衡) | 使用滑块设置阴影和高光之间的平衡。较低的值将导致更明显的阴影色调与高光色调相比。较高的值会产生相反的效果,与阴影色调相比,高光色调更明显。 |
14.Tonemapping(色调映射)
色调映射是将图像的HDR值重新映射到新的值范围的过程。其最常见的目的是使低动态范围的图像看起来具有较高的范围。参见维基百科:色调映射。
使用
Tonemapping使用Volume系统,因此要启用和修改Tonemapping属性,必须将Tonemapping Override添加到场景中的Volume。
要将Split Toning添加到Volume中:
属性
属性 | 描述 |
---|---|
Mode | 选择一种用于颜色分级的色调映射算法。选项包括:
|
15.Vignette(渐晕)
在摄影中,vignetting是指与中心相比朝向图像边缘变暗和/或去饱和的术语。在现实生活中,造成这种效果的原因通常是厚的或堆叠的滤镜,辅助镜头和遮光罩不合适。您可以使用vignetting将焦点吸引到图像的中心。
使用
Vignette使用Volume系统,因此要启用和修改Vignette属性,必须将Vignette Override添加到场景中的Volume。
要将Vignette添加到Volume中:
属性
属性 | 描述 |
---|---|
Color | 设置渐晕的颜色。 |
Center | 设置渐晕中心点。作为参考,屏幕中心为[0.5,0.5]。 |
Intensity | 设置渐晕效果的强度。 |
Smoothness | 使用滑块设置渐晕边框的平滑度。值的范围是0.01到1。值越高,渐晕边框越平滑。默认值为0.2。 |
Rounded | 启用后,渐晕将完美地变圆。禁用后,渐晕将与当前长宽比上的形状匹配。 |
16.White Balance(白平衡)
白平衡组件将应用白平衡效果,以消除不真实的偏色,从而使在现实生活中显示为白色的项目在最终图像中呈现为白色。您还可以使用白平衡在最终渲染中创建整体冷淡或温暖的感觉。
使用
White Balance使用Volume系统,因此要启用和修改White Balance属性,必须将White Balance Override添加到场景中的Volume。
要将White Balance添加到Volume中:
属性
属性 | 描述 |
---|---|
Temperature(色温) | 使用滑块将白平衡设置为自定义色温。较高的值会导致较暖的色温,而较低的值会导致较冷的色温。有关色温的更多信息,请参见Wikipedia:色彩平衡。 |
Tint(着色) | 使用滑块补偿绿色或洋红色的色调。 |
通用渲染管线使用与Unity内置渲染管线不同的着色方法。因此,内置的Lit和自定义的Lit着色器不适用于URP。相反,URP具有一组新的标准着色器。 URP为最常见的用例场景提供以下着色器:
升级建议:如果将当前项目升级到URP,则可以将内置着色器升级到新的。内置渲染管线中的Unlit着色器仍可与URP一起使用。
对于SpeedTree着色器,除非重新单击“Generate Materials(生成材质)”或“Apply & Generate Materials(应用并生成材质)”按钮,否则Unity不会重新生成材质。
注意:Unity内置渲染管线中的Unlit着色器在URP中工作。
选择着色器
使用通用渲染管线,您可以使用基于物理的着色器(PBS)和基于非物理的渲染(PBR)进行实时照明。
对于PBS,请使用Lit着色器。您可以在所有平台上使用它。着色器的质量取决于平台,但在所有平台上都保持基于物理的渲染。这为您提供了跨硬件的逼真的图形。Unity标准着色器和标准(镜面设置)着色器均映射到URP中的Lit着色器。有关着色器映射的列表,请参见“着色器映射”部分。
如果您以功能较弱的设备为目标,或者项目的阴影更简单,请使用非PBR的Simple Lit着色器。
如果您不需要实时照明,或者只希望使用烘焙的照明并采样整体照明,请选择Baked Lit着色器。
SRP Batcher兼容性
为确保Shader与SRP Batcher兼容,请执行以下操作:
有关SRP Batcher的更多信息,请参见可编写脚本的渲染管线(SRP)SRP Batcher。
1.Shading models(着色模型)
> URP中的着色模型
着色模型定义材质的颜色如何根据表面方向、观察者方向和照明等因素而变化。您选择的着色模型取决于应用程序的艺术指导和性能预算。通用渲染管线(URP)为着色器提供以下着色模型:
Physically Based Shading(基于物理的着色)
基于物理的着色(PBS)通过基于物理原理计算从表面反射的光量来模拟对象在现实生活中的外观。这使您可以创建逼真的对象和曲面。
该PBS模型遵循两个原则:
节能-表面反射的光永远不会超过入射光的总和。唯一的例外是当物体发光时。例如,霓虹灯。微观几何-表面具有微观层次的几何。一些对象具有光滑的微几何形状,这使它们具有镜面般的外观。其他对象的几何形状很粗糙,这使它们看起来更暗淡。在URP中,您可以模拟渲染对象表面的平滑度。
当光线照射到渲染对象的表面时,一部分光线被反射,一部分光线被折射。反射的光称为镜面反射。这取决于摄像机的方向和光线照射表面的点(也称为入射角)而变化。在此着色模型中,镜面高光的形状使用GGX函数近似。
对于金属物体,表面会吸收并改变光。对于非金属物体(也称为介电物体),表面反射部分光。
光衰减仅受光强度影响。这意味着您无需增加光的范围来控制衰减。
以下URP着色器使用基于物理的着色:
注意:此着色模型不适用于低端移动硬件。如果您要定位此硬件,则将着色器与Simple Shading模型一起使用。
要阅读有关基于物理的渲染的更多信息,请参阅Marmoset上的Joe Wilson的演练。
Simple shading(简单着色)
此着色模型适用于风格化的视觉效果或适用于功能较弱的平台上的游戏。使用此着色模型,材质并不是真正的真实照片级。着色器不节省能量。此着色模型基于Blinn-Phong模型。
在此简单着色模型中,材质反射漫反射光和镜面光,并且两者之间没有关联。从材质反射的漫反射和镜面反射光的量取决于您为材质选择的属性,因此总反射光可能会超过总入射光。镜面反射仅随相机方向而变化。
光衰减仅受光强度影响。
以下URP着色器使用简单着色:
Baked Lit 着色
Baked Lit着色模型没有实时照明。材质可以从光照贴图或光照探针接收烘焙的照明。这以较小的性能成本为场景增加了一些深度。具有此着色模型的游戏可以在功能较弱的平台上运行。
URP Baked Lit 着色器是唯一使用Baked Lit 着色模型的着色器。
Shaders with no lighting(没有照明的着色器)
URP附带了一些Unlit的着色器。这意味着它们没有方向灯,也没有烘烤的照明。因为没有光照计算,所以这些着色器比带光照的着色器编译速度更快。如果事先知道您的游戏对象或视觉不需要照明,请选择Unlit着色器,以节省最终产品的计算时间和构建时间。
以下URP着色器没有照明:
2.Complex Lit Shader
Complex Lit Shader包含Lit shader的所有功能,并增加了高级材质功能。此着色器中的某些功能可能会占用更多资源,并且需要Unity Shader Model 4.5硬件。
在“延迟渲染路径”中,URP使用“向前渲染路径”来渲染具有Complex Lit Shader的对象。如果目标平台的硬件不支持Complex Lit Shader中的功能,则URP会使用Lit着色器。
> 在编辑器中使用Complex Lit Shader
要选择和使用此着色器:
> 界面概述
此着色器的Inspector窗口包含以下元素:
Surface Options
Surface Inputs
Advanced
Surface Options
Surface Options控制URP如何在屏幕上渲染材质。
属性 | 描述 |
---|---|
Workflow Mode | 使用此下拉菜单选择适合您的“Metallic(金属)”和“Specular(镜面)”纹理的工作流程。 做出选择后,Inspector其余部分中的主要Texture选项现在将遵循您选择的工作流程。有关金属或镜面工作流程的信息,请参见Unity内置Standard Shader的本手册页面。 |
Surface Type | 使用此下拉菜单可将“Opaque”或“Transparent”表面类型应用于材质。这决定了URP渲染材质的渲染路径。不透明的表面类型始终完全可见,无论它们背后是什么。URP首先渲染不透明的材质。透明表面类型受其背景的影响,并且可以根据您选择的透明表面类型的类型而变化。URP在不透明对象之后的单独通道中渲染透明材质。如果选择Transparent,则将出现“Blending Mode”下拉列表。 |
Blending Mode | 使用此下拉列表可以确定URP如何通过将材质与背景像素混合来计算透明材质的每个像素的颜色。 Alpha(透明):使用材质的Alpha值来更改对象的透明度。 0是完全透明的。 1看起来是完全不透明的,但是在透明渲染过程中仍将渲染材质。这对于希望完全可见但又会随着时间消逝的视觉效果(如云)很有用。 Premultiply(预乘):会像Alpha一样对材质应用类似的效果,但是即使表面是透明的也可以保留反射和高光。这意味着仅反射光可见。例如,透明玻璃。 |
Render Face | 使用此下拉列表可以确定要渲染几何体的哪一侧。 Front Face :渲染几何图形的正面并剔除背面。这是默认设置。 Back Face :渲染几何图形的正面并剔除该正面。 Both :使URP渲染几何图形的两个面。这对于较小的扁平物体(例如树叶)很有用,在这种情况下,您可能希望两侧都可见。 |
Alpha Clipping | 使您的材质像Cutout Shader一样工作。使用此选项可在不透明区域和透明区域之间创建具有硬边的透明效果。例如,创建草叶。为实现此效果,URP不会渲染低于指定阈值的Alpha值,该阈值在启用Alpha Clipping时出现。您可以通过移动滑块来设置阈值,该滑块接受0到1之间的值。所有高于阈值的值都是完全不透明的,低于阈值的所有值都是不可见的。例如,阈值0.1表示URP不会渲染低于0.1的alpha值。默认值为0.5。 |
Receive Shadows | 勾选此框以使您的游戏对象可以被其他对象投射阴影。如果取消选中此框,则游戏对象上将没有阴影。 |
Surface Inputs
表面输入描述表面本身。例如,您可以使用这些属性使表面看起来潮湿,干燥,粗糙或光滑。
注意:如果您习惯使用内置Unity渲染管道中的“Standard Shader”,则这些选项类似于Material Editor中的Main Maps设置。
属性 | 描述 |
---|---|
Base Map | 向表面添加颜色,也称为漫反射贴图。要将纹理分配给“Base Map”设置,请单击其旁边的对象选择器。这将打开资源浏览器,您可以在其中从项目的纹理中选择。或者,您可以使用颜色选择器。设置旁边的颜色在您指定的纹理上方显示色彩。要分配其他色调,可以单击此色样。如果在“Surface Options”下选择“Transparent”或“ Alpha Clipping”,则材质将使用纹理的Alpha通道或颜色。 |
Metallic / Specular Map | 在Surface Options中显示所选Workflow Mode的贴图输入。 对于“Metallic Map”工作流程,该贴图从上面分配的“Base Map”中获取颜色。使用滑块控制表面的金属外观。 1是完全金属的,例如银或铜,0是完全电介质的,例如塑料或木头。对于肮脏或腐蚀的金属,通常可以使用介于0和1之间的值。 对于“Specular Map”,可以通过单击旁边的对象选择器来为其分配纹理。这将打开资源浏览器,您可以在其中从项目的纹理中选择。或者,您可以使用颜色选择器。 对于这两个工作流程,都可以使用“Smoothness(平滑度)”滑块来控制高光在表面上的分布。 0给出较宽的粗略高光。 1会给出像玻璃一样的小而锐利的高光。两者之间的值产生半光滑的外观。例如,0.5产生类似塑料的光泽度。 使用“源”(Source)下拉菜单选择着色器从中采样平滑度贴图的位置。选项包括:Metallic Alpha(来自金属贴图的alpha通道)/Specular Alpha(来自镜面贴图的alpha通道)和Albedo Alpha(来自基础贴图的alpha通道)。默认值为“Metallic Alpha”。 如果选定的源具有Alpha通道,则着色器将对该通道进行采样,并将每个采样乘以“平滑度”值。 |
Normal Map | 向表面添加法线贴图。使用法线贴图,可以添加表面细节,例如凹凸,划痕和凹槽。要添加贴图图,请单击其旁边的对象选择器。法线贴图拾取环境中的环境照明。 设置旁边的浮点值是法线贴图效果的乘数。较低的值会降低法线贴图的效果。较高的值会产生更强的效果。 |
Height Map | URP实现了视差贴图技术,该技术使用高度图通过移动可见表面纹理的区域来实现表面级别的遮挡效果。要添加贴图,请单击其旁边的对象选择器。 设置旁边的浮点值是高度图效果的乘数。较低的值会降低高度图的效果。较高的值会产生更强的效果。 |
Occlusion Map | 选择一个遮挡图。这可以模拟环境光和反射产生的阴影,从而使光线看起来更真实,因为更少的光线到达对象的角落和缝隙。要选择遮挡图,请单击其旁边的对象选择器。 |
Clear Coat | 选择此复选框以启用“Clear Coat(透明涂层)”功能。该功能增加了一个额外的材质层,该层模拟了基础材质顶部的透明和薄涂层。该特征会稍微影响基础材质的颜色和平滑度值。透明涂层的折射率(IOR)为1.5。 Performance impact(性能影响):渲染透明涂层的成本大约是渲染基础材料的两倍,因为照明是每层评估一次。 Mask(遮罩):此属性定义效果的强度:0-无效果,1-最大效果。将Mask值设置为0不会禁用该功能。 Smoothness(平滑度):此属性定义高光在表面上的分布。 0给出较粗的高光。 1会给人以玻璃般清晰的高光。 遮罩属性的左侧有“透明涂层”贴图属性。通道具有以下映射: Red: Mask属性。 Green: Smoothness属性. 如果存在“透明涂层”贴图,则URP将贴图的像素值乘以Mask属性的值。 |
Emission | 使表面看起来像在发光。启用后,将显示“Emission Map”和“Emission Color”设置。 要分配Emission Map,请单击其旁边的对象图片。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。 如果您尚未分配Emission Map,则Emission设置仅使用您在Emission Color中分配的色度。 如果未启用Emission,则URP会将Emission设置为黑色,并且不计算Emission。 |
Tiling | 一个2D乘数值,根据U和V轴缩放纹理以适合网格。这对于地板和墙壁等表面非常有用。默认值为1,表示不缩放。设置较高的值可使“纹理”在整个网格中重复。设置较低的值以拉伸纹理。尝试不同的值,直到达到所需的效果。 |
Offset | 将纹理放置在网格上的2D偏移量。要调整网格上的位置,请在U轴或V轴上移动“纹理”。 |
Detail Inputs
使用Detail Inputs设置可向表面添加其他细节。
要求:GPU支持2.5或更高版本的着色器。
属性 | 描述 |
---|---|
Mask | 选择一个纹理,该纹理定义Unity将Detail maps覆盖在Surface Inputs maps上的区域。Mask使用所选纹理的Alpha通道。 “Tiling”和“Offset”设置对Mask没有影响。 |
Base Map | 选择包含表面细节的纹理。Unity使用overlay mode(叠加模式)将此贴图与Surface Base Map混合。 |
Normal Map | 选择包含法线向量数据的纹理。使用法线贴图添加诸如凹凸,划痕和凹槽的表面细节。 使用设置旁边的滑块更改贴图效果的强度。默认值是1。 |
Tiling | 使用此设置可沿U轴和V轴在网格上缩放“Base Map”和“Normal Map”,以使贴图最适合网格。默认值为1。选择一个大于1的值可使贴图在网格上重复。设置一个小于1的值以拉伸地图。 |
Offset | 沿U和V轴在网格上移动Base Map和Normal Map的偏移量。 |
Advanced
高级设置会影响渲染的基础计算。它们在您的表面上没有可见的效果。
属性 | 描述 |
---|---|
Specular Highlights | 启用此选项可以使材质具有直接照明的镜面高光,例如,Directional,Point和Spot。这意味着您的材质会反射这些光源发出的光。禁用此选项可省去这些高光计算,因此您的着色器渲染速度更快。默认情况下,启用此功能。 |
Environment Reflections | 使用最近的Reflection Probe(反射探针)对反射进行采样,或者,如果已在Lighting窗口中设置了一个反射探针,则使用Lighting Probe(照明探针)。如果禁用此选项,则将减少Shader计算,但这也意味着您的表面没有反射。 |
Enable GPU Instancing | 尽可能使一批具有相同几何形状和材质的URP渲染网格物体。这样可以加快渲染速度。如果网格物体具有不同的材质或硬件不支持GPU实例化,则URP无法批量渲染网格物体。 |
Priority | 使用此滑块确定材质的时间顺序。URP首先渲染具有更高值的材质。通过使管线首先在其他材质之前渲染材质,您可以使用它来减少设备上的透支,因此不必两次绘制重叠区域。这类似于内置Unity渲染管道中的渲染队列。 |
Channel packing(通道填充)
此着色器使用通道填充,因此可以将单个RGBA纹理用于金属,平滑度和遮挡属性。使用纹理打包时,只需要将一个纹理加载到内存中,而不必将三个单独的纹理加载到内存中。当您在Substance或Photoshop等程序中编写纹理贴图时,可以像这样打包贴图:
Base Map
Channel | Property |
---|---|
Red | Metallic |
Green | Occlusion |
Blue | None |
Alpha | Smoothness |
Clear Coat Map
Channel | Property |
---|---|
Red | Mask |
Green | Smoothness |
Blue | None |
Alpha | None |
3.Lit
Lit Shader可让您以逼真的质量渲染真实的表面,例如石材,木材,玻璃,塑料和金属。您的光线水平和反射看起来栩栩如生,并且在各种光照条件下(例如明亮的阳光或黑暗的洞穴)都可以正确反应。该着色器使用了URP中计算量最大的着色模型。
> 在编辑器中使用Lit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
属性 | 描述 |
---|---|
Workflow Mode(工作流程模式) | 使用此下拉菜单选择适合您的Metallic(金属)和Specular(镜面)纹理的工作流程。做出选择后,Inspector其余部分中的主贴图选项现在将遵循您选择的工作流程。有关金属或镜面工作流程的信息,请参见Unity内置Standard Shader的本手册页面。 |
Surface Type(表面类型) | 使用此下拉列表可将Opaque(不透明)或Transparent(透明)表面类型应用于材质。这决定了URP渲染材质的渲染路径。不透明的表面类型始终完全可见,无论它们背后是什么。 URP首先渲染不透明的材质。透明表面类型受其背景的影响,并且可以根据您选择的透明表面类型的类型而变化。URP在不透明对象之后的单独通道中渲染透明材质。如果选择透明,则将出现Blending Mode(混合模式)下拉列表。 |
Blending Mode(混合模式) | 使用此下拉列表可以确定URP如何通过将材质与背景像素混合来计算透明材质的每个像素的颜色。
|
Render Face(渲染面) | 使用此下拉列表可以确定要渲染几何体的哪一侧。
|
Alpha Clipping(阿尔法裁剪) | 使您的材质像Cutout Shader一样工作。使用此选项可创建透明效果,在不透明区域和透明区域之间具有硬边。例如,创建草叶。为了实现此效果,URP不会渲染低于指定阈值的Alpha值,该阈值在启用Alpha Clipping时出现。您可以通过移动滑块来设置阈值,该滑块接受0到1之间的值。所有高于阈值的值都是完全不透明的,低于阈值的所有值都是不可见的。例如,阈值0.1表示URP不会渲染低于0.1的alpha值。默认值为0.5。 |
Receive Shadows(接收阴影) | 勾选此框以使您的游戏对象可以被其他对象投射阴影。如果取消选中此框,则游戏对象上将没有阴影。 |
Surface Inputs
表面输入描述了表面本身。例如,您可以使用这些属性使表面看起来潮湿,干燥,粗糙或光滑。
注意:如果您习惯使用内置Unity渲染管线中的“标准着色器”,则这些选项类似于“材质编辑器”中的“主贴图”设置。
属性 | 描述 |
---|---|
Base Map | 向表面添加颜色,也称为漫反射贴图。要将纹理分配给Base Map,请单击其旁边的对象选择器。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。另外,您可以使用颜色选择器。设置旁边的颜色在您指定的纹理上方显示色彩。要分配其他色调,可以单击此色板。如果在Surface Options下选择Transparent或Alpha Clipping,则材质将使用纹理的Alpha通道或颜色。 |
Metallic / Specular Map | 在Surface Options中显示所选工作流模式的贴图输入。 Metallic Map:该贴图从上面分配的基础贴图中获取颜色。使用滑块控制表面的金属外观。 1是完全金属的,例如银或铜,而0是完全电介质的,例如塑料或木头。对于肮脏或腐蚀的金属,通常可以使用介于0和1之间的值。 Specular Map:您可以通过单击旁边的对象选择器来为其分配纹理。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。另外,您可以使用颜色选择器。 对于这两个工作流程,您都可以使用Smoothness滑块来控制高光在曲面上的分布。 0给出较宽的粗略高光。 1会产生像玻璃一样的小而锐利的高光。两者之间的值产生半光滑的外观。例如,0.5产生类似塑料的光泽度。 使用Source下拉菜单选择着色器从中采样平滑度贴图的位置。选项包括:Metallic Alpha(来自金属贴图的alpha通道)和Albedo Alpha(来自基础贴图的alpha通道)。默认值为“Metallic Alpha”。 如果选定的Source具有Alpha通道,则着色器将对该通道进行采样,并将每个采样乘以Smoothness值。 |
Normal Map | 向表面添加法线贴图。使用法线贴图,您可以添加凹凸,划痕和凹槽等表面细节。要添加贴图,请单击其旁边的对象选择器。法线贴图拾取环境中的环境照明。 设置旁边的浮点值是法线贴图效果的乘数。较低的值会降低法线贴图的效果。较高的值会产生更强的效果。 |
Occlusion Map | 选择一个遮罩图。这可以模拟环境光和反射产生的阴影,从而使光线看起来更真实,因为更少的光线到达对象的角落和缝隙。要选择遮罩图,请单击其旁边的对象选择器。 |
Emission | 使表面看起来像在发光。启用后,将显示Emission Map(发射贴图)和Emission Color(发射颜色)设置。 要分配Emission Map,请单击其旁边的对象图片。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。 对于Emission Color,您可以使用颜色选择器在颜色顶部分配色彩。可以超过100%白色,这对于熔岩之类的效果很有用,它比白色发光,同时仍然是另一种颜色。 如果您尚未分配Emission Map,则Emission设置仅使用您在Emission Color中分配的色度。 如果未启用Emission,则URP会将Emission设置为黑色,并且不计算Emission。 |
Tiling(平铺) | 一个2D乘数值,可根据U和V轴缩放“纹理”以适合网格。这对于地板和墙壁等表面非常有用。默认值为1,表示不缩放。设置较高的值可使“纹理”在整个网格中重复。设置较低的值以拉伸纹理。尝试不同的值,直到达到您想要的效果。 |
Offset(偏移) | 将纹理放置在网格上的2D偏移量。要调整网格上的位置,请在U轴或V轴上移动纹理。 |
Detail Inputs
使用Detail Inputs设置可向表面添加其他细节。
要求:GPU支持2.5或更高版本的着色器。
属性 | 描述 |
---|---|
Mask | 选择一个纹理,该纹理定义Unity将Detail maps覆盖在Surface Inputs maps上的区域。Mask使用所选纹理的Alpha通道。 “Tiling”和“Offset”设置对Mask没有影响。 |
Base Map | 选择包含表面细节的纹理。Unity使用overlay mode(叠加模式)将此贴图与Surface Base Map混合。 |
Normal Map | 选择包含法线向量数据的纹理。使用法线贴图添加诸如凹凸,划痕和凹槽的表面细节。 使用设置旁边的滑块更改贴图效果的强度。默认值是1。 |
Tiling | 使用此设置可沿U轴和V轴在网格上缩放“Base Map”和“Normal Map”,以使贴图最适合网格。默认值为1。选择一个大于1的值可使贴图在网格上重复。设置一个小于1的值以拉伸地图。 |
Offset | 沿U和V轴在网格上移动Base Map和Normal Map的偏移量。 |
Advanced
高级设置会影响渲染的基础计算。它们在您的表面上没有可见的效果。
属性 | 描述 |
---|---|
Specular Highlights(镜面高光) | 启用此选项可以使材质具有直接照明的镜面高光,例如,方向光,点光源和聚光灯。这意味着您的材质会反射这些光源发出的光。禁用此选项可省去这些高光计算,因此您的着色器渲染速度更快。默认情况下,启用此功能。 |
Environment Reflections | 使用最近的“反射探针”来采样反射,或者,如果已在Lighting窗口中设置了一个反射探针,则使用光照探针。如果禁用此选项,则将减少Shader计算,但这也意味着表面没有反射。 |
Enable GPU Instancing(启用GPU实例化) | 尽可能使一批具有相同几何形状和材质的URP渲染网格物体。这样可以加快渲染速度。如果网格物体具有不同的材质或硬件不支持GPU实例化,则URP无法批量渲染网格物体。 |
Priority(优先级) | 使用此滑块确定材质的时间顺序。 URP首先渲染具有更高值的材质。通过使管线首先在其他材质之前渲染材质,您可以使用它来减少设备上的透支,因此不必两次绘制重叠区域。这类似于内置Unity渲染管线中的渲染队列。 |
Channel packing(通道填充)
此着色器使用通道填充,因此您可以将单个RGBA纹理用于金属,平滑度和遮挡属性。使用纹理打包时,只需要将一个纹理加载到内存中,而不必将三个纹理加载到内存中。当您在Substance或Photoshop之类的程序中编写纹理贴图时,可以像这样打包贴图:
属性 | 描述 |
---|---|
Red | Metallic |
Green | Occlusion |
Blue | None |
Alpha | Smoothness |
4.Simple Lit
当性能比真实感更重要时,请使用此着色器。此着色器使用简单的光照近似值。由于此着色器无法计算出物理正确性和节能效果,因此可以快速渲染。
> 在编辑器中使用Simple Lit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
控制材质在屏幕上的呈现方式。
属性 | 描述 |
---|---|
Surface Type | 使用此下拉列表可将“不透明”或“透明”表面类型应用于“材质”。这决定了URP渲染材质的渲染路径。不透明的表面类型始终完全可见,无论它们背景是什么。 URP首先渲染不透明的材质。透明表面类型受其背景的影响,并且可以根据您选择的透明表面类型的类型而变化。 URP在不透明对象之后的单独通道中渲染透明材质。如果选择“透明”,则将出现“混合模式”下拉列表。 |
Blending Mode | 使用此下拉列表可以确定URP如何通过将材质与背景像素混合来计算透明材质的每个像素的颜色。 Alpha:使用“材质”的Alpha值来更改对象的透明度。 0是完全透明的。 1看起来是完全不透明的,但是在“透明”渲染过程中仍将渲染“材质”。这对于希望完全可见但又会随着时间消逝的视觉效果(如云)很有用。 Premultiply:将与“ Alpha”相类似的效果应用于“材质”,但是即使表面是透明的,也可以保留反射和高光。这意味着仅反射光可见。例如,透明玻璃。 Additive:在另一个表面的顶部为材质添加了一个额外的层。这对全息图很有用。 Multiply:将材质的颜色与表面后面的颜色相乘。这会产生较暗的效果,就像您透过有色玻璃查看时一样。 |
Render Face | 使用此下拉列表可以确定要渲染几何体的哪一侧。 Front:渲染几何图形的正面并剔除背面。这是默认设置。 Back:渲染几何图形的背面并剔除正面。 Both:两者都可使URP渲染几何图形的两个面。这对于较小的扁平物体(例如树叶)很有用,您可能希望在两侧都可见。 |
Alpha Clipping | 使您的材质像Cutout Shader一样工作。使用此选项可创建透明效果,在不透明区域和透明区域之间具有硬边。例如,创建草叶。为了实现此效果,URP不会渲染低于指定阈值的Alpha值,该阈值在启用Alpha Clipping时出现。您可以通过移动滑块来设置阈值,该滑块接受0到1之间的值。所有高于阈值的值都是完全不透明的,低于阈值的所有值都是不可见的。例如,阈值0.1表示URP不会渲染低于0.1的alpha值。默认值为0.5。 |
Receive Shadows | 勾选此框以使您的GameObject可以被其他对象投射阴影。如果取消选中此框,则GameObject上将没有阴影。 |
Surface Inputs
表面输入描述了表面本身。例如,您可以使用这些属性使表面看起来潮湿,干燥,粗糙或光滑。
Advanced
高级设置会影响渲染的基础计算。它们在您的表面上没有可见的效果。
属性 | 描述 |
---|---|
Specular Highlights | 启用此选项可以使材质具有直接照明的镜面高光,例如,方向光,点光源和聚光灯。这意味着您的材质会反射这些光源发出的光。禁用此选项可省去这些高光计算,因此您的着色器渲染速度更快。默认情况下,启用此功能。 |
Enable GPU Instancing | 尽可能使一批具有相同几何形状和材质的URP渲染网格物体。这样可以加快渲染速度。如果网格物体具有不同的材质或硬件不支持GPU实例化,则URP无法批量渲染网格物体。 |
Priority | 使用此滑块确定材质的时间顺序。 URP首先渲染具有更高值的材质。通过使管线首先在其他材质之前渲染材质,您可以使用它来减少设备上的透支,因此不必两次绘制重叠区域。这类似于内置Unity渲染管线中的渲染队列。 |
5.Baked Lit
在通用渲染管线(URP)中,将此着色器用于仅需要通过光照贴图和光探针进行烘焙照明的风格化游戏或应用程序。此着色器不使用基于物理的着色,也没有实时照明,因此从“着色器”代码中剥离了所有与实时相关的着色器关键字和变体,从而使计算速度更快。
> 在编辑器中使用Baked Lit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
Surface Inputs
Advanced
6.Unlit
使用此着色器可以在视觉效果中获得不需要照明的效果或独特对象。因为没有费时的光照计算或查找,所以此着色器最适合低端硬件。 Unlit Shader使用URP中最简单的着色模型
> 在编辑器中使用Unlit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
Surface Inputs
Advanced
7.Particles Lit
> 在编辑器中使用Particles Lit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
Surface Inputs
表面输入描述了表面本身。例如,您可以使用这些属性使表面看起来潮湿,干燥,粗糙或光滑。
属性 | 描述 |
---|---|
Base Map | 向表面添加颜色,也称为漫反射贴图。要将纹理分配给Base Map,请单击其旁边的对象选择器。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。另外,您可以使用颜色选择器。设置旁边的颜色在您指定的纹理上方显示色彩。要分配其他色调,可以单击此色板。如果在Surface Options下选择Transparent或Alpha Clipping,则材质将使用纹理的Alpha通道或颜色。 |
Metallic Map | 显示来自直接照明的金属高光和反射的贴图输入,例如,Directional,Point和Spot。 您可以使用Smoothness滑块控制表面上高光的散布。 0给出较宽的粗略高光。 1会给出像玻璃一样的小而锐利的高光。介于0到1之间的值会产生半光泽外观。例如,0.5产生类似塑料的光泽度。 |
Normal Map | 向表面添加法线贴图。使用法线贴图,您可以添加凹凸,划痕和凹槽等表面细节。要添加贴图,请单击其旁边的对象选择器。法线贴图拾取环境中的环境照明。 设置旁边的浮点值是法线贴图效果的乘数。较低的值会降低法线贴图的效果。较高的值会产生更强的效果。 |
Emission | 使表面看起来像在发光。启用后,将显示Emission Map(发射贴图)和Emission Color(发射颜色)设置。 要分配Emission Map,请单击其旁边的对象图片。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。 对于Emission Color,您可以使用颜色选择器在颜色顶部分配色彩。可以超过100%白色,这对于熔岩之类的效果很有用,它比白色发光,同时仍然是另一种颜色。 如果您尚未分配Emission Map,则Emission设置仅使用您在Emission Color中分配的色度。 如果未启用Emission,则URP会将Emission设置为黑色,并且不计算Emission。 |
Advanced
高级设置会影响后台渲染。它们对您的表面没有明显的影响,但会对影响性能的基础计算产生影响。
属性 | 描述 |
---|---|
Flip-Book Blending | 勾选此框可将Flip-Book框架融合在一起。这在帧数有限的纹理表动画中很有用,因为它可使动画更平滑。如果您有性能问题,请尝试将其关闭。 |
Vertex Streams | 此列表显示了此材质才能正常工作所需的顶点流。如果未正确分配顶点流,则会显示Fix Now(立即修复)按钮。单击此按钮可将正确的顶点流设置应用于分配了该材质的粒子系统。 |
Priority | 使用此滑块确定材质的时间顺序。 URP首先渲染具有更高值的材质。通过使管线首先在其他材质之前渲染材质,您可以使用它来减少设备上的透支,因此不必两次绘制重叠区域。这类似于内置Unity渲染管道中的渲染队列。 |
如果您在Surface Options下选择了Transparent表面类型,则会显示以下选项:
属性 | 描述 |
---|---|
Soft Particles | 勾选此框,使粒子在接近与写入深度缓冲区的其他几何图形的表面相交时淡出。 启用此功能后,将出现Surface Fade(表面淡化)设置: Near :设置与粒子完全透明的另一个表面的距离。这是粒子似乎完全淡出的地方。 Far :设置粒子与另一个表面完全不透明的距离。粒子在这里看起来是实心的。 距离以世界单位度量。仅适用于透明表面类型。 注意:此设置使用URP创建的CameraDepthTexture。要使用此设置,请在URP资源或渲染粒子的相机中启用Depth Texture。 |
Camera Fading | 勾选此框可使粒子在靠近相机时淡出。 启用此功能后,将显示Distance设置: Near :设置粒子与摄像机完全透明的距离。这是粒子似乎完全淡出的地方。 Far :远设置粒子与摄像机完全不透明的距离。粒子在这里看起来是实心的。 距离以世界单位度量。 注意:此设置使用URP创建的CameraDepthTexture。要使用此设置,请在URP资源或渲染粒子的相机中启用Depth Texture。 |
Distortion | 通过使粒子对在其之前绘制的对象执行折射来创建变形效果。这对于创建热波效果或扭曲粒子后面的对象很有用。 启用此功能后,将显示以下设置: Strength :控制粒子使背景失真的程度。负值与正值的作用相反。因此,如果某物以正值向右偏移,则相等的负值将其向左偏移。 Blend :控制变形的可见性。值为0时,没有可见的失真。为1时,仅可见失真效果。 注意:此设置使用URP创建的CameraDepthTexture。要使用此设置,请在URP资源或渲染粒子的相机中启用Depth Texture。 |
8.Particles Simple Lit
> 在编辑器中使用Particles Simple Lit Shader
要选择和使用此着色器:
> 界面概述
Surface Options
Surface Inputs
表面输入描述了表面本身。例如,您可以使用这些属性使表面看起来潮湿,干燥,粗糙或光滑。
属性 | 描述 |
---|---|
Base Map | 向表面添加颜色,也称为漫反射贴图。要将纹理分配给Base Map,请单击其旁边的对象选择器。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。另外,您可以使用颜色选择器。设置旁边的颜色在您指定的纹理上方显示色彩。要分配其他色调,可以单击此色板。如果在Surface Options下选择Transparent或Alpha Clipping,则材质将使用纹理的Alpha通道或颜色。 |
Specular Map | 通过直接照明控制镜面高光的颜色,例如Directional,Point和Spot。要将纹理分配给“镜面贴图”设置,请单击其旁边的对象选择器。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。或者,您可以使用颜色选择器。 在Source中,您可以在项目中选择一个Texture作为平滑度的来源。默认情况下,源是此Texture的Alpha通道。 您可以使用Smoothness滑块控制表面上高光的散布。 0给出较宽的粗略高光。 1会给出像玻璃一样的小而锐利的高光。介于0到1之间的值会产生半光泽外观。例如,0.5产生类似塑料的光泽度。 注意:如果此设置显示为灰色,请检查“高级”设置下是否启用了“镜面高光”。 |
Normal Map | 向表面添加法线贴图。使用法线贴图,您可以添加凹凸,划痕和凹槽等表面细节。要添加贴图,请单击其旁边的对象选择器。法线贴图拾取环境中的环境照明。 设置旁边的浮点值是法线贴图效果的乘数。较低的值会降低法线贴图的效果。较高的值会产生更强的效果。 |
Emission | 使表面看起来像在发光。启用后,将显示Emission Map(发射贴图)和Emission Color(发射颜色)设置。 要分配Emission Map,请单击其旁边的对象图片。这将打开资源浏览器,您可以在其中从项目的纹理中进行选择。 对于Emission Color,您可以使用颜色选择器在颜色顶部分配色彩。可以超过100%白色,这对于熔岩之类的效果很有用,它比白色发光,同时仍然是另一种颜色。 如果您尚未分配Emission Map,则Emission设置仅使用您在Emission Color中分配的色度。 如果未启用Emission,则URP会将Emission设置为黑色,并且不计算Emission。 |
Advanced
高级设置会影响后台渲染。它们对您的表面没有明显的影响,但会对影响性能的基础计算产生影响。
属性 | 描述 |
---|---|
Specular Highlights | 启用后,您的粒子将具有直接照明的镜面高光,例如Directional,Point和Spot。这意味着每个粒子都会反射这些光源发出的光。禁用时,这些高光计算不属于Shader,这会使Shader渲染速度更快。默认情况下,启用此功能。 |
Flip-Book Blending | 勾选此框可将Flip-Book框架融合在一起。这在帧数有限的纹理表动画中很有用,因为它可使动画更平滑。如果您有性能问题,请尝试将其关闭。 |
Vertex Streams | 此列表显示了此材质才能正常工作所需的顶点流。如果未正确分配顶点流,则会显示Fix Now(立即修复)按钮。单击此按钮可将正确的顶点流设置应用于分配了该材质的粒子系统。 |
Priority | 使用此滑块确定材质的时间顺序。 URP首先渲染具有更高值的材质。通过使管线首先在其他材质之前渲染材质,您可以使用它来减少设备上的透支,因此不必两次绘制重叠区域。这类似于内置Unity渲染管道中的渲染队列。 |
如果您在Surface Options下选择了Transparent表面类型,则会显示以下选项:
9.Particles Unlit
> 在编辑器中使用Particles Unlit Shader
要选择和使用此着色器:
> 界面概述
10.升级着色器
如果您的项目使用内置渲染管道中的着色器,而您想将项目切换为使用通用渲染管道,则必须将这些着色器转换为URP着色器。这是因为内置的Lit着色器与URP着色器不兼容。有关内置着色器和URP着色器之间的映射的概述,请参见“着色器映射”。
要升级内置着色器:
注意:这些更改无法撤消。升级之前,请备份您的项目。
提示:如果升级后“项目视图”中的“预览”缩略图不正确,请尝试右键单击“项目视图”窗口中的任意位置,然后选择Reimport All(全部重新导入)。
对于SpeedTree着色器,除非重新单击Generate Materials(生成材质)或Apply & Generate Materials(应用并生成材质)按钮,否则Unity不会重新生成材质。
> 着色器映射
下表显示了运行着色器升级程序时Unity内置着色器将转换为哪些URP着色器。
Unity built-in shader | Universal Render Pipeline shader |
---|---|
Standard | Universal Render Pipeline/Lit |
Standard (Specular Setup) | Universal Render Pipeline/Lit |
Standard Terrain | Universal Render Pipeline/Terrain/Lit |
Particles/Standard Surface | Universal Render Pipeline/Particles/Lit |
Particles/Standard Unlit | Universal Render Pipeline/Particles/Unlit |
Mobile/Diffuse | Universal Render Pipeline/Simple Lit |
Mobile/Bumped Specular | Universal Render Pipeline/Simple Lit |
Mobile/Bumped Specular(1 Directional Light) | Universal Render Pipeline/Simple Lit |
Mobile/Unlit (Supports Lightmap) | Universal Render Pipeline/Simple Lit |
Mobile/VertexLit | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Bumped Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Bumped Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Self-Illumin/Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Self-Illumin/Bumped Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Self-Illumin/Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Self-Illumin/Bumped Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Bumped Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Bumped Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Cutout/Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Cutout/Specular | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Cutout/Bumped Diffuse | Universal Render Pipeline/Simple Lit |
Legacy Shaders/Transparent/Cutout/Bumped Specular | Universal Render Pipeline/Simple Lit |
11.着色器剥离
Unity从一个Shader源文件编译许多Shader Variant。着色器变体的数量取决于您在着色器中包含的关键字数量。在default Shaders中,“通用渲染管线”(URP)使用一组用于照明和阴影的关键字。 URP可以排除某些Shader变体,具体取决于URP资源中激活的功能。
当您禁用URP资源中的某些功能时,管线会从构建中“剥离”相关的Shader变体。剥离着色器可为您提供更小的构建尺寸和更短的构建时间。如果您的项目永远不会使用某些功能或关键字,这将很有用。
例如,您可能有一个项目,在该项目中您从未将阴影用作平行光。如果不剥离Shader,则具有Directional阴影支持的Shader变体将保留在构建中。如果您知道根本不会使用这些阴影,则可以取消选中URP资源中的Cast Shadows以获取主要或其他方向光。然后,URP从构建中剥离这些Shader Variants。
12.编写自定义着色器
本部分包含的准则可帮助您开始编写适用于Universal Render Pipeline(URP)的着色器。
包含以下主题:
与基本着色器示例相比,每个示例都包含一些额外的信息。如果您不熟悉使用Unity的ShaderLab语言编写着色器,请考虑按照本页上的显示顺序遍历各节。
> 创建示例场景
要遵循本节中的示例:
> URP Unlit 基本着色器
本示例显示了与URP兼容的基本着色器。此着色器使用着色器代码中预定义的颜色填充网格形状。
要查看着色器的运行情况,请将以下ShaderLab代码复制并粘贴到Shader资源中。
- // This shader fills the mesh shape with a color predefined in the code.
- Shader "Example/URPUnlitShaderBasic"
- {
- // The properties block of the Unity shader. In this example this block is empty
- // because the output color is predefined in the fragment shader code.
- Properties
- { }
-
- // The SubShader block containing the Shader code.
- SubShader
- {
- // SubShader Tags define when and under which conditions a SubShader block or
- // a pass is executed.
- Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
-
- Pass
- {
- // The HLSL code block. Unity SRP uses the HLSL language.
- HLSLPROGRAM
- // This line defines the name of the vertex shader.
- #pragma vertex vert
- // This line defines the name of the fragment shader.
- #pragma fragment frag
-
- // The Core.hlsl file contains definitions of frequently used HLSL
- // macros and functions, and also contains #include references to other
- // HLSL files (for example, Common.hlsl, SpaceTransforms.hlsl, etc.).
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
-
- // The structure definition defines which variables it contains.
- // This example uses the Attributes structure as an input structure in
- // the vertex shader.
- struct Attributes
- {
- // The positionOS variable contains the vertex positions in object
- // space.
- float4 positionOS : POSITION;
- };
-
- struct Varyings
- {
- // The positions in this struct must have the SV_POSITION semantic.
- float4 positionHCS : SV_POSITION;
- };
-
- // The vertex shader definition with properties defined in the Varyings
- // structure. The type of the vert function must match the type (struct)
- // that it returns.
- Varyings vert(Attributes IN)
- {
- // Declaring the output object (OUT) with the Varyings struct.
- Varyings OUT;
- // The TransformObjectToHClip function transforms vertex positions
- // from object space to homogenous clip space.
- OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
- // Returning the output.
- return OUT;
- }
-
- // The fragment shader definition.
- half4 frag() : SV_Target
- {
- // Defining the color variable and returning it.
- half4 customColor = half4(0.5, 0, 0, 1);
- return customColor;
- }
- ENDHLSL
- }
- }
- }
片段着色器将GameObject染成深红色(RGB值(0.5,0,0))。
ShaderLab基本结构
Unity着色器以一种称为ShaderLab的特定于Unity的语言编写。
本示例中的Unity着色器具有以下块:
Shader
ShaderLab代码以Shader声明开始。
Shader "Example/URPUnlitShaderBasic"
该声明中的路径确定材质上着色器菜单中Unity着色器的显示名称和位置。 Shader.Find方法也使用此路径。
Properties
Properties块包含用户可以在材质的检查器窗口中设置的属性声明。
在此示例中,Properties块为空,因为此Unity着色器不会公开用户可以定义的任何Material属性。
SubShader
Unity着色器源文件包含一个或多个SubShader块。渲染网格时,Unity选择与目标设备上的GPU兼容的第一个SubShader。
SubShader块可以选择包含SubShader Tags块。使用Tags关键字声明一个SubShader Tags块。
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
名称为RenderPipeline的SubShader标记告诉Unity哪些渲染管道将使用此SubShader,并且UniversalPipeline的值指示Unity应该将此SubShader与URP一起使用。
要在不同的渲染管道中执行同一着色器,请创建具有不同RenderPipeline标记值的多个SubShader块。要在HDRP中执行SubShader块,请将RenderPipeline标签设置为HDRenderPipeline,要在内置渲染管道中执行该标签,请将RenderPipeline设置为空值。
有关SubShader标签的更多信息,请参见ShaderLab:SubShader Tags。
Pass
在此示例中,有一个Pass块,其中包含HLSL程序代码。有关Pass块的更多信息,请参见ShaderLab:Pass。
Pass块可以选择包含Pass标签块。有关更多信息,请参见URP ShaderLab Pass Tags。
HLSLPROGRAM
该块包含HLSL程序代码。
注意:HLSL语言是URP着色器的首选语言。
注意:URP支持CG语言。如果在着色器中添加CGPROGRAM / ENDCGPROGRAM块,则Unity会自动包括“内置渲染管线”库中的着色器。如果包括SRP着色器库中的着色器,则某些SRP着色器宏和函数可能与“内置渲染管线”着色器函数冲突。具有CGPROGRAM块的着色器与SRP Batcher不兼容。
该块包含#include声明以及对Core.hlsl文件的引用。
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
Core.hlsl文件包含常用的HLSL宏和函数的定义,还包含对其他HLSL文件的#include引用(例如,Common.hlsl和SpaceTransforms.hlsl)。
例如,HLSL代码中的顶点着色器使用SpaceTransforms.hlsl文件中的TransformObjectToHClip函数。该函数将顶点位置从对象空间转换为齐次裁剪空间:
- Varyings vert(Attributes IN)
- {
- Varyings OUT;
- OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
- return OUT;
- }
此基本HLSL代码中的片段着色器输出代码中预定义的单色:
- half4 frag() : SV_Target
- {
- half4 customColor;
- customColor = half4(0.5, 0, 0, 1);
- return customColor;
- }
具有颜色输入的URP Unlit 着色器部分显示了如何在材质的检查器窗口中添加可编辑的颜色属性。
> 具有颜色输入的URP Unlit 着色器
在此示例中,Unity着色器将Base Color属性添加到材质。您可以使用该属性选择颜色,并且着色器将用该颜色填充网格形状。
使用URP Unlit 基本着色器部分中的Unity着色器源文件,并对ShaderLab代码进行以下更改:
- Properties
- {
- _BaseColor("Base Color", Color) = (1, 1, 1, 1)
- }
此声明将带有标签Base Color的_BaseColor属性添加到Material:
BaseColor属性名称是保留名称。声明具有该名称的属性时,Unity会将此属性用作材质的主要颜色。
注意:为确保Unity着色器与SRP Batcher兼容,请在单个CBUFFER块中用UnityPerMaterial名称声明所有Material属性。有关SRP批处理程序的更多信息,请参见可编程渲染管道(SRP)批处理程序页面。
在顶点着色器之前添加以下代码:
- CBUFFER_START(UnityPerMaterial)
- half4 _BaseColor;
- CBUFFER_END
- half4 frag() : SV_Target
- {
- return _BaseColor;
- }
现在,您可以在检查器窗口的Base Color字段中选择颜色。片段着色器使用您选择的颜色填充网格。
以下是此示例的完整ShaderLab代码。
- // This shader fills the mesh shape with a color that a user can change using the
- // Inspector window on a Material.
- Shader "Example/URPUnlitShaderColor"
- {
- // The _BaseColor variable is visible in the Material's Inspector, as a field
- // called Base Color. You can use it to select a custom color. This variable
- // has the default value (1, 1, 1, 1).
- Properties
- {
- _BaseColor("Base Color", Color) = (1, 1, 1, 1)
- }
-
- SubShader
- {
- Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
-
- Pass
- {
- HLSLPROGRAM
- #pragma vertex vert
- #pragma fragment frag
-
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
-
- struct Attributes
- {
- float4 positionOS : POSITION;
- };
-
- struct Varyings
- {
- float4 positionHCS : SV_POSITION;
- };
-
- // To make the Unity shader SRP Batcher compatible, declare all
- // properties related to a Material in a a single CBUFFER block with
- // the name UnityPerMaterial.
- CBUFFER_START(UnityPerMaterial)
- // The following line declares the _BaseColor variable, so that you
- // can use it in the fragment shader.
- half4 _BaseColor;
- CBUFFER_END
- Varyings vert(Attributes IN)
- {
- Varyings OUT;
- OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
- return OUT;
- }
-
- half4 frag() : SV_Target
- {
- // Returning the _BaseColor value.
- return _BaseColor;
- }
- ENDHLSL
- }
- }
- }
> 绘制纹理
在此示例中,Unity着色器在网格上绘制纹理。
将URP Unlit着色器部分中的Unity着色器源文件与颜色输入一起使用,并对ShaderLab代码进行以下更改:
- Properties
- {
- _BaseMap("Base Map", 2D) = "white"
- }
在Properties块中声明纹理属性时,Unity会将带有标签Base Map的_BaseMap属性添加到材质,并添加Tiling和Offset控件。
_BaseMap属性名称是保留名称。声明具有该名称的属性时,Unity会将该属性用作Material的主要纹理。
float2 uv : TEXCOORD0;
- TEXTURE2D(_BaseMap);
- SAMPLER(sampler_BaseMap);
TEXTURE2D和SAMPLER宏在Core.hlsl中引用的文件之一中定义。
注意:为确保Unity着色器与SRP Batcher兼容,请在单个CBUFFER块中用UnityPerMaterial名称声明所有Material属性。有关SRP批处理程序的更多信息,请参见可编程渲染管道(SRP)批处理程序页面。
- CBUFFER_START(UnityPerMaterial)
- float4 _BaseMap_ST;
- CBUFFER_END
OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);
在Macros.hlsl文件中定义了TRANSFORM_TEX宏。 #include声明包含对该文件的引用。
- half4 frag(Varyings IN) : SV_Target
- {
- half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);
- return color;
- }
现在,您可以在Inspector窗口的Base Map字段中选择一个纹理。着色器在网格上绘制该纹理。
以下是此示例的完整ShaderLab代码。
- // This shader draws a texture on the mesh.
- Shader "Example/URPUnlitShaderTexture"
- {
- // The _BaseMap variable is visible in the Material's Inspector, as a field
- // called Base Map.
- Properties
- {
- _BaseMap("Base Map", 2D) = "white"
- }
-
- SubShader
- {
- Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
-
- Pass
- {
- HLSLPROGRAM
- #pragma vertex vert
- #pragma fragment frag
-
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
-
- struct Attributes
- {
- float4 positionOS : POSITION;
- // The uv variable contains the UV coordinate on the texture for the
- // given vertex.
- float2 uv : TEXCOORD0;
- };
-
- struct Varyings
- {
- float4 positionHCS : SV_POSITION;
- // The uv variable contains the UV coordinate on the texture for the
- // given vertex.
- float2 uv : TEXCOORD0;
- };
-
- // This macro declares _BaseMap as a Texture2D object.
- TEXTURE2D(_BaseMap);
- // This macro declares the sampler for the _BaseMap texture.
- SAMPLER(sampler_BaseMap);
-
- CBUFFER_START(UnityPerMaterial)
- // The following line declares the _BaseMap_ST variable, so that you
- // can use the _BaseMap variable in the fragment shader. The _ST
- // suffix is necessary for the tiling and offset function to work.
- float4 _BaseMap_ST;
- CBUFFER_END
- Varyings vert(Attributes IN)
- {
- Varyings OUT;
- OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
- // The TRANSFORM_TEX macro performs the tiling and offset
- // transformation.
- OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);
- return OUT;
- }
-
- half4 frag(Varyings IN) : SV_Target
- {
- // The SAMPLE_TEXTURE2D marco samples the texture with the given
- // sampler.
- half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);
- return color;
- }
- ENDHLSL
- }
- }
- }
>可视化法线向量
在此示例中,Unity着色器使网格上的法线矢量值可视化。
使用URP Unlit 基本着色器部分中的Unity着色器源文件,并对ShaderLab代码进行以下更改:
- struct Attributes
- {
- float4 positionOS : POSITION;
- // Declaring the variable containing the normal vector for each vertex.
- half3 normal : NORMAL;
- };
- struct Varyings
- {
- float4 positionHCS : SV_POSITION;
- // The variable for storing the normal vector values.
- half3 normal : TEXCOORD0;
- };
本示例将法向矢量的三个分量用作每个片元的RGB颜色值。
- half4 frag(Varyings IN) : SV_Target
- {
- half4 color = 0;
- color.rgb = IN.normal;
- return color;
- }
胶囊体的一部分是黑色的。这是因为在这些点上,法向矢量的所有三个分量均为负。下一步显示了如何在这些区域中渲染值。
color.rgb = IN.normal;
到这行:
color.rgb = IN.normal * 0.5 + 0.5;
现在,Unity将法线向量值渲染为网格上的颜色。
以下是此示例的完整ShaderLab代码。
- // This shader visuzlizes the normal vector values on the mesh.
- Shader "Example/URPUnlitShaderNormal"
- {
- Properties
- { }
-
- SubShader
- {
- Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
-
- Pass
- {
- HLSLPROGRAM
- #pragma vertex vert
- #pragma fragment frag
-
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
-
- struct Attributes
- {
- float4 positionOS : POSITION;
- // Declaring the variable containing the normal vector for each
- // vertex.
- half3 normal : NORMAL;
- };
-
- struct Varyings
- {
- float4 positionHCS : SV_POSITION;
- half3 normal : TEXCOORD0;
- };
-
- Varyings vert(Attributes IN)
- {
- Varyings OUT;
- OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
- // Use the TransformObjectToWorldNormal function to transform the
- // normals from object to world space. This function is from the
- // SpaceTransforms.hlsl file, which is referenced in Core.hlsl.
- OUT.normal = TransformObjectToWorldNormal(IN.normal);
- return OUT;
- }
-
- half4 frag(Varyings IN) : SV_Target
- {
- half4 color = 0;
- // IN.normal is a 3D vector. Each vector component has the range
- // -1..1. To show all vector elements as color, including the
- // negative values, compress each value into the range 0..1.
- color.rgb = IN.normal * 0.5 + 0.5;
- return color;
- }
- ENDHLSL
- }
- }
- }
13.URP ShaderLab Pass标签
> URP Pass标签:LightMode
使用此标签的值,管线可以确定在执行“渲染管线”的不同部分时要使用哪个通道。
如果您未在Pass中设置LightMode标签,则URP会为该Pass使用SRPDefaultUnlit标签值。
在URP中,LightMode标签可以具有以下值。
Property | Description |
---|---|
UniversalForward | 通过可渲染对象的几何形状并评估所有光贡献。 URP在正向渲染路径中使用此标记值。 |
UniversalGBuffer | 通过可渲染对象几何形状,而无需评估任何光贡献。 URP在延迟渲染路径中使用此标记值。 |
UniversalForwardOnly | 与LightMode具有UniversalForward值时类似,Pass渲染对象的几何形状并评估所有光的贡献。与UniversalForward的不同之处在于,URP可以将Pass用于正向和延迟渲染路径。 如果URP使用“延迟渲染路径”时某个Pass必须使用“正向渲染路径”渲染对象,则使用此值。例如,如果URP使用“延迟渲染路径”渲染场景,并且场景包含具有不适合GBuffer的着色器数据的对象(例如“透明涂层”法线),请使用此标签。 如果着色器必须同时在“正向渲染路径”和“延迟渲染路径”中进行渲染,请使用UniversalForward和UniversalGBuffer标记值声明两个Pass。如果无论URP渲染器使用什么渲染路径,着色器都必须使用正向渲染路径进行渲染,则仅声明LightPass标记设置为UniversalForwardOnly的Pass。 |
Universal2D | 通过可渲染对象并评估2D光贡献。 URP在2D渲染器中使用此标记值。 |
ShadowCaster | 通过可从灯光角度将对象深度渲染到阴影贴图或深度纹理中。 |
DepthOnly | Pass仅将从摄像机的角度来看的深度信息渲染为深度纹理。 |
Meta | 仅当在Unity编辑器中烘焙光照贴图时,Unity才执行此Pass。构建Player时,Unity从着色器中删除此Pass。 |
SRPDefaultUnlit | 渲染对象时,请使用此LightMode标记值绘制一个额外的Pass。应用示例:绘制对象轮廓。此标记值对于“正向”和“延迟”渲染路径均有效。 当Pass不具有LightMode标签时,URP会将此标签值用作默认值。 |
注意:URP不支持以下LightMode标记:Always,ForwardAdd,PrepassBase,PrepassFinal,Vertex,VertexLMRGBM,VertexLM。
本节包含有关如何自定义和扩展URP中的呈现过程的信息。
1.beginCameraRendering event
此页面上的示例显示如何使用beginCameraRendering事件运行自定义方法。
> beginCameraRendering event概述
Unity会在渲染每一帧中的每个活动Camera之前引发beginCameraRendering event。如果摄像头处于非活动状态(例如,如果在“摄像头游戏对象”上清除了“摄像头组件”复选框),则Unity不会为此摄像头引发beginCameraRendering event。
当您为该事件订阅方法时,可以在Unity呈现Camera之前执行自定义逻辑。自定义逻辑的示例包括渲染额外的“摄像机”以渲染“纹理”,并将这些“纹理”用于诸如平面反射或监视摄像机视图的效果。
RenderPipelineManager类中的其他事件提供了更多自定义URP的方法。您也可以将这些事件中使用本文所述的原理。
> beginCameraRendering event示例
本示例演示如何将方法预订到beginCameraRendering event。要遵循此示例中的步骤,请使用通用项目模板创建一个新的Unity项目。
- using UnityEngine;
- using UnityEngine.Rendering;
-
- public class URPCallbackExample : MonoBehaviour
- {
- // Unity calls this method automatically when it enables this component
- private void OnEnable()
- {
- // Add WriteLogMessage as a delegate of the RenderPipelineManager.beginCameraRendering event
- RenderPipelineManager.beginCameraRendering += WriteLogMessage;
- }
-
- // Unity calls this method automatically when it disables this component
- private void OnDisable()
- {
- // Remove WriteLogMessage as a delegate of the RenderPipelineManager.beginCameraRendering event
- RenderPipelineManager.beginCameraRendering -= WriteLogMessage;
- }
-
- // When this method is a delegate of RenderPipeline.beginCameraRendering event, Unity calls this method every time it raises the beginCameraRendering event
- void WriteLogMessage(ScriptableRenderContext context, Camera camera)
- {
- // Write text to the console
- Debug.Log($"Beginning rendering the camera: {camera.name}");
- }
- }
注意:订阅事件时,您的处理程序方法(在本示例中为WriteLogMessage)必须接受事件委托中定义的参数。在此示例中,事件委托是RenderPipeline.BeginCameraRendering,它需要以下参数:<ScriptableRenderContext,Camera>。
1.Lights 2D简介
在选择了2D Renderer的情况下使用URP时,Light 2D组件引入了一种将2D优化的照明应用于Sprite的方法。
您可以使用Light 2D组件从几种不同的光源类型中进行选择。包中当前可用的光源类型为:
该软件包包括2D Renderer Data资源,其中包含Blend Styles(混合样式)参数,并允许您为项目最多创建四个自定义Light操作。
注意:如果启用了实验性2D渲染器(菜单:Graphics Settings >在Scriptable Render Pipeline Settings下添加2D渲染器资源),则与URP资源中的3D渲染相关的某些选项对最终应用程序或游戏没有任何影响。
2.要求和设置
安装以下编辑器和程序包版本以开始使用2D渲染器:
> 2D渲染器设置
1.使用2D模板创建一个新项目。
2.通过转到Asset菜单并选择Create > Rendering > Universal Render Pipeline > Pipeline Asset,然后命名资源来创建新的管道资源。
3.转到Assets > Create > Rendering > Universal Render Pipeline > 2D Renderer,创建一个新的2D Renderer。在提示时给它起一个名字。
4.将2D渲染器指定为渲染管线资源的默认渲染器。将2D渲染器资源拖动到“渲染器列表”上,或选择圆圈图标以打开“选择对象”窗口,然后从列表中选择2D渲染器资源。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。