移植UE4的BRDR演算法到Unity

2021-09-28 12:57:41 字數 2228 閱讀 7814

最近在改進unity的pbr渲染技術,為了進一步提公升渲染品質,計畫把ue4的渲染庫搬到unity中,查閱了相關的資料,找到了ue4的pbr公式,ue4對原有的公式做了一些改進,效率和品質都提公升了不少。後面把它們整到乙個cginc作為庫檔案使用,換句話說就是封裝乙個類似unity的unitystandardbrdf.cginc庫。下面把brdf的渲染公式以及對應**展示一下,後面直接將其放到unity即可,關於材質貼圖參考ue4的進行設定。

ue4的brdf渲染 使用 cook-torrance 反射模型

其中d、g、f分別是三個函式:

d:微平面在平面上的分布函式

g:計算微平面由於互相遮擋而產生的衰減

f:菲涅爾項

虛幻4採用 trowbridge-reitz ggx 模型:

n 為表面的巨集觀法向量

h hh入射光和觀察方向的中間向量

α 為表面的粗糙度引數

**實現:

// trowbridge-reitz ggx distribution /ue4採用演算法

inline float

normaldistributionggx

(float3 n, float3 h,

float roughness)

虛幻4使用 schlick 模型結合 smith 模型計算此項,具體公式為:

對應的**如下所示:

inline float

geometry_smiths_schlickggx

(float3 n, float3 v,

float roughness)

**如下:

inline float3 fresnel_ue4

(float3 n, float3 h, float3 f0)

brdfshader渲染:

}上述**對應的引用函式實現**如下所示:

float3 importancesampleggx

(float2 xi, float3 n,

float roughness)

// smith's schlick-ggx for environment maps

inline float

geometry_smiths_schlickggx_environmentmap

(float3 n, float3 v,

float roughness)

float

geometryenvironmentmap

(float3 n, float3 v, float3 l,

float k)

float2 hammersley

(int i,

int count)

渲染效果:

參考**:

UE4 簡單的執行緒

有些工作不適合在遊戲邏輯中進行,例如在一幀中進了過於複雜的計算的話,遊戲會卡頓,這個時候我們可以考慮在另外乙個執行緒中進行計算而不再遊戲的主線程中進行計算。include runnable.h include runnablethread.h 首先定義我們要執行的runnable,我們所有要執行的邏...

學習UE4 將視角設定到相機

在公司做了三個月前端,幫忙做c 去了,剛做1周,負責人出差,這事就落我頭上,大半年過去了,專案也差不多了,老闆讓我學ue4,剛學1周,唯一會ue4的人被勸退了,專案又落我頭上,我好難。學的時候發現學了就忘,所以寫部落格主要是加深自己的理解,有的地方可能有錯誤,不過我應該寫不了幾篇,因為老闆有讓我再去...

UE4 基礎類的知識

object ue中所有類的基類不能新增到遊戲當中,不能生成 放到關卡中,用於生成函式 資料,blueprint中無法使用 actor 可以放在關卡中 除了bsp都被稱為actor 支援三維變換 平移旋轉縮放 的通用類 可用藍圖 c aactor是actor基類 components actor的子...