irrlicht引擎:Bloom效果
先上圖,再說(shuō)點(diǎn)別的。
BLOOM開(kāi)
BLOOM關(guān)
在IRRLICHT中實(shí)現(xiàn)BLOOM,和其它引擎中沒(méi)有太多的不同。 SHADER還是那個(gè)SHADER。
關(guān)于BLOOM的算法,也就那樣了,沒(méi)有特別之處,況且,我這BLOOM很暴力
render scene to texture.
1/4 downsample 選擇暴光像素
h_blur 7次采樣 和權(quán)重混合
v_blur 7次采樣 和權(quán)重混合
compose 兩圖疊加
下面說(shuō)說(shuō)我在irrlicht中實(shí)現(xiàn)post processing的方案。
在irrlicht中是沒(méi)有屏幕對(duì)齊四邊形節(jié)點(diǎn)的,如果要特殊擴(kuò)展,就只能修改代碼了。我是盡量保證自己不修改IRR一行代碼, 除非是真正使用時(shí),要對(duì)效率進(jìn)行優(yōu)化。前現(xiàn)實(shí)現(xiàn)的GPU蒙皮,水面,鏡面等,都沒(méi)有修改過(guò)一行代碼, 因?yàn)槲也幌胍驗(yàn)樽约旱囊粫r(shí)需求,而改動(dòng)了那一堆。 當(dāng)我真的需要改動(dòng)irrlicht才能達(dá)到目標(biāo)的時(shí)候,表示irrlicht中我使用的部分,可以退休了。
渲染場(chǎng)景的時(shí)候,我們通常在使用addXXXXSceneNode的時(shí)候,都默認(rèn)不傳父節(jié)點(diǎn)。這樣就是默認(rèn)的場(chǎng)景根節(jié)點(diǎn)。但是,當(dāng)我們要做post process的時(shí)候,就需要對(duì)場(chǎng)景中的物體進(jìn)行顯示的開(kāi)和關(guān), 于是,我們?yōu)榱撕芸焖俚乜刂疲?于是將普通場(chǎng)景節(jié)點(diǎn)多加了一個(gè)父節(jié)點(diǎn), 而post processing作為場(chǎng)景的兄弟節(jié)點(diǎn), 這樣在渲染的時(shí)候,就可以方便地進(jìn)行相關(guān)控制了。
大概是這樣的
RootSceneNode
PostProcessingNode SceneOjbectsNode
Obj1… Obj2….Obj3…
流程:
關(guān)閉 PostProcessingNode , 渲染 SceneOjbectsNode 下所有的物體到RT上。
關(guān)閉 SceneOjbectsNode, 打開(kāi)PostProcessingNode, 進(jìn)行一系列的后期效果處理。
在irrlicht中是沒(méi)有提供屏幕對(duì)齊四邊形繪制的, 如果手工構(gòu)建,就很麻煩。 所以,我采用的是一種很常見(jiàn)的手法, 即通過(guò)UV坐標(biāo)來(lái)計(jì)算最最終的頂點(diǎn)坐標(biāo)值。
VS的輸出,是規(guī)一化坐標(biāo)系, 即X,Y是處于 (-1,1)之間的, 于是。 我們只需要 pos = (uv-0.5)*2; pos.y = –pos.y;就可以了。
最近一直在加班,沒(méi)時(shí)間整理出代碼。 有興趣的朋友可以加下面的群
Irrlicht Engine-China
254431855
posted on 2013-04-11 00:49 麒麟子 閱讀(2161) 評(píng)論(0) 編輯 收藏 引用 所屬分類: Irrlicht