首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【Unity】HDRP实战简述 - 《创造高清3D虚拟世界》第二章

  • 25-04-24 15:41
  • 3761
  • 10680
blog.csdn.net

        书中第二章实现了一个办公室的场景,由于本文写于第二章学习的完成时,因此没有详细的过程图可供展示。

前置准备

        在进行HDRP的光照之前,按照书中的说明,需要完成以下前置条件:

        1. 模型导入和拼装(教材配套的工程文件的预制件模型没有碰撞器,可以给它们添加网格碰撞器)

        2. 兼容HDRP材质

        (书中此处还有两个步骤,但那不重要)

        3. 确保包管理器中安装了HDRP的包

        4. 生成一个HDRP Asset配置文件,并且关联到【项目设置 -- 图形】中的默认渲染管线上

        5. 检查【窗口 -- HDRP向导】中的兼容性(Unity6的话,每次打开项目都会弹出这个界面)

       

全局Volume

全局光照

        删掉场景中的平行光(如果有),因为接下来使用HDRP天空来提供光照,因此需要一个兼容HDRP的天空盒子(免费的HDRP天空盒子,来源于unity官方资产商店)

        在场景中,新建一个空物体,添加一个【Volume】组件,确保模式为全局,再新建一个Profile配置文件(其默认名字是“‘这个空物体的name’ Profile”,所在目录为当前场景所在的目录下的同名文件夹中,若该目录不存在,会新建目录)

·       点击这个全局Volume或者刚刚生成的配置文件,都可以检视面板中添加各种效果(Add Override,专业来说是添加覆盖)

        1. 添加虚拟环境(Visual Environment)和HDRI 天空,配置如下

        

        背景云开不开无所谓,但是环境模式要选择静态。可以切换一下环境模式看看,在目前看来【动态】的效果会比【静态】的效果好很多,这是因为没有配置光照环境(【窗口 -- 渲染 -- 光照 -- 环境】中配置静态光照天空)

        注意曝光补偿【Exposure Compensation】,值为0的效果如下:

        值为4的情况如下(这也是教程推荐的数值):

        大概就是一些缝隙可以透光了,显得更真实一点(具体为啥,就不清楚了)

        2. 添加阴影

                3. 配置光照【窗口 -- 渲染 -- 光照 -- 环境】

        然后就基本完成了全局光照的配置。值得一提的是,教材是19版的,光照窗口和unity6的不一样。

后处理Post Processing

        同样新建一个空物体,并且添加Volume组件,生成Profile配置文件。当然,这个Volume和全局光照的Volume拼成一个Volume也是没问题的,但是出于功能内聚性的角度考虑,分开来配置的话更方便后期调试、修改、扩展等。

        添加覆盖如下

        1. 色调映射【后处理 -- Tonemapping】:选择ACES

        2. 曝光【Exposure】

        数值可以自己调整看看效果,上面的数值是书中写的,除了补偿,书中是1.5.

抗锯齿

        这个是在主摄像机中进行设置

        按照书中的说明:

        性能消耗排序:FXAA < TAA < SMAA

        效果排序:FXAA < SMAA < TAA

光源、光照探针、反射探针

        这些工作都是大工作量的内容,教材的工程项目都配置好了,可以直接使用。

光源

(以下来源于Chat GPT)

在Unity中,光源的类型主要有三种:实时光源(Real-time Light)、混合光源(Mixed Light)、和烘焙光源(Baked Light)。它们的区别和用途如下:

1. 实时光源(Real-time Light)

  • 定义:实时光源是每帧都会计算和更新光照的光源。这意味着光源的位置、强度和颜色等属性可以动态变化,实时影响场景中的物体。
  • 用途:适用于需要动态光照效果的场景,特别是那些物体或光源位置不断变化的游戏。例如,角色手中的火把,汽车的前灯,或者敌人发出的激光。
  • 性能消耗:实时光源会消耗更多的计算资源,因为它需要每帧进行计算,因此在性能要求较高的情况下要谨慎使用。

2. 混合光源(Mixed Light)

  • 定义:混合光源是结合了实时光源和烘焙光源的特点。部分光照是实时计算的,而另一些光照则是预计算(烘焙)的。这种光源既能提供动态的光照效果,又能通过烘焙减少性能开销。
  • 用途:适用于既需要动态光照效果,又希望在大多数光照计算上节省性能开销的场景。比如,在一些不经常移动的环境中使用烘焙光源,但对于玩家角色或动态物体使用实时光源。
  • 性能消耗:比纯实时光源要节省性能,因为一部分光照已经预先计算好了。实时光源仅用于影响动态物体的部分。

3. 烘焙光源(Baked Light)

  • 定义:烘焙光源是预计算并将光照信息存储在光照贴图中的光源。烘焙过程会计算场景中所有静态物体的光照信息,并将其储存为纹理(光照贴图),这些贴图会在运行时直接被使用。
  • 用途:适用于静态场景和物体,比如建筑、地形等不动的部分。烘焙光源能为静态物体提供精确的光照效果,常用于室内场景和大部分环境光照。
  • 性能消耗:烘焙光源在运行时性能消耗几乎为零,因为光照已经预先计算并存储。唯一的消耗是烘焙时的计算过程,通常这在开发过程中进行,而不是在游戏运行时。

总结

  • 实时光源:动态计算,适用于需要实时变化的光照效果(如移动光源、动态物体)。
  • 混合光源:结合了实时光源和烘焙光源的特点,适用于既有动态又有静态元素的场景。
  • 烘焙光源:预计算并存储光照信息,适用于静态物体,性能消耗低,但无法动态变化。

选择使用哪种光源类型主要取决于场景的需求以及对性能的要求。

        在【窗口 -- 渲染 -- 光照浏览器】中可以查看所有场景中的光源,集成配置光源类型(点光源、聚光灯、平行光)、光照模式(上述三种)等属性。

探针

(还是来源于Chat GPT)

在Unity中,光照探针(Light Probe)和 反射探针(Reflection Probe)都是为了提升渲染效果而设计的工具,它们用于补充和优化场景中的光照和反射,尤其是在使用烘焙光源和实时光源时。它们的作用如下:

1. 光照探针(Light Probe)

  • 定义:光照探针是用于捕捉和存储场景中环境光照信息的点。这些探针被放置在场景中,用来采样环境光照的颜色和强度,从而为不直接接受光照的动态物体提供光照数据。
  • 作用:
    • 动态物体的光照计算:对于动态物体(如移动的角色或物体),它们无法直接利用静态场景的烘焙光照。光照探针可以提供环境光照的估算,帮助这些动态物体获得更自然的光照效果,避免因动态物体与静态物体之间的光照差异产生突兀感。
    • 环境光照补充:光照探针用于捕捉场景中不同位置的光照信息(如方向光、环境光等),并将其存储为预计算数据。动态物体可以根据其位置选择最近的光照探针,获得适当的光照数据。
  • 用途:
    • 主要用于为动态物体提供环境光照。
    • 在场景中需要有多个光照探针时,通常会将它们放置在玩家或动态物体的活动区域,以保证光照平滑过渡。
  • 性能消耗:光照探针本身对性能的影响较小,因为它们只存储光照数据,并不会像实时光源那样每帧计算。

2. 反射探针(Reflection Probe)

  • 定义:反射探针是用于捕捉场景中环境反射的工具。它通过捕捉场景的反射环境图像并将其存储在一个纹理中,从而为场景中的物体提供更真实的反射效果。反射探针类似于一个虚拟的“镜子”,它通过反射场景的背景和周围环境来增强物体表面的反射效果。
  • 作用:
    • 环境反射:反射探针能够模拟反射在物体表面的表现,尤其是在需要反射效果的表面(如金属、玻璃等)上。它通过将场景中不同角度的环境反射捕捉到一个反射贴图中,然后将该贴图应用到物体上,增强视觉效果。
    • 动态物体反射:对于动态物体,反射探针提供了一个环境反射的预计算图像。实时渲染中,反射探针的反射贴图会随着物体的位置和角度变化而适当调整,从而提供准确的反射效果。
  • 用途:
    • 主要用于为物体提供实时反射效果,尤其适用于金属、玻璃等光滑的表面。
    • 对于静态物体,通常使用烘焙反射探针来提高性能。
    • 对于动态物体,可以通过实时更新反射探针来获取准确的反射。
  • 性能消耗:反射探针的性能消耗取决于它的类型(实时或烘焙)以及更新频率。实时反射探针会增加计算负担,而烘焙反射探针则在游戏运行时几乎不消耗性能。

总结

  • 光照探针:用于捕捉和提供场景的环境光照数据,主要用于动态物体,帮助它们获得更自然的光照。
  • 反射探针:用于捕捉和提供场景的环境反射数据,主要用于物体表面的反射效果,尤其适用于需要反射的物体(如金属、玻璃等)。

烘焙光照贴图

        ctrl + 9(字母上方的数字9,而不是数字键那边的9)可以快捷打开光照窗口,或者【窗口 -- 渲染 -- 光照】,在【场景】窗口中配置

        最后点击生成照明,然后等20个小时就可以了……

最后效果

        这个小人儿是官方HDRP示例的小人,我整理(重构)了一下代码,然后给迁移到这个项目来了。

        可以发现,光照贴图烘焙完成前和完成后的效果是截然不同的,甚至天壤之别。

注:本文转载自blog.csdn.net的sky_DAYs的文章"https://blog.csdn.net/m0_59010294/article/details/145104412"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

134
游戏
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top