"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
Multiple volumetric datasets
1. Ray Casting of Multiple Volumetric
Datasets with Polyhedral Boundaries on
Manycore GPUs
SIGGRAPH ASIA 2009
2010/03/31
ked
2. Authors
Bernhard Kainz
PhD student
Markus Grabner
Assistant professor
Alexander Bornik
Senior researcher
Stefan Hauswiesner
Research assistant
Judith Muehl
Senior researcher
Dieter Schmalstieg
Full professor
4. Properties
Real-time frame-rates
Many volumes
Arbitrary polyhedral geometry
CUDA implementation
A 20k polygons dragon with a 2563
brain volume
and nine 643
smoke clouds
20. Triangle rasterization
y=0, n1(y)=1
y=1, n1(y)=1
y=2, n1(y)=1
y=3, n1(y)=2
Use r0
y=0, r(y)=0x0001
y=1, r(y)=0x0010
y=2, r(y)=0x0100
y=3, r(y)=0x3000
For a >=0 For a < 0
21. Triangle rasterization
y=0, n1(y)=1
y=1, n1(y)=1
y=2, n1(y)=1
y=3, n1(y)=2
Use r0
y=0, r(y)=0x0001
y=1, r(y)=0x0010
y=2, r(y)=0x0100
y=3, r(y)=0x3000
For a >=0 For a < 0
22. Depth sorting
Use 63 entries to keep depth order
A entry contains
Z-value
Triangle ID
23. Depth sorting + evaluation
Use 63 entries to keep depth order
A entry contains
Z-value
Triangle ID
81 depth data Their result Ground truth Errors > 5%
我們重複一下他們的重點,他們做出了一個 real-time 的成像系統,這個系統可以一次繪製多個 volume data ,也可以繪製多邊形資料,下面這個圖就是他們提供的一個範例,這隻龍是多邊形資料,這個腦袋是一個 volume data ,這些煙則有九個 volume data 。然後這個系統的核心是用 CUDA 來實做的,以前 volume rendering 大多是用 shader 來寫,但是 volume data 多的時候, shader code 的 unrolling 會變得太大,而 CUDA 則不會有這個問題。
這是我的 outline ,首先我會先解釋 volume rendering 跟 ray casting ,然後我會說明他們根據距離遠近,來繪製多邊形結構的方法,最後我會介紹他們的結果還有結論。
首先是 volume rendering 。
正常情況下當我們看向一團 volume data 的時候,得到的顏色是光線在 volume 中不斷反射之後的累積。各位可以想想前一陣子沙塵暴最嚴重的時候看出去的那一團霧茫茫的景象。
那如果 volume data 的粒子不互相反射,而只有發光和吸收的效應,就像下圖所表示的, volume data 的成像就是粒子的顏色沿著視線累加的結果,在這種情況下 volume rendering 就會像 x 光照射的成像結果,就像 video 展示的,他們的 volume rendering 就是用下圖的方法繪製,這個方式就叫做 ray casting 。
對於發光和吸收的效應,我們做一個簡單的公式推導,一個光強度為 c 的粒子,他到達眼睛的光強度是這段距離內吸收係數的指數積分。
所以要計算沿著視線光強度的累加,就是把所有距離的光強度積分起來。
他的離散式可以寫成右邊這個式子, c 是粒子的光強度, a 是粒子的不透明度,所以 1 減 aj 的乘積就是這段距離的透光率, ci 成以透光率就是每個例子貢獻的光強度,這些光強度的總合就是最後的結果。
這條式子又可以化簡成根據粒子距離由近到遠的疊代式, c’ 跟 a’ 是顏色和不透明度的累加結果, c 跟 a 是新加入粒子的資料,這條公式告訴我們,光強度的累積,就是由近到遠將之前強度的累加結果加上新粒子的強度乘以先前的透光度;而不透明度的累積,則是先前的不透明度加上先前的透光度乘以新的不透明度。
我們再用圖示做一個 ray casting 的總結,從 view plane 的每個 pixel 出發,沿著視線的方向進行取樣,然後由近到遠依照上述的公式做累加就可以了,右下角的圖是兩個 volume data 繪製的結果。