Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

ガラスキューブをレイトレーシングで

ray tracingでガラスのレンダリング

f:id:Aqoole_Hateena:20220407230451p:plain
ガラスキューブ1
f:id:Aqoole_Hateena:20220407230526p:plain
ガラスキューブ2

ray tracingの真骨頂といえば、透過と反射だと(個人的には)思っていて、Androidでray tracingするからには、どこまで反射と屈折の回数を増やして計算できるのだろうと思っていた。
図の例では、3回反射と屈折を繰り返している。4回行うと途中でエラーしたので、この辺が限界のよう。
ray tracingでは、何も考えずにレイを飛ばしてヒットした先でレイを飛ばす、のようなことを行うとレイがミスする点がだんだん増えて図のように黒くなる点が増える?と思っているので、この辺りは要修正か。

環境

バイス : Samsung Galaxy S22
SoC : Exynos 2200 (Xclipse 920)

シェーダー

図のレンダリングはrchitシェーダーを2つ(AとBとする)使用してレンダリングしており、AのシェーダーからtraceRayEXTを呼び出し、レイがヒットした先でBのシェーダーを用いて色を取ってくる、といったことを繰り返している。
AMD系のGPUはrecursiveで呼び出すことができないので(昔試したときはそうだった)、このような手法にしている。
また時間があれば、シェーダーの中身も詳しく書きたい。