Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

水の表現の挑戦

グラフィクスといえば水の表現!!(個人的意見)
ということで vulkan ray tracingで挑戦してみました。
結果はこちら

youtu.be


前回に引き続いて、反射/屈折の部分はガラスキューブと同じです。


ブログということなので、実装するまでで気になったことや工夫した点を主に残そうと思います。

水面の表現

水面は大量のポリゴンで表現しています。図は4.0 * 4.0四方の平面と水面を書いているだけなのですが、平面は三角形のポリゴン2つだけなのに対して、水面は一辺が0.02の三角形を80000ポリゴンで書いています。

波の位置の計算

最初はcompute pipelineで計算していたのですが、おそらく同期とかの部分の実装が甘く、ものすごく遅かったです。上記だと30fps程度ですが、compute pipeline使用時だと1fpsも出てなかったです。上記例では素直にCPUで計算しています。

波の計算式


y = -1.0 + sin(2\pi x) * sin(\pi t) + cos(2\pi z) * sin(\pi t)
としています。vulkanではxz平面に縦軸のyが下向きにあるので、このような式にしています。x方向とz方向で異なる運動の成分を持つようにすれば波っぽくなる気がします。

終わりに

以上、水面の反射/屈折の最も簡単な例を書いてみました。ここから発展させていって、もっときれいな水を表現したいものですね。