Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

2021-01-01から1年間の記事一覧

Android NDKを用いたC++でのtouch位置取得方法

android_main()でコールバック関数の登録 android_appにinput eventが通知された際に呼び出されるコールバック関数を登録する。 int32_t handle_input(struct android_app* app, AInputEvent* inputEvent) { //define app process } void android_main(struc…

Bufferにデータをコピーする方法について

サンプルコード git hubで公開されている、android + vulkanでのbufferにデータをコピーするの部分について考察してみた。 android-vulkan-tutorials/tutorial05_triangle at master · googlesamples/android-vulkan-tutorials · GitHub サンプルとしては以…

main loopのsynchronization考察

サンプルコード git hubで公開されている、android + vulkanでのsynchronizationの部分について考察してみた。 android-vulkan-tutorials/tutorial05_triangle at master · googlesamples/android-vulkan-tutorials · GitHubmain loopの関数は以下 bool Vulk…

Image Layout Transitionsについて

Image Layout Transitions memory dependenciesの例としてImage Layout Transitions*1がある。 Image Layouts 仕様書にはこのように書かれている。Vulkan® 1.2.202 - A Specification (with all registered Vulkan extensions) Images are stored in impleme…

synchronizationとdependenciesについて

Synchronization 仕様書にはこのように書かれている。Vulkan® 1.2.202 - A Specification (with all registered Vulkan extensions) Synchronization of access to resources is primarily the responsibility of the application in Vulkan. The order of e…

BuffersとBuffer Viewsについて

Buffersについて 仕様書によるとVulkan® 1.2.202 - A Specification (with all registered Vulkan extensions) Vulkan supports two primary resource types: buffers and images. Resources are views of memory with associated formatting and dimensiona…

ImageとImageViewについて

Imageについて 仕様書によるとVulkan® 1.2.202 - A Specification (with all registered Vulkan extensions) Images represent multidimensional - up to 3 - arrays of data which can be used for various purposes (e.g. attachments, textures), by bind…

Render Pass, SubpassとFramebufferについて

Render Passについて 仕様書には次のように書かれている。 Vulkan® 1.2.202 - A Specification (with all registered Vulkan extensions) Draw commands must be recorded within a render pass instance. Each render pass instance defines a set of image…

Vulkan Surface作成 on Android

Surfaceとは "Vulkan® 1.2.202 - A Specification (with all registered Vulkan extensions)"内で SurfaceはWSI(Window System Integration)の章の見出しのひとつのWSI Surfaceとして紹介されている。 つまりSurfaceとはVulkanのWindow Systemの扱い方である…

Vulkanプログラムの作成開始

VulkanプログラムをAndroid Studioで作成することを始めてみた。 サンプルコード https://github.com/googlesamples/android-vulkan-tutorials 三角形の表示やテクスチャの使用がチュートリアルとして提供されている。 windowの表示 tutorial4まで進めると、…

共有ライブラリの作成方法@vscode in Linux

Linux + vscodeの環境での共有ライブラリ(実行時ライブラリ、ランタイムライブラリ)の作成方法について調べた。 結論 簡単に結論から 1. 共有ライブラリの作成 clang++(g++) -fPIC -shared -o <libshared.so.1.0.0> xxx.cpp yyy.cpp ... 2. シンボリックリンクをはる ln -nfs lib</libshared.so.1.0.0>…

caustics map

youtu.be caustics mapという言葉はないかもしれませんが、今回はcausticsの強さを事前に計算するパイプラインを作成し、caustics map作成後rendering用のパイプラインでそれを使用するという方式で実装しました。 caustics mapパイプライン causticsの強さ…

夜の波の表現2

youtu.be 前回のものはcaustics部分の光の強度の計算が間違っており、水が透過しないというか、光が強すぎて水の表面しか見えない状態になってました。 今回は新たに修正したのと、一方向から風が吹いているように表現してみました。あとyoutube動画を埋め込…

夜の砂浜

youtu.be夜をイメージしたものに変更すると思ったより綺麗に描けました。 水面上に見えない光源があるイメージで、水が反射したものだけが見えています。 、、、が、YouTubeでみるとあまり綺麗に見えませんね。プログラム面で言えば前回からの更新はほとんど…

水の表現の挑戦 海のcausticsを表現したい

youtu.be波の高さを穏やかにし、water causticsをすこし目立たさせてみました。 water causticsとは水面の底に現れる模様のことです。内部のプログラム的に負荷軽減を色々行い、横長で描画面積を広げています。 AMDの6900XTという現状ではAMDのGPUで最も良い…

水に色をつける

youtu.be波に色を付けたのと、底面のcausticsの色を白ではなく、波の色とmixするようにしてみた。 色はRGBで(0, 255, 192)としています。何かの記事を見ながらこの色に決めたのですが、忘れてしまいました。 Google で 「rgb 0 255 192」とするとこんな感じ…

水の表現の挑戦 IMGUIの導入

youtu.be砂浜のテクスチャを適当に貼り付けてそれっぽくしてみた。 光の反射の面が本来は水底に描いているはずなのに、動画にすると水面上に書かれているように見えるので、ここは改善点。今回からデバッグ用にIMGUIというツールを導入してみた。 インストー…

水の表現の挑戦 波の表現について2

youtu.be 後ろからの図 youtu.be 横からの図 youtu.be 波の表現、といいますか波の高さの計算について考察・改良しました。 最初はGerstner waveについて調べていたのですが、上記例はそれを参考にしつつ計算式自体は少し変形させたものを使用しています。 …

水の表現の挑戦 multi threadで波の計算を高速化した話

描画される波形は前回から変わっていないが、ずっと気になっていたmulti threadで波のポリゴン(頂点のy座標、高さ)の計算を高速化してみた。 std::thread 使うライブラリはstd::threadです。 #include <thread> でインクルードできます。 使い方 詳しくは thread - c</thread>…

Simple Water Caustics

youtu.be youtu.be youtu.be Vulkan Ray TracingでWater Causticsを書いてみました。Water Causticsとは水面の底にできる光の模様のことです。正確には光りの屈折でできあがる様々な模様のことのようです。 コースティクス - Wikipedia 水面の波の式 様々な…

水の表現の挑戦 波の表現について

上からの図 youtu.be 横からの図 youtu.be 高さが激しい図 youtu.be 高さが激しい場合に若干本当にこのように見えるか疑問が残るが、シンプルな波を起こした場合の屈折と反射をray traceで表現してみた。横から覗いた場合、水面だけを取り出して見ているので…

水の表現の挑戦

グラフィクスといえば水の表現!!(個人的意見) ということで vulkan ray tracingで挑戦してみました。 結果はこちらyoutu.be 前回に引き続いて、反射/屈折の部分はガラスキューブと同じです。 ブログということなので、実装するまでで気になったことや工夫…

ガラスキューブの描画 反射と屈折

Ray tracingの環境が整ったのならば、一度はやってみたいガラスや水の透過、反射、屈折。 ということでvulkan ray tracingでガラスキューブで反射と屈折の描画をしてみたので、その間に調べたことや難しかった点などをまとめておきます。 (一番躓いた点は法…