void FaceUpdated(IMRFace face) { Debug.Assert(m_FaceMeshRenderer != null); m_FaceMeshRenderer.transform.SetPositionAndRotation(face.pose.position, face.pose.rotation); // get current face's desired size (based on landmarks) var targetSize = face.GetBounds().size; // dynamic scale (not keeping aspect ratio) m_DynamicScale.x = m_OriginalUnscaledSize.x > 0 ? targetSize.x / m_OriginalUnscaledSize.x : targetSize.x; m_DynamicScale.y = m_OriginalUnscaledSize.y > 0 ? targetSize.y / m_OriginalUnscaledSize.y : targetSize.y; m_DynamicScale.z = m_OriginalUnscaledSize.z > 0 ? targetSize.z / m_OriginalUnscaledSize.z : targetSize.z; // get average scale from the axis (to keep aspect ratio) var averageScale = (m_DynamicScale.x + m_DynamicScale.y + m_DynamicScale.z) / 3; m_DynamicScale.Set(averageScale, averageScale, averageScale); // apply dynamic scale and scale factor m_FaceMeshRenderer.transform.localScale = m_DynamicScale * m_ScaleFactor; }