Construir NPCs creíbles: una arquitectura para emoción, intención y reacción

Construir NPCs creíbles: una arquitectura para emoción, intención y reacción

Matthias GallMatthias Gall
·22 de mayo de 2026·15 min. de lectura
Tenga en cuenta que esta publicación ha sido traducida automáticamente.

Imagina estar en VR, cara a cara con un personaje. No es un compañero siguiendo marcadores de misión ni un vendedor con opciones de diálogo en bucle. Mantiene contacto visual. Su mirada sigue la tuya con naturalidad. Cuando te acercas, su expresión cambia sutilmente, reconociendo la proximidad. Cuando hablas, no solo espera su turno para responder. Reacciona.

Ese personaje es Olivia Rhodes de Lone Echo (2017) y Lone Echo 2 (2021), creado por Ready at Dawn antes de que el estudio cerrara en 2024, cuando aún tenía un equipo AAA dedicado y el presupuesto acorde.

Video Vista previa

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.

Short de @MyPerseverance
Video Vista previa

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.

Short de @CyberStuffXR

Estamos construyendo sistemas NPC fundamentales para reutilizar en productos XR inmersivos, así que estudiamos lo que lograron estudios como Ready at Dawn y nos preguntamos:

¿Cuál es la arquitectura mínima necesaria para crear esa sensación de presencia con nuestros propios medios?

Nuestra respuesta: varios subsistemas independientes que alimentan una pipeline de prioridad compartida, de modo que ningún controlador único tenga que poseer todo el personaje.

El desafío

La mayoría de los sistemas NPC en juegos se construyen en torno a una cosa: un árbol de comportamiento que decide qué hacer a continuación. El NPC patrulla. Lucha. Busca cobertura. Quizá dice una línea de diálogo al pasar.

Lo que hace que Olivia Rhodes se sienta viva es la brecha que ilustra la escena inicial: las decisiones macro importan menos que los microcomportamientos: la mirada, la expresión, la sensación de que reacciona.

En un juego de pantalla plana puedes ocultar mucho. Animaciones rígidas, ojos muertos, mirada robótica: la distancia de cámara lo perdona todo. En VR estás junto a estos personajes. Cada microcomportamiento ausente no solo se nota. Resulta inquietante.

La pregunta pasó a ser: ¿cómo construir un NPC que no solo haga cosas, sino que parezca experimentarlas? La proximidad sube el listón, y esa es la restricción alrededor de la cual se construye la arquitectura siguiente.

La arquitectura

Tres capas:

Resumen de la arquitectura

Capa 1: el árbol de comportamiento (dispatcher)

Un estado NPC compartido (idle, combat, follow, dialogue, etc.) impulsa un árbol de comportamiento que delega en subárboles. Idle activa escaneo de affordances o deambulación. Combat activa búsqueda de cobertura y disparo. Follow mantiene al NPC cerca de un objetivo con umbrales de distancia que evitan parpadeos cuando el jugador se mueve.

Lo importante: el árbol de comportamiento decide qué hacer. No decide cómo verse mientras lo hace. No controla la cara. No controla los ojos. No controla las miradas idle. Eso se resuelve después, cuando comportamiento y contexto del mundo han aportado sus entradas.

Capa 2: Smart Objects (affordances)

Entre estrategia y expresión está el mundo mismo. Componentes SmartObject colocados en escena llevan etiquetas («PointOfInterest», «Cover», «Heal», «Comfort»), valores de prioridad y secuencias de acción (Enter, Run, Exit). El estado actual del árbol de comportamiento determina qué etiquetas se buscan. Un NPC idle busca objetos «Comfort». Uno en combate busca «Cover».

La fórmula de puntuación es simple: prioridad menos distancia. Un punto de prioridad equivale aproximadamente a un metro de esfuerzo al caminar. Un objeto de alta prioridad lejos compite con uno de baja prioridad cerca. El NPC hace un trade-off implícito cada vez que escanea.

El flujo de interacción es asíncrono: navegar al objeto, ejecutar acciones Enter, ejecutar acciones Run (interrumpibles si surge algo más importante), luego acciones Exit. Un timeout de navegación evita que los NPC queden atascados intentando llegar a algo inalcanzable.

Es la teoría de affordances del psicólogo ecológico James J. Gibson aplicada al desarrollo de juegos. Los objetos no tienen comportamiento. Tienen affordances. Lo que el NPC hace con ellos depende de lo que necesita ahora.

Elegir una silla, un punto de cobertura o un punto de interés para mirar son entradas aguas abajo. La pipeline de intención no las ignora: compiten con cada otro proveedor por los mismos canales.

Capa 3: la pipeline de intención (árbitro)

La pipeline de intención es donde todo converge. Comportamiento, affordances, emoción, diálogo, daño: cada subsistema escribe en sus canales; la prioridad resuelve lo que el jugador ve. AnimationIntents es un bus basado en structs con canales como UpperBody, FullBody, Face, Look y Eyes. Los controladores de mirada, emoción y parpadeo poseen un canal cada uno; otros completan el resto.

Cada canal usa last-writer-wins por prioridad. Si dos proveedores quieren el torso en el mismo frame, gana el de mayor prioridad. El bus hace el merge.

Al iniciar el diálogo, el jugador se registra como objetivo de mirada de alta prioridad: la mirada se fija, el escaneo idle se detiene. Cuando el NPC camina, el camino por delante es el objetivo de mirada hasta llegar; luego la atención vuelve a la sala. Desregistrar un objetivo basta para soltar el control, sin código de traspaso entre sistemas.

Profundización: emoción

El sistema de emoción se apoya mucho en el modelo circumplex de Russell: estados emocionales en dos ejes, activación (calma a activado) y valencia (desagradable a agradable). Es una simplificación útil, no una implementación literal. Nervousness (0 a 1) y Happiness (-1 a 1) son nuestras versiones amigables para el juego de esos ejes.

Impulsan blendshapes faciales o parámetros del animator mediante un EmotionProfile basado en datos. El mapeo es totalmente ajustable por diseño: happiness positiva puede impulsar una sonrisa, nervousness alta cejas levantadas, etc. Distintos tipos de NPC pueden tener perfiles enteramente diferentes. Mismo código, datos distintos.

El sistema opera en dos capas:

Mood es continuo. Los dos ejes derivan con el tiempo. Cuando ocurre algo (daño, eventos de diálogo, triggers scriptados), los valores cambian. Luego un mecanismo opcional de recuperación los devuelve gradualmente a baselines configuradas. Un NPC disparado permanece nervioso un rato. No vuelve a la calma en cuanto termina el estado de combate. La recuperación es lenta y natural.

Transient Emotes son expresiones faciales puntuales por nombre: «Surprise», «Pain», «Flinch». Cada una tiene una envolvente attack-sustain-decay (como ADSR en audio). Emotes de mayor prioridad anulan las actuales. Un emote de dolor interrumpe una expresión de diálogo. Al decaer el de dolor, resurge la expresión subyacente.

Aquí encaja la tensión procedural. La frecuencia de parpadeo se deriva directamente de la activación. Un NPC calmado parpadea cada pocos segundos. Un aterrado, rápidamente. La frecuencia de mirada idle escala igual: el nervioso escanea la sala constantemente, esquinas y puertas; el calmado mira de vez en cuando, relajado.

Video Vista previa

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.

Video: el estado de ánimo por nervousness y happiness se refleja en expresión y parpadeo
Video Vista previa

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.

Video: sistema de mirada idle (objetivos verdes) y overrides (objetivo rosa)

Profundización: sistema de mirada

El controlador de mirada implementa una cascada de prioridad multi-fuente. Tres niveles:

  1. Override (máxima): objetivos de mirada scriptados de cinemáticas o secuencias
  2. Objetivos del registro: cualquier objeto registrado, incluidos interlocutores de diálogo, waypoints de navegación y objetos de escena marcados como interesantes
  3. Comportamiento idle: mirar al azar, frecuencia impulsada por el eje Nervousness descrito arriba

Detalles de implementación que importan más de lo esperado:

Filtrado por cono de visión. Al navegar, el NPC solo considera objetivos de mirada dentro de ±90° de su dirección frontal. No gira la cabeza bruscamente hacia atrás. Debe girarse primero.

Cooldown post-navegación. Tras llegar, hay una breve ventana sin cambio de objetivo. Evita el comportamiento brusco de «llegar y fijar de inmediato lo más interesante cercano» que hace robóticos a los NPC.

Histéresis en orientación corporal. El controlador de orientación del cuerpo gira el torso hacia objetivos de mirada de alta prioridad. Usa dos umbrales: activar a ángulo amplio, soltar a uno más estrecho. Si el objetivo está apenas al lado, el cuerpo no se contrae de un lado a otro. Se compromete con el giro y lo mantiene hasta que el objetivo se aleja de forma significativa.

La mirada en diálogo no está especializada. En VR, la posición de la cabeza del jugador se registra como objetivo de mirada. Eso es todo. La misma cascada que maneja objetivos de combate y deambulación idle también maneja el contacto visual en diálogo. La cabeza del jugador VR es solo otra entrada en el registro.

Profundización: cascada de daño

Es el caso más difícil de apreciar solo con texto. Quieres estar en VR, a un brazo del NPC cuando recibe un golpe. Mucho de nuestro trabajo B2B no necesita combate; la cascada sigue siendo la prueba de estrés de la composición.

Un evento de daño se emite a todos los oyentes. La misma idea de desacoplamiento que la pipeline de intención, pero para eventos en lugar de canales por frame. Siete proveedores reaccionan de forma independiente:

  1. Cambio de mood. Happiness baja. Nervousness sube. Cambia la expresión facial y aumenta el parpadeo. El personaje parece conmocionado y lo seguirá hasta que la recuperación de mood lo devuelva gradualmente.

  2. Emote de dolor. Una expresión facial transitoria de alta prioridad anula lo que hacía la cara. Attack rápido (mueca inmediata), sustain breve, decay deja resurgir la expresión de mood subyacente.

  3. Sonido de dolor. Un gemido por la fuente de audio de la boca del NPC, la misma del habla. Varía con la intensidad del daño: un roce distinto de un golpe fuerte.

  4. Impulso de física ragdoll según dirección y magnitud en los datos de daño.

  5. VFX de sangre: partículas en la herida más un decal parentado al hueso que crece y se desvanece con el cuerpo.

  6. Reacción IK al daño. Las manos van hacia el impacto; un mapa basado en datos une posición de la herida con objetivos IK, con pistas de codo para que el brazo no se pliegue de forma antinatural.

  7. Objetivo de mirada de impacto. Un objetivo temporal en la herida. La mirada del NPC va allí. Tras unos segundos se desregistra y la mirada vuelve a lo que importaba antes.

El siguiente video muestra cómo encaja todo.

Video Vista previa

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.

Video: cascada de daño mostrando cómo trabajan los sistemas juntos

Siete proveedores, un evento. El NPC se encoge no como un único clip de «reacción al golpe», sino como composición de cara, ojos, cuerpo, manos y atención que forman dolor genuino. La recuperación de mood (ya descrita) hace el resto en los siguientes diez a quince segundos.

Así se siente «vivo».

Dónde brilla, dónde se estira

Los nuevos subsistemas encajan con limpieza: implementar una interfaz, fijar prioridad, y el bus hace el resto. Perfiles de emoción, mapeos hit-to-effector y componentes SmartObject son basados en datos; los diseñadores ajustan en el editor sin tocar código.

La arquitectura asume que los assets debajo son buenos. Blendshapes, clips de locomoción y rig deben estar bien hechos en herramientas DCC. El framework puede arbitrar bien, pero no rescata una cara no esculpida para expresión, clips no autorados para capas o un EmotionProfile que solo funciona en una malla.

Los huecos restantes son afinación, no diseño. El scoring de affordances aún no cuenta línea de visión ni contexto social. A veces el árbol de comportamiento visual en Game Creator y los subsistemas en código necesitan coordinación cuidadosa para mantenerse sincronizados.

La composición como característica

Lo que el framework deliberadamente no proporciona es significado: sin modelo del mundo, sin memoria, sin razonar sobre el futuro. Los NPC no necesitan entender por qué hacen algo; necesitan parecer que lo hacen. El lenguaje corporal, la textura emocional y la reactividad viven en el framework; el propósito y la historia, en la aplicación. Esa separación lo hace reutilizable en el trabajo XR que construimos.

Trabaja con nosotros

Los NPC creíbles no son solo para juegos. Guías en ferias, simulaciones de formación y demos de producto ganan cuando un personaje mantiene contacto visual, reacciona a la proximidad y se recupera de eventos en lugar de volver al idle de golpe.

Si planeas una experiencia XR donde la presencia importa tanto como la funcionalidad, no dudes en contactarnos. Siempre estamos felices de explorar cómo encaja en tu proyecto o construir un prototipo juntos.

Assets utilizados

El framework NPC para Unity usa los siguientes assets de pago de Unity Asset Store:

  • Character Customizer and Character Customizer Modern Clothes Pack by Jordbugg para el modelo de personaje humano
  • Guardians Bundle I by Dmitriy Dryzhak para el modelo de troll
  • Game Creator 2 by Catsoft Works para triggers y acciones generales, árboles de comportamiento y diálogo
  • FinalIK by RootMotion para IK bipedo de cuerpo completo
  • Pupett Master by RootMotion o Ragdoll Animator 2 by FImpossible Creations para física ragdoll
  • SALSA LipSync by Crazy Minnow Studio, LLC para animación facial
  • VR Interaction Framework by Bearded Ninja Games para entrada VR (opcional)

Para la demostración también usamos assets gratuitos de Sketchfab:

Más del blog