シャリだけでも美味しく寿司が食える方法
くだらないネタ考えたのでやりました
先日のxR Tech Tokyoでこの記事の話が出ました。
いろんな人がこれをネタに持って行こうとしているようなので自分もそれに乗っかろうとして、思いついたのが、
「シャリにARマーカーくっつけて自分の好きなネタ乗せれば良くない??」
です。ネタを思いついてしまった以上責任を持って実現をさせようというくだらない記事です。
別に寿司ネタとかけてるわけじゃないんだからね。
ちょうどいい機会
XR分野の研究を始めて1ヵ月ぐらいで、ちょうどいい機会だったのでVuforiaを初めて使ってみました。
Developer登録とかDatabaseのtargetimage追加とかのフローはいくらでも記事があるのでそちらをみてください。
出来上がってしまったネタ
寿司ネタを3つ(2つと1体)用意しました。お粗末なマグロとタマゴと可愛いユニティちゃんです。
作ってる途中で「これ、正当な寿司ネタだけじゃなくても乗せられるよね??」と思ってしまった自分、たちが悪いです。
ARマーカーは海苔で作ろう
シャリにはやっぱり海苔でARマーカーつけるのが最適でしょう。 ということで海苔を買って切ってARマーカーにしようと思います。近くに海苔を売ってるところがなかったのでおにぎりの海苔を使いました。パリパリしてなくて、引っぺがしたらご飯もくっついてました。ここがくだらなさポイントの頂点です。
薄々感じてはいた
だめかーー
ふにゃふにゃの海苔を使ったのがまずいけない笑。エッジもクソもない。 あと海苔の光沢もダメだろう。
(そもそもおにぎりを使ってシャリを使わなかったんかいというツッコミはナシでお願いします。金欠でした。)
ちなみに正確なマーカーではうまくいきました
得られた知見
まず何より食べ物で実験すると、その後美味しくいただきましたができる。
あとはiphone上で動かそうとすると、画面が真っ暗になる状態に陥りました。環境はvuforia7+Xcode9.3+iOS11.3。どうやらvuforia側の問題のようです。参考
システム的なコンフリクトに立ち向かうのも無駄だと思ったので今回はPCでやりました。いつかチャチャっと直せるようになりたいです。
ユニティちゃんのロゴもちゃんと載せないと。
【Unity】ボタンの下にあるオブジェクトへのタップイベントを無効化する
想定
UnityでiPhoneのARkitを使った簡単なアプリを作っている時にぶつかった課題です。
ボタンの下は押したくない
uGUIを設置した時に、ボタンの下に検出された平面のタッチイベントまで取得してしまって、意図しない挙動をしてしまった。
なんだか色々解決策がある...
でも絶対もっと簡単にやれるって!って思って調べたところ本当に簡単にできました。
あくまで、自分のケースですが。
手法
UnityARHitTestExample.cs
スクリプトのUpdate関数内の条件分岐に一言「ボタンがあればタッチイベントを無視しますよ」と加えるだけ。
あ、あとスクリプトの頭にusing UnityEngine; using UnityEngine.EventSystems;
の2行を加えるだけ。
// Update is called once per frame void Update () { #if UNITY_EDITOR //we will only use this script on the editor side, though there is nothing that would prevent it from working on device if (Input.GetMouseButtonDown (0)) { Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; //we'll try to hit one of the plane collider gameobjects that were generated by the plugin //effectively similar to calling HitTest with ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent if (Physics.Raycast (ray, out hit, maxRayDistance, collisionLayer)) { //we're going to get the position from the contact point m_HitTransform.position = hit.point; Debug.Log (string.Format ("x:{0:0.######} y:{1:0.######} z:{2:0.######}", m_HitTransform.position.x, m_HitTransform.position.y, m_HitTransform.position.z)); //and the rotation from the transform of the plane collider m_HitTransform.rotation = hit.transform.rotation; } } #else if (Input.touchCount > 0 && m_HitTransform != null) { var touch = Input.GetTouch(0); ###################### ここのした一行に手を加えるだけ!!! ###################### if ((touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) ############################################################################ { var screenPosition = Camera.main.ScreenToViewportPoint(touch.position); ARPoint point = new ARPoint { x = screenPosition.x, y = screenPosition.y }; // prioritize reults types ARHitTestResultType[] resultTypes = { ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent, // if you want to use infinite planes use this: //ARHitTestResultType.ARHitTestResultTypeExistingPlane, ARHitTestResultType.ARHitTestResultTypeHorizontalPlane, ARHitTestResultType.ARHitTestResultTypeFeaturePoint }; foreach (ARHitTestResultType resultType in resultTypes) { if (HitTestWithResultType (point, resultType)) { return; } } } } #endif }
本当に簡単にできた。優勝。
ポイントはEventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)
っぽいですね。
参考にさせていただいたサイト
Unity + ARkit + MMDモデル + MMDモーションの実現
現実とバーチャルを横断したい
今回、習いたてのUnityでタイトルにあるものを作ってみました。 結構ハードル高かったですが、色々な記事を参考にして作りました。
目標
Unity上でMMDモデルとMMDモーションくっつけてそれをARkitで現実世界に召喚しよう!
動作環境
参考サイト
お借りしたもの
手順
全体の流れとしては、
UnityのARkitプラグインをimport
お好きなMMDモデルとモーションデータ(vmdファイル)をproject内に移動
MMD4Mecanimパッケージをimport
MMDモデルとモーションデータをUnity上で動かせるようにMMD4Mecanimで変換(fbxファイルの生成)
アニメーションの作成
ARkitに対応づけ
です。以下で細かく見てみましょう。
まずARkitプラグインをAssetStoreからimport しましょう。Freeです。素晴らしい。
次にいきなり厄介なのですが、MMD4Mecanimをimport します。どうもこの手順が一癖あるようで(バージョンにもよると思いますが)、丁寧にやっていきます。
まず現時点で最新版の
MMD4Mecanim_Beta_20180523
のpackageを全てimportしてきます。次に、MMD4Mecanim_Beta_20160815
のPMX2FBX
の項目のみをimportします。こうしないとMMDモデルからUnity上で扱えるFBX形式のモデルに変換が出来ないようです。↓のような具合になると思いますではここからfbxモデルの生成に移ります。キズナアイフォルダの中に
kizunaai.MMD4Mecanim
というものが出来ていると思うので、規約に同意の上、動かしたいモーションをVMD欄にD&Dしてprocess無事fbxモデルが生成されると、指定したパスにモデルが出来上がります。
これをやる必要があるのか検証してないですが、モデルのRigをHumanoidに設定してApplyするとエラーが出る箇所があります(Genericでも動くらしい?)。importメッセージを見ると、
joint_hidariteoyayubi
が 重複して参照されてしまってるよ、という事なので、configから実際に見てみるといかにもえらってそうな赤が見つかります。これを右手のものと比べながら正しいもの(joint_hidaritekubi)に設定してやると、解消できました。ここへきてようやくモデルをsceneに移します。各自の嫁を召喚しましょう。HitCubeの子の位置に持ってきてやります。
あとは自由にチューニングしてください。自分の場合、このままではモデルが小さすぎると思ったのでscaleを3倍の3に設定して、HitCubeも邪魔なので消しました。あとocclusionも表現したかったので、
GereratePlanes
オブジェクトのPlane Prefab
がdebug plane
だったものをocclusion plane
に変更しました。これによってカメラから検出した平面にモデルが重なったらモデルを隠してくれるようになります。
出来上がり!
unity + arkit + MMDをやってみました!
— ざわざわ (@zawazawatw) June 9, 2018
オクルージョンもやってます。
キズナアイモデルとメグメグ☆F・E・Nモーションをお借りしています。 pic.twitter.com/hi89aB9x0S
おわりに
ARkit2.0が発表されましたね!縦平面の検出とか状態保存とか端末同期とかで実現できることがたくさんありそうでワクワクします!(まだベータ版ですが)
【Unity】始めました
遅ればせながら感がすごい
VR/AR方面の研究や活動をしようとするとやっぱり必要になってくるというか、便利になってくるものがUnityですよね。
自分も今更ながらやり始めました。お手柔らかに。
参考書ベースでやります
これを読み進めながらやっていきます。
Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
- 作者: 吉谷幹人
- 出版社/メーカー: ソシム
- 発売日: 2015/07/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る
やったこと
今回はこの参考書のChap3に書かれている内容を元にゲームをUnityで作成し、実際に実機(iPhoneX)で動かしてみるところまでやりました。
実機に転送する
踏まなければいけない手順がいくつかあります。まずビルドの流れですが、
Unityでビルド(プラットフォームをiPhoneにswitchした上で) => ビルドして作成されたフォルダからXcodeプロジェクトを開く => Xcodeから実機に移す
この際に困ったことを数点挙げます
・エラー箇所
ビルドしたプロジェクトをXcodeで開くとこのようなエラーが出ました。
自分の場合、これはiTunesを開いていたので発生してしまいました。
おしまーい
だいぶ雑な内容を書いてしまった。反省。
それにしてもこの参考書は結構役に立って、最低限必要な知識は付けさせてくれるように思います。
次回は面白い内容なので文章の方も頑張って書きます(いつも途中からめんどくさくなってしまう)。
【論文紹介】すごいと思った機械学習の論文
概要
Neural Best-Buddies- Sparse Cross-Domain Correspondence
こちらの論文を読みました。 これは、cross-domainな2つの画像のマッチするポイントを高精度に導出してくれる手法です。 たとえ入力した2つの画像同士の詳細な形や色、姿勢が違っていても、下の図のように対応点を示してくれます。
アルゴリズム
ざっくり言うと、下の図(a)の左下のような"深い"層から、2つの画像の"意味的"に一致する箇所(仮にpとする)を導出します。それを"浅い"層に持ち上げていくに従って点から面に範囲の広がったpに対してまた更に一致する箇所を導出していく、といった感じです。浅い層に行けば行くほど”意味的”な一致からエッジやコーナーといった"形式的"なシフトする、みたいな記述もありました。
すごいと感じた点
単純に、これだけの精度が上がると実現する社会実装の数が(image morphingの分野において)前例がないだろうと思いました。要するにこの技術に触れるユーザー数的な観点でインパクトが大きい、という意味です。
image morphingやHybridizationとcross-domain correspndenceは深く関わり合っています。以下に論文中で紹介されていたアプリケーションを示します。 画像全体のmorphingはもちろん、画像間の対応点も高精度に導出できているので、任意の範囲でのmorphingも可能になっています。
【VRChat】始めました
なんか流行ってるっぽい
VRChatが巷(少なくとも自分のSNSではその流れが来てる)で流行ってるっぽいので自分も始めました(まだ遅くないはず...)。
そもそもVRChatとは
自分の知ってる限りで記述すると
自分はアバターになってWorldと呼ばれる仮想空間上で行動し、あれやこれやするといったコミュニケーションプラットフォームです
要するに"Second Life"的なものです、やったことないから知らないけれど
参考にさせていただいたサイト
こんな感じでアバターが作成されます。画像はUnityちゃん
世界中の人がいるthe Hubと呼ばれるworldです。コミュニケーションはVoiceのみでtextベースのやり取りはできないみたいでした。 ちなみに自分はここでデッドプールにりんご食べさせてもらったり、虹色ミクにひたすらハート投げつけてたりしました(友達になりたかった)。
おわりに
今回は単に使ってみたってだけの記事でした。次は
3Dモデルを実際に作る
HMDをかぶった上で遊んでみる(今回はPCディスプレイで遊んだ)
をやってみようと思います。
ちなみに某フリマアプリの研究開発?部門がVRChat上での採用面接活動を開始したみたいですよ笑
エンジニア向け2018夏インターンまとめ
神まとめです
大学の知り合いからこんなものをもらったので、せっかくなので共有・発信しておきます。(おそらくネットに載せて大丈夫だと思われる)
みなさん良い夏を。