import { Object3D } from 'three'; /** * 「アバターだけ映す」ためのレイヤータグ付け。 * * XRiftのアバターは three-vrm の VRMFirstPerson 層規約を使う: * 9 = 一人称専用(自分のカメラにだけ映る体) * 10 = 三人称専用(鏡や他人にだけ映る頭など) * ただし体の大半は "both" として layer 0 にワールドと同居しているため、 * 既存レイヤーだけでは「アバターだけ」を分離できない。 * * そこで SkinnedMesh(アバター≒スキンメッシュ・ワールドは静的メッシュ)を * 検出して鏡専用レイヤーのビットを立てる。Layers はビットマスクなので * enable() は既存ビットを壊さない=ホスト(XRift本体)のレイヤー運用に非破壊。 * * 実機診断(toming 2026-07-15、工房・複数アカウントでの実地検証)で判明した * 3種類のアバター構造: * 1. カスタムVRM: 1枚の SkinnedMesh(例: "CombinedMToonMesh_opaque")。 * layer 9/10 は three-vrm 自身が管理。既存のSkinnedMesh検出で映る。 * 2. XRift既定アバター: SkinnedMeshでもTHIRD_PERSON_ONLYタグ付けでもない。 * Blenderの原始図形(Cone/Cube/Icosphere等)を体パーツとして、名前付きの * ボーン風 Object3D(hips/spine/chest/neck/head/shoulderL/upper_armL/ * handL/handR/...)に直接ぶら下げた「セグメント方式」の簡易プレース * ホルダー。userData に意図的なマーカーは無い(GLTF由来の元名前が * 残っているだけ)。SkinnedMesh検出でもTHIRD_PERSON_ONLY検出でも * 拾えないため、v0.3.7まで鏡に映らなかった。 * → isHumanoidJointChain() で親のボーン風関節名を見て救済する。 * * 剛体アクセサリ等、上記いずれの信号も持たない非アバター装着物は * v1 では鏡に映らない(既知の限界)。 */ export declare const MIRROR_AVATAR_LAYER = 30; /** LQ用: 鏡専用レイヤーだけ=アバター(とタグ済みライト)だけを描く */ export declare const AVATAR_ONLY_MASK: number; /** HQ用: 一人称専用(9)だけ除いた全景=鏡には三人称の姿(頭あり)を映す */ export declare const FULL_SCENE_MASK: number; export interface MirrorScanResult { /** タグ付け対象(アバターのSkinnedMesh+THIRD_PERSON_ONLYパーツ+セグメント方式パーツ+ライト) */ targets: Object3D[]; skinned: number; /** SkinnedMeshではないがTHIRD_PERSON_ONLY会員資格で拾えたパーツ数 */ thirdPersonOnly: number; /** ボーン風関節名の連鎖から拾えたセグメント方式アバターのパーツ数(既定アバター等) */ segmented: number; lights: number; totalNodes: number; } /** シーンを全走査してタグ付け対象を収集する(タグ付け自体はしない) */ export declare const collectMirrorTargets: (root: Object3D) => MirrorScanResult; /** 収集+タグ付けを一度に行う簡易版(冪等) */ export declare const tagAvatarsForMirror: (root: Object3D) => void; //# sourceMappingURL=avatarLayer.d.ts.map