一、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