lighting box 2.7.2
halfspace fog 相機位於乙個位置 這個位置可以在fog volumn裡面或者外面 霧開始的地方就是文中的plane
這個fog volume可以從中間某個位置height 這個平面產生霧 遠近濃度通過depth深度計算
還可以定義霧密度
//fdocc = campos.y-height.value; height 就是halfplane所定義的高度 plane法線垂直向上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)
//這裡是用了乙個quard我做到用trangle了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的插值結果 頂多資料傳對了 插值是一樣的 沒有差別 因為都是線性的 這個問題我想了好幾個小時!
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 本次特效也是基於此場景實現 中介紹過簡單的霧特效,通過它可以模擬很多現實世界中與霧 煙等相關的場景。但是簡單的霧特效也有一定的侷限性,如在實現山中煙霧繚繞的效果時就比較假。這是由 於簡單的霧特效沒有考慮到變化的...