VRChat Shader Globals
VRChatは、シェーダー作成者がVRChat固有の機能を実装するために使用できる、複数のグローバルシェーダーパラメーターを提供しています。
このページでドキュメント化されている以外のカスタムシェーダーにおいて、シェーダー変数に _VRChat プレフィックスを使用しないでください。このプレフィックスは保護された名前空間とみなされており、ドキュメント化されていないものを含め、新しい変数がいつでも追加される可能性があります。
現在、以下のシェーダーグローバルが利用可能です。
| 変数 | 型 | 内容 |
|---|---|---|
_VRChatCameraMode |
float |
|
_VRChatCameraMask |
uint |
アクティブなカメラの cullingMask プロパティ。_VRChatCameraMode != 0 の場合に使用可能 |
_VRChatMirrorMode |
float |
|
_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();
最終更新: