ARKitのdaeを使って表示しているオブジェクトがなぜ荒いのかを解決した話
はじめに
ARKitを使ったSNSアプリARIZARを開発しています。
開発している時にわかったTIPS的なネタを記事にします。
ぜひARIZARをダウンロードして使ってみてください。
よろしくお願いします。
今回の課題
2つのツイートをみていただくとわかりますが、1つ目より2つ目の方がアバターと私達が呼んでいるオブジェクトがキレイになっていると思います。
今回は、解決したことについて記事にします。
ハイタッチで終わり、また来年👍
— 藤 治仁 (@From_F) September 7, 2019
少し恥ずかしかった😅#iosdc #arizar #ar pic.twitter.com/31rvqO3wcU
開発中の #ARIZAR 謎だったところが、だんだん意味がわかってきた。#ARKit が少しづつ使いこなせるようになってきた。まだまだだけど…#ar #swift pic.twitter.com/wUPOoSUG5B
— 藤 治仁 (@From_F) September 16, 2019
なぜ荒いの?
前回の記事にその答えが隠されていました。
要するに、大きな文字を描画して小さく縮小すれば良いのではないかということがわかりました。
これです。実際のscnファイルを確認しました。
Positonが(0,-100,-200)にScaleが(0.361,0.361,0.361)になっています。
これは、PositionのZ軸が-200となっていてこれは自分から200m離れていることになります。
でもiPhoneの画面上、オブジェクトが荒い以外違和感がないのですが、逆に言うとオブジェクトが巨大だということが冷静になってみるとわかります。
もう1つ違和感があったのがiPhoneを左右に振って視点を少し変えてもオブジェクトがあまり動かないことの不思議に思っていました。
よくよく考えてみると、東京から富士山をみているような感じなのかなっと気づきました。
解決策
PositionとScaleを調整して、Positionは近く、Scaleはもっと小さくすることでオブジェクトを目の前に移動させました。
これにより本来のオブジェクトの姿が見えるようになりました。
こちらはコードで40cm手前に配置するようにしました。
let model = SCNScene(named: named)
if let modelNode = model?.rootNode.childNodes.first {
modelNode.position = SCNVector3Make(0, -0.03, -0.4)
modelNode.scale = SCNVector3(0.0006,0.0006,0.0006)
}
最後に
ARは物体がないので座標系がピンとこないことが多いです。
荒かったり、カクカクする場合にはそのオブエクトが遠すぎないか?の観点で点検してみてはいかがでしょうか?
ありがとうございました。
Author And Source
この問題について(ARKitのdaeを使って表示しているオブジェクトがなぜ荒いのかを解決した話), 我々は、より多くの情報をここで見つけました https://qiita.com/From_F/items/9e050f748e2810e94fc3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .