More Related Content
More from Hikari Fukasawa (7)
『DevLapse』技術解説 - HackDay10thAnniv. #sa_study
- 2. もくじ
• RICOH THETA で一定時間おきに撮影した全天球写真をWeb
ブラウザで表示
(担当:勝見、よしだ)
• Tango でスキャンしたHackDay会場3Dモデルを最適化
(担当:深澤、よしだ)
• AR(iOSアプリ)の実装
(担当:遠藤、よしだ)
- 17. - 3Dモデルを最適化する -
• Tangoで撮影した3Dモデルのままだと、
容量(ポリゴン数等)が大きい & 表面が乱れている。
• ある程度容量を小さく、かつ表面を平滑化する。
- 21. - 手順(1) -
• Tangoで自動生成された obj ファイルをもらう。
• MeshLab(3Dデータ編集・変換ソフト) をつかって、
自動で頂点数やらを削減したり、表面を滑らかにする。
• daeファイルに変換して出力する。
(えんどうくんのスライド参考)
https://www.slideshare.net/KatsuyaENDOH/tango-
constructor
- 25. - 手順(2) -
• Blender(3DCG制作ツール)で開いて、
さらに削減したり、平滑化する。
• 各部屋のモデルをマージして一つにする。
- 26. - つまづきポイント -
• Tangoでスキャンされる3Dモデルは、頂点カラー付きのOBJ
ファイル。(別のテクスチャ画像ファイルとかは無い)
• Blenderだとカラー付きのOBJファイルに対応していなくて、色
が抜けてしまって数時間むだにした。
• PLYに変換すると頂点カラーも保持できていたけど、アプリに持っ
ていく段階でモデルが崩れてしまう謎現象。
• 最終的にDAEにすると問題なくでけた。
- 27. - 感想 -
• 3Dモデルに関する知識がなさすぎてググり方もわからず無駄
な時間を過ごしていた。
• たぶん、MeshLabかBlenderどちらかだけでいけたとおもう。。
• 今年も発表用スライドは私が作りました。みんなが寝てる中が
んばりました。がんばりました!!!
- 31. 平面の検出 &
平面モデルの追加
• ARKitの平面検出
• ARSCNViewDelegateを継承して
rendererメソッドをオーバーライド
• rendererメソッドは3種類ある
(引数nodeの部引数名がdidAdd, didUpdate, didRemoveとなっている)
• モデルの追加
• 上記のdidAdd, didUpdate, didRemoveの際に平面モデルを追加、更新、削除
• 追加する際にノードに識別用のID(今回はplane)を振る
←タップ判定に使う
- 33. タップの判定と
会場の3Dモデルと天球写真を配置
• タップの判定
• ARSCNViewクラスのhitTestメソッドを使う
• ノードのIDから平面のモデルがタップされたことを判定(今回はIDがplaneかどうか判定)
• 会場の3Dモデルと天球写真を表示
• 不可視にしておいた会場のモデルを表示して平面のノードを削除
• 会場内モデル内への天球写真の配置は事前に手動で行う
• 会場内モデル内への天球写真の配置
• 会場のモデルデータ(.objなど)からSceneKitのデータ(.scn)をXcodeで書き出して開く
• 開いたら地図上に書かれた番号を見て、空のノードを配置
• アプリ起動時に空のノードの子ノードとして球体を生成して、写真を貼り付ける