or….
How I learned to stop worrying and accept that the PS3 is perfect for doing real time radiosity XD
Source:
http://www.geomerics.com/documents/GeomericsDevstation2007.pdf
News:
http://www.gamasutra.com/php-bin/news_index.php?story=10031
July 11, 2006
Product: Geomerics Debuts Real-Time Radiosity Solution
http://www.gamasutra.com/php-bin/news_index.php?story=12812
February 19, 2007
Product: Geomerics, Epic Partner To Enlighten UE3
http://www.gamasutra.com/php-bin/news_index.php?story=14659
July 12, 2007
Geomerics Gets $4mil Investment, PS3/360 Middleware Invite
2006年7月的時候,屬於劍橋大學的一個學術兼遊戲媒體製作單位Geomerics發表了它們的第一個產品「Enlighten」,作用是一個tookit可以在其餘的繪圖引擎內加入Real time Radiosity的效果。
然後2007年2月的時候與Epic簽約,整合進UE3;並且在GDC07的時候展示了XBOX360版。(正好在同時,まいにちいっしょ也做出了類似Real Time Radiosity、或者說Ambient occlusion的效果,演算法來自3dsmax知名的plug-in,SkyLight)
今年5月的時候,Devstation 2007上他們發表了PS3上的Enlighten研究成果,標題如上。
“以光替萬物上色:Enlighten 與 PS3的配合”,或者說:”我們終於學到了PS3做Real Time Radiosity實在是屌到不行“XD
所以我們來提一下他們到底做了什麼。
Enlighten的功能大致如下:
- Real-time radiosity
- Dynamic lighting environments
- Colour bleeding
- Soft shadows
- Character lighting
- Ambient occlusion
- Specular highlights
- Normal mapping
- HDR
- Cross-platform compatibility
其中,Radiosity(熱輻射演算法)的內容請參照Geomerics本身提供的資訊,或者是Wikipedia。
Enlighten在PC和XBOX360上的作法,應該是用CPU或GPU的資源,產生有Radiosity效果的各種材質,然後讓GPU讀回來打光。
而PS3上的Enlighten則是使用SPE。
問題來了,SPE這東西讓諸多廠商又愛又恨,感覺上能做的東西很多,但是又不知道怎麼做。
比方說,SPE靈活度很高,但是性能夠嗎?延遲如何?它能幫助打光流程多大?這麼重大牽涉到整個render流程的東西,真的有辦法靠SPE做嗎?而且用SPE做會不會佔掉很多資源?
所以,以下是他們的報告:
1. SPE真的非常powerful。
Lots of good examples of SPUs doing useful things
– ‘Offline’ image processing
– Animation
– Physics
– Compression
– Progressive meshing
– Blend shapes
– Extreme vertex/triangle processing
(see: The Naughty Dog guys talk from gdc 2007:
https://ps3.scedev.net/projects/gdc_2007) *:需要帳號
– Clearly very powerful!
2. 但因為架構的關係,它沒有強到可以提供GPU fillrate的代用方案。
當初David Kirk所曾提到的Post-processing的作法,實用度也不高。
Not so hot at replacing fillrate
– Bit difficult to use it as a substitute GPU
– Can’t really render part of the scene on SPU and combine results on GPU
Triangle rasterisation setup, streaming…
Hardware filtering, mipmaps, perspective correction…Antialiasing,zbuffering,stencilling…
GPU really benefits from having dedicated hardware for this
Would be god damn complicated– Also not really workable for post processing
Render scene >dma round through SPUs >process >render through GPU again
Could delay results by a frame?
Still not particularly desirable and large amount of data to move
3. 但是SPE卻很適合Texture Generation;而因為結構上的設計特性,RSX也可以相當有效率地讀取這些東西,而這個作法也可以比較容易整合進繪圖流程裡面。
也就是說,Enlighten在PS3上作法,其實是透過SPE產生以材質為形式的資訊,讓RSX可以取用。
Most previous work has focused on vertex based operations
– Makes sense given flexibility of SPUsRSX can efficiently read textures straight from main memory
– Huge advantage for generating anything intended for the GPU on the SPU
– One of the best points of the PS3 architectureTextures easy to process on SPUs
– Simple to stream in/out in chunks
– However, random accesses need to be made coherent – so not much good if you can’t do thisEasy to do inplace modifications
– Possibility of progressively updating a texture
– No need to double buffer if you get sync right
4. 不過這東西因為是用額外材質的方式送給GPU,所以要加進原來頻寬就很吃緊的繪圖流程中會變得比較困難,比較好的方式是整合一些壓縮來減少頻寬負擔。
Memory bandwidth is likely to be the bottleneck
– Generating large textures is going to generate problems in a heavily loaded system
– Generating full screen images still going to be unfriendly
– Compression is your friend
– Need to make your memory usage countTextures are just a storage medium
– Ultimately just a way of getting data into shaders
– Many possibilities!
原理講完了,來點爽快的數字吧,Geometrics提供了他們在SPE上執行的效果與性能數字。
基本上Enlighten本身為了求可以整合進客戶的繪圖流程,他們表示Enlighten本身在一般的GPU(這應該指的是Xenos,或者是同時期的高階SM3 device,在GDC06[06Q1]的時候應該是G71和R580)上可以達到100fps的速度(也就是大約10ms左右),這樣才能在實際工作的狀況下,維持60fps。
當然它使用到了Render to Texture之類的技術,所以頻寬其實吃得也不會少,如果GPU負載高的話他們也有提供offload到Host CPU(比方說Xenon的Host CPU其中一個thread、或者是PC上的Multi-Core)的功能。
但是在PS3上,他們企圖全部由SPE來處理。因為RSX其實頻寬並不是很充足,做Render to Texture本身就是個很耗資源的事情。
Originally implemented a GPU version for reference on the PS3
– Runs perfectly fine, but expensive resource
結果SPE…. 實在太快了。XD
在1個SPE上只佔了5ms的執行時間,幾乎是60fps(15ms per frame)下1/3的單SPE資源,或者是SPE總資源的5%左右(5/ 15×6 大約5.5%)
(順道給個對比,當初まいにちいっしょ用了總共4個SPE來達到30fps,大約135ms;不過因為本身型態所致,他們畢竟沒有花很多時間在optimize上;而Geometrics的optimize工作,至少有從1月收到PS3硬體,到五月 Devstation07 發表之間這段時間可作,他們主要的業務也是這個)
SPU version much faster
– System runs in 5ms on a single SPU (!)
– That’s = 1/3r d of an SPU @ 60 fps
– Or 5% of the total SPU potential at 60fpsThat’ s why we are excited
– Algorithm is scalable so we can crank up the quality
– Still need to explore possibilities unique to the PS3
– SPUs are more flexible than GPUs – haven’t really exploited this yet
– Very promising future!
這超屌的….如果前面的100fps(10ms)的數字是確定的話,那相當於單顆SPE就可以比C1、R580和G71還快兩倍。(!)
總之,除了GPU讀texture之外,實質上對GPU沒有額外的負擔;相對於其他系統而言需要GPU做R2T再讀回來需要兩倍的頻寬與時間,又會影響GPU的PS可用資源,即使offload到CPU上,也會另外需要足夠的I/O頻寬來負擔傳輸所需。
PS3有SPE處理、FlexIO提供充足的頻寬,RSX針對主記憶體內的材質做了改進,使得Enlighten在PS3上的執行變得非常有效率。想當然爾,這讓Geometrics非常振奮,並預期還有很大的進步空間
不過這也預告了一件事情:就像上面Geometrics所提示的內容,SPE畢竟和RSX之間有距離限制,高度整合的fillrate replacement(如讓SPE做AA)、或者是post-processing確實是不很實際,未來的SPE assistence應該都會在Texture Generation的基礎上做。
相關的討論在PIL也發了一份。
http://we.pcinlife.com/thread-806346-1-1.html
這應該比較接近 RPU
看樣子Cell在繪圖上的表現之出色程度超出很多的預測,
但Post-processing方面就不如預期了,
不過我想Cell替RSX省了比較費事的處理,
所以1080P 60fps+2*AA and HDR在未來應該不難達成…^^?
(雖說有偷吃步的方法達成1080P,但還是期望在未來盡量不用^^a)
話說PS3要撐10年,
不知未來這段時間內能否看到PS3實作DX10等級的Pipeline…^^?
Ok,焦點轉到SPE實作Texture Generation方面,
我想Eji大內文中的這句話
“如果前面的100fps(10ms)的數字是確定的話”
應該用肯定的…
因為”SPU version much faster”,
所以肯定是高於Eji大所舉出的GPU…^^a
小弟在巴哈TVGAME哈拉版有看到Eji大回那篇JC文,
您有提到這句
“而且就算不考慮OS,只考慮對GPU而言的延遲問題,
光分成兩塊這點就已經比較吃虧了。”,
是因為多一次copy到GPU local Memory的動作嗎^^?
分成兩塊的話,一塊是和ROP共用的22.4GB/s GDDR3,一塊是FlexIO的20GB/s(似乎固定扣掉5GB/s)的讀取頻寬。
RSX可以直接render回主記憶體、也可以直接從主記憶體取用材質,這是確定的。
而針對延遲部份,理論上材質快取其實是有擴充的,所以某種意味上應該是沒有特別大的問題….但是大塊的單塊材質可能比較容易遇上沒辦法放在這兩邊剩下空間的狀況。所以MegaTexture其實很可能是醍醐灌頂般的幫助。
RSX對這兩塊的存取速度並沒有很慢。這是有實測的。但是ROP的話,alpha blending之類的frame buffer access應該是只能對GDDR3作業,所以這部份性能比較弱,我是覺得這部份影響比較大….
話說XBOX/360這種UMA,只要改個指標就跑到GPU上了….當然傳輸很快XD
Fillrate replacement 和 Post-Processing 這兩個應該都是因為I/O延遲的關係(需要RSX先寫到主記憶體、然後SPE讀取、寫回主記憶體後RSX讀回去顯示),需要的頻寬和延遲都太大,所以沒辦法用在3D上,並不是offline的狀況下性能沒辦法做這些事情。
以現在的狀況來看,SPE應該是因為內部頻寬很大、延遲也小,所以所以做這些事情適合,說起來SPE的ALU也只是普通強大的性能而已….
>FlexIO的20GB/s(似乎固定扣掉5GB/s)
如果是為了讓Cell讀取存放於GDDR3的32MB系統,
那我期望SCE趕快將整個系統縮減,
以至於Cell不要對GDDR3做存取^^a
(說真的,Cell只有存GDDR3的速度比取好^^?)
所以這些頻寬還是有效的被用於RSX存取XDR比較好^^?
就小弟對TurboCache所能帶來的效果認知,
有深度 buffer、色彩 buffer…等,
當然包括Texture buffer,
但對於大塊的單塊材質而言,
可能就像Eji大所說的”MegaTexture其實很可能是醍醐灌頂般的幫助。”^^a
Fillrate replacement 和 Post-Processing這兩方面,
我覺得如果RSX直接與EIB連接的話,
應該就不難解決^^?
(但這樣問題還是很多,光錢就是很大的問題囉XD)
目前那個5GB/s雙向保留頻寬,看起來是保留給PCI Express x16的啊….orz
也就是說,最糟的情況RSX內部其實是FlexIO進去之後,再轉接成PCIe和另一塊記憶體控制器(這也可以解是RSX大得不尋常的部份)。
這也造成RSX存取XDR的時候其實快得異常,因為RSX這部份的記憶體控制器其實直接是直連的(FlexIO-EIB-XDR)。
不過SCE看到這個ip的時候難道不會抓狂嗎?他們看得到設計吧。
Fillrate replacement和Post-processing都是吃記憶體頻寬的東西,所以對console而言,做eDRAM裝下去其實是正途….(一般也對SCE有這個期待,因為他們明明是eDRAM的專家,當初沒用真的超怪)
給PCIe的0o0?
所以圖示是這樣的嗎?
|—PCIe
FlexIO—|
|—記憶體控制器
那也就是說Cell是靠著這雙向5GB/s來與RSX聯絡溝通囉?
還是這雙向5GB/s還處在未開放的狀態^^?
沒用eDRAM應該是成本考量吧?
光1080P的量就是720P的2.25倍,
這應該不是XBox360那10MB就能滿足了的,
但真懷疑SONY是真的沒MS那麼多的錢來燒嗎^^?
不過eDRAM真是Fillrate replacement和Post-processing的救星,
話說小弟我當時也是猜測eDRAM會被採納,
但現在呢?
SONY把eDRAM還給我的PS3…XD
圖示有點怪怪的…
重打一次,
FlexIO
|
|
|———|
| |
| |
PCIe 記憶體控制器
圖還是怪怪的,
用打子的好了,
FlwxIO接PCIe是上行5GB/s、下行5GB/s,
而接記憶體控制器是上行15GB/s、下行10GB/s。
嗯,就是這個意思。
其實說真的,SONY在0.18um的時期就做過32MB的eDRAM,那個規模就像在PS2時期做7800GTX的量….但是它的die size其實也沒真的很大,容量大了八倍、但是面積只大了兩倍多一點(用同製程比例,實際上是0.25um原始版的1.6倍大)。
所以可以知道GS的eDRAM吃的空間不大,其實大半耗在crossbar上面。這回應該不是成本問題,而是時間不夠。而時間不夠的原因又是上市時間定太趕….如果PS3是”現在”才上市的話….
GS I-32先前寫的東西放在這邊:
http://www.aiplus.idv.tw/…rticleId=1750&blogId=2
話說上面提到的FlexIO問題,如果真的是這樣的話,那RSX的die size真的是不知道大什麼意思的….orz
每次提到PS3的發售時間,
心中總有無奈感,
聽Eji大這說法,
更感到…說不下去了Orz
http://www.n4g.com/News-61628.aspx
http://www.profxengine.com/
ProFX基本上是個Procedural Texture middleware,也是宣稱在PS3上效果會不錯。
這東東和MegaTexture是類似的東西嗎^^?
完全相反的路線,它是透過程式運算產生材質的middleware….