## Summary When an avatar has a realtime spot light with shadows enabled (culling mask = Everything), shadow casters other than the local avatar itself are missing from the light's shadow map, but ONLY in the local player's mirror and VRChat camera views. First-person view: world geometry and other players correctly cast shadows onto my avatar My own mirror reflection: their shadows are missing (only my avatar's self-shadow remains) My own VRChat camera: same as mirror Remote clients (other players' views AND their cameras): everything is correct ## Reproduction steps Wear an avatar equipped with a realtime spot light (shadows enabled, culling mask = Everything) set up to illuminate the avatar itself. Join any world that has a mirror. Stand so that a world object (a wall, a pillar) or another player is between the spot light and your avatar. First person: the occluder's shadow falls on your avatar as expected. Look into the mirror, or open the VRChat camera: the occluder's shadow is gone. Your avatar's own self-shadowing still works — notably, a Cube attached to your own avatar still casts its shadow even in the mirror/camera, so only casters outside your own avatar are lost. Another player in the instance sees all shadows correctly, both in their direct view and through their VRChat camera. ## Evidence that this is not a Unity limitation I reproduced VRChat's mirror rendering in the Unity editor (planar reflection camera with a reflected view matrix and an oblique near-plane projection, same technique as VRC mirrors) using the same spot light + Cube setup. In stock Unity, all shadow casters render into the spot light's shadow map correctly, with oblique clipping both on and off. The symptom only occurs in the VRChat client. ## Suspected mechanism The behavior is consistent with the client rewriting the culling masks of avatar lights during the local mirror/camera render passes so that only the local player's own mirror clone remains as a shadow caster — regardless of which player the light belongs to (see related report: "Culling mask for lights in avatars modified unexpectedly"). A light's culling mask determines both what it illuminates AND which objects render into its shadow map. This matches every observation above: in Player A's own mirror, A's clone still casts (shadow visible); in Player B's mirror, only B's clone casts, so A's Cube, world geometry, and other players are silently excluded. ## Related reports "Local players don't cast shadows caused by lights in avatars on cameras" (the complementary case, Tracked since 2024-01) https://feedback.vrchat.com/bug-reports/p/local-players-dont-cast-shadows-caused-by-lights-in-avatars-on-cameras-1 "Culling mask for lights in avatars modified unexpectedly" https://feedback.vrchat.com/bug-reports/p/culling-mask-for-lights-in-avatars-modified-unexpectedly ## Impact Avatar light systems that let the wearer receive shadows from the environment (occlusion by walls, props, other players) work in first person and for every remote viewer, but break in the user's own mirror and camera. This makes them unusable for self-photography and mirror checks, which are core VRChat use cases. --- ## 概要(日本語) 影を有効にしたリアルタイムスポットライト(カリングマスク Everything)を自分のアバターに 載せた場合、自分のアバター以外のシャドウキャスターがライトのシャドウマップから欠落します。 ただし欠落するのは「自分のミラー」と「自分の VRChat カメラ」の描画に限られます。 一人称視点: ワールドジオメトリや他プレイヤーの影は正しく自分のアバターに落ちる 自分のミラー: それらの影が消える(自アバターのセルフシャドウだけ残る) 自分の VRChat カメラ: ミラーと同様 他プレイヤーからはすべて正常: 直接視点も、相手のカメラ越しでも正しく見える ## 再現手順(日本語) 影有効のリアルタイムスポットライト(カリングマスク Everything、アバター自身を照らす向き)を載せたアバターを着用する。 ミラーのある任意のワールドに入り、ワールドオブジェクト(壁・柱)または他プレイヤーがライトと自分のアバターの間に来るように立つ。 一人称: 遮蔽物の影が自分のアバターに正しく落ちる。 ミラーを見る、または VRChat カメラを開く: 遮蔽物の影が消える。自アバターのセルフシャドウは残る — 特に、自分のアバターに取り付けた Cube の影はミラー/カメラでも消えないため、失われるのは「自アバター外のキャスター」だけである。 同インスタンスの他プレイヤーからは、直接視点でもカメラ越しでも、すべての影が正しく見える。 ## Unity の制限ではない根拠(日本語) VRChat のミラー描画をエディタ上で再現し(反射ビュー行列+斜めニアクリップ射影の平面反射カメラ、VRC ミラーと同じ手法)、同じスポットライト+Cube 構成で検証しました。素の Unity では斜めクリップの有無にかかわらず全キャスターが正しくシャドウマップに描画されます。 症状は VRChat クライアント上でのみ発生します。 ## 推定メカニズム(日本語) この挙動は、ローカルのミラー/カメラ描画パス中にクライアントがローカルプレイヤーの アバターライトのカリングマスクを書き換え、シャドウキャスターとしてローカルプレイヤー自身のミラークローンだけを残しているという動作と整合します(関連報告 "Culling mask for lights in avatars modified unexpectedly" 参照)。 ライトのカリングマスクは「何を照らすか」と「何をシャドウマップに描くか」の両方を決めるため、これらのパスでマスクをクローン用レイヤーに絞れば、まさにこの症状になります: 装着者自身のアバター(クローン)はキャスト/受影とも機能し続け、ワールドジオメトリと他プレイヤーは静かに除外されます。リモートクライアント上ではライトは改変されないため、そちらではすべて正常に見えることとも一致します。 ## 影響(日本語) 環境からの影(壁・小物・他プレイヤーによる遮蔽)を着用者が受けられるアバターライト製品は、一人称と全リモート視点では動作する一方、本人のミラーとカメラでは壊れます。 自撮りやミラーチェックという VRChat の中核的な用途で使えなくなります。