香港新浪網MySinaBlog 精選話題工具
« 上一篇 | 下一篇 »
Percy | 4th Feb 2009 | 遊戲製作 | (698 Reads)
經過一天的努力, 終於完成實作HDR渲染!

首先看看效果圖:

Picture

 

 

再看看沒有HDR的渲染畫面:

Picture

在Real Time的時候還有Luminance Blending!

要留意的是...

地上的箭頭顏色真的由橙紅色變了黃色(不是因為HDR)

忘了關掉Random Color...哈哈


[1] 地圖問題

您好:
我發了信件到您的信箱~ >< 麻煩您收收看.
PS:您上次說過您很少看這個信箱....


[引用] | 作者 flash | 25th Feb 2009 | [舉報垃圾留言]

[2]

感謝你的提醒
已回覆

Percy
[引用] | 作者 Percy | 25th Feb 2009 | [舉報垃圾留言]

[3]

好久沒來了XD

大大完成了HDR阿

真是厲害

最近又反覆的閱讀了
您的網誌

小弟有些問題想在請教

EffectPass.Begin 非常昂貴, 到最後我改成render by material竟得到了大約20% ~ 30%的 performance gain

這段話又是什麼意思呢

通常繪誌模型的時候
該怎麼去render by material呢?

希望大大可以幫小弟解惑

感謝^^


[引用] | 作者 Allen | 16th Mar 2009 | [舉報垃圾留言]

[4]

你好, 好久不見

 

在遊戲場景中

很多時都會有使用相同material的物件

Render By Material 可以提高渲染同一物件時的效能

我的作法是儲起將要渲染物件的World Matrix, 然後逐個draw

 

流程大概是:

Effect.Begin();

EffectPass.Begin();

foreach (WorldMatrix)

     WorldEffectParameter.SetValue(WorldMatrix);

     Effect.CommitChanges();

     Device.Draw(...);

EffectPass.End();

Effect.End();

 

這種作法的好處是, 如果要渲染想同material, 跳過了重複的EffectPass.Begin / End, 甚至 Effect.Being / End

 

關於詳細的實作, 你可以參考這個系列的範例

http://creators.xna.com/en-us/sample/shader_series5

 

Percy
[引用] | 作者 Percy | 16th Mar 2009 | [舉報垃圾留言]

[5] Re: Percy

大大的意思是

如果今天有BoxA BoxB用了同樣的Effect
但是不同texture 這樣可以算是同一個material嗎 還是texture也要相同呢

然後相同的部份 在EffectPass.Begin()後
去給予每個Model的World
接著做DrawCall的部份
做完再做EffectPass.End()

是這個意思麻
小弟有點愚笨

還有一個小小的疑問
因為看到大大在MSDN討論區
http://social.msdn.microsoft.com/Forums/zh-TW/905/thread/69a71894-2b18-4dd9-98f4-84c01c5d290a/

有看到大大提出 輸出物件都結合再同一個

減少DrawCall的次數
那分開輸出 對於資源效能的控管上 不會比較好嗎 因為小弟之前試做將一個場景所有的東西
都結合在同一物件上 非常的吃資源

是應該去做Level Editor去處理這方面的問題嗎

希望大大可以幫我解惑啦

感恩


[引用] | 作者 Allen | 17th Mar 2009 | [舉報垃圾留言]

[6]

可以不同texture

只要EffectParameter之後再Effect.CommitChanges就可以了

 

嗯, 就如你所形容的

 

遊戲編程很多時都需要在效能和記憶體之間作出取捨

犧牲資源(記憶體)往往能大大提高效能

例如場景上有一萬個箱子, 逐個渲染一定會非常慢

但若果你將一萬個箱子結合為一個Vertex Buffer

只需一個Draw Call, 會快很多(大概由0~10FPS提升到數百FPS)

但是這樣會製造出一個很大的Vertex Buffer

有些Display Card的記憶體甚至不足以接收這個巨大的Vertex Buffer, 這時候就要將這Vertex Buffer 分散到其他更小的Vertex Buffer

 

如果你有很多資源和時間

做一個Level Editor 去管理場景物件當然好啦

一般情況下,  大多也不會將整個場景整合做一個Vertex Buffer的, 因為太耗記憶體了

其實很多時在3D 繪圖軟件(如3ds max)將外表一樣的物件整合做一個, 已經幫助不少了

 

Percy
[引用] | 作者 Percy | 17th Mar 2009 | [舉報垃圾留言]

[7]

感謝大大為我解惑

獲益良多
Effect.CommitChanges的功能主要是幹嘛呢

然後小弟還有一個關於SHADOWMAP的一些問題

在做的時候 Projection的FAR 如果把它調整大一點 算出ShadowMap會有問題存在耶

不是算不出來 就是算不對 為什麼呢

有辦法去解決這個問題嗎?

感恩


[引用] | 作者 Allen | 18th Mar 2009 | [舉報垃圾留言]

[8]

Effect.CommitChanges 是告訴Effect去更新EffectParameters

Shadow Mapping有很多種方法去實作
我不清楚你是用哪一種
不過我推測將FAR值提升,會降低Precision(精確度)
所以有不對的情況

你使用的Shadow Map RenderTarget是哪一種Format? 如果不是Color的話可以試試Color Format

Percy
[引用] | 作者 Percy | 19th Mar 2009 | [舉報垃圾留言]

[9]

恩 就是把far值提升

整個影子邊緣會出現鋸齒狀

我用的是
Deferred Shadow Maps

http://www.ziggyware.com/readarticle.php?article_id=235
之前有用過其他的shadowmap

只要將far值加大 影子就會有不佳的情況出現
可是他原本範例的預設far值為40
實在是太小了

還有有其他推薦的shadowmap範例嗎?
感謝大大不厭其煩的一直幫我解決問題><
感恩


[引用] | 作者 Allen | 19th Mar 2009 | [舉報垃圾留言]

[10]

可以看看這個PSSM

http://appsrv.cse.cuhk.edu.hk/~fzhang/pssm_vrcia/

有XNA 的源碼

Lost Planet 也是用這種Shadow Map的

但我沒有深入研究過

Percy
[引用] | 作者 Percy | 20th Mar 2009 | [舉報垃圾留言]

Next