Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

glTFでmorphing (マテリアル処理なし)

Morphing morphingのアニメーションに挑戦してみた。 それっぽくはなっているが、、、合ってるのか? モデル https://sketchfab.com/3d-models/yard-grass-3a67e76decc849c694c228eb590a9902 ライセンス:CC Atribution https://creativecommons.org/license…

glTFでのアニメーション

glTFでアニメーション colladaに引き続き、glTFでもアニメーションを行うことができた。 モデルの権利表記 配布元リポジトリ https://github.com/TheThinMatrix/OpenGL-AnimationUnlicense license https://unlicense.org/ glTFでanimationを行うときの注意…

glTFでのアニメーション

glTFでアニメーション colladaに引き続き、glTFでもアニメーションを行うことができた。 モデルの権利表記 配布元リポジトリ https://github.com/TheThinMatrix/OpenGL-AnimationUnlicense license https://unlicense.org/ glTFでanimationを行うときの注意…

glTFでのモデルの描画

glTFでモデルの描画 joint情報を読み込み、静止モデルの描画をしてみた。 モデルの権利表記 配布元リポジトリ https://github.com/TheThinMatrix/OpenGL-AnimationUnlicense license https://unlicense.org/ glTFフォーマットの読み込み方 tiny glTFを用いて…

Animationの完成

Animationの実装 今までの実装では時間の取得の仕方が間違っていた。 時間の表示を正常にするとコマ飛びすることなくアニメーションが表示された。 時間の取得方法 実装当初に色々調べた際に、あまり深く調べることなく以下のstack overflowのanswerをそのま…

compute shaderでanimation部分を計算してみた

compute shaderでanimation部分の計算 vertex shaderとfragment shaderを用いるのであれば、vertex shaderでanimation後の位置に更新した後fragment shaderで色を付ければよいと思うが、raytracing pipelineでレンダリングする場合にはどの時点で位置を計算…

Animationの補間を実装してみた

アニメーション補間の実装 interpolation(補間)を実装してみた結果がこちら。 interpolationは 今のkey frame1(t1)を基にしたanimation行列を計算するときに、次のkey frame2(t2)のanimation行列も計算する。 key frame1による位置v1を計算する。 key frame2…

Animationの描画(補間なし)2

cowboy君に色を付けた 前回のcowboy君はおかしな色がついていたが、正常な色になるようにした。 方法の考察 前回はgeometryごとにvertexを作成していたので、vertexの数が少なく小メモリーとなっていたが、今回の方法ではインデックスバッファーに0から始ま…

Animationの描画(補間なし)

Animationの描画 ようやく、本当にようやくanimationの描画に成功したので、まだまだ課題は山積しているが、現状のカウボーイ君を載せる。 課題 まず、ご覧の通りわかりやすい課題があり 補間がされていないのでカクカク カウボーイ君の色が変 の改善が必要…

compute shaderによるanimationの計算

Compute Shader ray tracingパイプラインのみでレンダリングしているとvertex shaderでのアニメーションの計算を行わないので、compute shaderでの計算方法を模索していた。 とりあえず、ソースデータからデスティネーションデータにデータをコピーするとこ…

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…