前往
大廳
主題 達人專欄

【Unity / VR / Shader】即時超音波模擬

%%鼠 拒收病婿 | 2022-05-15 19:51:40 | 巴幣 5508 | 人氣 968

前言

鑒於APIL曾推出過類似的專案如下,藉由科技教育的方式讓使用者能用更少的成本進行訓練。我們這邊的學校企劃,跨領域與醫護專業做合作,模擬超音波實練與病症辨別。我負責製作超音波模擬VR。


Demo:

*本專案只有做肝、膽。

程式碼文本在我的網站


超音波原理
由感測器發出聲波,返回的是該聲波垂直向下的頗面回聲(echo)圖,echo越強的像素越白。 因為器官表面不平,會產生音波漫射(diffuse),所以大部分是灰的。
特徵如下:
  • 液體和空氣幾乎沒有回聲,所以是黑的。
  • 組織到另一個組織時,若材質差異大,會產生邊緣高光(specular)反射。
  • 漫射的光會造成雜訊、顆粒感(speckle)。
  • 聲波每經過一層會反射的物質,其強度減弱,產生陰影。
  • 離感測器最近的組織回聲最強,隨著滲透越深,強度衰弱(attenuation)。




透視圖
先準備正常內臟模型,寫個簡單的透明shader並用alpha控制透明度來代表透光程度,讓攝影機最終呈現以下圖片:


邊緣高光
藉由sample 該uv的顏色與上面一點的uv的顏色,相減後取得顏色變化差距。 (只取上面的顏色變化是因為我們假設聲波來源是上面)


模糊後看的比較清楚:


強度圖
將顏色由貼圖上方往下加,建議看文獻[1]比較好懂。



Radical Blur
原理:根據(x,y)找到對應的( r , θ) 座標,取鄰近像素座標 ( r , Θ) =(r , θ ± l / 2 ) 平均值輸出。
這邊使用acos取角度:
以前我是用atan去算,但詢問了才知道atan不適合做連續角度的運算,在沒特別處理的話畫面會斷成兩半。

上層皮膚模擬
超音波圖之所以上面通常都是白白一絲一絲的,因為那是人的表層皮膚、肌肉,容易產生echo,所以偏白。 文獻[1]教了我們基本的超音波效果模擬,為了讓圖更逼真,所以再來多做一些吧( •̀ ω •́ )✧。
(來源wiki)

使用tanh取得上層偏白的遮罩,再調整一下參數可得到以下曲線:


搭配noise可得以下效果

再調整一下曲線讓他不要太白:

最終的曲線如下



扇型裁切
參考文獻[3],畫出扇型遮罩:

   


但我們需要的是右邊這種形狀的,所以再加點角度範圍判斷。

結果:



內臟透視
需求之一,讓使用者選擇想要觀察的內臟。

Stencil masking
來源文獻[4]

在人體等想被穿透的物體shader上加

能穿透的物件shader加上

缺點,只有PC能執行,由於Occulus輸出一體機是跑安卓系統,礙於該平台不支援,導致只會渲染在一顆眼睛上。


覆寫深度
無意間嘗試出來的。
原理:
第一個pass無視深度條件寫入背面,同時也會寫下深度,讓深度能在它之上的只有自己的正面,因此讓第二個pass正常渲染即可。


用戶操作
為了提升VR體驗,所以如影片中的感測器會自動貼合人體表面,防止穿模。


病症置入
專案會故意置入有病症的器官去訓練操作人員識別。
*備註: 螢幕旁邊的度量衡沒意義,老師叫我隨便畫個上去 = =
範例1:肝的囊腫
由於肝多是實體,呈黑灰色,其囊腫內容物多為液體,呈更黑的區塊。

範例2:膽囊結石
結石容易回傳較多的echo,所以會偏白,可以看到圖中有一顆較白的小球



額外閱讀
[5] 核磁共振是3D立體空間,而超聲波是建立在聲波網格(acoustic grid),渲染比較困難。
[6] 快速剖面演算法。 (因為超音波是取截面)
[7] 更專業的演算法吧。


參考文獻





送禮物贊助創作者 !
0
留言

創作回應

克萊
我之前上一堂資訊課是用擷取色彩RGB來定位血管 然後把血管以外變成黑色 血管變成白色方便作腎臟診斷w
2022-05-16 00:27:11
克萊
但是你這個感覺更專業了!
2022-05-16 00:27:35
%%鼠 拒收病婿
感謝,你那個聽起來也好專業@@
2022-05-16 15:54:51
OKHand
很酷ㄟ~看著看著就感覺很屌![e40]
2022-05-17 13:53:13
%%鼠 拒收病婿
目前只是渲染特效,沒有像文獻[5]考慮放射網格變形等等[e15]
2022-05-18 13:26:19
VR B超模擬器啊 請問需要塗耦合劑嗎ww 這能練習偽影的辨別嗎?
之後會不會有VR CT呢
2022-05-17 21:48:57
%%鼠 拒收病婿
雖然還是感覺怪怪的XD
CT功能是建模人體器官,在VR裡面我們把已有的內臟模型拿去做模擬CT然後得出內臟模型(?!
2022-05-18 13:24:42
ays.
單看圖片的話或許只要把腎臟的深度測試關掉 + 調大 renderqueue 就好了? 讓他單獨畫就會永遠疊在身體上面了
2022-05-19 11:38:25
%%鼠 拒收病婿
好像有試過,但某些接近轉角的背面會不正確的覆寫在正面上,看起來像破圖。
2022-05-19 13:00:41
追蹤 創作集

作者相關創作

更多創作