一、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/zh-hant/n/349338.html