2010年5月30日 星期日

Shadow Mapping and Shadow Volumes

http://www.devmaster.net/articles/shadow_techniques/

Abstract

In recent years, both Williams’ original Z-buffer shadow mapping algorithm [Williams 1978] and Crow’s shadow volumes [Crow 1977] have seen many variations, additions and enhancements, greatly increasing the visual quality and efficiency of renderings using these techniques. Additionally, the fast evolution of commodity graphics hardware allows for a nearly complete mapping of these algorithms to such devices (depending on the GPU’s capabilities) which results in real-time display rates as seen in the real-time version of Pixar’s Luxo Jr and the use of hardware shadow maps therein. In this article, we describe the major contributions since Williams’ and Crow’s original publications in 1978 and 1977 respectively, briefly present both the shadow mapping (which is computed in image space) and the shadow volume algorithms, present more sophisticated approaches to shadow mapping which are better suited to high quality off-line renderers and describe the aliasing problems inherent in all shadow algorithms which operate in image space (and proposed solutions). Finally, we describe new extensions to the existing algorithms such as perspective shadow maps as described by [Stamminger and Drettakis 2002] in the 2002 SIGGRAPH conference, and robust stenciled shadow volumes by Mark Kilgard [Everitt and Kilgard 2002].

Shadow map save as texture

http://www.gamedev.net/community/forums/topic.asp?topic_id=180931
當first pass做好的shadow map它的格式可能為R32F,應該要轉成ARGB8的格式才能被儲存。

http://www.gamedev.net/community/forums/topic.asp?topic_id=534392&whichpage=1&#3453499

告訴我,dx9並沒有辦法直接透過surface去取得depth texture(xbox360好像可以辦到),除非是Nvidia的PCF,或是ATI的Fetch4,但是這兩種方法都會造成d3d debug runtime invaild。

http://www.gamedev.net/community/forums/topic.asp?topic_id=566495
這邊說到OpenGL可以透過FBO取得depth texture,但是D3D要到10.0之後才支援這項功能,最後提到了如果要cross不同API還是做R32F的color texture。

目前最單純又cheap的方法還是用R32F的color map。

http://developer.nvidia.com/object/hwshadowmap_paper.html

Hardware Shadow mapping - Nvidia

關於render target的注意事項

引述自: http://blog.csdn.net/xoyojank/archive/2009/02/11/3876843.aspx

1. 设置一个RenderTarget会导致viewport变成跟RenderTarget一样大

2. 反锯齿类型必须跟DepthStencilBuffer一样

3. RenderTarget的类型必须跟DepthStencilBuffer的类型兼容, 可以用IDirect3D9::CheckDepthStencilMatch进行检测

4. DepthStencilBuffer的大小必须>=RenderTarget的大小

5. IDirect3DDevice9::SetRenderTarget的第0个不能为NULL

6. Usage为D3DUSAGE_RENDERTARGET的Texture不能进行反锯齿, 而且Pool必须为D3DPOOL_DEFAULT. 如果想利用RenderTarget做为纹理又想反锯齿, 可以先把场景渲染到一个CreateRenderTarget创建的Surface(或BackBuffer)上, 再用IDirect3DDevice9::StretchRect拷贝到纹理上

7. D3DX提供了一个ID3DXRenderToSurface, 简化了RenderTarget的使用. 注意它的BeginScene跟EndScene与再用IDirect3DDevice9的同名函数对不能嵌套, 因为实际上内部还是调用的IDirect3DDevice9的, 用PIX可以看到它进行了哪些调用. 还有就是这个接口仍然不能反锯齿, 而且每次都要保存/恢复一堆状态, 总觉得不爽

8. RTT不能既做为输入就做为输出目标, 某些显卡上可能只会给一个warning, 有些显卡上则会发生报错/黑屏/死机之类不可预计的事情...另外, Depth stencil texture(参见Hareware shadow map)也有同样的问题, 用完之后要SetTexture(n, NULL)清空, 不然A卡会黑屏/花屏/深度错误, 既使你没有使用, 只要它被寄存器引用了, 显卡还是会当做是正在使用的, 这时就不能做为depth stencil buffer

9. RTT如果想保存到文件中, 是不能直接SaveToTexture的. 需要创建一个OffscreenSurface, 拷贝过去, 再保存. 不过N卡好像不支持DXT1格式的OffscreenSurface, 可以创建Texture, 取其level0的surface代替.

10. N卡在开启了锯齿后冒似所有的RTT都要反锯齿, 不然深度测试会失败-_-

11. Intel的显卡在RTT没有设置DepthBuffer时可能所有绘制全部深度测试失败, 需要关闭深度测试再画.

葉師傅贏了~~~

今天看了葉問二,無論對手犯規在鐘響後偷拳,還被限制無法使用腳。在總總不公平的環境下,仍然能夠突顯出自己的決心,這才能讓別人明瞭出自己的價值。

2010年5月16日 星期日

真想只專心寫我的shader...

當我的工作跟別人卡在一起,就會被催促先去弄什麼什麼,不然誰的畫面看起來就不能夠先正確。我也知道這樣說可能會不太負責,我們本來就是開發中的引擎,畫面現在不太對也是正常的,我也會盡快去處理的阿...現在引擎很多架構都還在制定中,我真的很想早早把底層給寫完,不然其他人用我們引擎寫shader,還要去動到底層的結構...。 有時候真想躲起來,專心的寫shader就好了,話說最近為了支援lighting,不停的拆解shader讓我有點累了...之後每支援一種效果都要build 14種shader嗎?

2010年5月9日 星期日

John Carmack GDC 2010 Lifetime Award



John Carmack是PC game史上的傳奇人物,隨著他的技術進展,PC game的硬體規格也跟著進化,甚至許多rendering相關的專有名詞,也是跟著他們的成就而被命名。

關於J.C.以及id software他們的自傳,可以閱讀Masters of Doom(DOOM啟示錄)一書來了解,或是觀看猴子靈藥的文章介紹。

《DOOM啟世錄》:遊戲界的傳奇英雄:John Carmack & John Romero
http://blog.monkeypotion.net/book/gamedevbook/masters-of-doom-2

Rage PC Games Interview - John Carmak Interview

Rage at IGN.com

對於John Carmack的傳奇我就不用多說了,光從他獲得今年GDC 2010的Lifetime Achievement Award就可以被了解。

這次公布了他的新引擎id tech 5開發的Rage,使用了mega texture。id的引擎每一代都有它的創新技術,諸如tech1採用了BSP, PVS的scene graph,tech 2支援3D硬體加速以及lightmap,tech 3的fixed-function shader script和dynamic shadow,tech 4支援了shader model,提供了per-pixel lighting and bump mapping,並且採用skeletal animation等等。
http://en.wikipedia.org/wiki/Id_Tech

2010年5月8日 星期六

投上Journal了~~~

等了兩年,我終於等到我以前念碩班的論文,投上SCI級的Journal了~~~

Alan Wake -Building the Technology- Trailer



Alan Wake(心靈殺手)這部2010年三月release的Xbox 360獨占遊戲,其開發商為Remedy Entertainment,公司團隊位於芬蘭,團隊創立於1995年,已具有15年的開發經驗,近年來的作品為Max Payne(江湖本色)系列。
http://www.remedygames.com/

這次本作品的引擎為自行開發,由於市面上的引擎無法滿足其光影以及技術上的需求。

2010年5月4日 星期二

我的shader架構訂錯了?...

最近每天上班都越來越不像在寫shader code,反而像是在build shader code。因為我很不想把shader拆成很多份,但是隨著功能的需求,已經變成不拆不行了...我現在每天都要拆個七八份去rebuild...

還有我覺得我的shader相關的script訂的可能也不是很周密,今天做相關tool的人跟我抱怨:早叫你當初就訂的完備一點,現在可能整體工具介面都要被改掉...我知道這已經是他很重的口氣了,但是當初的我也是第一次做,我沒有那個經驗可以弄得這麼縝密...好吧~~~希望能在這個prototype後找出所有的問題點,一口氣被改正@@~