Unity-HDRP-Sense-4

本文详细介绍了如何在Unity Hub中创建基于高清渲染管线(HDRP)的项目,包括安装Unity Hub、创建HDRP项目,并通过示例项目了解HDRP相关概念和模块,如Unity Package Manager、HDRP实例场景解析等。Unity Package Manager是管理Unity模块的关键工具,而HDRP项目模板会自动配置HDRP资源。示例项目展示了HDRP的基础组件,如主相机、平行光、天空和雾效、后处理、光照探针组、反射探针等,帮助读者理解HDRP的关键组件和概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity-HDRP-Sense-4

1.4 Unity HDRP项目设置

1.4.1 创建一个基于高清渲染管线(HDRP)的Unity项目

1.安装Unity Hub

Unity Hub是用于管理Unity编辑器安装(可以同时安装多个版本的Unity编辑器)、管理指定版本Unity编辑器的模块,以及获取官方最新讯息和学习资料的一站式入口。可以通过Unity中国区官网下载安装UnityHub

(1)Hub社区界面
在这里插入图片描述

在这里你可以:

  • 查看最新的技术分享文章、直播预告和直播回放。
  • 收到最新的Unity中国区技术分享推送信息
  • 获取最新的资源商店促销信息。

(2)Hub项目界面

你可以在这个界面(见图1.11)管理本地电脑和保存在Unity云端服务器的所有项目。可通过 “添加” 按钮把本地硬盘上的Unity项目添加到项目列表中。
在这里插入图片描述

Hub管理多个Unity版本的优势在这里得到充分的体现:你可以通过 “Unity版本” 这一列,将相关项目的Unity版本切换到其他版本( 注:项目在Unity版本之间切换也要注意项目中所有功能模块和脚本API的版本兼容问题 )。

(3)Hub学习界面

学习界面(见图1.12)提供Unity全球教育团队为广大开发者精心制作的免费项目和教程,帮助开发者通过实际项目快速上手使用Unity。
在这里插入图片描述

(4)Hub安装界面

在此界面(见图1.13)中你可以选择安装所需的Unity版本,也可以添加之前通过独立Unity安装包已经安装到本地机器上的Unity版本。
在这里插入图片描述

2.创建一个新的Unity HDRP项目

打开Unity Hub的项目界面,在项目界面上单机 “ 新建 ” 按钮右侧的三角形按钮,打开Unity版本选择列表,如图1.14所示
在这里插入图片描述

选择列表中的2019.4.10f1。在打开的创建新项目界面中,选择High Definition RP 作为项目模板,输入项目名称,选择本地文件夹位置,最后单机 “ 创建 ” 按钮,如图1.15所示。
在这里插入图片描述

经过几分钟的等待(导入速度和你电脑的CPU运行速度相关,因为项目创建过程涉及素材导入)。新项目就创建成了。项目创建完成以后,Unity编辑器打开的默认界面如图1.16所示。
在这里插入图片描述

可以看到,通过HDRP项目模板来创建项目,Unity会为我们自动设置好所有的HDRP高清渲染管线资源。
该项目中也包含一个简单的实力场景。场景中包含一个相机、一盏平行光灯(Directional Light)、最基本的天空和雾的Volume(关于什么是Volume,稍后会详细解释)、后处理Volume、光照探针组(Light Probe Group)、反射探针(Reflection Probe),以及一个模型。(注:如果你熟悉HDRP使用方法,可以直接将示例项目删除。不过建议保留项目窗口中的HDRPDefualtResource、Resets和Settings三个文件夹,否则需要手动生成HDRP渲染管线相关的配置文件。)

1.4.2 通过示例项目了解HDRP相关的概念和模块

在我们打开本书的项目进行具体操作之前,有必要把Unity中与HDRP相关的概念和模块先熟悉一边,特别是其中的关键专有名词。只有知道了他们的具体含义,才不至于在接下来的教程迷失方向。

1.Unity Package Manager(Unity包管理器)

你可以不了解Unity的物理系统,不知道怎么编写Unity的着色器,因为有可能你用不到这些功能。但是你一定要了解什么是Package Manager。因为它长官者Unity编辑器提供的众多功能。从最基本的可编程渲染管线到专门的模块,比如Timeline或者Cinemachine(虚拟相机系统)。而且随着Unity模块化的加速发展,越来越多的模块被才分出来放入了Package Manager,而更多还未发布的模块只会通过Package Manager来发布。

可以通过Windows->Package Manager打开其界面(如图1.17所示)。Package Manager的界面非常直观:左侧是当前Unity提供的Package(包)。选中某个包以后,右侧会展示与其相关的介绍、文档链接、依赖包(Dependencies)、一个或者多个实例工程导入按钮(Samples)或者额外的素材资源。在界面的右下角可以看到安装(Install)、更新(Uptodate)和移除(Remove)按钮,用于对选中包进行相关操作。
在这里插入图片描述

目前Package Manager提供两种包:验证包(verified)和预览包(preview)。
默认打开的Package Manager 界面中不会显示预览包。你可以单机顶部居中的按钮,在下拉菜单中选择Show Preview Packages命令显示所有预览包,如图1.18所示。
在这里插入图片描述
注:在Unity2020或者以上版本中,Show preview packages命令被移到了Project Setting 窗口中。
执行Show preview package命令以后,所有处于预览状态的包会在左侧界面显示从出来如1.19所示
在这里插入图片描述
验证包和预览包的区别如下。

  • 验证包(vertified):比如标签为 “2019.3 vertified ”的验证包,意味着可以在Unity2019.3.x的 版本中,将此模块应用到正式产品开发中。

  • 预览包(preview):如果标签为 “preview” 那么这个模块就还处于在预览状态。预览包还处于在开放阶段,但是已经可以可以使用。发布这个包的目的是希望试用的开发者能够提供反馈,让Unity可以进行快速迭代、尽快将其完善成验证包。

    我们来看一下当前项目用到的几个包。如图1.20所示,示例工程其实只用到了High Definin RP这个包,该包用于高清渲染管线的配置和运行。其他的包如果不需要可以直接删除。
    在这里插入图片描述

2.HDRP实例场景解析

示例场景包含一下组成部分。
注:如果你对Unity基本概念,比如Hierachy和Project窗口、GameObject还不熟悉,建议先了解Unity的基础只是在继续本书的阅读。

  • 主相机:用于控制最总看到的画面。
  • 平行光:场景中的直接光源,用于模拟太阳光
  • 天空和雾效:提供用于基于HDRI光照,控制曝光度、雾效等。
  • 后处理:可用于控制诸如白平衡、曝光、镜头畸形等效果。这些效果将作用与整个画面。
  • 光照探针组:通过使用一组Light Probe(光照探针)为场景提供反射信息。此场景使用了三个反射探针,用于为不同的区域提供反射信息。

如图1.21所示,虽然示例场景中的内容比较简单,但是"麻雀虽小,五脏俱全",因为一个HDRP高清实时渲染场景该有的组件它都具备了,所以我们没可以拿这个场景来介绍上述列出的各个组件。理解这些组件,以免以后因为场景复杂而感到迷惑

(1)主相机
在示例场景中,Main Camera 是我们得主相机,也是唯一的相机。主相机负责显示最终画面。图1.22所示是选中MainCamerazhi之后,在Inspector窗口看到的相机组件信息。
在这里插入图片描述
在这里插入图片描述

我们可以通过相机的组件列表来了解Unity的组件系统。大家可以看到,相机组件列表最顶部的组件时Transform组件,其中包含Position、Rotation和Scale三个可调节的属性。Transform组件是每一个Unity中的GameObject(Unity场景中最基本的组成元素)必备的组件,用于移动旋转、旋转和缩放物体。因为相机在场景中是不可见的,所以Scale属性对它没有意义,但我们可以移动旋转它。

第二个组件是Camera,这个组件包含了所有和相机有关的功能,包括设置背景颜色(Background Color)、提出遮罩(CullingMask,用于控制此相机要渲染的物体,可以为每个物体设置不同的层)和设置可视角度(Field of View)等。
如图1.22所示,我们可以看到一个Physical组,该组中包含Unity中所谓的 “物理相机”。”物理相机“ 实际上就用于模拟真实世界相机的参数,让开发者可以更容易的将比如你可以通过物理相机控制Sensor Type(传感器类型)
通过以上的描述,大家应该对相机有一个初步的印象。Unity场景中最基本的组成单元是GameObject。每个GameObject必备的组件是Tarnsform。当你向GameObject中添加了不同的组件后,这个GameObject就具备了所添加组件赋予的能力(比如添加Gamera组件后他就变成了一个相机)。反之我们也可以移除这些添加的组件的物体,此时为一个空的GameObject,如图1.23所示
在这里插入图片描述

(3)平行光
示例场景中只有一盏平行光(Directional Light),用于模拟太阳光。后面会详细讲解HDRP中各类类型的光源,以及如何正确设置灯光的亮度、阴影及体积光等效果。

(4)天空和雾效
除非我们是一个完全封闭的环境中,比如一个封闭的太空长或者地下城,否则都要考虑来自天空的光照,包括雾效。HDRP使用Volume框架将天空的光照、阴影、后处理等设置集中到了一起。在场景中有两个Volume:Sky and Fog Volume 和 Post Process Volume。这两个Volume分别负责天空、雾效与后处理效果。我们先来卡一下Sky and Fog Volume,如图1.24所示。
在这里插入图片描述

  • Volume组件:Volume框架其实就是一个组件,它和Camera组件本质是一样的,因为两者多可以被添加到GameObject中,为其添加功能。

  • Mode(模式):可以将Volume设置为Global(全局)模式或者Local(本地)模式。如果设置为全局模式,则Volume上的效果默认会影响整个场景。设置为本地模式则可以为其指定不同形态的碰撞体,比如Box、Sphere等。Volume上的效果只会在相机与Volume上的碰撞体发生碰撞时被触发。

例如如果你的场景中有多个房间,每个房间朝向是不一样的,则你可以为每个房间设置一个本地模式的Volume,比如朝北房间时偏冷色调,朝南房间因为有阳光照射的碰撞体发生碰撞,而出发偏冷色调的本地Volume,所以整个画面看上去就是冷色调进入南房间时则用相同的机制触发偏暖色调的本地Volume,所以整个画面看上去就时冷色调。进入南房间时则用相同的机制触发偏暖色调的本地Volume,此时整个画面过度变化为暖色调。

  • Profile(配置文件):使用Volume框架的一个好处就是可以把组件和具体的设置进行分离。Volume组件上的所有设置其实来自与关联的Profile。在开始设置之前,需要先创建一个新的Volume Profile 或者关联一个已经存在的Profile。Profile是一个用Unity资源格式将自己的Profile分享给别人使用(要确保大家使用的Unity版本是互相兼容的)
    在这里插入图片描述

  • Visual Enviroment:主要用与选择天空盒的格式。可以选择None(不使用天空盒,不会有来自天空和的环境光)、Gradient Sky(使用渐变色程序化生成的简单天空盒、HDRI Sky(从关联的HDRI高动态图片采样获得天空盒光照信息)、Physical Based Sky(基于物理的程序化生成的天空盒,可以用于模拟日夜变换、大气厚度等复杂天空效果)。

  • Hdri Sky:在实力场景中,因为选择Visual Environment的Type设置为HDRI Sky以后,所以要为Volume指定一个HDRI Sky。如图1.26所示,再将Visual Enviroment的Type设置为HDRI Sky以后,需要单击Volume底部的Add Override(添加重载)按钮。接着在Sky分类的下面选择HDRI Sky
    (4)后处理

如图1.28所示,实例场景中另一个预置的Volume是Post Process Volume。
在这里插入图片描述
在这里插入图片描述
在此Volume上添加了诸如Vignette、Exposure、White Balance、ChromaticAberration这样的后处理效果。这些后处理效果会被应用于整个屏幕。你也可以单击底部的Add Override按钮添加更多的全屏后处理效果。在此添加的和偶处理效果将被保存到相关联的Profile中,如图1.29所示。
在这里插入图片描述
可能你会有疑问:既然 Sky and Fog Volume 和 Post Process Volume用了同样的Volume框架,怎么不把这两个放在一起?
答案是:可以把这两个volume合二为一,也就是只需要一个Volume关联一个Profile。不过如果合二为一的话。一方面Volume组件上的列表会变得很长,不利于后期维护。另一方面如果我们使用多Local (本地)得后处理Volume,那么就 无法灵活处理它们了。将具有不同功能得Volume进行合理得区分,将他们关联到不同得Profile,有助于后期维护和功能管理。

(5)Light Probe Group(光照探针组)

Light Probe Group由一组Light Probe(光照探针)组成。用于为场景提供高效的间接光照信息,特别适合为场景中的小物体(参与光照贴图烘培但是不从光照贴图中获取间接光信息)和动态物体提供简介光信息,如图1.30所示 ,场景中光照探针(场景中用黄色小球表示)连结而成,覆盖了整个场景。随后会详细讲解光照探针的原理和用法

在这里插入图片描述
6)Reflection Probe(反射探针)

在Reflection Probes这个GameObject下有三个子物体,这三个子物体对应的是场景中的三个反射探针,如图1.31所示。
反射探针通过对自身周围的场景进行采样,可以 为场景中的相关模型提供高效的反射信息 ,让场景中的模型表面哟能够有逼真的反射效果。
当前场景中的三个反射探针,因为摆放着不同的位置,所以各自获得的反射信息是不一样的,比如1号反射探针无法获得2号反射探针位置的反射信息,因为被抢比挡住了,反之不然。而3号反射他安贞充分发挥作用,需要在正确的位置放置正确数量的反射探针,这样才能获得完整的效果。
在之后实例讲解中会具体解释反射探针的原理和使用方法。

(7)场景模型

示例场景中的模型较少 ,如图1.32所示。在这里插入图片描述
Unity除了支持FBX文件导入外,也组件支持Alembic、USD这类文件格式。 我们也可以使用Unity Reflect把Autodesk Revit 、Skectchup这类 行业如按键中的模型导入Unity。

(8)光照贴图烘培
与传统的离线渲染不同,实时渲染要求一每秒即使帧的速度生成话面,因此我们需要使用很多方法减少各方面的计算量 。
我们知道,要让整个场景看起来真实,需要为其生成 全局光照信息(Global Illumination)。但是按照目前算法和设备的算例,实时生成全局光照信息还不现实。当然,目前最先进实时光照渲染(Reflection Raytracing)功能已经使用高端显卡实现,比如Nvidia公司的RTX系列显卡来,不过对于大多数设备来说,还是需要使用像光照贴图烘培(Lightmapping)这 的技术预计计算全局光照信息,将计算好的光照信息保存到光照贴图(Lightmap)上,然后实时渲染是将它们应用到场景中,来实现全局光照效果。
要使用Unity编辑器的光照贴图烘培功能,打开Widnow->Rendering ->Lighting Setting窗口。我们没使用三张图来分别展示不同情况下场景中的光照效果(如图1.33、图1.34和图1.35所示)。
在图1.34中,没有烘培任何光照贴图,也没有为其指定任何Static Lighting Sky(在左侧窗口Enviroment(HDRP)设置中可以找到)。整个场景有由一盏平行光灯(Directional Light)和一盏聚光灯(Spot Light)来照明(聚光灯可以在Hierachy窗口中,按照Example Assets->Consturction Light->Spot Light层级找到)。如图1.33所示,场景中的物体只受到了这两盏灯的直接照射,因为没有计算光子弹弹射以后的简介光照信息,所以没有这季节找到的地方漆黑一片。
在这里插入图片描述
在图1.34中,我们将Baked Global Illumination选项选上。因为场景中 参与 光照计算的模型的Contribute GI 选项(在光照贴图烘培章节详细讲解)都被勾选了,所以当我们单机Generate Lighting按钮时,Unity会计算全局光照信息。如图1.34所示,右侧 墙壁上已经出现简介光照,原先漆黑一片的地面部分也有更多的细节信息。
在图1.35中,将Environment(HDRP)下的Static Lighting Sky 虚啊你想关联到HDRI Sky( 在之前的Sky and Fog Volume 中创建的),然后再次单机Genrate Lighting 按钮进行光照贴图的烘培。如图1.36所示,画面中出现HDRI Sky环境光照信息。整个场景在拥有预计算好的全局光照信息以后,逼真度提高到了可以接受的程度。
通过针对以上示例场景的分析,我们应该对一个典型的HDRP场景有了一定的了解。一个HDRP场景中除了包含模型外,还需要包含相机、灯光、光照探针、反射探针 。然后最终要的是,使用Volume控制整个场景的光照和后处理效果。也需要使用光照贴图烘焙技术来为场景添加全局光照明。
在这里插入图片描述
在这里插入图片描述
接下来,介绍一下针对 HDRP渲染管线的一些设置,包括HDRP专用的材质等。

3.HDRP基于物理的渲染

在解释示例场景之前,我们需要简单了解一下什么是基于物理的渲染(Physically Based Rendering, PBR)。
至于完整的PBR的知识,比如被后的物理原理、算法实现,已经超出了本书的范畴,建议大家参考相关书籍和网上文档。推荐大家详细阅读Substatnce资深美术是Wes Medermott撰写的THE PBR GUDIDE一书。可以在以下网址获取PDF版本(也可以在网上找到热心开发者翻译的中文版本):
http://academy.substance3d.com/courses/the-pbr-guide-part-1
http://academy.substance3d.com/courses/the-pbr-guide-part-2

第一个问题:在HDRP中,所有灯光和 材质的实现都是基于物理的。那么”基于物理“ 到底是什么意思?
基于物理的意思是,我们把显示世界中灯光和材质的一些本质信息用于计算机图形学表达出来。比如用真实世界中的光照单位来模拟灯光的亮度(HDRP文档中有详细 描述:http://docs.unity3d.com/Packages/com.unity.render-pipelines.high-defijnition@7.4/manual/Phsical-Light-Untis.html),模拟真实世界光线的反射的反射和折射从而实现去安居光照的效果;用真实世界中物体表面对灯光的反应对不同材质的属性进行模拟,比如金属材质的反射、玻璃材质的反射和折射、皮肤和树叶的此表面散射、飞爪泡的彩虹色,以及汽车油漆外面包裹的清漆等。

当然,因为实时渲染要求至少每秒30帧的 画面输出,所以我们还无法完整的模拟真实世界的各种效果。但是随着计算机算例的进一步提升,包括CPU、GPU、存储、贷款等的提升,我们会逐步将这些模拟提升到接近真实世界的水平。

第二个问题:为什么要用基于物理的渲染? 针对这个问题,从不同的角度来看,其实有很多答案。
其中一个很重要的角度是美术工作这的角度。在基于物理的渲染出现之前,如果想要正确得表现画面中得灯光和物质表面(材质),我们能做的就是从现实生活中获取参照物,用自己善于观察得眼睛去分解各种效果,然后尝试通过各种方法在软件中进行实现。比如我们要制作一个金属器皿,它表面得高光、颜色如何所环境影响?我们可能需要手绘或者用一些特定灯光进行补光以达到想要得效果。但是如果周围得环境发安生变化,相机得位置发生变化就可能会照成这个金属器皿表面之前 看上去正常的效果变得让人无法接受。

而基于物理得选人案系统中,当调节灯光和物体表面得材质时,我们关心得不是某个物体在某种灯光或者颈托得条件下是不是看起来 ”正确“ 或者 ”真实“。我们关心的不是某个物体在某种灯光或者镜头的条件下是不是看起来 ”正确“ 或者 ”真实“, 我们关心的是灯光的实现中的亮度值是否正确,物体表面材质的各项物理属性是否被正确被指(比如金属表面的粗糙成都决定了反射效果,玻璃的折射率决定了折射效果,瓷器表面的光滑决定了反光的效果,等等)

通过使用跟真实物理世界相关联的各项标准,我们就可以改变通过猜测和观察(这些猜测和观察可能大多数时间都不准确,非常依赖人的主观判断)来进行灯光 和物体表面材质模拟方式,从而是的我们创作的材质在任何灯光条件和相机角度下都哦能正确展示 。

第三个问题:基于物理的渲染只能用于下i二十风格的场景吗?
其实基于物理的渲染不只适用于写实风格的场景,卡通风格的场景一样适用。一下两张截图选自Unity的两个实时渲染影视动画短片。一张是《异教徒》 (The Heretic)的写实风格(如1.36所示),另一张是《发跳跃式》 (Winup)的卡通风格(如图1.37所示,完整视频可以通过Unity中国的Bilibili官方号观赏)。大家可以看到,虽然两部作品风格迥异,但是仔细观察光照和材质的表现后会发现,它们都复合真实物理世界规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许毅宏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值