Skip to content

yzan/StreamingMesh_OLD

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

StreamingMesh v0.11

このアセットについて

StreamingMeshはWebRTCを経由して,リアルタイムに3Dモデルを読み込んで表示する 実験的なアセットです. 現バージョンでは受信側(MeshReceiver)はビルドしたアプリケーションに対応しますが,送信側(MeshSender)はUnityEditor上でしか動作しません.これはマテリアルのプロパティやテクスチャのアクセスがUnityEditorのコードを利用しているためです.また,現行バージョンではSkinnedMeshRendererに設定されたMeshのみ対応します.一部の計算にComputeShaderを使用しているため,UnityのComputeShaderに対応している環境が必要です.(Macではうまく動作しません)

依存関係

事前に必要なもの

アセットストアのWebRTC NetworkをUnityにインポートします.これが最低限ないとコンパイルエラーで動作しません.

あればよいもの

7Zip, lzma, LZ4, fastLZ, zip/gzip & brotli multiplatform plugins.によるデータ圧縮をサポートしているので,このアセットとStreamingMeshのアセットをインポート後,Assetフォルダ直下のsmcs.rspgmcs.rspを削除することでデータ圧縮の恩恵を受けることができます. 上記のアセットをインポートせずにsmcs.rspとgmcs.rspを削除すると,コンパイルエラーが起きてStreamingMeshが利用できなくなるので注意です.

アセットの使い方

ビルド時のおすすめ

  • 送信側,受信側ともに Edit -> Project Settings -> Player から Rssolution and Presentation タブ内の Run In Background を有効にしておくことを推奨します.

送信側

  1. 任意のGameObjectにMeshSenderのスクリプトを追加します.このとき,自動的にWebRTCManagerSkinnedMeshesValidatorが追加されます.

  2. 送信したいMeshを含むGameObjectをMeshSenderTarget Game Objectに追加します.GameObjectから対象のMeshを再帰的に探索するので,Hierarchy直下のGameObjectを追加すると良いでしょう.

  3. WebRTCManagerのChannelに任意のチャンネル名を指定します.指定しない場合,ランダムのチャンネルが設定されます.

  4. Area Rangeに対象のモデルの大きさ(Unity上のスケールサイズ)よりも大きい数字にします.サイズをあまり大きくすると精度が粗くなるため,なるべくこの数字は小さくする必要がありますが,この範囲外をオーバーして描画されると欠落やエラーが発生するので注意が必要です.

オプション

  • Reimport Textures In Gameのチェックを外し,Enable Textures Writable Flagボタンを押しておくと,実行時に速やかに処理が行われるようになります.テクスチャ情報を送信する際は,テクスチャが書き込み可能でないとアクセスができないため,Reimport Textures In Gameのプロパティをオンにして実行時に変更するか,事前にEnable Textures Writable Flagボタンを押して,テクスチャを書き込み可能にしておく必要があります.

  • Auto Reconnectはサーバーへの接続に失敗した際に,自動的に再接続を行います.

使用時に注意するオプション
  • Package SizeはMeshの有効範囲を指定の数された数で領域を分割します.ここの数字が128の場合,128*128*128の最大2,097,152パッケージを持つことになります.精度を高めるために使いやすいですが,通信サイズが大きくなりやすくなります.Area Rangeの精度と比較しながら変更します.

  • FrameIntervalは送信する秒間フレーム数です.0.1から変更することはあまりありません.

  • Subframes Per Keyframeはキーフレームの間に差分フレームをいくつ挿入するか指定できます.FrameIntervalが0.1の時,秒間にキーフレーム2,差分フレーム8を送る計算になります.0のときはキーフレームのみの送信になります.

受信側

  1. 任意のGameObjectにMeshReceiverのスクリプトを追加します.このとき,自動的にWebRTCManagerSkinnedMeshesValidatorが追加されます.

  2. WebRTCManagerのChannelに任意のチャンネル名を指定します.MeshSenderと同じチャンネル名を指定しておく必要があります.指定しない場合,ランダムのチャンネルが設定されます.

  3. もしSkinnedMeshesValidatorのDefault Shaderの箇所がNoneになっている場合は,何らかのシェーダーを当てはめる必要があります.Shadersフォルダ内のStandardがデフォルトで用意されています.

オプション

  • SkinnedMeshesValidatorのShadersは特定の名前のマテリアルに指定したシェーダを当てはめることができます.Sizeを0から必要な数に変更し,Material Nameに対象のマテリアル名,Shaderに当てはめたいShaderを指定してください.

  • Interpolate Verticesはフレーム間の線形補完を有効にします.この効果は非常に強力です.

  • Auto Reconnectはサーバーへの接続に失敗した際に,自動的に再接続を行います.

使用時に注意するオプション
  • Time Spanはフレーム間の線形補完のタイミングを指定します.デフォルトではフレームは0.1秒毎に来るため,0.01秒ごとに線形補完を行う設定になっています.現行バージョンでは変える必要は特にありません.

ライセンスについて

一部のソースコード(Crc32.cs, SerializableDictionary.cs)は著作権者が異なりますので注意してください.自分が書いたものはすべてMIT Licenseにしています.

About

StreamingMesh for Unity

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C# 98.5%
  • GLSL 1.5%