Unity | HDRP高清渲染管线学习笔记:示例场景解析

news2024/11/27 3:48:33

目录

一、HDRP入门

1.HDRP设置

 1.1 HDRP配置文件中的全部设置项

        1.1.1 Rendering下的Lit Shader Mode

        1.1.2 Lighting 下的Volumetrics(体积光)和Screen Space Reflection(屏幕空间反射)

2.离线渲染VS实时渲染

3.Volume组件

3.1Sky and Fog Volume 天空&雾效

4.光照贴图烘焙

5.HDRP材质和着色器

5.1 Mesh

5.2 Material

5.3 Shader

5.4 Texture

        5.4.1 Surface Options

        5.4.2 Surface Inputs

二、RenderPipeline相关菜单

1.HDRP Wizard窗口

2.LookDev

3.Rendering Debugger

三、HDRP基于物理的渲染

四、总结


        首先HDRP是面向高端硬件的,它是集成了各种最先进渲染技术的解决方案。因此它的最佳应用场景是PC、主机平台AAA游戏,或者云游戏。(Unity版本为2022.1.2)

一、HDRP入门

        自Unity 2018版本开始,Unity在原先的标准渲染管线(Built-in Render Pipeline)基础上增加了可编程渲染管线(Scriptable Render Pipeline,SRP)

        在SRP发布之前,所有平台都是通过同一个标准渲染管线来做渲染输出。虽然使用非常方便(无须选择适配渲染管线),但是标准渲染管线对于开发者而言就像一个黑盒子,里面的渲染逻辑完全不可知。开发者也无法通过代码去控制整个渲染的流程,无法选择需要渲染的内容。随着SRP的发布,开发者可以通过C#代码直接指定渲染内容和控制渲染流程,也可以为自己的游戏或者应用定制独特的渲染管线。

        为了帮助内容创作者尽快使用上SRP,Unity提供了两个在创建项目时就可以选择的模板:高清渲染管线(High Definition Render Pipeline,HDRP)和通用渲染管线(Universal Render Pipeline,URP)。HDRP目前可用于制作基于PC、Xbox One(或更新)和PlayStation 4(或更新)平台的游戏或者应用,也支持输出高端VR应用;URP则可用于所有平台(包括HDRP支持的所有平台)的游戏和应用开发。HDRP对于高端移动平台的支持目前正在研发之中。

1.HDRP设置

        HDRP的全称是High Definition Render Pipeline(高清渲染管线)。它是基于Scriptable Render Pipeline(简称SRP,中文翻译为“可编程渲染管线”)实现的一个模板。

        在设置渲染管线时我们要用到Project Settings(项目设置)界面,所以先通过菜单Edit→Project Settings… 打开项目设置界面。可以把渲染管线的设置分成以下几种情况。

  • 使用默认的内置渲染管线:如果在项目设置界面中将Graphics的Scriptable Render Pipeline Settings参数设置为None,那么Unity使用的就是内置渲染管线。
  • 使用HDRP:要将渲染管线设置为HDRP,需要给Scriptable Render Pipeline Settings关联一个HDRP配置文件(在Project窗口中)
    可以创建多个拥有不同配置信息的HDRP配置文件,然后在不同的平台上使用它们。比如为PC、Xbox One和PlayStation 4分别创建对应的HDRP配置文件,然后在构建不同平台的应用时,手动关联相应的HDRP配置文件。当然也可以通过脚本来动态判断和设置,所需脚本API为GraphicsSettings.renderPipelineAsset。
  • 使用URP(Universal Render Pipeline,中文翻译为“通用渲染管线”)

 1.1 HDRP配置文件中的全部设置项

        注意:我们之前在Edit→Project Settings中的Graphics的Scriptable Render Pipeline Settings参数设置为HDRenderPipelineAsset。但在Quality中有多个levels,每个level对应的Render Pipeline Asset不同,默认是High Fidelity level,对应的Render Pipeline Asset为HDRP High Fidelity,那么该项目起作用的Render Pipeline Asset为HDRP High Fidelity,而不是HDRenderPipelineAsset。unity对这两个设置的解释如下:

  • Graphics中Scriptable Render Pipeline Settings:This defined the default render pipeline,which Unity uses when there is no override for a given quality level.
  • Quality中Render Pipeline Asset:Specifies the Render Pipeline Asset to use for this quality level.It overrides the value set in the Graphics Setting Window.

        HDRP的设置信息分为以下几个部分:

  • Rendering(渲染)
  • Lighting(光照)
  • Lighting Quality Settings(光照质量设置)
  • Material(材质)
  • Post-processing(后处理)
  • Post-processing Quality Settings(后处理质量设置)
  • XR(XR相关设置)
  • Virtual Texturing(虚拟纹理)

        1.1.1 Rendering下的Lit Shader Mode

        控制Lit Shader使用的渲染模式,其下有Forward Only、Deferred Only和Both三种模式。

  • Forward模式可以提供更多的高级材质,但是相应的性能消耗较大(比如使用的内存通常较大)。
  • 如果选择Both模式,那么HDRP会预先生成针对Forward和Deferred两种模式的Lit Shader variants(Lit着色器变体),这样就可以在运行时(Runtime)中针对不同的相机在这两种模式间切换。当然,如果选择Both,内存的占用将会变大,因为内存中包含了更多的Lit着色器变体。

        1.1.2 Lighting 下的Volumetrics(体积光)和Screen Space Reflection(屏幕空间反射)

        如果在Render Pipeline Asset配置文件中勾选了Volumetrics选项,那么在Sky and Fog Volume的Fog中的Volumetric Fog配置就会生效。如果关闭了Screen Space Reflection选项,即使Sky and Fog Volume添加了Screen Space Reflection这个Volume Override,该界面也会提醒此功能不可用。(由此可见,HDRP配置文件在HDRP项目中所处的中心地位,以及它与单独的Volume组件之间的父子关系)

2.离线渲染VS实时渲染

        所谓DCC,就是Digital Content Creation的缩写,即数字内容创作。DCC的范围包括二维/三维、音频/视频剪辑合成、动态/互动内容创作、图像编辑等。通常传统DCC软件的离线渲染器:画质好、耗时长。渲染一帧画面(也就是一张图片)所需的时间,按照场景的复杂度和所用电脑的运算能力,从几秒到几十小时甚至上百小时不等。

        使用实时渲染引擎:画质没离线渲染强、耗时短。可以在Unity编辑器中以每秒几十帧甚至上百帧的速度渲染画面。

        虽然在实时渲染引擎中获得的画面质量,还无法与离线渲染的画质相提并论,但是两者之间的差距正在迅速缩小。使用实时渲染引擎可以在Unity编辑器中以每秒几十帧甚至上百帧的速度渲染画面。随着Unity工具链的不断发展,Unity本身也开始逐渐具备传统DCC工具的部分功能。

3.Volume组件

        通过HDRP项目模板来创建项目,Unity会为我们自动设置好所有的HDRP高清渲染管线资源,建议保留项目窗口中的HDRPDefaultResources、Presets和Settings三个文件夹,否则需要手动生成HDRP渲染管线相关的配置文件。

        HDRP使用Volume框架将天空的光照、阴影、后处理等设置集中到了一起。在示例场景中有一个Volume:Sky and Fog Volume负责天空、雾效效果。

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

        场景中可以有多个Volume组件,例如Sky and Fog Volume和Post Process Volume,当然把这两个Volume合二为一,也就是只需要一个Volume关联一个Profile。不过如果合二为一的话,一方面Volume组件上的列表会变得很长,不利于后期维护。另一方面如果我们使用多个Local(本地)的后处理Volume,那么就无法灵活处理它们了。将具有不同功能的Volume进行合理的区分,将它们关联到不同的Profile,有助于后期维护和功能管理。

3.1Sky and Fog Volume 天空&雾效

        Sky and Fog Volume提供基于HDRI的光照,控制曝光度、雾效等。

● Mode(模式)

        可以将Volume设置为Global(全局)模式或者Local(本地)模式:

  • 如果设置为全局模式,则Volume上的效果默认会影响整个场景。
  • 设置为本地模式,则可以为其指定不同形状的碰撞体,比如Box、Sphere等。

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

● Profile(配置文件)

        使用Volume框架的一个好处是可以把组件和具体的设置进行分离。Volume组件上的所有设置其实来自于关联的Profile。在开始设置之前,需要先创建一个新的Volume Profile或者关联一个已经存在的Profile。Profile是一个用Unity资源格式保存到本地磁盘上的文件,这也意味着我们可以使用别人已经创建好的Profile,或者将自己的Profile分享给别人使用(要确保大家使用的Unity版本是互相兼容的)。

Visual Environment

        主要用于选择天空盒的格式。可以选择:

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

● Physically Based Sky

        如下图所示,因为选择的Visual Environment类型是Physically Based Sky,所以要为Volume指定一个Physically Based Sky。

 ● Fog

        在这里可以控制场景中雾气的浓度、离地面的高度,也可以设置距离远近。还可以配合使用灯光组件的Volumetrics(体积光)属性创造体积光效果。

● Add Override

        在Volume组件中,我们可以通过该按钮为当前Volume添加以下各个大类的配置信息,并通过Volume组件对这些效果进行调整。

4.光照贴图烘焙

        与传统的离线渲染不同,实时渲染要求以每秒几十帧的速度生成画面,因此我们需要使用很多方法来减少各方面的计算量。要让整个场景看起来真实,需要为其生成全局光照信息(Global Illumination)。但是按照目前的算法和设备的算力,实时生成全局光照信息还不现实。(当然,目前最先进的实时光线追踪(Realtime Raytracing)功能已经可以使用高端显卡实现,比如Nvidia公司的RTX系列显卡)。不过对于大多数设备来说,还是需要使用像光照贴图烘焙(Lightmapping)这样的技术来预计算全局光照信息,将计算好的光照信息保存到光照贴图(Lightmap)上,然后在实时渲染时将它们应用到场景中,来实现全局光照的效果。

5.HDRP材质和着色器

        要渲染某个模型,需要将Mesh、Material、Shader和Texture组合在一起才行:

5.1 Mesh

        Mesh代表的是模型本身,用于表现形状。

5.2 Material

        一个Mesh可以关联多个Material,用于控制模型不同部分的材质表现。比如我们的模型上有塑料的部分,也有金属的部分。只用一种材质来表现这两种完全不同的材料的表面是不可能的,因此需要使用两种材质来表现塑料和金属这两种表面。

5.3 Shader

        每种Material都与一个指定的Shader相关联。Shader是一段代码,包含了用于计算屏幕上每个像素点颜色的具体算法。Shader进行计算的时候会考虑当前场景的光照信息以及在Material上提供的具体配置信息。

        在HDRP中常用的一个Shader是Lit Shader。Lit Shader可以模拟非常多的材质表面,比如金属、玻璃、木材等。

5.4 Texture

        在Surface Inputs参数集合中可以指定各种Map。这些Map所关联的就是Texture(通过Photoshop、Substance Painter等工具生成的Bitmap图片),其用于为模型添加各种细节。

        5.4.1 Surface Options

        Surface Type(表面类型)

        它有两个选项:Opaque(不透明的)和Transparent(透明的)。这是一个基本选项,在设置其他参数之前,你首先要决定你的物体是不是透明的。

        Material Type(材质类型)

        不管选择哪种表面类型,都会显示6种材质类型:Subsurface Scattering(次表面散射)、Standard(标准)、Anisotropy(各向异性)、Iridescence(彩虹色)、Specular Color(高光颜色)和Translucent(半透明)。默认选择的是Standard材质类型。

        可以根据物体表面的特性来选择不同的材质类型。以下列出了部分可应用上述6种材质类型的物体。

材质类型应用
Subsurface Scattering(次表面散射)用于模拟光线与半透明物体交互时产生的现象,俗称SSS。光线进入物体以后,有部分会发生散射并模糊,然后再次返回物体外面(出射角度与入射角度不同)。可用于模拟皮肤、树叶、蜡烛、玉器及瓷器釉面等。
Standard(标准)可用于表现大部分材质,属于PBR材质制作流程中的Metallic Workflow。此工作流把物体分为金属和非金属两类。
Anisotropy(各向异性)各向异性材质适用于模拟拉丝金属表面或者天鹅绒。这类材质表面,从不同的角度看过去,会出现不同的高光现象。
Iridescence(彩虹色)彩虹色材质的特性是,当你的观察角度或者光照角度变化时,物体表面的颜色会发生渐变(渐变色)。这非常适合用于模拟肥皂泡、彩虹色金属表面和昆虫的翅膀等。
Specular Color(高光颜色)可用于表现大部分材质,属于PBR材质制作流程中的Specular Workflow。此工作流类似内置渲染管线中的Standard (Specular setup)。
Translucent(半透明)半透明材质可以和一张Thickness Map配合使用,用于模拟半透明物体。它和次表面散射材质的区别是,出射光线在射出物体之前不会变模糊。

        5.4.2 Surface Inputs

  1. Base Map:用于为模型提供Albedo颜色信息。
  2. Mask Map:通过使用一张将信息储存到RGBA四个通道中的纹理,来一并控制Metallic(金属反光-Red通道)、Ambient Occlusion(环境光遮蔽-Green通道)、Detail Mask(细节遮罩-Blue通道)和Smoothness(光滑度-Alpha通道)。使用一张纹理控制四种属性可以降低内存的占用。
  3. Normal Map:法线贴图用于为模型表面添加更多模型上不存在的细节。

二、RenderPipeline相关菜单

1.HDRP Wizard窗口

        通过Wizard窗口,我们可以快速检查当前项目是否拥有HDRP项目所要求的设置。在此窗口中最主要的是HDRP、HDRP+VR和HDRP+DXR这三个分区。

  • HDRP分区:普通HDRP项目默认使用该快速配置检查列表。如果这里有一项没有通过检查,则界面上会出现Fix按钮,你可以针对每一项单独修复,也可以一键修复所有检查项。
  • HDRP+VR分区:适用于针对HDRP VR项目的配置检查。
  • HDRP+DXR分区:适用于针对HDRP光线追踪项目的配置检查。

2.LookDev

        通过Look Dev窗口,我们可以将模型置于多个HDRI环境下,以便进行快速查看和效果比较。

3.Rendering Debugger

        Debug窗口的作用是,我们通过调整这里不同的参数,可在Game窗口或者Scene窗口实时查看相关的信息。

        举个例子:如果修改Material→Common Material Property为Albedo(反照率贴图),则在Game窗口中可以看到模型上只加载Albedo的效果;如果为Normal(法线贴图),则在Game窗口中可以看到模型上只加载Normal(法线贴图)的效果。

三、HDRP基于物理的渲染

        基于物理的意思是,我们把现实世界中灯光和材质的一些本质信息用计算机图形学表达出来。比如用真实世界中的光照单位来模拟灯光的亮度,模拟真实世界光线的反射和折射从而实现全局光照的效果;用真实世界中物体表面对光的反应对不同材质的属性进行模拟,比如金属材质的反射、玻璃材质的反射和折射、皮肤和树叶的次表面散射、肥皂泡的彩虹色,以及汽车油漆外面包裹的清漆等。

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

四、总结

        一个HDRP场景中除了包含模型外,还需要包含相机、灯光、光照探针、反射探针。然后最重要的是,使用Volume控制整个场景的光照和后处理效果。也需要使用光照贴图烘焙技术来为场景添加全局光照明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文字gif闪图怎么做?高效的gif闪图制作方法

相信不少新媒体行业的小伙伴,一定都见过那种闪动文字效果的gif动图吧。效果非常的炫酷还很吸引人们的眼球,但是作为设计小白这种闪烁gif图要怎么制作呢?有没有那种小白也能轻松上手的工具呢? 一、什么样的工具能够在线生成gif动态…

《Spring Guides系列学习》guide35 - guide40

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

项目管理自动化 工作效率顶呱呱

项目管理,是职场人进阶发展的必备高阶能力,需要在复杂的环境中有效整合资源、高效助力团队实现整体的项目目标。 一个好的项目管理者,需要合理规划项目进展,实时同步需求、及时沟通进展,合理判断项目风险&预警&am…

记一次用户反馈app在后台收不到push问题跟踪

我们的应该大范围推广后,今日用户群好多用户反馈安卓手机app在后台时收不到app的push消息,只有app处于前台时才能收到push消息。但是ios手机可以正常接收push消息。 拿到问题,首先想到从下面几个方便尝试定位: 1.用户手机app通知权…

财报解读:毛利持续改善,金山云正在“弯道超车”?

一季度,云巨头们的表现持续稳健,依旧稳坐前排,而作为中小云代表的金山云也在5月23日发布了2023年一季度财报,盈利能力持续改善成为通篇最亮眼的一笔。 随着AI大模型打开了新的“潘多拉魔盒”,云市场也在发生着巨变。 …

picoctf_2018_rop chain

小白垃圾笔记,不建议阅读。 这道题目其实我是瞎做的. 本地调试需要写一个文件名为flag.txt的文件。 先检查下保护:(我把文件名改成pwn了),32位仅仅开启了nx 然后放到32位ida里: main函数如下&#xff1a…

〖Web全栈开发⑤〗— CSS基础

〖Web全栈开发⑤〗— CSS基础 (一)CSS基础1.1CSS介绍1.2CSS样式1.3CSS 格式 (二)CSS 选择器2.1标签选择器2.2类选择器2.3层级选择器2.4id选择器2.5组选择器2.6伪类选择器2.7通配符选择器 (三)样式表引入3.1外部样式表3.2内部样式表…

WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用

WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处。 在开发速度方面,这取决于具体情况。如果您熟悉 WinForms 开发并且正在开发简单的界面应用程序,则可能会比使用 WPF 更快…

《Spring Guides系列学习》guide41 - guide45

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

kaggle官方书籍推荐:The-Kaggle-Book

今天介绍一本kaggle出版的竞赛书籍。 这本书结合真实的kaggle竞赛题目,以及它们的冠军团队方案,介绍了参与机器学习竞赛的一些基础知识、经验技巧等。 内容涵盖Kaggle的介绍、建模问题以及技巧、如何利用Kaggle的经历来丰富简历等等。 书籍简介 参加 …

银河麒麟v4.0.2安装

银河麒麟v4.0.2安装 一、下载银河麒麟系统二、制作USB的启动镜像三、安装银河麒麟系统1、设置要被安装的机器bios启动模式为USB启动后,选择第一项:图形安装银河麒麟服务器操作系统2、设置用户和密码,右下角有继续,点击继续下一步3…

Axure教程—水平方向多色图(中继器)

本文将教大家如何用AXURE制作动态水平方向多色图 一、效果介绍 如图: 预览地址:https://l83ucp.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87822666 二、功能介绍 简单填写中继器内容即可生成动态水平多色…

操作系统层面下——进程状态讲解

目录 一.进程的状态:运行态 1.什么是运行状态? 2.进程进入内存的详细图解: 总结: 二.进程的状态:阻塞态 1.什么是阻塞状态? 三.进程的状态:挂起态 1.什么是挂起态? 2.阻塞与挂起的…

xss跨站之代码及http only绕过

什么是http only,在cookie中设置了http only属性,那么通过js代码无法获取cookie,并不能防止xss漏洞,在上一节的靶场网站源代码里面,写上这一串代码就是启动http only 再加上带去cookie的代码 然后我们再去访问网站的后…

线程池各参数学习

线程池学习_alutimo的博客-CSDN博客尚硅谷java并发包JUC线程池部分学习总结https://blog.csdn.net/qq_41228145/article/details/125650075老生常谈 线程池的参数ThreadPoolExecutor.java 的构造器 /*** Creates a new {code ThreadPoolExecutor} with the given initial* par…

PLC【西门子】几种常见的连接口和通讯协议简介

S7-200 PLC支持的几种通讯协议 一、PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200CPU中。PPI协议物理上基于RS-485口,通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备,从站设备响应,从站不能主动发出信息。主…

简述什么是微前端 微前端几种框架的区别

微前端就是将各个模块分成不同项目 方便多个团队一起开发互相不影响 例如:a团队维护较老的项目使用angular,b团队开发react,c团队开发vue 。按道理说abc三个项目并没有关联,但是他们又都是公司内部管理的系统。需要集成在一起 &…

智能排班系统 【管理系统功能、操作说明——中篇】

文章目录 页面与功能展示企业管理角色管理用户管理系统管理员身份使用企业管理员身份使用门店管理员身份使用 门店管理职位管理排班规则设置节日管理消息管理 页面与功能展示 企业管理 企业管理页面如图 34所示,在企业管理页面,系统管理员可以查询所注…

IAT Hook

一、IAT HOOK介绍 IAT (Import Address Table) HOOK 是一种在 Windows 程序中进行函数钩子的技术。它通过修改程序的导入地址表来实现对目标函数的替换或拦截。 在 Windows 运行时,程序需要调用其他模块(DLL)中的函数来完成特定的功能。为了…

java项目打包方式

普通项目打包 项目内容很简单,只是引用了一个三方包。 打包步骤 File-Project Structure... 点击确定后选择Build - Build Artifacts.. 选择build即可,可以查看编译日志 maven项目打包 若果是普通项目就先转为maven项目。 右键项目选择第二项add frame…