Clusterロジック 持っている間は消えず、手放すと消える

標準

 

自動販売機ボタンを押すと飲み物が出てくる

これを放置→いずれ消える

持っている間は消えない

Qで手放すと、いずれ消える

この実現に、Cluster Discordのお力借りましたので、まとめておきます

1.持ち歩きたいオブジェクトに、Grabbable Item スクリプトをアタッチ。
Item、Rigidbody、Movable Item スクリプトなど、自動的にアタッチされる

2.NotDestroyFlagというBool値を持つ変数をつくっておき、

On Create
On Release   のタイミングでは、False

On Grab(掴んだとき)のタイミングでは、Trueの信号を送る

3.On CreateとOn Release からは、アイテムタイマーにシグナルを送り、チェックロジックに数秒遅れてからシグナルを発行する(ここでは10秒にした)

4.On Grabになったタイミングでは、タイマーをはさまずに、直接チェックロジックにシグナルを発行する

5.チェックロジックは、NotDestroyFlagがTrueでない場合に、Destroyアイテムにシグナルを発行する

 

Clusterゲーム機能のトリガーとギミック

標準

Clusterが面白い オープンキャンパスに使えそう^^

公式Cluster Kit ドキュメントはこちら

1.トリガー一覧

(自分でメモしないと覚えないので公式サイトから引用しつつ。。。)

(1)Interact Item Trigger

/triggers/interact-item-trigger

掴めないアイテム(Grabbable Itemには使えない)に「使う」機能を追加し、使われたことを通知するトリガー

例)マップに行先ボタンを付けて置き、ユーザー(プレイヤー)がタッチしたら、そこにワープする

地図上の赤い丸のインスペクターが右図。InterectItemTriggerスクリプトを追加し(アイテムスクリプトは自動で追加される)、Ownerに対してSignalメッセージ(ここでは、touchというメッセージにしたが、どんなメッセージ(Key)でもOK)を送る。同じオブジェクトに、今度は、メッセージ(Key)読み取り用の WarpPlayerGimmickスクリプトを追加。読み取ったとき(Keyが発動されたとき)の受け取り手は、Player(ほかに全員あてというのも選べる)、TargetPositionまで飛ばされる。

(2)On Collide Item Trigger

アイテムが他のものに衝突したことを通知するトリガーです。

/triggers/on-collide-item-trigger

 

(3)On Create Item Trigger

このアイテムが生成された時に通知するトリガーです。

/triggers/on-create-item-trigger

 

(4)On Grab Item Trigger

このアイテムが掴まれた時に通知するトリガーです。

On Grab Item Trigger
/triggers/on-grab-item-trigger

(5)On Release Item Trigger

このアイテムが手放された時に通知するトリガーです。

On Release Item Trigger
/triggers/on-release-item-trigger

(6)Use Item Trigger

掴んでいるアイテムに「使う」機能を追加し、使われたことを通知するトリガーです。

Use Item Trigger
/triggers/use-item-trigger

 

2.ギミック一覧

(1)Add Continuous Force Item Gimmick

アイテムに持続的な力を加えるギミックです。

Add Continuous Force Item Gimmick
/gimmicks/add-continuous-force-item-gimmick

(2)Add Continuous Torque Item Gimmick

アイテムに持続的なトルク(回転力)を加えるギミックです。

Add Continuous Torque Item Gimmick
/gimmicks/add-continuous-torque-item-gimmick

(3)Add Instant Force Item Gimmick

アイテムに瞬間的な力を加えるギミックです。

Add Instant Force Item Gimmick
/gimmicks/add-instant-force-item-gimmick

(4)Add Instant Torque Item Gimmick

アイテムに瞬間的なトルク(回転力)を加えるギミックです。

Add Instant Torque Item Gimmick
/gimmicks/add-instante-torque-item-gimmick

(5)Create Item Gimmick

アイテムを生成するギミックです。

Create Item Gimmick
/gimmicks/create-item-gimmick

(6)Destroy Item Gimmick

このアイテムを削除するギミックです。

Destroy Item Gimmick
/gimmicks/destroy-item-gimmick

(7)Play Audio Source Gimmick

音を再生するギミックです。

→これを使うと、その付近だけに響く案内音声などを流すことが出来るのではないか?

※リアルタイム音声(マイク)は、会場全体に響いてしまうので、マイクを使う場合は、部屋(ワールド)を分けておいて、ワールドゲートで飛ばすことができるのではないか?

Play Audio Source Gimmick
/gimmicks/play-audio-source-gimmick

(8)Play Timeline Gimmick

タイムラインを再生するギミックです。

Play Timeline Gimmick
/gimmicks/play-timeline-gimmick

(9)Respawn Player Gimmick

プレイヤーをリスポーンさせるギミックです。

Respawn Player Gimmick
/gimmicks/respawn-player-gimmick

(10)Set Angular Velocity Item Gimmick

アイテムの角速度を設定するギミックです。

Set Angular Velocity Item Gimmick
/gimmicks/set-angular-velocity-item-gimmick

(11)Set Animator Value Gimmick

Animatorのプロパティの値を設定するギミックです。

→ タッチボタンなどを設定するか、もの(アイテム)を掴んだり使うことで、相手(キャラクターでも可?)の動きを変更することが出来るのではないか。

※椅子にすわるという動作(モーション)を発動させられるか?

Set Animator Value Gimmick
/gimmicks/set-animator-value-gimmick

(12)Set Game Object Active Gimmick

このGameObjectのアクティブ状態を切り替えるギミックです。

→見えないものを見えるようにする、とか 複数の候補から一つのものだけ出現させる、とかで使えるだろうか?

Set Game Object Active Gimmick
/gimmicks/set-game-object-active-gimmick

(13)Set Velocity Item Gimmick

アイテムの速度を設定するギミックです。

/gimmicks/set-velocity-item-gimmick

(14)Stop Timeline Gimmick

タイムラインを停止するギミックです。

Stop Timeline Gimmick
/gimmicks/stop-timeline-gimmick

(15)Warp Item Gimmick

このアイテムを指定地点にワープさせるギミックです。

Warp Item Gimmick
/gimmicks/warp-item-gimmick

(16)Warp Player Gimmick

プレイヤーを指定地点にワープさせるギミックです。


→トリガー項目の(1)Interact Item Trigger と組み合わせて、ものにタッチしたら、タッチした人がワープする、という指定が可能

Warp Player Gimmick
/gimmicks/warp-player-gimmick

3.WorldGate

 WorldGateScriptにより、ワールドやイベントにシームレスに移動させることが可能。
 
プロパティ

プロパティ

機能

World Or Event Id

移動先のワールドまたはイベントのIdを指定します。(Idはワールド詳細のURLの https://cluster.mu/w/ 以降、またはイベント詳細のURLの https://cluster.mu/e/ 以降の文字列になります)

Key

移動先のワールドまたはイベントで初期位置となるSpawnPointを指定するために使います。移動先のSpawnPointに、SpawnTypeがWorldGateDestinationでWorldGateKeyの値がここに設定した値と一致するものがあれば、そこに出現するようになります。(なければ通常の入室と同じSpawnPointが使われます)

詳細

プレイヤーとの衝突判定を取るために、World Gateコンポーネントと同じ階層にColliderコンポーネントが1つ以上必要です。

また、子のコライダーにも衝突判定を与える場合はWorld Gateコンポーネントと同じ階層にRigidbodyがアタッチされている必要があります。

Cluster にアバターアップロード

標準

FBXの人型アバターのファイルをVRMに変換する方法

参考サイト様 STYLY(こちらも使わせてもらっています)で使う方法

STYLYClusterも、キャラクターはVRMデータで持っていくらしい。。ということで、Blenderで作成→Unityで変換する

【2020/8/25追記】バージョンがあがり、二度手間にせず、一度だけでVRMを取り出すことが出来るようになっていました

1.GithubサイトからuniVRMパッケージをダウンロード

こちらから(2020-07-07現在で、バージョンv0.56.2) releaseページの下方にある、Unity Packageになっているものをダウンロード。

※MITライセンス

2.STYLYあるいは、Clusterで使われているUnityのバージョンで新規プロジェクトを開く

Clusterは 2020-07-07現在 Creator Kitが対応しているバージョン(Unity 2019.2.21f1

3.uniVRMパッケージをすべてインポート

4.Blenderで アーマチュアBasic Human(Meta-Rig)を設定したモデルを作成

FBXでエクスポート

5.Unityにインポートし、Humanoidボーンを適用

6.マテリアルの設定

Shaderは、Standardまたは、VRMに用意されている4つのシェーダーのどれかを使う

7.モデル位置等の確認

・モデルの位置→原点(XYZが全部ゼロ)にあるか

・モデルのスケール→XYZが全部1.0になっているか

・モデルの向き→Z軸方向を向いているか

8.VRMに変換

??? Find duplicate bone names please check model’s bone names あれれ?

【解決】キャラクターの名前とボーンの名前が同じだったために起きたエラー。キャラクターの名前を変更して解決

作者名を記述するとExportボタンが出るので、あらかじめ、Assetsフォルダ内に適当なフォルダを作成し、そこにExport

9.出来上がったVRMプレファブに必要情報記述

10.上記、VRMプレファブをシーンに出し、再びVRM変換

(Assets内保存でなくてよい)

11.Clusterのアバターとしてアップロード

PIFuHDで写真から3D人物モデルを作成する

標準

面白いツールが次から次に出てきて楽しくてしかたがありません^^

紹介記事がこちら

「AIで1枚の人物写真から高精細3Dモデル作成 Facebookなど開発」

元原稿がこちら

「PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization」

DEMOのページにBlenderまでもっていく説明動画があって、わかりやすいです

クラウドベースのプログラム実行環境Colabを使うというのが最初わかりませんでした

1.クラウドにプログラム(プロジェクト)のコピーを作成する

下図に出ている「ドライブにコピー」を選択

2. 編集メニューから「ノートブックの設定」 GPUに変更

おそらく GPUになっていると思うが、確認して保存

3.ホストサーバーに接続する

右側「接続」から「ホスト型ランタイムに接続」を選び、5~6秒待つ

4.一つづつセルを実行していく

① import IPythonのセルを実行

 

② Clone PIFuHD repository の下のセルを実行し、PIFuHDのフォルダ(リポジトリ)の複製をつくる

左側リポジトリを更新すると、フォルダが増えているのがわかる

③pngまたはjpeg形式の画像ファイルを選択してアップロードする(解説動画のときよりももっと簡単になっている)

「ファイル選択」ボタンを押すことで、解説動画のように、一度Sampleimageフォルダに画像を移動しなくても大丈夫になっていた

④ランタイムメニューから「以降のセルを実行 CTRL+F10」を選択して待つ

 

 

5.resultの中に .objファイルが出来ているのでダウンロードし、Blenderにインポート

出来てしまった!

Twitterには、#pifuhd  ハッシュタグで投稿してほしいとのこと

よい結果を得るためのヒント

  1. 高解像度データの準備。1024サイズの学習データを使うので、少なくとも512サイズ以上の画像データを準備する
  2. 一人だけ写っている写真データを使うこと
  3. 正面を向いた立ち姿が望ましい
  4. 全身が表示されている画像がよい
  5. 適度な照明のものを選ぶ
  6. カメラ位置は水平がよい
  7. 背景はなるべく削除したものを使う
  8. 人間のみ。アニメキャラクターではうまく動作しなし(多くの人がチャレンジしているらしいが)
  9. ハッシュタグでTwitter検索してみると、成功例、失敗例がつかめるだろう

 


セル実行途中でエラーが出る場合:

OUFuHD06画像を直接sample_imagesフォルダの下にアップロードし、セルのimport osの部分で イメージがアップロードされていない場合は、デフォルトとして読み込めという命令のところを、そのデータファイル名に書き換えてしまう(ここでは、adam.png

そうしておいて、Configure input data のセル以降を実行する、を「ランタイム」メニューから選択するとよい

じっと待つと、resultsという名前のフォルダが出来てくる。その中の.objデータが求めるものになる。

OUFuHD07

 

Boneをいれる

PIFuHDで1枚の写真から3Dモデル(obj)を作成→Blenderにインポート→BaseMeshのAdultHumanをappend→腕に移植→Tポーズっぽく→FBXでエクスポート→https://www.mixamo.com/

、オートリギング→ダンスを選んだのちFBXでダウンロード→Unityにいれる→Animation Controller作成後、そのダンスモーションを追加

Blender2.83 Grease Pencilを使いたい

標準

2.83 Grease Pencil マニュアルページ

Grease Pencil

  • 伝統的なカットアウトアニメーションやモーショングラフィックスなどが作れる(描ける) 描画モード、編集モード、スカルプトモードを切り替えて作業する
  • オブジェクトパネルから描画(Visibility)の中に、照明利用(Use Light)項目が追加された。2D描画オブジェクトに光をあてることができる
    • 2Dのレイヤーについても理解しておくとよい。上から下に描画される(レイヤー上が手前に)。
    • オーバーレイ表示のところに、レイヤーを薄くするコントローラもあるので、不必要なレイヤーを薄くしておくとよい
  • 構造(Structure) 3つの基本要素 ポイント、編集ライン、ストロークを持っている。
    • ポイント (ここでいうポイントとは、メッシュでいうバーティスと同じ意味)
    • 編集ライン ポイントがつながったライン
    • ストローク ポイントと編集ラインがグリースペンシルマテリアルでレンダリングされたイメージをいう
  • 基本図形(プリミティブ) オブジェクトモードでShift-Aでグリースペンシルを追加するとき、3つのプリミティブから選ぶ
    • ブランク~ストロークなしの追加
    • ストローク~単純なストロークつきで追加 2Dレイヤーとマテリアルが追加される
    • スザンヌモンキー 2Dレイヤーとマテリアルが追加される
  • 選択 編集モード ポイント選択、全ストローク選択、ストローク交点までの間のポイントを選択(ホットキーは1,2,3)
    • Box選択、C選択、All選択、選択反転など使える
    • 編集モードでは、L またはCtrl-Lでリンクした部分(または全体)を選択できる
    • Shift-Lで、反対側選択
    • Shift-G で、グループ選択>レイヤー(同じレイヤーにあるポイントやストローク) または>マテリアル
    • Select Vertex Color
    • Select First/Last
    • Select More/Less
  • Multiframe
  • Properties
  • Modifiers
  • Visual Effects
  • Materials
  • Animation