Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スキャンデータを使った リッチなVFXを軽率に作ろう
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
にー兄さん
March 05, 2021
Technology
0
850
スキャンデータを使った リッチなVFXを軽率に作ろう
yokohama.unity mini #7でLTと運男子たときの資料です
にー兄さん
March 05, 2021
Tweet
Share
More Decks by にー兄さん
See All by にー兄さん
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
400
XRエンジニアの視点から XRのイマと社会実装の実現について考える / thinking-about-xr-popularization
drumath2237
0
51
軽率にプログラミング言語のシンタックスについて考えてみよう / lets-think-about-programming-lang-syntax
drumath2237
0
87
エンジニアが軽率に趣味から始める、OSS貢献を軸とした個人活動 / oss-contribution-as-a-hoby-project
drumath2237
0
61
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
320
フォークギター with VFXの 制作を軽率に振り返ろう! / look back fork guitar with vfx
drumath2237
0
74
軽率に始まった Babylon.js勉強会運営の 1年間をふりかえって / look back babylonjs japan activity
drumath2237
0
110
利己的利他、 あるいは軽率2.0に備えよ。 / prepare-for-keisotsu-2.0
drumath2237
0
80
軽率にAndroidXRのJetpack SceneCoreを使って3Dモデルを表示してみる / androidxr-scenecore-3dmodels
drumath2237
0
220
Other Decks in Technology
See All in Technology
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
330
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
150
Tebiki Engineering Team Deck
tebiki
0
24k
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
110
ECS障害を例に学ぶ、インシデント対応に備えたAIエージェントの育て方 / How to develop AI agents for incident response with ECS outage
iselegant
4
430
旅先で iPad + Neovim で iOS 開発・執筆した話
zozotech
PRO
0
100
22nd ACRi Webinar - ChipTip Technology Eric-san's slide
nao_sumikawa
0
100
AWS Network Firewall Proxyを触ってみた
nagisa53
1
250
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
Statistics for Hackers
jakevdp
799
230k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
Building the Perfect Custom Keyboard
takai
2
690
Balancing Empowerment & Direction
lara
5
900
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Building Applications with DynamoDB
mza
96
6.9k
Marketing to machines
jonoalderson
1
4.7k
Transcript
スキャンデータを使った リッチなVFXを軽率に作ろう yokohama.unity mini #7 にー兄さん
自己紹介 にー兄さん(@ninisan_drumath) 筑波大学情報科学類3年 主にUnityを用いた開発が多い AzureKinect / VFX Graph / xR
/ Humanoid / WebGL yokohama.unity初参加なのでちょっと緊張
スライド&サンプルは全て公開しています✨ 途中で自分の3Dスキャンも出てきますが、 フリー素材(??)なのでスクショの共有は問題ないです🤔
agenda はじめに 素材の準備 Unityでの作業 最後に
はじめに
今回やりたいこと! 特定の形状の上をパーティクルが這って回るようなVFX 自分のスキャンデータを使ってやってみたい Unite2019の高橋啓治郎氏のセッションからとても影響を受けています 実現するにはちょっと工夫が必要......? →やってみよう! サンプルプロジェクトはGitHubに公開してあります! →https://github.com/drumath2237/KinFuSDFVFX
実現方針 形状に沿うように動くようにするには 形状の法線ベクトルが必要になる しかも空間上の任意の点において 物体から遠ざかる方向のベクトルが必要 それらと別のベクトルとの外積を計算すると 特定方向に向かって 形状に沿ったベクトルが得られる なにかの 3次元形状
今回使うツールと手順 1. 自分のスキャンデータを作る 2. HoudiniでSigned Distance Fieldを作成する 3. VFX Graphで演出を作る
Azure Kinect Houdini Unity VFX Graph
素材の準備
KinectFusionでスキャン KinectFusionを使うと点群を元にメッシュを張れ るらしい 詳しいセットアップの記事があったので いざやってみることに https://medium.com/kadinche-engineering/azure-kinect-dk-%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6% A7%8B%E7%AF%89%E3%81%8B%E3%82%89-kinectfusion-%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82 %92%E5%8B%95%E3%81%8B%E3%81%99%E3%81%BE%E3%81%A7-cd7d550994fe Azure-Kinect-Samplesの中のkinfuサンプルを 使用
KinectFusionから点群データを取得 KinectFusionからply形式の点群データを出力 PositionとNormalがある (残念ながらColorはなさそう) CloudCompareとかで見ると良い感じ
SDFの作成 Signed Distance Field →点から形状への距離と勾配ベクトル(遠ざかる方向のベクトル) →これらを3Dテクスチャとしてベイクする →.vfファイルとしてVFX Graphに読み込める Houdiniによってメッシュデータから作成可能 Unity公式から出ている
VFXToolboxというアセットを使用 https://github.com/Unity-Technologies/VFXToolbox
Houdiniでの作業 1. VFXToolboxのhdaをインストール 2. ply点群ファイルをそのまま読み込み 3. Particle Fluid Surfaceノードでメッシュ化 4.
VFXToolboxでPointCacheとSDFを生成 5. pcacheファイルとvfファイル×2が得られる
Unityでの作業
VFX Graphについておさらい - GPUパーティクルシステム - パーティクルの挙動や見た目を ノードで定義 - Unity2019~Varifiedになった -
SRP環境でのみサポート 今回は表現の幅が広いHDRPを採用 Unity VFX Graph Manualより
PointCacheについて - 複数の座標をまとめたデータ(語弊あり) - メッシュの側面からパーティクルを スポーンさせたりできるようになる - フォーマットは汎用的な点群ファイルと似 通っている(.plyとか.xyzとか) -
非パラメトリック形状にとても有効 - 点群VFXが捗る捗る - 普通のメッシュであればUnityで作成可能 unity3d.comより
- 現在ではPropertyとして配列を受け渡せない - ではどうするか? - Textureに情報を焼いて渡す - ただの1次元の配列であれば height 1のテクスチャにする
- Texture2DArrayや3DTextureなどは扱えるし、 Sampleノードがちゃんとある(後述) - パフォーマンスによってはComputeShader を組み合わせてテクスチャを作成することも 余談:VFX Graphは配列を扱えない
VFX GraphでSDF/VFを扱う - .vfファイルとして読み込んだデータは 3Dテクスチャとして扱われる - Unity2020からインスペクタでプレビューされ て嬉しい - Sample
Texture3D、Load Texture3Dなどの ノードで使うことができる - SDFを使ったノードがあり、結構面白いことが できる - もっと気軽にSDFが 作れるようになったら嬉しいな
VFX Graphの処理フロー 1. PointCacheからランダムな座標で 位置を初期化 2. 現在位置から勾配ベクトルを取得 3. 勾配ベクトルと特定ベクトルの外積を計算 (今回はPerlinCurlNoise3Dとの外積)
4. 外積方向にForceを設定する 5. 散らばっていかないように空気抵抗を足す 6. Outputコンテキストへ
完成!🎉
おわりに
まとめ&お気持ち - VFX GraphはSDFを使うとリッチな表現ができる - SDFの生成はちょっと大変かも(外部ツールを使うので) - 「ビジュアライゼーションのプラットフォームとしてVFX Graphはとても有効」 by
高橋啓治郎氏 - 構想→調査→実装→リリース→LTまで8日くらいで とてもテンポよく取り組めた。脳汁すごい。サマーインターンかな? - 知らない技術の検証とかは好きなので、とても楽しかった
参考 今回のサンプルプロジェクト: https://github.com/drumath2237/KinFuSDFVFX Azure Kinect SamplesのKinectFusion: https://github.com/microsoft/Azure-Kinect-Samples/tree/master/opencv-kinfu-samples VFXToolbox: https://github.com/Unity-Technologies/VFXToolbox Unite
Tokyo 2019のVFX Graphのセッション: https://learning.unity3d.jp/3276/ VFX GraphのVectorFieldに関するマニュアル: https://docs.unity3d.com/Packages/
[email protected]
/manual/VectorFields.ht ml