VRChat 非公式日本語ドキュメント

VRChat Shader Globals

VRChatは、シェーダー作成者がVRChat固有の機能を実装するために使用できる、複数のグローバルシェーダーパラメーターを提供しています。

warning

このページでドキュメント化されている以外のカスタムシェーダーにおいて、シェーダー変数に _VRChat プレフィックスを使用しないでください。このプレフィックスは保護された名前空間とみなされており、ドキュメント化されていないものを含め、新しい変数がいつでも追加される可能性があります。

現在、以下のシェーダーグローバルが利用可能です。

変数 内容
_VRChatCameraMode float
  • 0 - 通常のレンダリング
  • 1 - VRハンドヘルドカメラでのレンダリング
  • 2 - デスクトップハンドヘルドカメラでのレンダリング
  • 3 - スクリーンショット用のレンダリング
_VRChatCameraMask uint アクティブなカメラの cullingMask プロパティ。_VRChatCameraMode != 0 の場合に使用可能
_VRChatMirrorMode float
  • 0 - 通常のレンダリング(鏡面外)
  • 1 - VRで表示中の鏡面内でのレンダリング
  • 2 - デスクトップモードで表示中の鏡面内でのレンダリング
_VRChatFaceMirrorMode float フェイスミラーのレンダリング時は 1(VRとデスクトップで異なるカメラタイプを使用するため!)、それ以外は 0
_VRChatMirrorCameraPos float3 鏡面カメラのワールド空間位置(視点非依存、VRでは「中央」)。鏡面内でレンダリングしていない場合は (0,0,0)
_VRChatScreenCameraPos/
_VRChatPhotoCameraPos
float3 メインスクリーンカメラ/
ハンドヘルドフォトカメラのワールド空間位置(カメラがアクティブでない場合は (0,0,0)
_VRChatScreenCameraRot/
_VRChatPhotoCameraRot
float4 メインスクリーンカメラ/
ハンドヘルドフォトカメラのワールド空間回転(クォータニオン)(カメラがアクティブでない場合は (0,0,0,0)

VRChat Time Global

_VRChatTime グローバルは、時間に関する様々な情報を提供します。時計やアニメーションの同期などに利用できます。

以下にリストされているグローバルはすべて符号なし整数のビットパターンを含んでおり、uint として定義する必要があります。各テーブルにはそれぞれの内容が記載されています。括弧内の数値はビット範囲(0から始まるインデックス、両端含む)です。

Variable Contents
_VRChatTimeUTCUnixSeconds Unixエポックからの経過秒数を示す現在のUTC時間の、下位32ビット。これは符号なし数値として扱う必要があり、2038年問題でオーバーフローすることはありません。システム時刻が1970年以前に設定されている場合、この値は未定義となります。
_VRChatTimeNetworkMs ミリ秒単位の同期されたネットワーク時間。これはUdonで Networking.GetServerTimeInMilliseconds が返す値と同じです。技術的には符号付きの値ですが、符号なしとして扱っても問題ありません。絶対値は何らかの具体的な量を表すものではないため、同期とオフセットの目的でのみ使用してください。この値はループ(ラップアラウンド)する可能性があります。
Variable (Bits) Contents
_VRChatTimeEncoded1 (0-4) 現在時刻の時(UTC)。
_VRChatTimeEncoded1 (5-10) 現在時刻の分(UTC)。
_VRChatTimeEncoded1 (11-16) 現在時刻の秒(UTCおよびローカルで共通)。
_VRChatTimeEncoded1 (17-21) 現在時刻の時(ローカル)。
_VRChatTimeEncoded1 (22-27) 現在時刻の分(ローカル)。
_VRChatTimeEncoded1 (28-31) 予約済み。
Variable (Bits) Contents
_VRChatTimeEncoded2 (0-9) 現在時刻のミリ秒(UTCおよびローカルで共通)。
_VRChatTimeEncoded2 (10) タイムゾーンオフセットの符号ビット。オフセットが負の場合に1。
_VRChatTimeEncoded2 (11-26) UTCからローカル時間へのタイムゾーンオフセット(秒単位)。
_VRChatTimeEncoded2 (27-31) 予約済み。

すべてのUTCからのタイムゾーンオフセットおよびローカル時間の値は、VRChatメニューの「優先タイムゾーン(preferred timezone)」設定の影響を受けます。

「現在時刻(Current time of day)」は常にローカルユーザーの時刻を指します。例えば、アバター上のカスタムシェーダーがこれらの値を使用して時計を表示する場合、それは着用者の時刻ではなく、常にその時計を見ている観察者のローカル時間が表示されます。

時刻の値は、プレイモード中のVRChatクライアントおよびすべてのVRChat SDKで利用可能です。

VRChat SDKには、時間形式をデコードするためのヘルパー関数を含むヘッダーファイルが同梱されています。以下のHLSLコードスニペットは、インクルードパスと利用可能な関数を示しています。

#include "Packages/com.vrchat.base/ShaderLibrary/VRCTime.cginc"

uint VRC_GetUTCUnixTimeInSeconds();
uint VRC_GetNetworkTimeInMilliseconds();
void VRC_GetUTCTime(out uint hours, out uint minutes, out uint seconds, out uint milliseconds);
void VRC_GetLocalTime(out uint hours, out uint minutes, out uint seconds, out uint milliseconds);
int VRC_GetTimezoneOffsetSeconds();

最終更新: