快速8-bit通道的偽HDR的實現

來源:互聯網
上載者:User
快速8-bit通道的偽HDR http://bbs.gameres.com/showthread.asp?threadid=23298

看了Hugo老師的文章,實驗了一下.
寫了一個Fragment shader,用ShaderDesigner寫的.

fakehdr.frag

//http://freespace.virgin.net/hugo.elias/graphics/x_posure.htm
//Hugo老師指出,曝光度是根據進入鏡頭的光線來決定的。
//在我們渲染完一個圖象後,應該採用float16格式來儲存。
//但是如果對於一個不是float16格式的Rendertarget,我們可以取
//周圍的顏色平均後作為決定曝光度的因子,
//以下的shader代碼應該說是非常偷工減料的。但是效果看上去還可以。
uniform sampler2D texture;
const float blurfactor = 12.5;//blur度,就是把多遠處的像素取過來
const float expfactor = 0.8;//曝光度
const float cdelp = 0.0009765625;//一個像素對應的float大小。我用的紋理是1024,自己去算
const float sharpness = 0.8;//看代碼。。。。

vec4 xposure(vec4 cl,float e)
{
return ( exp(expfactor) - exp(expfactor-e)) * cl;
}

void main()
{
float delp = blurfactor* cdelp;
vec4 texColor = texture2D(texture,vec2(gl_TexCoord[0].s ,gl_TexCoord[0].t ));
//把當前位置的顏色和周圍的做blur,算曝光度時候和算最後顏色結合的時候,權重是不同,
//最終的顏色是。。。。。
vec4 color = texColor*2.0 / 22.0;
color += texture2D(texture,vec2(gl_TexCoord[0].s+delp,gl_TexCoord[0].t+delp))*5.0 /22.0;
color += texture2D(texture,vec2(gl_TexCoord[0].s+delp,gl_TexCoord[0].t-delp))*5.0 /22.0;
color += texture2D(texture,vec2(gl_TexCoord[0].s-delp,gl_TexCoord[0].t-delp))*5.0 /22.0;
color += texture2D(texture,vec2(gl_TexCoord[0].s-delp,gl_TexCoord[0].t+delp))*5.0 /22.0;
float e = color.r * 0.3 + color.g * 0.59 + color.b * 11;
//算出了亮度資訊,
gl_FragColor = xposure(texColor*sharpness + color*(1-sharpness),e);
}

Blog 上不知道怎麼貼圖,詳細見
http://bbs.chinagamedev.net/showthread.php?t=9679

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.