Aqoole_Hateenaの技術日記

vulkan+raytraceで色々描いてます

Unityによって予約されているTextureについて

概要 Unityにはいくつかの特別なテクスチャがあり、これらのテクスチャは特定の目的のために予約されている。 つまり、シェーダー内で同じ名前のテクスチャを独自に宣言して使用することは推奨されない。 とくにURPやHDRPのようなSRPでsahderを作成する際に…

Shaderの基本についての調査

概要 Unity初心者の私がShaderの構造や関数のエントリーポイントについて調査したのでまとめる。 Shader ShaderLabやHLSLの用語説明などは、ページによくまとまっているので、以降は個人的に気になったC# ScriptからShaderへのデータの渡し方や関数のエント…

URPの概要についての調査

概要 Unity初心者の私がグラフィクスパイプラインの処理について調査したので、まとめたい。 モバイル端末での表示が関心事なので、ビルトインパイプラインとURP(Universal Render Pipeline)について調べてみた。 Unityでのグラフィクスパイプライン まずは…

オブジェクトが途中から描画されない場合

概要 オブジェクトが途中から描画されない場合があった。 原因 Top Level ASの更新漏れ 詳細 Khronos Blog - The Khronos Group Inc に the triangles or axis-aligned bounding boxes (AABBs) とある通り、ray tracingのオブジェクトの範囲はboxで指定され…

3Dオブジェクトをタッチしているかの判定方法

結論 カメラーオブジェクトのベクトルとカメラータッチ位置をワールド座標に変換したベクトルの内積を計算し、1に近ければタッチしていると判定 補足 点と平面の距離を計算して、その距離が0に近ければ、なども考えたが、内積を考えるのが速そう。 Unityであ…

水面の表現に挑戦

水面の反射 水面に反射する草を描画してみました 課題 反射の計算が重すぎて驚異の2fpsしか出ていない 水面の頂点をすべて保持しているので、コピーで済む部分はそのようにしたい offsetをもつようにするとか 水面の頂点の計算はCPUで行っているので、GPUで…

glTFモーフィング描画(アルファテストあり)

glTFモーフィング(アルファテストあり) アルファテストを用いて透明 or notを判定することにより、必要な部分だけを取り出してモーフィングアニメーションすることができた。 モデルの権利表記 https://sketchfab.com/3d-models/yard-grass-3a67e76decc849…

morphing animation glTF

morphing glTFのモーフィングアニメーションを読み込み、androidで描画することができた。 モデルの権利表記 https://sketchfab.com/3d-models/yard-grass-3a67e76decc849c694c228eb590a9902 ライセンス:CC Atribution https://creativecommons.org/license…

glTFでmorphing (alpha処理後)

glTFモデルのmorphing 前回の記事 aqoole-hateena.hatenablog.com からalphaがglTFファイルにあるalpha cutoffよりも小さい場合に、描画しない処理を追加したものがこちら。 モデルの権利表記 https://sketchfab.com/3d-models/yard-grass-3a67e76decc849c69…

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…