UnityHdr简介及使用方法

一、UnityHdr从什么开始?

UnityHdr是Unity引擎的一个扩展光照渲染管线,它可以利用高动态范围(HDR)图像技术来实现更真实的图像效果,包括高光、阴影和反射。此扩展可以通过两种不同的模式来工作:前向渲染和延迟渲染。前向渲染可以创建出高度逼真的镜头,但是它在处理复杂图景和多光源时运行缓慢。延迟渲染可以使大型场景更加快速,但是它不支持反射。 要想开始使用UnityHdr,需要Unity版本在2018年及之后。

二、开启UnityHdr

在Unity中开启UnityHdr很简单,只需要切换到UnityHdr模板并且设置在摄像机上启用UnityHdr即可。但是,在Unity编辑器中启用UnityHdr,您可能会注意到视图变得更暗或颜色变得更暗。这是因为 HDR 在Unity 中是默认关闭的。要使 HDR 生效,您应该根据场景中的曝光调整亮度。

RenderingSettings.defaultCameraHdrMode = CameraHDRMode.HDR;
camera.allowHDR = true;

三、UnityHdr的光照模式

1. 前向渲染模式(Foword Rendering Mode)

目前 Unity 中最常用的光照模型是前向渲染模型。在此模型中,每个像素将多次迭代以计算光源和所有物体之间的光交互。这意味着每个像素考虑到所有光源的影响和每个物体的阴影。这通常导致像素数量大大增加,从而降低了渲染性能。UnityHdr可以通过使用循环投影几何(shading geometry)以及这个技术可以削减计算时间,以获得较高级别的性能。

GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, DeferredShaderMode.UseRendererSettings);

2. 延迟渲染模式(Deferred Rendering Mode)

另一种光照模型是延迟渲染模型。在此模型中,渲染流水线首先创建所有透视物体的 G-buffer,然后在后台处理阴影和光源。这可以显着减少需要处理像素的数量,从而提高渲染性能。UnityHdr 延迟渲染可以在当前场景下使用。

GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, DeferredShaderMode.Deferred);

四、UnityHdr的材料(Material)

在 UnityHdr中,创建材质(Material)是与普通的 Unity 材质(Material)相同的。你可以从标准着色器(Shader)列表中找到 UnityHdr着色器。当然,你也可以定制你自己的材质,使用 UnityHdr 着色器从头开始编写。在UnityHdr中,材质的属性(属性)是具有物理意义的,并且使用预定义的光学计算(如 Schlick’s approximation、Fresnel等)进行设置。这使得您可以快速设置和处理高级材料,例如:玻璃材质和金属材质。

shader UnityHdrPhisyicalMaterial
{
     Properties 
     {
         _Color ("Base Color", Color) = (1,1,1,1)
         _MainTex("Albedo (RGB)", 2D) = "white" {}
         _Metallic ("Metallic", Range(0,1)) = 0.0
         _Smoothness ("Smoothness", Range(0, 1)) = 0.5
         _NormalMap ("Normal Map", 2D) = "bump" {}
         _Parallax ("Height Map", 2D) = "white" {}
         _Occlusion ("Occlusion", 2D) = "white" {}
         _EmissionColor ("Emission Color", Color) = (0,0,0)
         _DetailAlbedoMap ("Detail Albedo", 2D) = "white" {}
         _DetailNormalMap ("Detail Normal Map", 2D) = "bump" {}
     }
     Category 
     {
         Tags { "RenderType"="Opaque" }
         SubShader 
         {
             LOD 100
             CGPROGRAM
             ...
     }
}

五、UnityHdr的帧缓冲区(FrameBuffer)

UnityHdr使用帧缓冲区(Framebuffer)来呈现场景。随着您在场景中添加更多几何形状和光源,以及增加更多的物理特性,例如:反射和环境光遮蔽(Ambient Occlusion),需要更多的内存来渲染。UnityHdr可以在CPU和GPU上运行更快,而无需担心存储器限制。

Texture colorBuffer = UnityHdrCamera.GetCameraTexture (UnityHdrCameraTextureType.Color);
Texture depthBuffer = UnityHdrCamera.GetCameraTexture (UnityHdrCameraTextureType.Depth);
#endif

六、UnityHdr的反射控制(Reflection Control)

UnityHdr提供了完整的反射控制。这包括用于实时反射、模糊反射和屏幕空间反射的预定义算法、颜色调整和反射遮挡控制选项。使用这些选项,可以完全控制反射的质量和性能,而无需编写任何脚本。

EnableReflections = true;
EnableRefractions = true;
EnableScreenSpaceRefractions = false;

ReflectSkybox = false;
ReflectGround = true;
ReflectLayers = new List();

七、小结

本文对UnityHdr的介绍包括UnityHdr起源、开启UnityHdr的方法、光照、材质、帧缓冲区和反射控制选项。UnityHdr是Unity引擎的一个扩展渲染管线,可以通过高动态范围图像技术实现更真实的图像效果。

原创文章,作者:TCWVB,如若转载,请注明出处:https://www.506064.com/n/349338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TCWVBTCWVB
上一篇 2025-02-15 17:09
下一篇 2025-02-15 17:09

相关推荐

  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Java2D物理引擎简介及应用

    本文将介绍Java2D物理引擎的基本概念、实现原理及应用案例,以及对应代码示例。 一、物理引擎概述 物理引擎是一种计算机程序,用于模拟物理系统中的对象和其互动,如重力、碰撞、弹力等…

    编程 2025-04-29
  • Python符号定义和使用方法

    本文将从多个方面介绍Python符号的定义和使用方法,涉及注释、变量、运算符、条件语句和循环等多个方面。 一、注释 1、单行注释 # 这是一条单行注释 2、多行注释 “”” 这是一…

    编程 2025-04-29
  • Python下载到桌面图标使用方法用法介绍

    Python是一种高级编程语言,非常适合初学者,同时也深受老手喜爱。在Python中,如果我们想要将某个程序下载到桌面上,需要注意一些细节。本文将从多个方面对Python下载到桌面…

    编程 2025-04-29
  • Python匿名变量的使用方法

    Python中的匿名变量是指使用“_”来代替变量名的特殊变量。这篇文章将从多个方面介绍匿名变量的使用方法。 一、作为占位符 匿名变量通常用作占位符,用于代替一个不需要使用的变量。例…

    编程 2025-04-29
  • 百度地区热力图的介绍和使用方法

    本文将详细介绍百度地区热力图的使用方法和相关知识。 一、什么是百度地区热力图 百度地区热力图是一种用于展示区域内某种数据分布情况的地图呈现方式。它通过一张地图上不同区域的颜色深浅,…

    编程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函数是Matlab中的一个非常常用的函数,它可以在Matlab环境中增加一个或者多个文件夹的路径,使得Matlab可以在需要时自动搜索到这些文件夹中的函数。因此,学会…

    编程 2025-04-29
  • Python函数重载的使用方法和注意事项

    Python是一种动态语言,它的函数重载特性有些不同于静态语言,本文将会从使用方法、注意事项等多个方面详细阐述Python函数重载,帮助读者更好地应用Python函数重载。 一、基…

    编程 2025-04-28
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • Python同步赋值语句的使用方法和注意事项

    Python同步赋值语句是Python中用来同时为多个变量赋值的一种方法。通过这种方式,可以很方便地同时为多个变量赋值,从而提高代码的可读性和编写效率。下面从多个方面详细介绍Pyt…

    编程 2025-04-28

发表回复

登录后才能评论