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/zh-tw/n/349338.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TCWVB的頭像TCWVB
上一篇 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

發表回復

登錄後才能評論