Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
楽しいVR空間を作る技術と支える技術 #osc19do
Search
Infiniteloop
October 17, 2023
Programming
1
110
楽しいVR空間を作る技術と支える技術 #osc19do
オープンソースカンファレンス2019北海道の登壇資料です
Infiniteloop
October 17, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
17
69k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
600
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
860
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.3k
詫び石の裏側
infiniteloop_inc
0
820
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
35k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
250
ADRという考えを取り入れてみて
infiniteloop_inc
0
260
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
200
Other Decks in Programming
See All in Programming
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
960
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.1k
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
610
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
120
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
680
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
170
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
4.1k
AtCoder Conference 2025
shindannin
0
840
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Implementation Patterns
denyspoltorak
0
140
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
The Invisible Side of Design
smashingmag
302
51k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
For a Future-Friendly Web
brad_frost
180
10k
Typedesign – Prime Four
hannesfritz
42
2.9k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
180
Navigating Weather and Climate Data
rabernat
0
58
Building Flexible Design Systems
yeseniaperezcruz
330
39k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
350
Transcript
楽しいVR空間を 作る技術と支える技術 2019/06/01 OSC 2019 Hokkaido 株式会社インフィニットループ 後藤 大宗・山岸 大
自己紹介 ・後藤大宗 / Taishu Goto ・3Dモデラー ・スマブラはプリン使い 仙台→山形→千葉→北海道 イマココ スープカリーがおいしい!
https://hagurumaheigen.booth.pm/ BOOTH 歯車平原
VCIとVRMとは違うのか?
基本的にはどちらも glTF2.0ベースの3Dフォーマット 人型アバターのフォーマット さまざまなプラットフォーム上で同じデータを 使うことを想定して作られた 人型である必要がない 家具、武器、背景 など プラットフォーム側でなく、 VCI自体にLuaスク リプトを記述して動きを制御することができる
VRM VCI
VCI Object と VCI Sub Item VCIの構造
VCI Object SubItem SubItem SubItem
アメリカンクラッカーVCIの場合 VCI Object VCI Sub Item
SubItemの所有権
所有権 同期の基準になるユーザー
SubItem所有権の基本ルール 2・SubItemを掴んだ人に所有権が移る 3・同じGroupIDはまとめて移る 1・はじめはアイテムを出した人が持つ
SubItem所有権の基本ルール1 ・はじめはアイテムを出した人が持つ
SubItem所有権の基本ルール2 SubItemを掴んだ人に所有権が移る SubItem 現状「掴む」以外で 所有権を移す方法は ありません そのため、 コライダが無いなどで 掴めない場合は 所有権が移せません
注意
SubItem所有権の基本ルール3 同じGroupIDはまとめて移る ただしGroupIDが0のものは掴んだものしか移らない
VCIの重要な仕様に関しては 特にこの「所有権」まわりを 理解しておけば大丈夫だと思います あとはLuaスクリプト次第!
VCIの機能について なにができるの?
・Luaスクリプト無しで できること ・Luaスクリプト有りで できること ・(現状)できないこと VCIの機能について UniVCI v0.17時点
Luaスクリプト無しで できること ・物理挙動の設定 ・掴める/掴めないの設定 ・大きさを変えられるかの設定
Luaスクリプト無しで できること Unity上のコンポーネント で設定 VCI Sub Itemで 掴み、拡縮の設定 Collider Rigidbodyで
物理挙動を設定
Luaスクリプト有りで できること ・移動させる ・回転させる ・拡縮させる ・音を鳴らす ・衝突検知 ・アニメーションさせる ・マテリアルの色、UVの変更 ・他のVCIからメッセージを受け取る
etc できないこと以外はだいたいできる!
(現状)できないこと ・オブジェクトの表示非表示切り替え ・マテリアルを別のものに変更 ・他のVCIやキャラクターを直接制御 ・アニメーションのブレンドや同時再生 etc
Luaスクリプトについて イベント関数
イベント関数 update updateAll onUse onUnuse onTriggerEnter onTriggerExit onCollisionEnter onCollisionExit onGrab
onUngrab 毎フレーム処理 コントローラのボタン検出 コライダによる衝突判定 アイテムを掴んだ際の処理
回転翼のスクリプト onGrab() onUngrab() アニメーションファイル名
回転翼のスクリプト コライダ アニメーションコンポーネント 参照
ポジションリセットのスクリプト onUse()
ポジションリセットのスクリプト
ドラムのスクリプト onCollisionEnter()
ドラムのスクリプト ドラムとスティックにコライダとrigidbodyをつけておく
ドラムのスクリプト イベント関数内に条件文を追記することで どのSubItemとコライダの衝突なのか判別 自動で代入される
ドラムのスクリプト コンポーネント VCI Objectにアタッチした Audio Source 、Animation を名称指定する
Luaスクリプトについて 共有変数
共有変数 変数をユーザー間で同期することができる 途中からネットワークに参加したユーザーにもアイ テムの状態を共有できる vci.state.Set("STATE",state) vci.state.Get("STATE") stateの値を”STATE”という 共有変数に保存 共有変数”STATE”から
値を取得
共有変数 ネットワーク上にすでに変数が 保存されてるかのチェック 値があれば取得し、 なければ初期化 現在の状態を共有変数に 代入 ライトのスクリプト
Luaスクリプトについて メッセージシステム
メッセージシステム メッセージを送受信することで同じスタジオ内 にある別のVCIと変数のやり取りができる ↓ 例 スイッチのVCI と 爆弾のVCI データを管理するVCI と 掲示板のVCI vci.message.Emit("MSG_NAME",1) vci.message.On("MSG_NAME", onMessage)
送信側 受信側
メッセージシステム vci.message.Emit("MSG_NAME",1) 送信側のスクリプト メッセージ格納する名前 string型で”addforce_on”という メッセージの中身になる メッセージは投げっぱなし 過去のログの読み取りなどはできない
メッセージシステム vci.message.On("MSG_NAME", onMessage) 受信側のスクリプト 受信側はonMessage関数とセットで使おう 送信側を判定する条件式
アップデートで配信のコメントも 取得できるようになりました
コメントの取得 name部分が”comment”でシステムからの コメントメッセージを取得可能 例 「www」で画面に草が生える 「クッキー」でクッキーのカウントが増える
VCI学習 調べ方など
VirtualCast Wiki
関数別や、用途で別れている VCI取り込みのリンクや Unitypackageファイルもあるので 参考にして作りやすい
VCI Developers Discord https://discord.gg/jtsXVVA ↓どなたでも自由に参加できます VCIの質問やバグ報告 作ったVCIの宣伝など THE SEED ONLINEの質問も
こちらで受け付けています 公式VCIの開発者コミュニティです
THE SEED ONLINE
自己紹介 - 山岸 “@akai_inu” Masaru - OSC 2016 Hokkaido, OSC
2016 Tokyo/Fall - THE SEED ONLINE エンジニア ポートフォリオサイト https://il-m-yamagishi.github.io
VCI の使い方 1.VCIを作成 2.アップロード 4.遊ぶ アイテムボックス 3.連携 することで TSOのアイテムボックスから VCIを持ってこられる
THE SEED ONLINE 構成図
Microsoft 製 WebGL フレームワーク
個人初 OSS! virtual-cast/babylon-mtoon-material virtual-cast/babylon-vrm-loader
Vue.js のフレームワーク - 最新技術の塊 - デザイナー・コーダー責務分離 - TypeScript - Vetur
OAuth Login OAuth Provider - Twitter - Facebook - niconico
OpenAPI 3 OpenAPI 3
ありがとうございました。