OSC HeartRateSendersドキュメントページ

OSC HeartRateSender

開発: おめが (@Omegamega)
市販のBluetooth心拍計の心拍数情報を、OSCプロトコルを経由して、VRChatへ通知するツールです。

omega.booth.pm

要件

使い方

f:id:o_mega:20220227040228p:plain

  1. 心拍計をセットアップして電源を入れ装着する。VRChatを起動する
    1. (bluetoothペアリングは不要です)
    2. VRChatアクションメニュー(メニュー長押しorキーボードR)から、OSC Enableを選択しておく
  2. OSC HeartRateSenderを起動する
  3. 「BLE心拍計に接続する」ボタンを押す
  4. 数秒待つと接続が確立して、デバイス名と心拍数が表示される
  5. 「VRC OSCに接続する」ボタンを押す
  6. VRChatに心拍数が送信される(VRC内ではOSC Debugで確認可能)

参考動画

 

心拍計がない場合は、「VRC OSCに接続する」ボタンを押した後、
「ランダムな心拍数を送る」ボタンでVRChatへの送信テストをすることが出来ます。
アバターアニメーションテスト等に使えます

bluetoothLE

接続方式にbluetoothLE(bluetooth4.0)を利用しています。
bluethooth3(bluetooth Classic)以下とは互換性がありません。必要に応じてbluetooth4.0以降のドングルを購入してPCに追加してください

 

bluetooth心拍計の選択について

BT接続して心拍を取れてスマホ連携できるスマートウォッチはたくさんありますが、BLEの心拍プロトコルを実装してないことが多く、残念ながら使えない可能性が高いです。
スポーツモードを謳い、stravaやruntastic、wahooなどのスマホアプリ連携(リアルタイム)を売りにしていれば使える可能性があります*1。デバイスで問題なく使えたものがあればリストに追記しますので、教えてくれるとありがたいです

◎動作確認済み

○たぶん可能

  • Wahoo TICKR/TICKRx/TICKRfit
  • Polar Verity Sense/H10/OH1
  • CatEye HR-12
  • Garmin HRM-Dual
  • Coospo/XOSS/iGSPORT等のアームバンド型心拍センサーまたは胸ストラップ型心拍センサー

筋電位・胸ストラップ型の方が一回り安いですが、装着が面倒/ベルト耐久性に難があるためおすすめしません。光学式・アームバンド型が楽でおすすめです。

✕たぶん非対応

残念ながらBTスマートウォッチの多くはBLEでの心拍送信を機能がないことが多いです。対応機種を見つけましたら、お知らせください

✕非対応(動作しないことを確認済み)

  • Xioami Mi band4,5

Mi bandシリーズは独自のプロトコルがあるようですが現時点では、このアプリは非対応です。Mi bandをお持ちの方は、mkc1370さんの実装例がありますのでそちらをどうぞ

 

単にBLE心拍計の動作チェックをしたい場合、スマホがあればWhaoo fitnessアプリがおすすめです

https://jp.wahoofitness.com/fitness-apps

 

アプリから送るOSCデータについて

本アプリでは3つのAvatarParameterを送信しています。
これらのパラメータをAvatar3.0のExpressionParameter、FXレイヤーなどで処理することにより、アバターの表示を変化させたりできます。

単に通知されていること、挙動を確認したい場合は、VRChatのアクションメニューからOSC Debugをオンにすることでパラメータを確認することができます。「ランダムな心拍数を送る」ボタンも使えるでしょう

/avatar/parameters/HeartRate, Int

Int型の心拍数です。0~256。本人の体質や年齢、運動負荷や個人差によりますが、概ね45~200ぐらいの範囲に収まるはずです

/avatar/parameters/HeartRateFloat01, Float

Float型の心拍数です。心拍数の0~256を0.0f~1.0fに割り当てています。Animation StateのMotionTimeやSpeedに使うことを想定しています。
アナログメーターの針が動くアニメーション等と組み合わせることで、心拍に応じて動かすことができるはずです。

心拍表示サンプルアバター(U10素体版)では、このパラメータを使って心拍数の表示と、心臓風キューブモデルのアニメーションをさせています

/avatar/parameters/HeartRateZone, Float

HeartRateZone領域でクロップされた心拍数です。
HeartRateZone設定が60~120の時、心拍数が60なら0.0f、心拍数が90なら0.5f、心拍数が120なら1.0fを返します。

人間の心拍数は本人の年齢や体質で異なります。運動負荷や緊張状態に応じて、割と細かい範囲で上下するため、使う人に応じてアバターの挙動が変わる心拍数帯は調整したい所です。
ですが、その調整をアバターに乗せるのはいささか面倒ですから、ツール側で対応可能にするためのパラメータがこれになります。

HeartRateZoneは「その人の安静時心拍数(50~80)」から「その人の最大心拍数(220-年齢)」を設定することを想定しています。(ユーザー年齢20歳~40歳を想定し、初期値は60~180としています)

 

スポーツでは心拍計を使って運動負荷を調整する「心拍トレーニング」と呼ばれる手法があります。これを参考に個人の年齢/体質に寄らない形で、「がんばり」「運動の負荷/つらさ」を表現する指標として導入しました。

心拍トレーニングの一例としてガーミンでは心拍数のゾーンをこういう分類になっています。

が、VRCで激しい運動をと言っても、狭い部屋を使う運動ですから、おそらくガーミンの指標ではゾーン3~4あたりが上限になろうと思います

最大心拍180(年齢20~40歳想定)の場合、108~125がゾーン2、126~144がゾーン3(有酸素)、145~162がゾーン4(無酸素)。OSC送信されるHeartRateZone値では、0.40~0.54がゾーン2、0.55~0.70がゾーン3、0.71~0,85がゾーン4となります。

 

これを元に、アバターギミックはHeartRateZone、0.4(ちょっとした運動、緊張)~0.7(有酸素運動の限界)のしきい値を条件に動くように組むと
良い感じに振る舞い、ユーザーも心拍ゾーン設定だけで心拍調整が効くはずです。

 

別の使い方として0近くで、睡眠、または睡眠に近いリラックス状態をトリガーにすることもできるでしょう、多分。

 

心拍表示サンプルアバター(U10素体版)では0.4~(赤オレンジ)、0.55~(青紫)、0.7~(緑青)のそれぞれのゾーンで身体からパーティクルが出るようになってます。

対応済みpublicアバター

ここに心拍表示サンプルアバター(U10素体版)があります。このアバターは製作者の火事屋さんの許可の元public化をしています

https://vrchat.com/home/world/wrld_eea39796-5836-4099-98da-4815e16696bd

 

機能としては主に2つ

  • HeartRateFloar01を元に心拍数を表示
    • ±2程度誤差が出ますが現状仕様です
  • HeartRateZoneを元にパーティクルを表示
    • 0.4~(ゾーン設定が初期値の場合、心拍108)で赤パーティクル
    • 0.55~(心拍126)で青紫パーティクル
    • 0.7~(心拍144)で緑パーティクル

パーティクルのみ、アクションメニューよりオンオフできます

FAQ

Q.心拍計がそもそもちゃんと動くのか、PCと繋がるのかが分からない。心拍計のみ、心拍計とPCの接続できるか調べたい

A.スマートフォン(iPhone/Android)があればWahoo fitnessアプリで、心拍計のペアリング/動作確認が出来ます

WindowsPCからは設定の「bluetoothバイスとその他のデバイス」を開き、検出可能か確認します(ペアリングの必要はありません)

f:id:o_mega:20220227162552p:plain

バイス追加を押して、心拍計が出現するようであれば接続可能です


Q.bluetoothに接続が切れた時に、再接続したい

A.現時点で再接続する手段がありません。本アプリを再起動して接続しなおしてください
(VRChatの再起動は必要ありません)

Q.OSCの接続が切れたときに、再接続したい

A.「VRC OSCに接続する」ボタンを押してください。OSCは再起動なしに再接続できます

Q.心拍計を複数持っていて、使う心拍計を選びたい/別の心拍計に接続してしまう

A.申し訳ないですが、現時点で選択UIがありません。
先に接続されるかどうかは現時点ではランダムなため、接続時に表示されるデバイス名を確認の上、違う心拍計に接続した場合はアプリを再起動して、改めて接続を試してください。
使わないデバイスをオフにできるならオフにしましょう

Q.心拍数の数値が、VRChat内アバター表記やOSC HeartRateSenderで少し(±2程度)ズレて表示されてしまう

A.現状では仕様です。

現状のHeartRateFloar01パラメータを使っている場合、ExpressionParameterからAnimationを経由し、更にシェーダーで処理させている都合、誤差が出やすくなってしまっています。これについては工夫の余地があると思います。

また、現状のExpressionParameterのFloat値の同期について、公式ドキュメントによると8bit(minifloat)しかないため、符号を除いた128段分しか解像度がありません。上記同様、このあたりも精度が必要であれば改善の余地がありそうです。

Q.設定を初期値に戻したい

A. C:\Users\ユーザ名\AppData\Local\OSCHeartRateSender\OSCHeartRateSender_Url_ほにゃらら\1.0.0.0\user.config にある設定ファイルを削除してから、アプリを起動してください。

または以下の設定値を参考にどうぞ

  • LocalPort 0
  • RemoteAddress 127.0.0.1
  • RemotePort 9000

免責事項、問い合わせ

当アプリを使用して発生した問題や損害について、開発者のおめがは一切責任を負いません。自己責任の元、ご利用ください
その他、問い合わせは、私おめが(VRChat Omegamega / Twitter:@Omegamega / booth https://omega.booth.pm/)までどうぞ。

バージョン履歴

  • 20220304 初版(だいたい動くしリリースしちゃおうぜ)
  • 20220319 ハートレートゾーン、接続ポート情報などの設定を保存するようになりました

ソースコード権利情報

Rug.Osc
Copyright (C) 2013 Phill Tew (peatew@gmail.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

*1:webアプリのstravaへの連携を謳うデバイスは、予想に反して取れない可能性があります

Avatar3.0の仕組み解説

VRChatのAvatar3.0の、主にエンジニア向けの、仕組みから理解したい人むけ解説。OSCも来たからついでに*1

公式ドキュメントはここ。できるだけ間違いがないよう書いているつもりだが、ミスっていたら教えて欲しい

Avatar2.0時代

Unityで3Dモデルを動かすにはAnimatorとAnimationを使うのが良い、というセオリーに則り、アバターには決め打ちの固定のAnimatorが入っていて、それでもって表情やらEmoteやらGesture(ハンドサイン)やらを出していた。

ユーザーの自由度としては、AnimatorにセットするAnimationのみを編集できる。ので、自由度としては限界が出てくる。

例えば

  • 目パチを制御する方法がない
  • アイテムの出し入れが出来ない
  • それらの状態を同期したり/保存する方法がない
  • Gesture/Emoteより複雑な制御ができない

といった問題、拡張性の乏しさが目につくようになった。*2

という所で、出てきたのがAvatar3.0だったわけです。*3

Avatar3.0の基本思想

ということで、Avatar3.0の思想はこれらの問題点、制限を減らすことを意識して設計されているようだ。

f:id:o_mega:20220220225047p:plain

具体的に一番大きいのは、アバターのAnimatorが編集可能になったこと。これにより、複雑な制御が自由に作れるようになる。UnityのAnimator標準機能でAnimationを合成したり条件分岐してAnimationを再生すれば良い。

次にExpressionParameter。これは前述の同期できない問題に対する回答。基本的にはParameter変数を入れておく場所。同期して欲しいパラメーターをここに書くと、すべてのクライアントに同期され、前述のAnimatorを動かす。ついでにローカル保存もできる。OSCで入出力できるのもここ。*4

最後はExpressionMenuだ。ExpressionMenuはExpressionParameterをVRChat内から編集する手段だ。オンオフが設定できるToggle、0~1の無段階スライダ(Radial)、2軸4軸のPuppet、多段メニューを実現するSubmenuなどが設定できる。

 

基本的にはこの3つを把握していれば良い、はずだ。*5

AnimatorとPlayableLayer

公式ドキュメントはここ

まずちょっとややこしいのだが、UnityのAnimatorのLayerと、Avatar3.0のPlayableLayerは別モノなので注意。

f:id:o_mega:20220220204637p:plain

UnityのAnimatorにあるLayer

f:id:o_mega:20220220204745p:plain

Avatar3.0のAvatarDescriptorにあるPlayableLayerの設定(実体はAnimator)

全部乗せのAnimatorを編集するのは大変だから?かAnimatorを分割し、用途と挙動別に5レイヤーに分けている。Base、Addictive、Action、Gesture、FX。

ボーンを動かす(無理やりポーズを変えるような)アニメについては、ヒューマノイドボーン(腕とか足とか)と非ヒューマノイドボーン(ケモ耳とかしっぽとか)でまた扱いが異なる

  • Base、基本的な挙動を入れる所。AFKとか椅子へ座るとか
  • Addictive、Baseに常時"加算で"追加される。ヒューマノイドボーンを動かしたいときに使うレイヤー。具体例としては呼吸で胸が上下するアニメ等。
  • Gesture、非ヒューマノイドのボーンを動かす時に使うレイヤー。transformのみ有効。具体例としてはケモ耳やしっぽを動かす等。
  • Action、発動時に"Overwrite"が強制されるレイヤー。Avatar2.0時代のEmoteアニメ、プレーヤートラッキングを無視して動くダンスとかを入れる用途
  • FX、その他を入れるレイヤー。重要。表情ブレンドシェイプはここ

と別れてる。

よくVRChatterがやりたい、「ジェスチャーで表情を変えたい」「アイテムの出し入れをしたい」であれば全部FXレイヤーに入れる、で良い。

f:id:o_mega:20220220200744p:plain

こんなの編集したくねえ筆頭のBaseLayerのテンプレート遷移図

そして、それらAnimatorのテンプレートは全部SDK3に最初から用意されている。

f:id:o_mega:20220220210634p:plain

VRCSDK3>Example3>Animation>Controllersにテンプレが入ってるのでコピペして使おう

また編集不要なレイヤーについては最初の画面のようにDefaultのままで良い。特にBaseなんかはAFKアニメを差し替えたい、ぐらいしか要望はないと思われる。普通触らなくて良し、AFKを差し替える場合でも用意されてるテンプレートをコピーして差し替えるのがいいだろう。

 

FXレイヤーを作る場合、ジェスチャー分岐遷移図が書かれているvrc_AvatarV3HandsLayerをコピってやる

f:id:o_mega:20220220211203p:plain

vrc_AvatarV3HandsLayerには両手ジェスチャーに応じてアニメを再生するシンプルな遷移図が用意されている

あとはここの各ステートに、SDK2の時同様の表情Animationを作って設定すれば良い。出来たFXレイヤーをVRC AvatarDescriptorのPlayableLayer-FXLayerにセットすれば、基本的には完成だ。

表情アニメの作成はUnityEditor手打ちでもいいが、自分はがとーしょこらさん作のVRCAvatarEditor betaを使っている。さっくりblendshapeで表情パターン作るのが早い

前の記事にも書いたが、このままだと表情がIdleにもどり切らなかったので表情を戻すアニメを作り、FXレイヤーの一番上に加えている(Idle上書きアニメの設定)(参考記事・Avatars3.0で表情が戻らない現象の直し方 決定版 - プラナリアのメモ)

f:id:o_mega:20220221002556p:plain

defaultにはすべての表情blendshapeを0にするAnimation(Idle上書き)が入ってる

 

アイテムの出し入れや、着せ替え等より複雑なことをしたい場合、作ったFXレイヤーに手を加える。Parameterをアイテムのオンオフ値なりを追加して、そのオンオフ値を見てアイテム出現/消失アニメを設定するという形になる

f:id:o_mega:20220220212235p:plain

AnimatorのParametersはここにある

アバターの挙動のややこしさを全部Animatorにぶつけ、それをある程度切り分けつつもユーザー編集可能にする、がAvatar3.0の基本設計思想と思われるので、UnityのAnimatorを理解するのがAvatar3.0を理解する一番のキモだと個人的には思う*6

VRC組み込みで存在するAnimatorParameter

公式ドキュメントはここ

Parameterの中にはExpressionParameterに書かなくても使えるパラメータがある。これはVRChatシステム側が提供してくれるパラメータで、例えばプレーヤーがコントローラやキーボードから行うジェスチャ操作などがそれに当たる。移動やプレーヤーがVRモードで遊んでいるか、3点トラッキングか4点かフルトラか、ジャンプ状態か、など色々な状態が取れる。

Animatorプラスアルファ

以上のAnimatorの機能でだいたい機能は足りるのだが、それだけでは実現できないものがちょっとある。それらを補助するのが以下のコンポーネント群で、これはAnimatorStateに追加する形で使う

その一つが、特定Animation中だけ目パチを止めたり、口パクを止めたりといったもので、これはVRCAnimatorTrackingControlからできる。

f:id:o_mega:20220220224315p:plain

VRCAnimatorTrackingControlはAnimatorのステートからAdd Behaivourする

前記事でも書いたが、Trackingにするとトラッキング(口パク等)かVRCシステム(目パチ)を優先、AnimationにするとAnimationで定義された動きを優先するようになる。口を閉じたアニメや、目を閉じたアニメではそれぞれAnimationを選択しておくと良い

公式ドキュメントはここ(の一部)

ExpressionParameter 

上で作成したFXレイヤーAnimatorにはカスタムすればいろんなParameterが追加されているはずだ。これを同期して、他のプレーヤーにも見えるようにするのが、ExpressionParameter

f:id:o_mega:20220220213750p:plain

プロジェクトウィンドウを右クリックして新規作成できる

といってもそんな複雑なことはなく、FXレイヤーに作ったParameterの名前とtypeを書き並べればOk。savedにチェックをつければワールド移動やVRChatを再起動しても残る。

f:id:o_mega:20220220214153p:plain

Add/DeleteとかUI違うと一瞬ビビるよね?

ちなみにOSC経由で操作できるパラメータもコレ

ExpressionMenu

公式ドキュメントはここ

上で作成したExpressionParameterをVRC内から変更する方法。

新規作成する方法はExpressionParameterと同じ。あんまり複雑ではないのでポチポチ触ってみるのが早いと思われる。メニューにControlsを追加ボタンやらラジアルを設定し、上のExpressionParameterのどの値を操作するかを設定する

f:id:o_mega:20220220215318p:plain

UIを選んで、対応するExpressionParameterの名前と型を書いていく

まとめ

とにかく重要なのがAnimatorの理解、特にFXレイヤーを作れるかどうかがキモ。とはいえ、普通に使う分、SDK2相当のセットアップにはSDK内のvrc_AvatarV3HandLayerのコピペでよい。先を作ってみたくなったら、その改造から始めるのが良いと思う。

最初にFXレイヤーを設定できれば、後は、そこで使うParamatersをExpressionParameterに列挙し、ExpressionMenuにUIを並べて同様にParameter名を並べればだいたい*7作れると思う

  1. AvatarDescriptorを付けた+ViewPoint設定しただけのアバター
  2. そこにvrc_AvatarV3HandsLayerをコピって、FXレイヤーに設定する。それぞれのジェスチャーに顔アニメを設定、Idle表情を上書きするAnimationLayerを追加する

というのを実際に手順にしたのが下の記事なわけです

VRChatアバター3.0を雑セットアップするオレオレワークフロー2022版最新版 - おめが?日記_(2)

*1:betaに来た

*2:目パチ制御については元怒さん作のNoBlinkSetter(公開終了につきケーキさんのガイド記事をリンクしています)、Emoteを使ってたInventryシステムなどが過去あった。が、いづれもAnimatorを多段で重ねた際に動くトリッキーな仕様に基づくもので、黒魔術的です。

*3:ただ、この2020/8の紹介記事で書かれているように、3.0でやろうとしていることの一部しか実装されていない。OSCとSoon™のPhysicsBone含めてもまだ追加が予定されている?ようだ

*4:これは推測だが、今後予定されてるアバターコライダーも判定が情報がここに飛んできそう?

*5:はずだ。というのはVRC公式ドキュメントにあるように幾つかすでに知られたバグがあったり、UnityAnimatorコンポーネントの怪しい挙動などはそれはそれとしてあるため、バッドノウハウが不要になったわけではない。適時聞いてググって調べる必要はまだまだある

*6:が、公式ドキュメントにも度々書いてあるやんけ

*7:表情が戻らないとかの怪しい挙動を除けば

VRChatアバター3.0を雑セットアップするオレオレワークフロー2022/8月版

あくまで自己流で。メモ書き程度に。

SDK2相当程度かつ、SDK3 Avatar3.0であれこれ遊ぶ*1にの十分なベースシャーシを作る感じで。

  • Avatar3.0アバターとして着用できる
  • SDK2相当以上の表情が使える(FXレイヤーのセットアップ)
  • PhysBone対応 [2022/08/09追記]
  • SPS-i対応[2022/08/09追記]
  • VRChat CreatorConpanion(VCC)を使う[2022/12/17追記]

 

今回例に使うアバター

booth.pm

です。正確にはUnity2018 & SDK2時代にカスタムしたこうめちゃん。

既存のAvatarを新プロジェクトへ持ち出す

SDK2からの移行したい場合、VRMからセットアップする場合

既存のプロジェクトがあるなら、そのシーンごとExport packageして新しいプロジェクトに持っていくと楽。古いプロジェクトはバックアップも兼ねるし、Unityエディタバージョンを上げるときでも安心、不要なデータを(あまり)持ち出さなくて済む。

アバターが1体だけなら、そのアバターをprefab化してそれをexportしてもよい

VRMの場合は新しいプロジェクトにそのままUniVRMとVRMを突っ込めば良いはず。その後、VRM関連のコンポーネントを削除しておく

f:id:o_mega:20220210040155p:plain

Export packageするときに注意するのは、VRCSDKを外すこと。チェックを外してexportに含めない。他に不要なモノがわかれば外して、余計なものの持ち出しが減る

f:id:o_mega:20220210040622p:plain

Packageが出力されるので、旧プロジェクトは閉じてよし。新プロジェクトでImportできて、シーンが見れればOK

アバターの基本セットアップ

VRChat CreatorConpanion経由で新規プロジェクトを作る

[2022/08/09追記]

vcc.docs.vrchat.com

5月にVRChat開発者向けのCreatorConpanionがbeta始まった。これはUnityにおけるUnityHubのようなものを、VRChat専用にした感じのものだ。VRChatのワールド/アバタープロジェクトをまとめて管理したり、SDKのバージョンアップやUdonSharp、ClientSimulatorなどの一括インポートやアップデート更新を自動化してくれる。新規プロジェクトを作ったり、既存プロジェクトをVCC管理へ移行する(migrate)機能もある

今回はこれで新規プロジェクトを作ってみる。

と言っても複雑なとはなく、左メニューのProjects - newを選び、TemplatesからAvatarを選択、プロジェクト名とフォルダ決めるだけだ

あとは、OpenProjectを選べばUnityEditorが開いていつものように始められる

従来の方法で、新規プロジェクトを作る(非推奨)

VCCを使わないでプロジェクトを作るならいつもの通りだ

VRChat公式の示すCurrentVersionのUnityで新規プロジェクトを作る。VRCSDK3を公式からインポート。DynamicBoneやシェーダーなどの必要なものもインポートしておく*2

[2022/12/27追記]

VRChat 2022.3.1p2 の警告(warning)にあるように、VRChatはunitypackageでのSDK配布を辞め、VCCでの更新に一本化する予定にある。そのため、従来方法での新規プロジェクトは早々に使えなくなるハズだ。

VCCから新規プロジェクトを作るようにしよう。

 

[2022/08/09追記]

自分は試してないが、DynamicBoneを持ってない場合は、後述するPhysBone設定をDynamicBone使ってるprefabから生成してくれるツールもあるようす。

SDK2用アバターを買っていて、新たにAvatar3.0仕様で仕立て直したい時、とかには有用そう

booth.pm

何はともあれDescriptor

AvatarDescriptorを付ける。

SDK2からImportした場合は、Missingになってるコンポーネントがあるので削除。VRMから来た場合はVRM関連のコンポーネントを削除したり、素のFBXモデルを持ってきた場合はリグ設定がHumanoidになってるか確認しよう

f:id:o_mega:20220210041350p:plain

 

ViewPoint、LipSync、EyeLook、Eyelidsの設定

ViewPointはEditを押してScene上でぐりぐりするだけ。SDK2なりのセットアップがあればそれをコピペする、SDK2より操作しやすくなった…。基本的には目と目の間、鼻筋に埋め込むように設定する。が、頭が極端に大きいデフォルメキャラだとそれより奥に押し込む方が姿勢が自然になるかもしれない。

 

LipSyncは、おそらく日本語圏の販売アバターはVisemeBlendShapeを選べば良さそう。アバターの顔のMeshを設定すればだいたい勝手に設定される…?されなかったらソレらしいシェイプで埋める。それでもなければ代用して埋める。「最低限、sil、aa、thを作るだけでもそれなりにしゃべって見えるようになります」らしい

EyeLookのMovementは性格付け程度の話なので一旦デフォで良い。落ち着きCalm←→活動的Excited / 内気Shy←→自信家Confident。ボーン設定があればEyeBoneを入れ、移動制限が欲しい場合はRorationStatesを決める。目のボーンがないアバターもそれなりにあるのでない場合はそのまま無視して良い*3

f:id:o_mega:20220210041611p:plain

EyeLidsはまぶたと目パチ。Mesh指定して、目を閉じてる時のBlendshapeを指定すると目パチが動くようになる

 

これでとりあえず動いてアバターとして着用できるようになる。VRC SDKウインドウ→Builder→Build&Publish。モデル検証ならこれで十分。Welcome to VRChat

クソ大変表情FXレイヤーを作る

Avatar3.0の一番の大変ポイント。PlayableLayerを設定してジェスチャー操作と表情アニメを紐付ける。AnimatorをいじってFXLayerを作り、表情アニメーションを設定する。

ここでは楽をするために、SDK3に付属するHandLayerテンプレートをコピって改造し、FXLayerとして使う。FXLayerはボーンの動き(transform)を伴わない、あらゆる変更を突っ込め、と公式も言ってる。ので、表情だけでなく、パーツの出し入れ、マテリアル変更とかいわゆるVRChatterが一番やりたがるものはFXLayerに入る、で良い。

 

FXLayerの土台準備

便利なテンプレート素材として、VRCSDK/Example3/Animation/vrc_AvatarHandLayerが提供されているのでコピる*4。このHandlayerにはジェスチャーであれこれアニメさせるのに、便利なステート/遷移図がもう出来てるのだ名前はFXLayerとかにする

 

f:id:o_mega:20220210043225p:plain

このFXLayerをAvatarDescriptorのPlayableLayersのFXに設定

f:id:o_mega:20220210043855p:plain

表情アニメを作る

がとーしょこらさん作VRCAvatarEditorを使って表情アニメを作っている。というのも複数SkinnedMeshRendererのblendshapeをあわせてレビューしつつ確認できるのが便利。

gatosyocora.booth.pm

f:id:o_mega:20220210043606p:plain

Blendshapeをいじって表情を作ったら、Filenameを決めてCreateAnimFileすると表情アニメファイルが出来る。下のチェックは外しておいた方が良いかもしれない。Layerへの設定は後で手作業設定するため。

ちなみに、このVRCAvatarEditorにはMeshRendererのProbeAnchorをまとめる機能*5もあるので、ついでにやっておくと良し

FXLayerにアニメを設定する

上で作ったFXLayer Animatorを開く。Animatorウインドウを見る*6

LeftHandLayer、RightHandLayerのステートFist、Open…それぞれに上で作ったアニメをそれぞれ設定していく。それぞれのステートをクリックした後、インスペクタでAnimationをドロップして設定する。表情が不要なステートはそのままで良い*7

f:id:o_mega:20220210044224p:plain

それぞれのステートを見ていく。

[2022/08/17追記]

Write Defaultsはオフにしよう。公式でも紆余曲折あったが、Write Defaultsは表情がそれぞれのクライアントで一致しない可能性が出てくる設定となった。*8でより問題が拡大する可能性があるようだ

Add BehaivourしてVRC AnimatorTrackingControlを付ける。目パチをオフにしたい表情では、TrackingControlでAnimationをチェック。リップシンク切りたい場合はMouth&Jawを同様にAnimationをチェックすれば良い*9

f:id:o_mega:20220210044352p:plain

表情戻すアニメ対応、あるいはWriteDefaultsオフ問題

これでできたか、と検証したら「表情戻らない問題」が起きたので、対策を入れる。これはWriteDefaultオフによるものだ。対策はこの記事が分かりやすい。

inplanaria.hatenablog.com

FXLayer Animatorにレイヤー追加して、Weightを1に。VRCAvatarEditorで無表情アニメを作って、上のレイヤーに設定、WriteDefaultオフ。レイヤーの一番上に持ってくる

f:id:o_mega:20220212164003p:plain

 

理屈としては、優先度最小(Animatorエディタで一番上に並んでる)のレイヤーで無表情アニメを流し続ける、ようす。Left Hand/Right Handレイヤーで表情アニメが流れればそちらが優先され、表情アニメが解除されれば優先度最小アニメが実行されて元に戻る。

より詳しい説明を読みたい人は同じ作者のこの記事を読もう*10

inplanaria.hatenablog.com

PhysBone対応

[2022/08/09追記]

PhysBoneが4月に来ていた。ババーン。

PhysBone(PB)とはDynamicBoneの置き換えだ。DynamicBoneより動作が軽く、触ったり触られたりできるし、ビヨーンと伸ばして固定とか、さらにその状態をExpressionParameterやOSCでいろいろできる。すごい。

 

強気のVRChat運営はいきなりDynamicBoneを全部止めていて*11、DynamicBoneを含むアバターは自動的にPBへ変換される、何もしなくとも動くといえば動く。まあその動き方はDynamicBoneと結構違ったりするけども。

なのでDynamicBoneそのままでもアバターアップロードはできるか、そうはそうと現代的にしたい。VRC SDKにはありがたいことにPB自動変換ツールが付属するのでそれを使おう。

 

アバターヒエラルキーで選んだ状態にして、メニューからVRChat SDK - Utilities - Convert DynamicBones To PhysBonesを選ぶ

「DynamicBone全部消してPhysBoneにするよ。それっぽいパラメータにはするけど動きは一致はしないよ。この操作は戻せないよ」と言われるので、Proceedする

と、するとDynamicBoneがPhysBonesに置き換わります。やったね。

とはいえ、結構味付けが異なるので、しっぽとかが無限にびよびよして止まらなかったり、スカートが貫通したり…、とかは各自設定値頑張ってほしい

 

 

設定値の参考はしぐにゃもさんのブログがgifアニメ付きでとてもわかり易い。幽狐さんかわいい

signyamo.blog

 

PB新機能。手っ取り早く触ったり掴んだり固定したりするなら、Radiusを0より大きくすると接触できるようになる。Allow Grabingで手で掴めるように、Allow Posingで掴んでからトリガーで固定できるようになる。髪の毛に寝癖とか付けたい人はPosingをオンにしよう

 

ちなみに、DynamicBoneからPhysBone移行に伴い、PCでの揺れものの制限がかなりゆるくなっている。DBからPBに移行するだけで、AvatarPerformanceが上がるケースもある様子

また、制限は厳しいもののPhysBoneはQuestでも有効。Questでも揺れものが楽しめるようになったぞ。対応アバターはまだ少ないと思われるが、いろいろ工夫する余地があるかもね

SPS-i対応

[2022/08/09追記]

これまた4月になされた告知

(おめががダイジェストで意訳)

Unityの次バージョン(2020)ではSPS-iのシェーダーバリアントが必要です。今回のSDKからSPS-i対応シェーダーバリアントをコンパイルようにしました。Unityバージョンに必要な処置はこれだけではないですが、重要なステップです

 

リエーターへ。SDKを更新してください。そうしないと今後のUnityバージョンアップで、コンテンツが壊れてしまいます。

再アップロードが必要です。SDKをビルドした後にシェーダーエラーが出る場合は、SPS-iをサポートしてないシェーダーが原因です

とのことでUnity2020へ生き残るために必要な対応だ

ざっくりいうと、

  • シェーダーをSPS-i対応のものに更新する
  • SDKを最新にする
  • アップロードし直す

をする必要がある

 

さて、問題は自分の使ってるシェーダーはSPS-i対応かどうかだが、それはシェーダー配布元を当たろう。

 

 

VRChat内で大きなシェアを誇る、ユニティちゃんシェーダーことUTS。他のシェーダーに遅れること、6月にSPS-i対応のv2.0.9がリリースされた。ユニティちゃんのページでは、更新が遅れているのか2022/8月現在、一つ前のv2.0.8が最新になっているため、注意しよう。SPS-i対応版はv2.0.9だ。これをダウンロードして、プロジェクトに取り込めば良い

github.com

 

開発な活発で最近話題になりやすいシェーダーとしてはlilToonがある。lilToonにはUTSからのかなり精度のよいマテリアルコンバータが提供されているので、UTSからいっそ乗り換えるのも一つだ。

booth.pm

 

他にもUnlit_WF_Shader、poiyomiなど、VRChatコミュニティ寄りのシェーダーも開発が活発で早くからSPS-i対応をしており、この辺も心配はない。

github.com

www.poiyomi.com

 

もちろんUnityビルトインやSDKのシェーダー、VRChat/Mobile、Standardなどは気にしなくてよいだろう。SDKを最新にしてアバター/ワールドをアップロードし直そう

完成

完成だと思います

f:id:o_mega:20220210040039p:plain

できたと思ったら、SDK2にはあったこうめちゃんの耳としっぽが表情連動しないやん… ということで、それはまた別で頑張る必要があることがわかった!

 

それはさておき、2.0時代のセットアップに近い、素に近いAvatar3.0がセットアップできたはずだ。プレーンなFXレイヤーのセットアップができたので、この上に持ち物の出し入れやVRCLens/VirtualLensの様な拡張、最近話題のOSC連携、Contact含むAvatarDynamicsの導入もできるようになった。Unity2020のカタストロフィックなアップデートにも多分、耐えられるであろう。よしよし

*1:カメラ拡張とかモノを出し入れしたりとかする

*2:と、SDK2プロジェクトのDynamicBone設定を引き継げて便利

*3:こうめちゃんには目のボーンはなかった

*4:Unity上だとCtrl+Dで複製が出来る

*5:MeshのProbeAnchorの位置がバラバラだと、ワールドのLightProbeから拾う光がMeshごとに変わってしまい、パーツごとに明るさが違う現象が起きる。よくあるのが場所によって顔とボディの明るさが違うケース

*6:Animationではなく

*7:初期設定されているproxy~.animはVRC内のデフォルトアニメーションが適用される設定

*8:今後実装予定のHide by Distance機能によって同期されなくなる話があったが、8/16のDeveloperUpdateで方針転換/仕様変更がありWrite Defaults オンでも一応問題はなくなった。Developer Update - 16 August 2022 - Community Updates - VRChat Ask。とはいえ、最近のドキュメントでは Avatars 3.0 WriteDefaultsはオフが推奨されている

*9:Trackingにすると、フルトラやリップシンクなどのユーザー操作や、目パチのようなVRCシステム機能で動く。Animationにすると、アニメーションデータで上書きされる。という理解で良い

*10:なんでこんなクソややこしい機能があるのか、というのは恐らくUnity側が便利だろうと実装してみたが実際はややこしくなってしまい、なまじ使われているので消せない機能になっているようす?なのでUnity側も困ってるしVRC運営も困ってる機能と思われる。Lose-lose-lose悲しいね…

*11:一応、ローカルだけPhysBoneの代わりにDynamicBoneを使う設定はあるが

テトテコネクトとダンス音ゲーと譜面UI

ダンスゲーがDanceDanceRevolution(コナミ98年、以下DDR)でヒットしてから、センシング技術が進歩しダンスゲーもそのセンサーの進化に合わせて色々とリリースされた。ということでその辺の独自研究を書きつつ、テトテコネクトの話をしよう

DDR、ボタンが少なく譜面はシンプルだった

DDRはコントローラスイッチをデカくして踏ませることでコントローラを装着せず、プレーヤーに踊らせることに成功した。スイッチは左/後/前/右の4箇所*1

床スイッチということで上半身の踊りを取ることはできないが、それでもボックスステップのようなステップがある程度再現でき、軸足と重心移動が大切なのはダンスを思わせるには十分な"それらしさ"が作れたと言ってもよいだろう。高難易度譜面が地団駄となったとしても

譜面UIとしてはコナミビーマニ特許通り、ノーツが上下へスクロールするものだった。譜面のX軸がボタン、Y軸が時間に対応するのは、ピアノロールに近く非常にわかりやすい。一方で後/前というボタン配置がX軸に揃えられてしまい、直感的でない問題があったが、まあ後のことを考えれば十分シンプルだろう。

youtu.be

 

コントローラを手に持っているが、ポーズが重要という点ではサンバDEアミーゴ(セガ99年)も全身ダンスゲームに含めてもよいかもしれない。

マラカスコントローラをそれぞれの手に持ち、左手/右手に加え、振る時の掲げた位置(高い/中央/低い)も判定される(2x3の6箇所)。

こちらはコナミ特許を回避する都合か、中央から外へ向けてノーツがスクロールするタイプである。この譜面UIは同じセガのMaimai(セガ2015年)へ継承されている

youtu.be

 

接触センサーで全身ダンス、ビーマニ式譜面ながら振り付け動画を流したPPP

コントローラを身に着けない全身ダンスゲーとしては、DanceManiaX(コナミ00年、以下DMX) *2ParaParaParadise(コナミ00年、以下PPP)が初めてではないだろうか。

赤外線センサーを使い、特定の場所を遮るとボタンがオンになる。要はDDRの踏みスイッチを赤外線レーザーセンサー *3 に置き換えた仕様だ。レーザー判定はDMXが(左/右)x(上/下)の4箇所、PPPは左/左前/前/右前/右の5箇所。そこを手なり足なりで遮るとノーツ判定が走る/ボタンが押されたことになる

譜面UIはビーマニシリーズということもあり、スクロール方向切替機能が増えたりはしたものの、そのままDDRの仕様を継承している。X軸にノーツ種別を並べ、Y軸を時間軸として、ノーツが流れてくる。DDRと違い、特にPPPは前後ボタンに相当するものがないことで比較的混乱は減った気がしなくもない*4

 

ただここで、PPPは先進的なことをしている。譜面UIの背景に、avexと組んだ実写のパラパラムービーを流しており、その通りに踊れればゲームでも高得点が概ね取れる、という所だ。今までのダンス音ゲーは楽曲を共有することはあれど、振り付けが一致することはなかった*5

youtu.be

ダンスゲームといつつダンスらしくなかったダンス音ゲームと、実際に全身を動かす現実のダンスがやっと繋がった。

しかしこの後ダンス音ゲーは冬の時代を迎える。そもそもの音ゲーを乱発しすぎたコナミは、シリーズ継続困難な音ゲーを順次終了。音ゲーの中でもニッチ枠だったダンス音ゲーDDR以外は途絶えてしまう*6

 

いや、ちょっと待って。足のDDRと手のDMX/PPP、これ組み合わせたら全身ダンスになりませんか?なります。ということで韓国AmuseWorld社はシンプルに合体させたようなダンスゲーEZ2Dancer(AmuseWorld 2000年)があった。

今調べるとそこそこ続編が出てることから人気があったようだが、残念ながら当時韓国音ゲーが国内に入ることはかなり難しかったようで、最盛期でも5台程度しか国内になかったと聞く。結局筐体を見ることもプレイすることも譜面UIがどうなってるかもわからなかったが、現代ではプレイ動画を上げてくれるありがたい方がいることで遂に全貌がわかった

youtu.be

3方向にアレンジされたDDRフット・スイッチと、DMX同様に突き出した赤外線センサー受光部が合体した、愚直なわかりやすい筐体。譜面UIもDDRに手ノーツを追加しただけのシンプルな仕様だった。これはなかなかプレイが混乱しそうだ。

 

しかしこの時点でなんとなく先の問題が見えてくる。

そう、まずビーマニ特許式*7の譜面では全身の動きを適切に表現する方法がなかった。PPPのノーツでは手の位置は取れても、パラパラの振り付けを表現できていない。あくまで公式振り付けをすると、概ねノーツが取れるという状態で、ノーツを見ながら踊るとお手本ムービーの振り付けとは別の動きになってしまう。譜面が読めた所で手と足両方同時に譜面に合わせて動かすのは人類には至難の技ということだ*8。譜面UIの進化で、見た瞬間に振り付けがわかるような譜面は出来るのか?進化した所で人類の手足は付いてくるのか?…

逆転の発想、振り付けが先行したJustDanceと、譜面の諦め

Just Dance(Ubisoft2009年Wii) 国内ではJust Dance Wii(任天堂2011年Wii)。トラッキングをある程度?いやかなり諦めてはいるものの、全身で踊るゲームはこれがエポックメイクではないだろうか?なんと言っても現行でもシリーズ継続しているし。同様のゲーム体験は国内ではおどるメイドインワリオ(任天堂2010年Wii)が初出と思われる

ゲームのコントローラからゲームを組立る従来とは逆向きに、現実のダンスにゲーム判定を持ち込んだのが革新だ。センシングは今から思えば豪快に諦め、Wiiリモコンを手に、映像のポーズに合わせてそれっぽく構える/振る。Wii版を遊んでいないので、なんとも言えないが、この設計ではかなり判定はゆるく作らざるを得ないだろう。メイドインワリオでは判定を諦め来れなかったか、タイミングよく振る点を重視した作りだった。

youtu.be

調べる前はてっきり、おどるメイドインワリオ(2010年)が初出かと思ったがJustDanceの方が早かったのが意外だった。JustDanceのWikipedia情報によるとRayman_Raving_Rabbidsシリーズでミニゲームとして実装したものがブラッシュアップされ、その結果JustDanceとして1本の作品になった。それでも初代は20人程度のチームで開発され、やはり開発中は売れ行きはあまり良くないだろうと思われていたのは興味深い

ゲーム操作ではなくダンスが主、というのはセンシングだけでなく譜面UIにも現れている。そう、譜面UIは補助程度にすっぱりと諦めて、実写のダンスPVをそのまま流している。PPPの再来だ、だが主従は逆転している。振り付けが主、譜面は補助。あくまでスコア判定付きダンスムービーである

その結果、譜面から先の動きを理解するのは難しくなった…というより、そもそも画面比率で言っても譜面UIはヒント程度の扱い。そもそも譜面が表示できても全身を表現するのは無理があるよね、ならいっそダンスムービーでいいじゃないか。

譜面UIで先の動きの指示を出す試みは、ヒント以上は諦めた。無理。そういう割り切りだ。

 

しかし、この「譜面UIから、先のノーツがわからない」問題に対してJustDanceは、別のアプローチで解決を試みている。振り付けの単純化としつこくループを多用している点だ。初見でプレイしても振り付けが繰り替えされるので、途中から覚えていくことができ、初見プレイであってもループの最後の方ではまあまあ踊れて気持ちよく終われる。

家庭用の長いプレイ時間だからできることでもあるが、譜面UIは諦め、振り付けから体験をカバーするという思想は清々しい

 

ダンスムービーと譜面をオーバーラップさせた、DanceEvolution

2010年になるとBox360に、Kinectという全身トラッキングバイスが登場する。そもそもこの時期はWii sports(2006年) のヒットを受け、家庭で体感ゲームが遊べる、というノリのコンセプトゲームが出尽くし一段落した時期でもある。いや、それでも、ご家庭に全身モーキャプデバイスを送りつけようとはMicrosoftイカれてやがる!日本の家はそんなに広くないぞ!*9ローンチタイトルとしてDanceEvolution*10(コナミ2010年XBox360)がリリースされる。以下ダンエボ

手の位置、足のステップ、ポーズ(シルエット)、更には手拍子、発声もノーツとして設定できるようになった。Kinectセンサー全部盛り仕様である。*11

譜面UIは予告ノーツがCGダンサーに重なって出現する。…とここまで書くと、タッチパネル音ゲー押忍!闘え!応援団(任天堂2005年DS)も参考にしてそうではある。更にたどるとXY平面とZ時間軸を持つ音ゲーとしては、テクニティクス(アリカ2001年PS2)ミュージックガンガン(タイトー2009年)といった例もあった。この点ではJustDanceのダンスPVそのままよりは1手先の動きが見えるようになった。またただ、ノーツ密度が高まると画面がごちゃごちゃする問題も抱えてしまう。

抱えていたが、ダンエボもそこは諦め、音ゲーマーの反射スピードと学習力に期待した。されちゃった*12。JustDanceのヒントUIと比べ、CGダンサーと予告ノーツが同じ場所に出てくれるので、少なくとも画面の見る場所で困ることがないのはそんなに悪くない。その先のノーツはわかんないけども。そしてどっちにしろ、そんなスピードでノーツが出ても人間は追従できない。じゃあ、繰り返して覚えるしかないやんけ!すべての音ゲー覚えゲーに通じる

実際ダンエボは初見で気持ちよく踊るのは確実に無理だ。しかし音ゲーマーはそこに難しい譜面があるとチャレンジしてしまうし、繰り返して習得してしまう*13

youtu.be

当時は革新的だなあと思ったのだが*14、今思えばJustDanceのWiiコントローラでは出来なかった全身センシングをKinectでキャプチャーできるようになった、そしてそれを実写ムービーではなくイケてるCGビジュアルでブラッシュアップする、というコンセプトのタイトルに見える。

PPPからYesterday、Night of Fireavexパラパラ曲が続投して収録されており、もちろん振り付けもそのまま使ってクリアができる所は、PPPプレーヤーとしては嬉しい限り。一方で、他譜面の振り付けはコナミらしく?難易度がバリバリ高い物が多い。JustDanceと違い当初からアーケード化を想定していたのか、1曲の長さもJustDanceより大幅に短くなってしまい、短い曲を繰り返し遊んで、激しい振り付けをじっくり身につけるゲーマー向けスタイルという印象になった。このスタイルはコソ練習が難しいAC版でも共通しており、公式が練習用に振り付けムービーをyoutubeにアップロードしてくる次第であった*15

 

以前から、というより初代DDRの時点でダンスコンピレーションアルバムDanceManiaとタイアップして曲を用意していた。ダンエボでは全身ダンスゲーとなったことで、PV等に公式振り付けがあるときにそのまま公式振り付けをゲームに持ち込むことが可能になった。ダンエボ・アーケード版ではこれを大いに活かし、振り付け習得済みなコア楽曲ファンを逆にゲームに取り込む流れを作り出した。

youtu.be

ボーカロイドブーム、踊ってみたブームから、ダンエボへ振り付けが収録されるケースもあった。ルカルカ★ナイトフィーバー*16、ハッピーシンセサイザー*17などがある

コアなインディーズ原曲ファンを取り込む流れには、すでに昨今珍しくはないが合わせて振り付けごとゲーム化されたのは面白い。

www.youtube.com

譜面をルーチンに刻み、トレーニングツールに向かったDanceCentral

DanceCentral(XBox360 EA2011年)以下ダンセンは、北米ではKinectローンチで2010年、国内では2011年にリリースされている。ダンエボと同じXbox360+Kinectで全身ダンスゲー、となると近寄ったシステムになりそうな予想をしてしまうが、これまた全然違うゲームとして成立したのは興味深い

ダンスの動きを1小節ごとに区切ったダンスルーチンとし、それぞれのダンスルーチンには名前とイラストが付く。これが画面に右に予告として流れてきてダンスを行う。そう、ダンスルーチンが学べるのだ。

youtu.be

初代ダンセンが特に素晴らしいのは、それぞれの楽曲にbreakdownモードがある点。本編楽曲を踊る前に、使うダンスルーチンのみ繰り返し練習させられる。更に本編の一部のみ通し練習や、失敗した場合は再生速度を下げての練習もある 

youtu.be

初心者譜面ではシンプルな4~6個のルーチンを繰り返す習得しやすい振り付け、上級譜面ではそこに+3~5個の新たなルーチンを追加して複雑、スタイリッシュにしている。

このあたりは1楽曲1振り付けしかなく、判定箇所の数でしか難易度付けが変えられなかったJustDance/ダンエボ系と大きな違いとなっている。上の楽曲、PokerFaceについても難易度別で別の振り付けがある

youtu.be

JustDance/ダンエボが「判定付きダンスムービー」だったのに対し、ダンセンは「ダンスを小節単位でバラして組み直す、ルーチントレーナー」という立ち位置。ダンス動画ではなくダンストレーニング講座をゲーム化したという塩梅だ。ダンセンでルーチンを学べば、後は覚えたルーチンを適当につないでくだけで現実でもそれっぽくダンスができるようになる。

ただテキトーに遊んで気持ちよくなるゲームのためだけにそこまでカバーする必要があるのかはさておき、ダンスゲーで教育的なタイトルに仕上がってるのはすごい。マジで。ダンエボみたいな変則的/ダイナミックなダンスルーチンはさすがにないものの、4つ打ちリズムで適当に踊れるレパートリーが身につくゲームだ。

 

余談だがDanceCentralはOculusQuest/OculusRiftPC版が出ている。丁寧なルーチン学習は残念ながらなくなってしまったものの、VRらしくダンスクラブの臨場感やバトル相手の動きがよく見えるようになった。低速練習やフレーズ繰り返し機能などシステマチックなトレーニングモードが追加されている

完全に脱線だが、メニュー操作もVRゲーの中ではぶっ飛んだ、しかし世界観にマッチしたUIになっていてプレイをオススメしたい。みんなもスマホをバキバキにしよう

youtu.be

振り付け自由の復権、DanceRush Stardom

さて、JustDanceからここまで、ダンスの動きをどうゲームへ落とし込むか、という「ダンスムーヴ至上主義」的なスタイルが続いた。これに「ダンスゲーはノーツさえ取れれば、それ以外は自由に動いていいんだぜ!」という思想を復権させてきたのが、元祖DDRの後釜を狙うDanceRush Stardom(コナミ2018)だ

www.nicovideo.jp

そもそもDDRの頃から、とりあえずボタン押せればあとは好き勝手に踊ろうぜ、という通称パフォーマンスプレイがあった。他のゲームで例えると、ビーマニプレイ中に後ろを向く「ふりむき」や、敢えて腕をクロスさせて演奏する、後ろ向きで演奏する、などというスーパープレイ/縛りプレイがあり、そこから派生しつつダンス特有のキレや演出を足す感じだろうか。昨今のRTAや動画実況では特にプレイ成果に関係ない、トリッキーな見せプレイを合間に入れたりする風潮があるが、それをダンスゲーでやる、という見方でも良い。

www.nicovideo.jp

 

お手本ダンスムービーを見て自分の動きを同化させるダンスは、盆踊りやパラパラの例にあるように*18シンクロ感を味わうには良いが、ダンスにクリエイティビティを発揮したい人たちには堅苦しい

逆に、自由度を高めるには、動きを束縛しきれないが、そこそこ束縛されるゲーム判定を用意すればいい。それがボタンというハードウエア制限で偶然にも達成されていたのが初代DDRだったと言える。

そのため、ダンスステージはDDR並の大型フットパネルに、譜面UIは奥行き付きDDRスタイル*19であるが、バッサリと奥行き判定を捨て、横軸さえあっていれば踏み判定はOKとなっている。これが高い自由度を生み、ダンサーは自由に前後移動が出来ることで、シャッフルダンスの奇妙な浮遊感をそのまま持ち込むことが出来る

youtu.be

一方で、この自由度がダンス初心者、特にシャッフルダンスという見慣れない踊りを初めてする側にとっては相応に難しかったようで、ダンスラのリリース後は公式から練習動画や筐体で遊べんで学べる練習譜面、お手本プレイが続々筐体向けに配信されている。このあたりは早い段階でほしかった所だが、動画共有が前提の時代ということもありファンメイドの攻略/ダンス練習動画も多数出てきている

youtu.be

youtu.be

 

「お手本ムービーとシンクロする楽しさ、わかりやすさ」と「アレンジできる自由度、深さ」はパッと見、相反してしまう。そして自由度を追い求めると、最終的にステージ(場)と音楽があればあればよく、そうなるともはやゲームである必要性もなくなっていく…動き回れる床と音楽があればいいのでは…、となるとダンス音ゲーがゲームである理由が薄くなっていく…難しい問題だ

テトテコネクトはシンクロするダンスゲーの総まとめ

テトテコネクト(タイトー2021)は初見で見ると、パートナーキャラクターと行うタッチパネル音ゲー…、つまりはMaimaiや押忍!戦え!応援団を大型化した印象になるだろう。そこにパートナーキャラクターがいて、目の前でダンスをしてシンクロできる、と。

 

がやってみると結構感触が違う。単なるタッチパネル音ゲー、にしてはちゃんとパートナーの振り付けが付けられていて、マネして踊れるように譜面が作られている。

さらに、難易度ごとに譜面と振り付けが異なる。が、特徴的な譜面は残し、片手のみの譜面にする、連打を簡略化するなど、場面場面での簡易化/高難易度化の処理に手間が掛かってる

youtu.be

ダンエボで振り付けが採用されたハッピーシンセサイザーも、テトテで採用されおりUltimate難易度なら振り付け通りに踊ることが出来る。

あれ?これダンスゲーじゃん!!

youtu.be

譜面ごとに振り付けをバラして難易度調整するのは、ダンセンでやってたそれとほぼ同じ戦略だ。こうしてみると、タッチパネル音ゲーというよりダンセン、ダンエボの後継としての性格が強い。

「お手本ムービーとシンクロする楽しさ、わかりやすさ」をタッチパネルゲーとしての見た目とプレイを提供することで敷居を下げ、難易度別に振り付けを作ることでゼロからだんだん譜面と振り付けを覚えられるにする。このダンスゲーの最終地点は振り付け通りに踊ることで、それは「パートナーと同じ動きをする」という分かりやすいゴールと理解させる。そのパートナーは選択/エディットでき、ついでに他IPとのコラボもしやすい*20*21。すげえ、全部乗せか?!

 

…と、テトテコネクトには昨今のダンス音ゲーをまとめ上げたような作り込みを感じた。

*1:一時期存在したSoloシリーズは斜め前が追加され6箇所。ダブルは一旦脇へ置く

*2:DMXあんまり説明ないじゃん!とか言われても、めっちゃ自分が遊んだタイトルなので上げるよ。手ぶつけると痛かったよ。ところでPS2DMXまだですか?

*3:最近の自動ドアの検知機構と同じ。チュウニズム(2015年セガ)のエアーストリングスも同種の機構

*4:DMXは上下で別スクロール表示をさせるオプションもあった。今思えばサンバDEアミーゴのプレーヤーとかにはプレイしやすかったんだろうか?

*5:故にDDRではパフォーマーが独自の振り付けを編み出したりできたという見方もできる

*6:正確には国内DDRは2006年のExtremeで一度終了してリブートしている

*7:「スイッチ判定」を表すノーツが、時間軸に沿って動く。ノーツが基準線に来た所で押す

*8:ドラムマニアあったやんけ?まあ、それはそれってことで

*9:しかもWindowsで使えるサイコー

*10:英語版タイトルDanceMasters

*11:ついでに自撮りまでするし、リプレイで再生してくる。パジャマで踊ってるときに、それは勘弁してくれ

*12:コナミは人類の性能に期待しがちじゃないですか?(偏見)

*13:脱落しなければ

*14:そして判定が割り切ってるなあと

*15:ところで360版の追加楽曲DLCはまだですか?

*16:元振り付け【こずえ】ルカルカ★ナイトフィーバーを踊ってみた【らめらめよ!】 - ニコニコ動画

*17:元振り付け【踊ってみた】ハッピーシンセサイザ【めろちん】 - ニコニコ動画

*18:または昔のクラブもそうかもしれない

*19:SoundVoltex風、CHUNITHM風というのが分かる人にはわかりやすいか。というか、タッチ範囲が足パネルになったチュウニズム?

*20:いわゆるアバター3Dモデルを納品してもらえばコラボ出来る。んんん、なんか揺れものの動きがVRMっぽい気もするな?というか相馬みやこの肘のウエイトの乗り方とかもなんか見覚えがあるような…?

*21:プレイ時は初音ミクコラボが進行中だった

この自転車がほしい2022

まあ買うか買わないかは別として。

夏ぐらいから布教活動をしたら、友人2人にロードバイクを買わせることに成功したりしつつ、友人たちとツーリング機運が高まってたりで自転車熱が再燃している。周りが新車を買ったりnew gearしていると自分も欲しくなるものなので、引っ越しで手放したローラーの置き換えとしてグロータックGT-Roller F3.2を買ったりした。

が、それはそれとして新車は気になるじゃん?妄想妄想

 

今の自転車構成

普段使いユーティリティロードTNI 7005-mk2(5800)

2014年末に組んだのがベース。当時数少ない格安アルミフレームセットこと、みんな大好き激安アルミフレームのTNI 7005-mk2に、当時の105こと5800構成。初期構成から変わったのは、28Hの手組みホイールを入れてるあたり。

乗り心地がアホみたいに硬く、強く踏むと足が痛むだけで進まない、足を止めると進まないという分かりやすい問題はあるものの、高ケイデンスで回してるかぎりはよく走り、スポーツバイク然とした走り感は乗ってて楽しいバイクだ。初めてのブルベやらサーキットエンデューロレース、箱根ヒルクラやらにも投入した。

通勤用に使ってるうち、リアキャリアとパニアバックを付けると買い物に便利ということに気づき、買い出しの機会が増えた2020年のコロナ以降は20L+40Lパニアを基本装備にしてしまっている。米袋(5kg)や牛乳パックやらを満載してもスムーズに走れるのは楽しい。公園キャンプに各種道具積んで走るのもいい。まあただキャンプ道具を満載するにフロントの積載量がほしい

そもそも7005-mk2にはキャリアダボ穴がないために、VIVAクイックエンドアダプターとgrungeキャリアダボ付きシートクランプを経由してリアキャリアを付けてる。フロントも同じようなノリで行けるかと思ったが、ダボなしのカーボンフォークはVIVAクイックエンドアダプターと相性が悪く、QRで組み付けると明らかにフロントの剛性感が弱くなりイマイチ。ということでフロントに荷物が積めないのが不満になっている

 

そろそろ8年だし、解体して5800コンポセットとして切り出し、別車に組み直しても面白いと思う、という次第。

ストレートに後継の役目を追わせるなら

  • 雑に使える金属フレーム?
  • リアキャリア装着可。フロントキャリアまたはフロントダボ付きフォークで積載量マシマシ
  • 踏み込んでも足を傷めない程度の、現代的な硬さのスポーツ仕様フレーム

あたりが欲しいところ

本気ロードMiracleBike MC566(6800mix)

2019年後半に組んだカーボンバイク。7005mk-2を普段使いようにするべく、本気ロードという使い分け枠、の3世代目。ポジションが出せなくて諦めたICAN Aero007(シマノ6800)、その後購入し壊してしまったMiracleBike MC565の後釜として購入*1。自家塗装の上、シマノ6800を中核にヒルクラ対応のための32TスプロケとRD-5800-GS、ひっそり更新された*2FD-5801、X-Cadeyパワークランク(R7000)等を混ぜた構成。いつのまにか5800が多くなって、STIとクランク右だけ6800なのか…

土台がヒルクラ用フレームということもあって、硬い乗り味だけれども7005-mk2のような突き上げる硬さはなく、強く踏み込むとグッと進む。それでいて7005-mk2より2周り軽く、奇妙なフワフワ感がある。振動吸収も7005-mk2と比べれば雲泥の差でスムーズ。7005-mk2で感じた弱点だけが解消された上位機という風体でたのしい。これが現代的なカーボンフレームなのかー

 

今出先ツーリングしてるのはコレだが、ミノウラのロード専用リアキャリアでパニアバッグ運用をするようになっている

現状不満はないのでこれはこのまま。あ、自家塗装の皮膜が弱くどんどんボロボロになってきてて、その問題はあるけどいい解決策がない*3

折りたたみサブCarryMe

折りたたみは過去2台所有していて、CarryMeの前は5LINKS2(165)だった。これはこれで面白い変形、癖のある自転車だったが、やはりそれでも嵩張る、重かった。より軽量ミニマム、いっそ自転車外でも試すか…ということで、同僚のキックボードマニアから中古キックボードを譲り受けたりした所、キックボードは自分に合わないことがわかった。ペダルとフリーが欲しい、つまりミニマム自転車だ*4

ということで白羽の矢が経ったのが、キックボード以上自転車未満なCarryMeだった。探していたら中古ショップでビッタリ欲しいカラーを見つけて即購入。

CarryMeのキャラクターははっきりしていて分かりやすい。小径ホイールからくる圧倒的な失速、15km/hぐらいの巡航がちょうどいいぐらいで全然速度が出ないし、ちょっとした距離で体力を食う。まあでも歩くよりも走るよりも早く、サドルという特等席で座って移動できる。最初は軽いハンドルが繊細に感じられるが、乗り続けてくるとバランスのいい剛性感が素直な操縦性とスポーティーさを引き出してることが分かる。確かに体力は使うし、ロードと比べればそりゃ遅いが走れるし、だいたいの癖は抑え込め、自分の足として信頼が寄せられる。折りたたみのステップも少なく、縦長コンパクトな折りたたみ形態。8kgを下回る十分な軽さ。

 

とまあかなり気に入ってるのだが、それはそうとやはり圧倒的に走行性能が足りない。まあ出先の街でちょっと散策とか、駐輪場がない玄関先に置かせてもらう…みたいな用途にはベストではあるけど、出先ツーリングするには厳しい。

んー、いや悪くはないけど、「走りたい」気持ちで出先を選べないというか、出かける用事があった上で持ってく、なら楽しいバイクというか。しかしかといってロードを輪行するのは面倒が過ぎる、という場面が出来たりしない?

  • 折りたたみでコンパクトだが、走行性能も欲しい

ということで要件をまとめると

  • 積載量重視の汎用バイク/カーゴ/グラベル/バーサタイル寄りのダボが多いやつ
  • 走行性のある折りたたみ

のどちらか、または両方。いや折りたたみのプライオリティは低いというか趣味性が高まっちゃう

4台保有は難しいので、7005-mk2を解体or手放した上で、上記のどちらか重視かなあ? 解体パーツを割り当てて、新車をバラ完すると安上がりかもしれない。そうじゃないかもしれない*5

概ねディスクブレーキになるだろうから、そうするとグロータックのEualブレーキとか付けてみたいねえ。

このバイクがほしい2022

Surly BigDummy

でかい。説明不要の積載量。ロングテールカーゴバイク

いやー、試してみたいよね?7005-mk2を解体して付けても良いが、Alfine8s内装変速とかでもっと低速向き仕様で作りたいと思うし、そうするとコンポを移植する意味がなくなり、7005-mk2を解体する理由がなくなる。その場合は7005-mk2はまるごと売却かなあ

26インチディスクホイールを手組みできるか?という問題はある

Allcity SpaceHorse/SuperProfessional

Sulry対抗クロモリ。塗装センスはこちらのほうが好みなので。

SpaceHorseはSurlyで言うLongHaulTracker系ツーリングバイク、SuperProfessionalはシングルスピード向けだがRDハンガーもあり何でもありアーバン系

組むとすると、7005-mk2を解体して5800をポン付け、Equalディスクブレーキあたりを付けたい。

RibbleCycles Gravel AL

安価なアルミフレーム。グラベル

最近知った欧州ブランド。アルミのフレームセットをお安く売ってるのはありがたい。カスタムペイントも対応。

Gravel ALだとフォークダボもあり、積載量的に安心。スタイルはGCR ALのほうがシュッとしてるけどフォークダボが無くてな…。Fuji Jariとかも対抗に出てしまうけど、7005-mk2解体でバラ完できる分こちらがお得。

DAVOS  D-309 ネオスポルティーフ/D-604 ネオランドナー

ダボマシマシグラベルバイク。

クロモリのネオランドナーがお買い得感あるけど、ぶっといカーボンフォークと細身のクロモリフレームはちょっとアンマッチのような気も。マッシヴなネオスポルティーフはカッコいいが、カーボンを普段使いするには気を使うかもしれない?

PacificCycles Reach

折りたたみ!走行性能重視!フレームセットあり!Carrymeと同じPacific社!

一応専用リアキャリアもあり、パニアを付けての普段使い出来なくもなさそう。ドロハン構成に出来るのは夢が広がる。5800ポン付けしたい。

ただ、そんな小さくはない…

Renault PremiumLight6

程よい折りたたみ、というだけだが、気になる。というか自動車会社ブランドでの自転車はだいたいどこかのOEMでよく見た形状になりがちだと思うのだが、ルノーはちょっと違うっぽいラインナップで謎。妙にグレード分けがあるし、敢えて変速機なし/走行性重視の軽量版を用意したり… と思ったら、GICが手がけているようだ

適当にググった感じダホンのOEMっぽい?PremiumLight6だとDove Plusが同等品かな。価格差がどう出ているのかは気になるところ。ダホンで14ならK3も対抗になるやん?とかは思いつつ、いやでもここはシングルスピードの軽量さを推したく…

*1:正しくはMC565をそのまま買い増ししようとしたが在庫がなく、後継のMC566 T700版を購入

*2:FD-5800のロングアーチ構造はこの世代のみだったらしい…謎

*3:再塗装もできるか怪しい

*4:番外編として立ち漕ぎ専用自転車、みたいなアイテムがkickstarterで一時期あったがプロジェクトが成立しなかったり、既存折りたたみほど洗練されてなかったので諦めた

*5:たぶんそうなる。予算オーバーの法則

光造形3Dプリンタ入門した

光造形とは

ここ最近安くなった光造形に手をだしてみた。最近安いLCD式光造形は液体のUVレジンをUVライトで固めて立体化する、3Dプリント方式の一つだ。というのも、LCD光造形はUVライト、解像度の高い液晶パネル、レジン容器(バット)、Z軸のリフトで大まかに構成されるため、メカ的にはFDMよりシンプル

自分はFDM式プリンタをすでに持っていたので光造形に手を出したが、3Dプリンタ初めてならFDMから始めたほうが良いだろう。今ならXyzPrinting社、FlashForge社、Creality社など確実性の高い機種が生き残っている

FDM

  • フィラメント(材料)がやすい
  • そこそこの大きさ(機種次第で2,3cm~25cm程度)が作りやすい
  • 耐熱性が低い
  • 最大解像度は0.1mm程度、最低厚みは2~3mm程度
  • プラのゴミくずが出る程度

光造形

  • UVレジン(材料)が高い(2倍程度)
  • 小さく細かいもの(機種次第で1cm以下~12cm程度)が作りやすい
  • 耐候性が低い
  • 最大解像度は0.01mm程度、最低厚みは0.2~0.5mm程度
  • 液体薬品管理、それらの洗浄、フィルタ処理、二次硬化(ポストキュア)、廃液処理が必要

と概ね、光造形は細かく精密な物、スケールモデルや装飾品には使えそうだがそれ以外はなかなか難しい。日用品を作ったり、おもちゃや実用物ならFDMがより向いている。メンテも簡単だ

が、まあ光造形がどんなもんかに興味もあったため購入

 

基本的には

はじめての3Dプリンター!造形準備と後片付けについて - やなか技術士事務所のホームページ

をお手本にして始めてみた。とても参考になりましたありがとうございます。

機種選定

前述のように、主要な造形の仕組みをUVレジン液とその硬化に頼っているため、わかりやすい性能/価格差は主に液晶パネルの解像度/サイズに出てくる。一昔前の家庭用光造形は、Z軸リフトの精度が出にくい、Z軸リフトが液晶を割ってしまう/設計不良、UV光源にムラがあり造形が均一でない、等など問題点があったようだが、今ではあまり聞かない

ざっと見てみると2Kモノクロ液晶機(造形サイズ12x8cm)が2~3万円台、4Kモノクロ液晶機(造形サイズ(造形サイズ18x12cm)が6万~という感じのようだった。Amazonを見ると、更に小さいFHDパネルやHDパネルのものもあるようだが、そこまでコストを下げる理由はない。逆に4K機はその分大量のレジン液を扱う必要が出てくるため、運用コストについては大は小を兼ねないだろう。

ということで、今回は2KモノクロのAnycubic Photon Monoを選択した。Elegoo Marsもほぼ同タイプの対抗機のようなのでそっちでも良かったかもしれない。あと、Amazonで買うと公式通販より高かった(失敗)

f:id:o_mega:20210616012233p:plain

アクセサリを揃える

本体には

が付属した。便利

追加で以下のものを買い足した。ニッパとスクレイパーで事足りるFDMとは大違い

水洗いレジンは光造形を試すきっかけになったレジンだ。水洗い以前は、アルコール洗浄が必要になり、IPAを家庭で使う必要があった。毒性も爆発性も揮発性もあるを家にドンドコ追加し、じゃぶじゃぶするのは気が引けるわけで、水洗いはそういう意味で革新的だ。

とはいえ水洗いできるようになっても、レジンアレルギーなどは警戒したい。そのため手袋を追加し、適時使い捨てるようにする

スクレーパーは使っていくうちに汚れていくが、樹脂ヘラ、金属ヘラともホームセンターやヨドバシで入手可能なようだ。光造形は何かと汚れて固着しがちなので、適時使い捨てて行くのが良さそう

プリセットで試す

本体同梱のキャリブレートマニュアルに従って、ビルドプレートの取り付け、キャリブレーションをする。終わったら、SKレジンをよく撹拌してからバットへ注ぎ、初回テスト出力

f:id:o_mega:20210616013118p:plainf:id:o_mega:20210616013125p:plain

本体付属のUSBメモリにテスト印刷データが入っていたので、そのまま使ったところ、ベッドから剥がしにくい以外は何事もなく成功した。すごい

いや嘘、途中でレジン液を追加してしまい、初回は失敗した。途中でレジン液を追加するのは、温度変化を招くためにNGらしい。上のは2回目

f:id:o_mega:20210616013521p:plain

造形と洗浄のワークフロー

ということで手持ちのSTLデータとかをあれこれしつつ、いろいろプリントを試す

 

f:id:o_mega:20210616014220p:plain

スライサーでSTLモデルを処理する

ここはFDMと対して変わらない。モデルをツール(うちの場合はPhoton Workshop)へロードして、必要に応じてサポートを追加し、スライス処理をして印刷データを用意する。

造形ベッドに造形物をそのまま固着させる形であればサポートは不要だが、その場合初期層はUV照射時間がことからかなり太ってしまう

それでだいたいの場合はサポートを付けるが、FDMと明確に異なるのがサポートの性質だ。FDMではサポートは上に乗せるフィラメントを最低限支えられればよかったが、光造形の場合はFEPフィルムからベリッと剥がしたときに引っ張りに耐える強度が要る。またサポートが偏った位置にあれば引っ張り時に位置がずれるリスクが高まるため、上下左右にバランスよくサポートを付けたい。オートサポートはあんまり賢くなかったので手付けでやってる

f:id:o_mega:20210616020910p:plain

レジン液をレジンバットに補充/かき混ぜる

レジン液をレジンバットに注ぐ。泡立たないように、レジン液はボトルの段階で優しく振って混ぜておく。すでにレジンバットに注いである場合は、樹脂ヘラでかき混ぜた方が良いかもしれない。使ってるSK水洗いレジンの場合、一日放置しただけでも色ムラができているのが分かる

レジン液は造形に十分な量あるのが望ましいようで、少なくなるとZ軸リフトが上がったときに造形物に泡が入ってしまう可能性があるようだ。結果的にレジン液は完全に使い切ることが難しい

泡穴が残っても、あとからレジン液を垂らし、UVライトで埋めるという手もあるようだ。ちょっと試した感じでは液体の扱いが難しくキレイに埋めるのは難しそう。パテの方がいいかもしれない

プリント

PhotonMonoプリンタを起動し、USBメモリを刺す。ビルドベッドが取り付けられているのを確認してカバーを掛け、Printメニューからプリントしたいモデルを選んで実行するだけ

f:id:o_mega:20210616014302p:plain
只管プリンタがレジン液にベッドを浸す、上げるを繰り返す。ちゃぷちゃぷするだけなので音は静かだ

一次洗浄とビルドプレートから剥がす

百均タッパー2つに水を張って、洗浄タンクにしておく。それぞれ一次用、二次用と分けた

f:id:o_mega:20210616014324p:plain

手袋をして造形物がくっついたビルドベッドをプリンタから外し、一次用タンクで筆を使いながらじゃぶじゃぶ洗う。レジンはとろみがあり、水洗い可とはいえ結構ぬめりが残る。また造形物だけでなく、ビルドベッド表面にもたっぷり付着した状態になったのを洗うため、プリント毎のレジン消費はそれなりにありそう。そして一次洗浄タンクはかなり汚れる

二次洗浄とサポート除去

サポート除去と二次洗浄、どちらを先にやるか。自分はとりま、サポート除去を先にすることにした。

というのも、サポートを取らないと筆洗いでは細かい所が洗いきれないから。超音波洗浄機を導入すればこの限りではないと思う。

サポートをプラニッパでパキパキと切断して取り除く。ポストキュア前だとレジンがまだ柔らかく折れにくい、白化もないためこの段階が良さそうな気がする。その後、筆で二次タンクでじゃぶじゃぶ洗浄。

f:id:o_mega:20210616014402p:plain

乾燥

サーキュレーターで風を当てて乾燥。現状よくわからないが、水洗いレジンは吸湿性があるらしいのでそうするとちゃんと乾かしたほうがいいのかもしれない

f:id:o_mega:20210616014424p:plain


ポストキュア(二次硬化)

手芸用のUVライトを買ったが高さが足りなかったので、100円均一アイテムでポストキュア箱を作った。タッパーにアルミホイルで遮光&反射で効率up狙い、あみあみ台座は排水溝のメッシュ

裏返しながら4分タイマーをまんべんなくあてて二次硬化させる

f:id:o_mega:20210616014343p:plain

以上でざっくり造形は完成。でよいと思う

メンテナンス

洗浄廃液処理

これもブログを参考に、日光浴/ポストキュアUVライトを当ててからストレーナーで濾して下水へ捨てる。

一次洗浄水は流石にビルドベッド周辺も洗ってるせいかレジンが濃いようで、湯葉みたいなものが多量に取れる。二次洗浄水はぼんやり油膜ぐらい。あとはベッドから剥がす時に割れたサポート片が混ざるぐらい

f:id:o_mega:20210616014438p:plain

どんどん汚れる。底にもレジン片がこびりつく。定期的に捨てるぐらいが良さそう


レジンバット洗浄

レジンバット洗浄は毎回しないといけないか…ぐらいに思っていたがそこまで不要だった。プリント前の撹拌をすれば問題なさそう。造形成功しつづけている限りあまり洗浄は不要という感触

ただ、長期間プリントしないなら、ボトルへ片付けたほうがよいだろう

f:id:o_mega:20210616013754p:plainf:id:o_mega:20210616013616p:plain

一方でプリント失敗した場合は確掃除が必要になる。造形失敗したパーツがFEPフィルムに固着しているので剥がして捨てる必要がある。剥がれ落ちた造形品がレジンに浮いてる可能性もあるだろう。樹脂ヘラでFEPフィルムを丁寧に撫でてゴミを剥がし、ストレーナーを通してレジンからゴミを除去する作業が必要になる。

 失敗だけでガッカリなのに、追加で掃除が必要というかなりの罰ゲームがある

 

f:id:o_mega:20210616013832p:plain

スライサからUSBの書き込みが完了する前にあせってUSBメモリを抜くと、スライスデータが破損するようで、気づかずに出力するとこのようにぶっ壊れ造形をされてしまうことが起きてしまった。レジンも大量消費するし、ベッドは固着して剥がしづらいし、洗浄タンクもバットもクソ汚れる。つらい…

パラメータ調整

正直よくわからんけど、プリセットでうまく行った。

概ねこの光造形で問題になるパラメータは、UVライトの照射時間ぐらいと思われる。SK水洗いレジンについては機種ごとの出力差はあるにしてもモノクロ機で2-3秒と公式が紹介しているのでこれを参考にした。PhotonWorkshopの初期値は2.0秒であり、これだと特に問題なく成形されるものの逆テーパー部がかなり太った。

照射を長くすればよりカッチリ固まるが、周辺部まで余計に固まることから太めになる。またXY平面に広いパーツは内部に応力がたまり割れやすくなる…らしい。逆に照射を短くするとだんだん柔らかくグニャグニャになるものの、周辺部の固まるがなく細く正確な造形になる。ただし、下げすぎるとベッドから造形物が墜落、レジンバッド内のゴミになる可能性が高くなる。

何度か試し、最終的に1.7秒程度に設定した。ただ、現状柔らかいことで反りが出ているような感触もあるので、この辺は詰めていくか、サポート設定の工夫が必要そうだ

硬化後の特性や塗装とか

硬化後のレジンはパリッとした硬さになった。ただ、靭性は低いようであっさり折れたり欠けるので、ガシガシ遊ぶタイプの模型にはキツイかな…。展示する模型にはベストマッチ。ヤスリをかけた感じ切削はしやすい。ラッカー塗料の乗りもいい

f:id:o_mega:20210616014833p:plain

サポートの付け方によるのか、結構歪むことがある。画像だと正方形の穴や後方カバー部が歪んでいる。精度があるのと歪むが両立しているのが不思議な気がするが、液体硬化はだいたいこういうものらしい

f:id:o_mega:20210616015424p:plain

感想

FDMと比べると格段に面倒になる。で得られるのが精度だけ、というのが思ったよりFDMより使い所が難しい。スケール模型を作ったりするにはメチャクチャいいんだけど、他の実用アイテムとかになると置き換えは厳しい感じ、という当初の予想だいたい通り

 

U10mk2デスクトップアーミー版を作る

ということで?日頃お世話になってた火事屋さんのU10mk2アバターを、デスクトップアーミー・バーゼラルドとミキシングして、それらしくしてみた。

U10mk2はアバター、VRChat、通りやすいイメージで言うとゲーム寄りのCG用途に作られているため、当然ながら3Dプリント適正はない。がそれなりにアバターとして使い込んでることでモデル形状はだいたい把握していたこと、フル再現ではなく部分再現とミキシングでやること、としてハードルは低めに。残りはblenderと気合で頑張って手を入れて、ガンガンプリントをして試作確認モデル修正をぐるぐる回して作る(プリントの練習を兼ねる)

blenderには3d print toolboxという公式プラグインがあってたので、多様体化はだいたいこれで解決している。閉じてないポリゴンに豪快に蓋をしてくれる

Photon WorkshopはFDMのスライサーと異なり、ポリゴンが交差している分には問題なかったので、そこの特性は積極的に活用した。一方でノーマルが間違ったポリゴンでは、プレビューでは表示されるがスライス時には消えるような怪しい挙動があったので注意が必要

blenderブーリアンモデファイアで穴あけ等をしたのだけど、どうも交差が複雑だったりすると上手くいかずにポリゴンが消える場面が起きてしまって、かなり手間取った。穴あけにいい方法があれば知りたい

 

ツールやプリント方法に依存しない問題点として、そもそも単純に縮小したものがリアルで実用的な模型になるとは限らないというのがある。U10mk2の足ブレードをそのまま出力すると0.5mm厚が生成されたり、腰の武器リングも1mmぐらいの輪っかが出来たり、パーツ同士の接合が1mmシャフトだったりしてしまう。すると普通に塗装したり組み立てるだけでパーツを破壊しがちだ。サポートから取り外せなかったり、そもそも途中脱落して造形失敗することも起きうる。空中に浮いてるパーツはそもそも造形できない。ので、おもちゃチックにわざと厚みを足したり、目立たないように裏に柱を追加したりの加工をしている。

他に今回の用途に合わせ、ジョイントパーツの接合用穴や、武器のグリップを追加などもする。ディテイルはそもそもノーマルマップで作られたディテイルは、ポリゴンだけが造形される3Dプリントでは作られない。またディテイルが造形できても、0.2mm以下の溝などスケール的に意味がなくなってしまうケースもある。必要に応じて作り直す/彫り込むのが正しいが、今回はスピード重視で楽しそうな所だけ施した

 

今回は顔パーツには手を入れなかったが、アバターによっては目のパーツを空中に浮かせる、目が陥没している、といったモデリングテクニックがしばしばあるため、それらを埋めたり違和感ないように修正したり、はたまたプリントサポートをどうするかといった工夫が必要なると思われる

光造形なら出来そうな気配がしたのでU10mk立体化を試してみた。思った以上に全体に手を入れる必要があった。大変だったが、なかなかいい所まで出来たのはよかった。喜んでもらえた

 

あと、久しぶりに模型塗料を触ったんだけど、クレオスのGXメタリックカラーシリーズが筆塗りでもキレイにギンギラになる、オススメ。一昔前のメタリックより格段に粒子が細かくてキレイ

f:id:o_mega:20210616023453p:plain



チェルノブイリ原発シミュレーター・Tips

チェルノブイリ原発シミュレーターの始め方はこちら

いろいろ試して発電したことで分かったアレコレと、理解してると理解が進むやつ集。Tips集と用語集がごっちゃになったもの

起動手順書はコイル男さんのが詳しいのでこちらもぜひ

 

アラートは大切

f:id:o_mega:20210128212125p:plain

  • この手の機械は、アラートがないとき=正常、という論法で設計されてます。ので停止状態は異常でありアラートまみれ。シミュレータ起動直後にアラートが埋まってるのは正しい状態です
  • ここからアラートを減らしていけば自ずと運転状態へ近づきます
  • 点滅しているのは新規で増えたアラートです。ACKボタンを押すと、既読状態になり、点滅から点灯に変わります。頻繁にACKを押して、新しいアラートを見逃さないようにしましょう

Xe核毒またはキセノンオーバーライド

f:id:o_mega:20210128212323p:plain

  • シミュレータ炉では常にXeが発生していて、Xe核毒による中性子吸収/出力低下が起きています
  • じっくり炉を起動させようとすると、Xeが溜まってしまいRODをどれだけ抜いても起動できなくなります*1。Xeが貯まる前に、手早く、思いきって臨界へ持っていくことが、Xe核毒に対しては重要です
  • Xe過剰により起動困難になった場合、シミュレータを再起動して最初からやり直すか、Xeチート*2をするしか手はありません

バルブとポンプの起動方法

f:id:o_mega:20210128212429p:plain

  • 流量が多いValve/VlvとPumps(Recirculation、Feedwater等)のセットには起動順序があり、それ以外の方法では起動しません
  • 開ける場合、InletValve/SuctionValve→Pumps→Outlet/DischargeValveの順で起動します。閉める場合は逆。
  • それぞれの操作には時間がかかります。そのため押しても即座には動作しません、計器盤もそれだけ遅延します。バルブで長いものは10秒ほど、Pumpsは2,3秒掛かります。
  • RecirculationPumpsなどはVoid発生によって停止させてしまうことがあります。その場合、そのままではポンプ再起動はできません。OutletValveを一旦閉じる→Pumpsを再起動→OutletValveを開く、といった手順が必要になります。

用語LevelとPressure

  • Levelは水位を示し、軽水が入るあらゆる場所にあります。
  • 水位が極端に上がったり下がったりすると、(水が入ってはいけない)次パーツに水を流し込んだり、空焚きになったりするため、これを維持するのが蒸気機関の運転ではキモになります。
  • DrumLevel,ReactorLevel,HotwelLevel,Deaerator(DA)Levelなど
  • 基本的にLevelで水の量を確認します。水が足りてるか足りてないかはLevelを見て判断します。安定時の基準値は0。基本的にはAuto任せ

f:id:o_mega:20210128214021p:plain

  • Pressureは気圧を示し、蒸気が入るあらゆる場所にあります。
  • 蒸気機関は蒸気圧から復水器の真空との落差でエネルギーをタービンに伝えます。一般に蒸気圧が高いほどタービンは高出力になりますが、起動準備が十分でない場合、耐圧性能のない部品に高圧蒸気が流れてしまい、機器を破壊します。(RuptureDiscアラートが上がり、シミュレータでは復帰する方法がありません)
  • DrumPressure,TurbinePressureSetpoint,Deareator(DA)Pressure,CondensorEjectorPressureなど
  • 基本的にPressureで蒸気のパワーを確認します。蒸気が足りてればPressureが上がり、足りなければ下がります。過剰分はMainSteamDumpValveからCondensorに放出されます

用語setpoint

  • 原子炉機器の中には、モジュール単位で簡易な自動化している機器がいくつかあります。その自動化において、目標値の設定がsetpointです
  • 例えばFeedwaterPumpsのDrumLevel setpoint 0の場合、DrumLevelを参照しDrumLevelが0未満ではポンプを起動、0以上でポンプを停止する、という挙動になります
  • 例えばMainSteamDumpValveのsetpoint 1000の場合、DrumPressureを参照し、DrumPressureが1000以下であればバルブを閉じ、DrumPressureが1000より大きい時はバルブを開ける、という挙動になります

タービンReset起動条件

  • TurbineSupportのSteamSealを起動していること + DrumPressureが2000ぐらいあると、CondensorVacuum,Ejectorが起動できます
  • CondensorVacuumが起動している + DrumPressureが3000ぐらいあると、タービンをリセットし、setpoint900rpm以上を設定できるようです

用語OpenとClose

  • 電気GeneratorBreakerにおいては、Openがオフ(開放)、Closeがオン(導通)になります。
  • 流体(水/蒸気)用の用語が電気系でもそのまま使われてるため、現代の感覚だと違和感があるかもしれません

AutoControlの起動条件

f:id:o_mega:20210128213107p:plain

  • タービンResetが出来ている状態から、AutoControlをオンにしてROD PULL操作をして臨界(HOLDボタンの横 N Rate log > 0)、でAutoControlが起動するようです
  • AutoControlに入ると、UIから%指定の出力調整PowerSetpointができるようになり、ROD操作をすべておまかせで一定の熱出力を出し続けてくれます。逆に言えば、このUIで%が操作出来ないならAutoControlになってません。
  • Error表示は正直良くわかりません。ERROR表示でも動いてます
  • 熱出力を一定で維持するのは人間業ではないので、早い段階でAutoへ引き渡したいところ

FeedwaterFlowアラートと3 ElementControl

f:id:o_mega:20210128212530p:plain

  • FeedwaterFlow < 5%アラートはFeedwaterの3 ElementControlがオフの場合頻発します。
  • というのも3エレメントがオフの場合DrumLevelを見て、足りなくなったらポンプ起動、足りたらポンプ停止と間欠駆動するからです。このポンプのオンオフの「オフ時」にアラートが上がります
  • 他にも3エレメントがオフの場合、不定期にDrumLevel,HotwellLevelが上昇下降したり、不定期にDrumに水が入ることから温度が下がり蒸気圧が不安定になったりと、安定稼働においてはよくありません
  • 3エレメントコントロールは、DrumSteamFlow、DrumLevel、FeedWaterFlowの3つを見て、いい感じにする画期的な機能です。ただし、蒸気が十分に循環してない場合にはうまく動かないため、オフがデフォルトになっています
  • 蒸気機関起動中は3エレメントをオフ(デフォルト)、蒸気機関が安定して動き出したら3エレメントに切り替えるのが良いでしょう。そうすればFeedwaterFlowアラート頻発はなくなります

スタートアップバルブとメインバルブ

f:id:o_mega:20210128213725p:plain

  • TurbineValveとFeedwater ValveにはStartup/Mainという2つのバルブがあります
  • Startupは流量が小さい代わりに制御が効きやすいバルブ、Mainは流量が大きい代わりに制御が効きにくいバルブです
  • Startupバルブで起動し、発電が安定したりバルブ開放率が大きくなったら、Mainバルブに切り替えます

Generator Reverse Powerアラート

f:id:o_mega:20210128214111p:plain

  • 送電を開始したとき蒸気量/蒸気圧が足りないと、GeneratorLoadが増えた後0に戻ってしまいます。この時、何が起きているかというと送電網と発電機の同期が取れてない状態で、発電ではなく逆に受電してしまい、発電機をモーターにしてタービンを回す、ということが発生してます。これがGenerator Revese Powerです(Generator Loadに負値が表示されると分かりやすいんですが、残念ながらありません)
  • そうなると、Generator Breakerは自動的に電力網側をカットします。カットされた瞬間にタービンがトリップ、VibrationとDiffExpasionが大きくブレてしまい、しばらくタービンに触れなくなります。
  • GeneratorReverseが出たら、タービントリップを防ぐために手動でGeneratorBreakerをOpenしましょう
  • 根本的にはタービンに与えてる蒸気量/蒸気圧が少ないことが原因です。炉の出力を高め、MainSteamDump setpointを高めに、炉とタービン3600回転の安定を待ってから送電を開始しましょう。安定化のために3ElementControlのオンも確認しましょう。

MeltDownと100%出力の条件

f:id:o_mega:20210128215847p:plain

  • 他にも条件ありそうですが、Neutron Fluxが100%をわずかでも超えるとメルトダウン判定されるようです
  • 熱出力はN Flux 100%からXe吸収分が引かれたものから算出されるようで、Xeチートなしの場合、溜まったXeが燃え尽きるまで熱出力100%は出来ない模様。その場合は熱出力95%ぐらい
  • AutoControlでは100%を超えて出力が設定できます。ほぼ即座にメルトダウンします。そりゃそうだ?
  • ThermalPowerCorrectionは、おそらくPowerSetpointの基準をNeutronFlux基準(Correctionオフ)にするかThermal基準にするかの違いのようです。ので、setpointが95%近いときにCorrectionをオンにすると、補正分の熱出力を炉が出そうとしてメルトダウンする可能性が高いです。ご注意

SCRAM条件

  • ゲーム的にはSCRAMをオンにする理由はあまりありません。アラートが消えるぐらい
  • イメージ的には自動車免許の仮免でブレーキ踏んでくる教官が乗ってる感触、でしょうか。危ない兆候があるとSCRAMで割り込んで止めてくれるのは安心感もあり、説明なしに止めてくるのは邪魔でもあり…
  • かなりの量の発動条件があるようです*3が、個人的に一番良く見るのは「N Rate > 12?%」で起きるSCRAMでしょう。ROD操作は慎重に。N Rate > 8%アラートを見ながら操作しましょう
  • SCRAMが動くとECCが連動して注水されるケースがよくあるようです。SCRAMをオフにすれば、連動するECCも止まります

*1:どっかで聞いたような話だな?

*2:Xeチートについては導入編をどうぞ

*3:だいたいの水位LevelがVery High、Very Lowで条件があるようですね。DrumLevel,RectorLevel,Deaerator(DA)Level,HotwellLevel等