體積霧 global fog unity 及改進

2022-05-03 01:33:11 字數 2766 閱讀 8169

lighting box 2.7.2

halfspace fog 相機位於乙個位置 這個位置可以在fog volumn裡面或者外面  霧開始的地方就是文中的plane

這個fog volume可以從中間某個位置height 這個平面產生霧 遠近濃度通過depth深度計算

還可以定義霧密度 

//

half computefogfactor (float

coord)

if (_scenefogmode.x == 2) //

exp

if (_scenefogmode.x == 3) //

exp2

return

saturate(fogfac);

}//distance-based fog

float computedistance (float3 camdir, float

zdepth)

float

computehalfspace (float3 wsdir)

fdocc = campos.y-height.value;      height  就是halfplane所定義的高度 plane法線垂直向上

//

calculate vectors towards frustum corners.

var cam = getcomponent();

var camtr =cam.transform;

var camnear =cam.nearclipplane;

var camfar =cam.farclipplane;

var tanhalffov = mathf.tan(cam.fieldofview * mathf.deg2rad / 2

);

var toright = camtr.right * camnear * tanhalffov *cam.aspect;

var totop = camtr.up * camnear *tanhalffov;

var v_tl = camtr.forward * camnear - toright +totop;

var v_tr = camtr.forward * camnear + toright +totop;

var v_br = camtr.forward * camnear + toright -totop;

var v_bl = camtr.forward * camnear - toright -totop;

var v_s = v_tl.magnitude * camfar /camnear;

//draw screen quad.

rendertexture.active =destination;

_material.settexture(

"_maintex

", source);

_material.setpass(0);

gl.pushmatrix();

gl.loadortho();

gl.begin(gl.quads);

gl.multitexcoord2(

0, 0, 0

); gl.multitexcoord(

1, v_bl.normalized *v_s);

gl.vertex3(

0, 0, 0.1f

); gl.multitexcoord2(

0, 1, 0

); gl.multitexcoord(

1, v_br.normalized *v_s);

gl.vertex3(

1, 0, 0.1f

); gl.multitexcoord2(

0, 1, 1

); gl.multitexcoord(

1, v_tr.normalized *v_s);

gl.vertex3(

1, 1, 0.1f

); gl.multitexcoord2(

0, 0, 1

); gl.multitexcoord(

1, v_tl.normalized *v_s);

gl.vertex3(

0, 1, 0.1f

); gl.end();

gl.popmatrix();

這裡是用了乙個quard我做到用trangle了

要銘記一點 quard 和trangle的插值結果 頂多資料傳對了 插值是一樣的 沒有差別 因為都是線性的 這個問題我想了好幾個小時!

uv 和pos肯定是一樣的 dir也是一樣的 因為也是線性的

這意味著我接下來可以做大面積優化了 好開心

mg你太棒了 這個小故事告訴我們**要每一行都看懂 不要再像黑盒那樣抄了

vector3 topleft3 = topleft*2-bottomleft;//2

vector3 bottomright3 = bottomright*2 -bottomleft;//1

vector3 topright3= bottomright3+topletf3;//0

這裡因為scale過到farplane不能在原始那個nearplane的資料直接3x

Ue4 VolumeFog 體積霧 筆記

面向與初學者解惑 原理 體積霧使用原理很簡單,但是效能消耗大。慎用,或者優化使用 體積霧基於volume textrue,也就是3d textrue。乙個volume texture 通過uvw 取樣 對映到三維立方體的上的xyz點。簡單點說就是,volume texture 什麼樣,1 1對映到立...

體積霧的一種簡單實現

場景裡面一開始加的是預設的opengl霧效,效果不太好,看起來立體感不強,然後打算加個體積霧效果,搜了一些體積霧的實現方式,發現略複雜,就想了種比較簡單的實現方式 1 在場景的垂直高度上,一般是z軸,建立若干個水平的平面,大小要比場景大,疊在一起之後看起來效果類似乙個立方體 我是從z的 5到20,建...

Vulkan 片元著色器特效1 體積霧

我們在之前做過的案例 vulkan 動態地形細分 tessellation shader 本次特效也是基於此場景實現 中介紹過簡單的霧特效,通過它可以模擬很多現實世界中與霧 煙等相關的場景。但是簡單的霧特效也有一定的侷限性,如在實現山中煙霧繚繞的效果時就比較假。這是由 於簡單的霧特效沒有考慮到變化的...