moeru-ai/airi · info
No look-at target found in VRM model
Error message
No look-at target found in VRM model
What it means
During VRM placement, the code rotates the model group so its look-at 'faceFront' direction aligns with world -Z. If _vrm.lookAt is undefined (the model ships no look-at rig/extension), it skips the correction with this warn and the model keeps whatever default orientation the group had. Only orientation correction is lost; rendering and spring bones proceed normally.
Source
Thrown at packages/stage-ui-three/src/composables/vrm/core.ts:69
const _vrmGroup = new Group()
_vrmGroup.add(_vrm.scene)
// Add to scene
if (options?.scene) {
options.scene.add(_vrmGroup)
}
// Preset the facing direction
const targetDirection = new Vector3(0, 0, -1) // Default facing direction
const lookAt = _vrm.lookAt
const quaternion = new Quaternion()
if (lookAt) {
const facingDirection = lookAt.faceFront
quaternion.setFromUnitVectors(facingDirection.normalize(), targetDirection.normalize())
_vrmGroup.quaternion.premultiply(quaternion)
_vrmGroup.updateMatrixWorld(true)
}
else {
console.warn('No look-at target found in VRM model')
}
(_vrm as VRM).springBoneManager?.reset()
_vrmGroup.updateMatrixWorld(true)
function computeBoundingBox(vrm: Object3D) {
const box = new Box3()
const childBox = new Box3()
vrm.updateMatrixWorld(true)
vrm.traverse((obj) => {
if (!obj.visible)
return
const mesh = obj as Mesh
if (!mesh.isMesh)
return
if (!mesh.geometry)
returnView on GitHub (pinned to 677329427f)
Solutions
- Treat it as benign if you do not need gaze: head/eye tracking simply will not aim.
- Re-export the model with the lookAt extension enabled (bone-offset or expression based).
- If orientation matters, apply your own known forward rotation when _vrm.lookAt is absent.
Example fix
// before
// rely on automatic faceFront alignment
// after
if (!vrm.lookAt) {
vrmGroup.rotation.y = Math.PI // known forward for this model
} Defensive patterns
Strategy: validation
Validate before calling
if (!vrm.lookAt) { /* apply model-specific forward rotation instead of faceFront alignment */ } Type guard
function hasLookAt(vrm: VRMCore): boolean {
return !!vrm.lookAt
} Prevention
- Prefer VRM exports with the lookAt extension when gaze features matter.
- Keep per-model orientation overrides configurable for models lacking lookAt.
- Feature-detect VRM capabilities once at load and branch, rather than warning per frame.
When it happens
Trigger: Loading a VRM without the VRMC_vrm lookAt extension (or VRM 0.x model with no lookAt bone configured); a minimal/test VRM exported with look-at disabled.
Common situations: Faceless or stylized avatars whose authors disabled look-at; export pipelines that drop the extension; older VRM 0.x models converted to 1.0.
Related errors
- VRM model loading failure!
- No VRM animations found in the .vrma file
- No VRM found
- No hips node found in VRM model.
- No Hips.position track of type VectorKeyframeTrack found in
AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18).
Data as JSON: /api/errors/65243aec2c78821c.
Report an issue: GitHub.