Unreal中關於顏色的技術分享

2022-10-11 15:33:11 字數 1456 閱讀 7634

今天跟大家分享一篇關於unreal中關於顏色的技術分享。用過unreal的小夥伴應該都會注意到,我們在unreal裡面進行貼圖設定的時候,對於basecolor都需要勾選上srgb。

為什麼需要勾選?每張貼圖都需要勾選麼?如果不做勾選會怎麼樣?這就需要用我們的gamma校正和線性空間來破案了,一起來看下教程

解析。gamma校正

首先什麼是gamma校正。官方解釋,rgb值與功率並非簡單的線性關係,而是冪函式關係,這個函式的指數稱作gamma值,一般為2.2(power2.2),而這個換算過程,稱為gamma校正。官方**,開發gamma編碼是用來抵消陰極射線管(crt)顯示器的輸入和輸出特性,電子槍的電流,也是光的亮度,與輸入的正極電壓的變化是非線性的。通過gamma壓縮來改變輸入訊號抵消了這個非線性,因此輸出影象就能有預期的亮度。

畫圖來理解就是如下,

如果我們有一張線性的**,如果我們顯示器也是線性的,那經過顯示器輸出的影象就應該和真實的影象是一樣的;

但是實際上我們的顯示器根本不按套路來,它的gamma值是2.2,所以如果我們的是線性的,那麼從gamma為2.2的顯示器中輸出出來就是下面這個樣子

可以看到結果有明顯的色彩失真,所以如果我們把**的gamma值設定成1/2.2的話,經過兩次調整,結果就是正確的啦

在進行gamma校正的方式就是取樣進行輸入的時候,gamma=1/2.2,調亮gamma;

在顯示輸出的時候gamma=2.2,調暗gamma。

線性空間

最好的辦法就是在輸入的時候採用srgb格式,目的是為了告訴linear color space,需要對輸入的顏色進行power2.2校正切換到線性空間,然後再進行shader計算,計算完畢以後再通過power1/2.2切換回gamma空間。所以解決了我們剛開始提的在unreal中的basecolor需要勾選srgb選項。而非srgb紋理則會直接在shader中進行計算,比如normal和mask。

所以以上就解釋了我們在匯入貼圖的時候需要注意到的問題,只有勾選了引擎才會進行正確的畫素計算;一般basecolor才需要勾選;對於basecolor來說,不勾選gpu就不會進行gamma校正,而直接使用儲存的值進行渲染,但同時也不會得到真實的效果。

關於html中hr的顏色設定

這個 在我的短暫網頁製作生涯中還沒有用到過。不過下午girlfriend問及顏色設定問題。照著一般 的屬性猜了一下。說在就應該可以的。試著寫了乙個簡單的頁面。果然變為紅色。html 標籤 一 定義與用法 標籤可以插入水平線 二 在html和xhtml中的區別 在html中標籤不需要結束標籤 在xht...

Unreal3 DirectX 11 中的延遲著色

概述 延遲著色是一項可以更加高效地渲染動態光源的技術,但是它的功能設定具有侷限性。在著色之前呼叫傳統的 ue3 光照,因為動態光照計算會與場景的網格物體渲染同時進行。採用延遲著色後,渲染這些網格物體的時候會將諸如漫反射顏色這樣的材質屬性儲存在渲染目標 被稱為 gbuffer 中,但是沒有進行光照。這...

關於 unity 中顏色空間問題的總結

首先官方文件肯定是我們參考的重點,最重要的就是這幾篇文章了 這裡總結一下用法 有乙個大前提是,顯示器在顯示顏色前,總是會進行一次gamma矯正。首先是對非線性輸入的紋理資源的處理 這裡主要指的是貼圖,像法線一類的資訊紋理理論上只是為了放資料用的,可以算是線性的 在2017版本中紋理資源上的那個 sr...