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