Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

colladaファイルからanimationを動かす方法

colladaファイルの特徴まとめ 行列はrow majorで格納されている => VulkanやOpenGLで用いる場合にはtransposeなどを行い、column majorへの変換が必要 (実装方法によるが) > INV_BIND_MATRIXは使わなくてもよい collada ファイルのanimation プログラムを…

アニメーションポーズのレンダリングの成功

アニメーションの1ポーズのレンダリングに、ようやく成功した。 colladaファイルからモデルを読み込み、vulkanでレンダリングしている。 何カ月もかかり、本当に長かった。アニメーション用の座標変換などについても調べたので、これから記事にしたい。 それ…

Phoenix 静止状態のレンダリング

Androidに表示した画面 colladaファイルからモデル情報を読み取り、その結果をそのまま表示した図 phoenix 1モデルの権利表記 This model was created by NORBERTO-3D https://sketchfab.com/3d-models/phoenix-bird-844ba0cf144a413ea92c779f18912042 LICEN…

Blenderでfbx => collada変換するとanimationがうまく変換できない

対処法 プログラムでモデルをレンダリングしたい方向けの記事。 モデルはsketchfabというサイトでモデルをダウンロードしていることを想定。 sketchfab.com対処法としては fbxフォーマットでなくglTF 2.0のフォーマットでダウンロードする。その後glTF -> co…

GL_EXT_nonuniform_qualifierについて

概要 vulkan + ray tracingのチュートリアルのコードを読んだときに気になっていた、GL_EXT_nonuniform_qualifierについて仕様の調査を行う。 仕様書 以下のGitHubが仕様書のようだ。 GLSL/GL_EXT_nonuniform_qualifier.txt at master · KhronosGroup/GLSL ·…

GL_EXT_scalar_block_layoutについて

概要 Vulkan + Ray Tracingのコードを書き始めたときから気になっていたGL_EXT_scalar_block_layoutの拡張機能について調べてみた。 GL_EXT_scalar_block_layoutについて 仕様書はこちら GLSL/GL_EXT_scalar_block_layout.txt at master · KhronosGroup/GLSL…

モデルのレンダリング完成(Android + Vulkan + Ray Tracing)

完成図 モデルのレンダリングだけでなく、キューブに反射するモデルも描けているところがray tracingポイントです。 123 前回からの変更点 調べてみると、Android 11からはandroid ndkが提供する画像デコーダライブラリが使える模様。 pngやjpegで描かれるテ…

モデルの描画(Android + Ray Tracing)

モデルのレンダリング 21思ったのと違うが、stbi_loadが使えない影響でstbi_load_from_memoryにしているからだろうか? ただ部位ごとにはtextureで区切れているので、今はこれでよしとしようか。 ガラスで透過した絵が簡単に描けるところもray tracingの強み…

モデルのレンダリング (Vulkan + Ray Tracing)

やりたいこと ray tracingパイプラインでモデルをレンダリングしたい。 モデル自体は描画されるが、うまく色がつかない。 上部のcubesはガラスをイメージし、透過できるようにしている。 モザイクのモデル stb_imageの工夫 pngなどの画像データはstb_imageの…

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

ray tracingでガラスのレンダリング ガラスキューブ1ガラスキューブ2ray tracingの真骨頂といえば、透過と反射だと(個人的には)思っていて、Androidでray tracingするからには、どこまで反射と屈折の回数を増やして計算できるのだろうと思っていた。 図の例…

cubesに色がつかない

まとめ 複数オブジェクトを描画してみようとしているが、cubesに色がつかないこんな感じ cubesに赤色がつかない 調べたこと descriptor setのindex buffersをbindするときに VUID-VkWriteDescriptorSet-dstArrayElement-00321のメッセージが出ている。 khron…

AndroidでRay Tracingできた

はじめに ついにAndroidでリアルタイムray tracingできる時代が来た!ということでハローワールド的にray tracingで立方体を8つ描いた図がこちら。 白背景に立方体4つをray tracingで描いてみた図スマホは最近手に取れるようになったGalaxy S22を使っています…

Android + VulkanでImguiの導入

出力例 なぜか最初の1frame目だけはimguiの部分がrenderingされていないが、2frame目以降は表示される。 fontが小さすぎて何書いているかわからない部分は今後の改善点。 1frame目1frame目以降 IMGUIの基本 こちらを参照ください。 一言で言えば、C++でGUI環…

popup windowの表示方法

動機 C/C++コード出身の人がndkを用いてandroidでコーディングする際に、追加情報などを画面に表示したいという需要はあると思う。 とりあえずコードがコンパイルできてプログラムが実行できれば、そこからは何とか勉強できる、というのが持論なので、ちょう…

重力センサーの有効化と取得方法

結論 Androidの重力センサーの有効化と値の取得は、公式サンプルコードのままではうまくいかない。 サンプル: native-activity | Android NDK | Android Developers 先に結論を書くと、以下の過程が必要 (※ASensorEventQueue_enableSensor()は必須だが、ASen…

Depth Imageの初期値設定時の注意点

初期値(clear value)より奥のfragmentは描画されないので注意が必要 Depth Value depthの値はVkPipelineDepthStencilStateCreateInfoのminDepthBoundsからmaxDepthBoundsの値に制限される。 Vulkan® 1.3.205 - A Specification (with all registered Vulkan …

Input Assemble Stageの指定

Input Assembler Stage Input Assembler Stageでの処理の記述について調べる。 graphics pipelineのstageの概要は以下に記載。 aqoole-hateena.hatenablog.com Vertex Input State レンダリングを行うためには、pipelineにデータを入力する必要がある。 デー…

Blending Stageの指定

Blending Stage Blending Stageではcolor blendの指定を行う。 aqoole-hateena.hatenablog.com color blendとは Blending combines the incoming source fragment’s R, G, B, and A values with the destination R, G, B, and A values of each sample store…

サポートされているsample count取得方法

multisamplingの機能を利用する場合の、supported sample count取得具体例(Android) VkImageFormatProperties imageFormatProp = {}; vkGetPhysicalDeviceImageFormatProperties(physicalDevice, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TYPE_2D, VK_IMAGE_TILI…

Rasterization Stageの指定

Rasterization Stageでの処理 rasterization stageではrasterizationとmultisamplingの処理が行われる。 それぞれVkPipelineRasterizationStateCreateInfoとVkPipelineMultisampleStateCreateInfoにパラメータを記述する。 VkPipelineRasterizationStateCrea…

Vertex Post-processing Stageの指定

Vertex Post-processing Stage 記事にあるGraphics pipeline diagramのVertex Post-processing stageでは、いわゆるClip and Cullの処理が行われる。 aqoole-hateena.hatenablog.com Clip and Cullとはworld座標から画面に表示される範囲を抽出することであ…

Shader Stageの指定

Shader Stageの指定 pipeline diagramにあるように、pipelineにはshaderを使用することにより処理を行うpipeline shader stageがある。 aqoole-hateena.hatenablog.com pipeline shader stageを指定するには、VkPipelineShaderStageCreateInfoを実装するshad…

Graphics Pipeline基礎知識

Graphics pipelineとは コマンドの入力によって、データが各ステージで処理される生産ラインのこと。 各ステージは実装によってon/offが可能だが、vertex shaderのステージだけは例外なく実装する必要がある。 Block diagram of the Vulkan pipeline Block d…

Bufferの作成とメモリ割り当てについて

vkCreateBuffer() vkCreateBuffer - Create a new buffer object // Provided by VK_VERSION_1_0 VkResult vkCreateBuffer( VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);vkCreat…

ImageViewの作成について

vkCreateImageView ImageViewはvkCreateImageView()で作成できるが、作成にはVkImageViewCreateInfo構造体に必要な情報をインプットする必要がある。 vkCreateImageView(3) VkImageViewCreateInfo VkImageViewCreateInfo - Structure specifying parameters …

Render Passの作成について

Render passの作成 render passの作成に当たりattachmentとsubpassの記述が必要。subpassとはattachmentにアクセスするrender passのsubsetである。 Render PassとFramebufferについて - Aqoole_Hateenaの技術日記 subpassの記述にもattachmentの記述が必要…

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…