トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

おぐりんにVRで会いに行く

MMD

定期的に「オグリキャップ」でTwitter検索してフィギュア情報やファンアートを見ている。

その中でアプリのホーム画面の3Dモデルを作っている方がいた。あとオグリんの3Dモデル!

 

VRでオグリキャップみたいな〜と思って配布ページに行ったら、すでにお気に入りしてた。

3d.nicovideo.jp

「ポーズ03」 / ShiniNet さんの作品 - ニコニ立体

私会いに行ったっけ??LookingGlassで表示したんだっけ?

VRで見たか記憶がないな〜

利用規約

commons.nicovideo.jp

・ユーザーが本モデルをMMD及び、DCCツール(Blender、Maya、Cinema4D等)、ゲームエンジン(Unity、Unreal Engine等)といった関連ソフトウェアに読み込み静止画や映像作品といった二次的著作物を制作し、それらをSNSや動画共有サービス等へアップロードすることを許可します。

おお~Unityについても書いてくれているのありがたい!

 

ちなみにこちらの学園はMMD系のソフト以外では使わないでくださいって書いてた

禁止

(4) 「Miku Miku Dance」、または「PmxEditor」等の関連ソフト以外での使用

3d.nicovideo.jp

Unity

今もMMD4Mechanimしかないのかな?

とりあえず変換した!

かわいいいいいいいいいいいいい

VRで見る

VRで見る方法ググったら自分の記事が出てきた

bibinbaleo.hatenablog.com

XR Plugin ManagerからOculusをオンにした

そしてConvert Main Camera~~

そしてQuest2をつないで実行したらUnityの画面がQuestに映ったけど、右目でキャラクターが描画されていなかった。

 

シェーダーを変えるか[Stereo RenderingMode]を[multiPath]に切り替えるらしい。

redhologerbera.hatenablog.com

あった

これでQuestをPCにつないだらVRで見れた!

イキイキ

VRで見れたけどなんかあんまり感動ないな・・・

アニメーションつけて、カメラのほう向いてもらって、耳をモフモフしたい

アニメーション

今もとりあえずキャラクターにモーションをつけるとしたらユニティちゃんのアニメーションデータなのかな?

unity-chan.com

モデルはHumanoidにしておく

wait00のポーズ、オグリンのポーズっぽい!

boothにあったダンス

booth.pm

こちらもかわいい

booth.pm

LookAt

このスクリプトでカメラのほうを見てもらえた

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAt : MonoBehaviour
{
    public Transform target; // インスペクターでセットするターゲットオブジェクト

    public Animator animator; // Animatorコンポーネントへの参照

    void OnAnimatorIK(int layerIndex)
    {
        if (target != null) // ターゲットが設定されているかチェック
        {
            animator.SetLookAtPosition(target.position); // ターゲットの位置を設定
            animator.SetLookAtWeight(1.0f, 0.8f, 1.0f, 0.0f, 0f);// ターゲットへの向きの重みを設定
        }
    }
}

こちら参照

nn-hokuson.hatenablog.com

AnimatorでIK Passにチェックを入れる

見てくれるようになったけどまだ実在感ないな~

踊るときもずっとこっちを見てくれる

表情が変わらないからかな。手動で変更することはできる

まばたき

過去の記事を見てたら瞬きさせてた。

bibinbaleo.hatenablog.com

こちらのスクリプトを使えた

udasankoubou.blogspot.com

これで耳もぴくぴくさせるようにした!いい感じ~

MMDのモーション

表情を変えるにはMMDのモーションデータを使えばいいのかな~と思って探してみた。

うまぴょい!!

www.nicovideo.jp

変換するときに同意を押した後VMDを設定する。あとから再設定できた

ん~表情変わらない

ググった

simplestar-tech.hatenablog.com

このスクリプトをつけてAnim Failにモーションデータを設定して、一番上のAnimNameに同じモーション名を入れる

これで表情変わった!

耳などをモフモフする

この記事通りにMMDにコライダーをつける

bibinbaleo.hatenablog.com

そして手となるコライダーに以下のスクリプトをつける

いったん適当なSphereにつけて動かしたらちゃんと髪とか耳が動いた

コントローラーの位置を取得するには空のオブジェクトにTracked Pose DriverのスクリプトをつけてDeviceとかPoseSourveを以下のように設定する

これの下にさっきのSphereをつけたら動いた!

youtu.be

手が真ん丸なので自分はドラえもんになったんだと暗示をかけたがやっぱり少し違和感あるな~

デフォルトのUnityの機能だとさすがに手のモデルを表示するのは無理そう。

コントローラーモデルを用意するか、手を用意したほうがよさそう.

 

ハンドトラッキングの手も出せるのか!これよさそう。

tech.framesynthesis.co.jp

note.com

OculusIntegrationで昔手を出したことあるな~

bibinbaleo.hatenablog.com

憑依する

でもめんどくさいので、自分がオグリンになってその手で自分をモフモフしよう!

昔このスクリプトとVRTKを使ってやった

IK.cs · GitHub

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

そろそろFinalIK買ってもいいかもな。今50%オフだった

assetstore.unity.com

でもまあとりあえずデフォルトのIKでやった

VRTKを入れるのがめんどくさかったのでChatGPTに書いてもらったスクリプトでやった

using UnityEngine;

[RequireComponent(typeof(Animator))]
public class IK : MonoBehaviour
{
    public Transform Head; // VR HMDの位置と回転を反映するオブジェクト
    public Transform RightHand; // 右コントローラーの位置と回転を反映するオブジェクト
    public Transform LeftHand; // 左コントローラーの位置と回転を反映するオブジェクト

    private Animator animator; // アバターのAnimatorコンポーネント

    void Start()
    {
        animator = GetComponent<Animator>(); // Animatorコンポーネントを取得
    }

    void Update()
    {
        // 頭の位置と回転を直接設定(IKではない)
        transform.position = Head.position;
        transform.position = Head.position;
        transform.rotation = Head.rotation;
    }

    void OnAnimatorIK(int layerIndex)
    {
        // 右手の位置と回転を設定
        animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
        animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
        animator.SetIKPosition(AvatarIKGoal.RightHand, RightHand.position);
        animator.SetIKRotation(AvatarIKGoal.RightHand, RightHand.rotation);

        // 左手の位置と回転を設定
        animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
        animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
        animator.SetIKPosition(AvatarIKGoal.LeftHand, LeftHand.position);
        animator.SetIKRotation(AvatarIKGoal.LeftHand, LeftHand.rotation);
    }
}
 
Headに設定するのはカメラの-1.5の位置に置いたオブジェクト

これで頭の回転が体全体に影響するけど一応あんまり動かなければ、バレない憑依ができた

www.youtube.com

環境

青い空じゃ没入度が少ない。環境の3Dオブジェクトをおこう〜

無料情報とかを見て購入したけどUnityで表示させてないアセットがいっぱいあるのでそれを使う。

無料の学校アセット。これはBuildInだとピンクで表示されなかった。設定変えないといけない見たい

assetstore.unity.com

この雪村アセットを使うことにした。おぐりんと雪は高相性!

assetstore.unity.com

youtu.be

 

うまぴょい踊ってもらった

youtu.be

www.youtube.com

最後に

ダンスの途中にたまにこっちを向くようにしたり、もっとおぐりんっぽいモーションを探してランダムで切り替わったりするようにしたら実在感ましそう。

あと音も大事かもな~

 

なんか人生で一番最初にHMDでけもフレのMMDキャラクターを見た時の感動が再燃するかと思ったけど、そこまではならなかった。

もう私はVRでキャラクターを見ることに慣れてしまったのだろうか・・・