Experimento de constancia del color en un entorno doméstico en realidad virtual
- Unity (motor principal de desarrollo, versión 2021 LTS o similar)
- XR Interaction Toolkit (interacción VR, rayos, hand menu, agarrar paneles)
- OpenXR / Oculus (Rift S) como runtime de VR
- TextMeshPro (UI en VR)
- FlexibleColorPicker (asset gratuito para elegir colores de luz de forma continua)
Antes de abrir el proyecto o ejecutar la escena en VR, necesitas:
-
Unity 2021.x o superior (recomendado LTS)
-
Paquetes vía Package Manager:
XR Interaction ToolkitXR Plugin Management(configurado con OpenXR u Oculus según tu visor)TextMeshPro
-
Un visor compatible:
- Oculus Rift S (principal)
- Cualquier visor compatible con OpenXR (Meta, Vive, etc.)
-
Controladores VR con:
- Gatillo para seleccionar en UI
- Botón de agarre para coger el panel de control / menús
Este proyecto es una experiencia VR de laboratorio de iluminación para estudiar la constancia del color en un entorno doméstico virtual.
El usuario se encuentra en una habitación con:
- 3 lámparas en el techo y un objeto / cuadro de referencia.
- Un panel flotante de ajustes de luz que puede agarrar, mover y usar con rayos láser.
- Un sistema de referencias fotográficas y un módulo de comparación que evalúa qué tan bien el usuario iguala una condición de luz objetivo.
La idea es que la persona:
-
Lea las reglas iniciales (panel que sigue la vista de la cámara).
-
Use el panel para ajustar:
- Temperatura de color (Kelvin)
- Color de filtro (tinte) con un color picker
- Intensidad de cada lámpara
-
Trate de igualar una condición objetivo (por ejemplo, la iluminación con la que se tomó una foto).
-
Pulse Comparar y reciba:
- Un puntaje global (0–100%)
- Un detalle por lámpara de qué tanto se acercó a la intensidad, temperatura y color esperados.
-
Script principal:
LightUIController -
Permite:
-
Seleccionar “Todas” las luces o una individual mediante un Dropdown.
-
Ajustar temperatura de color (3000K, 4500K, 6000K o valor continuo).
-
Cambiar modo Kelvin / Color (toggle):
- Modo Kelvin: la luz usa
useColorTemperatureycolorTemperature. - Modo Color/Filter: se usa el color directo del filtro.
- Modo Kelvin: la luz usa
-
Ajustar intensidad de 0 a ~10.
-
Cambiar tono del filtro mediante:
- Sliders HSV / FlexibleColorPicker que llaman a
SetHSV(h, s, v).
- Sliders HSV / FlexibleColorPicker que llaman a
-
-
Integrado en el panel XR.
-
La selección de color se aplica al filtro de la(s) luz(ces) activa(s):
- Usa
SetFilterColor(Color c)ySetHSV(h, s, v)delLightUIController.
- Usa
-
Permite probar fácilmente:
- Colores neutros
- Iluminaciones coloreadas (rojizas, azuladas, violáceas, etc.)
-
El script de comparación muestra en un status panel:
-
Luz seleccionada (Todas / Lamp_Light1 / Lamp_Light2 / Lamp_Light3)
-
Para cada lámpara:
- Intensidad actual
- Color en formato
#RRGGBB - Temperatura Kelvin (si está activa)
-
-
Actualiza varias veces por segundo para facilitar la depuración y la observación.
-
Script:
PhotoPopupController -
Función:
-
Mostrar un canvas flotante frente a la cámara con una foto de referencia.
-
El mismo botón va cambiando de estado:
Ver foto→ muestra la primera imagenSiguiente→ cambia a la siguiente (hay 3 fotos configurables)Cerrar→ oculta el canvas y vuelve a “Ver foto”
-
-
La imagen:
- Se posiciona frente al usuario a una distancia fija.
- Se escala automáticamente para mantener la proporción de la textura.
-
Script:
IntroRulesFlow -
Muestra un panel de reglas que:
- Aparece frente a la cámara al inicio.
- Opcionalmente sigue la vista mientras está activo (yaw-only).
-
Textos típicos:
- Mantente sentado o de pie de forma estable.
- No muevas los objetos de la escena, solo usa el panel de ajustes.
- Usa el gatillo para seleccionar en la UI y el botón de agarre para mover el panel.
- Ajusta brillo, modo y color hasta que consideres que coincide con la referencia.
-
Al pulsar “He leído / Continuar”:
- Se oculta el panel de reglas.
- Se muestra el panel principal de ajustes.
-
Script principal:
LightCompareController -
Funcionalidad:
-
Define valores objetivo por lámpara (intensidad, color, Kelvin), por ejemplo:
Lamp_Light1→ Int = 3.05, Color =#D2204C, K = 6000Lamp_Light2→ Int = 10.00, Color =#1648D2, K = 3000Lamp_Light3→ Int = 6.48, Color =#6E50D2, K = 6000
-
Al pulsar el botón Comparar:
-
Lee el estado actual de todas las lámparas.
-
Calcula:
- Coincidencia de color (en espacio HSV).
- Coincidencia de intensidad.
- Coincidencia de temperatura de color.
-
Saca un puntaje global (0–100%) combinando esos factores.
-
Muestra un overlay delante de la cámara con:
-
Resultado general (ej. “Muy bien, estás bastante cerca.”).
-
Detalle por lámpara:
-
Objetivo vs. Usuario (Int, K, Color #).
-
“Coincidencia aprox.” en % y explicación tipo:
- “Color: bastante cercano”
- “Intensidad: 80%”
- “K: 90%”
-
-
-
-
-
El experimento genera logs en la consola (Unity):
-
Cuando se comparan valores:
-
========== LIGHT LOG: Comparar (estado actual del usuario) ========== -
Lista todas las lámparas con:
- Intensidad final
- Color
#RRGGBB - Kelvin (si aplica)
-
-
LightCompareControllertambién puede guardar distintos reportes en una lista (compareHistory) para exportar resultados de las sesiones.
-
-
Assets/Scenes/- Escena principal del experimento (habitación + XR Origin + UI + luces).
-
Assets/Scripts/LightUIController.cs– Control básico de las luces.LightCompareController.cs– Comparación, scoring y overlay de resultado.IntroRulesFlow.cs– Pantalla de reglas inicial.PhotoPopupController.cs– Visor de fotos flotante.
-
Assets/FlexibleColorPicker/- Asset externo para seleccionar color de luz.
(Los nombres y rutas exactas pueden variar según cómo tengas organizado tu proyecto, pero esta es la lógica general.)
-
Abre Unity Hub.
-
Añade la carpeta del proyecto (
Add > Select folder). -
Ábrelo con la versión de Unity recomendada (2021.x LTS).
-
En Edit → Project Settings → XR Plugin Management:
- Activa OpenXR (u Oculus, según tu visor).
-
En Package Manager, comprueba que estén:
XR Interaction ToolkitXR Plugin ManagementTextMeshPro
-
Abre la escena principal del experimento.
-
Asegúrate de que:
-
La cámara VR tenga el tag MainCamera.
-
El
LightUIControllertenga asignadas las 3 luces de techo. -
El
LightCompareControllertenga referenciados:lightsUIcompareCanvascompareTextstatusText(si usas panel de estado).
-
-
Iniciar la escena en Play con el visor conectado.
-
Leer el panel de instrucciones que aparece frente a ti:
- Gatillo → seleccionar botones y sliders.
- Botón de agarre → mover panel principal.
-
Cuando pulses “He leído / Continuar”:
- Se oculta el panel de reglas.
- Aparece el panel de ajustes de luz.
-
Usa el panel para:
- Elegir qué lámpara ajustar (Todas, 1, 2 o 3).
- Cambiar modo Kelvin/Color.
- Ajustar intensidad con el slider.
- Ajustar color con el color picker.
- Opcionalmente mostrar una foto de referencia con el botón de “Ver foto / Siguiente / Cerrar”.
-
Cuando creas que has igualado la condición de luz deseada:
-
Pulsa el botón Comparar.
-
Se mostrará un overlay delante de tu vista con el resultado:
- Puntaje global.
- Qué tan cerca estuviste en cada lámpara.
-
-
Cierra el overlay y puedes volver a ajustar las luces para otro intento.
Este proyecto está pensado para:
-
Evaluar qué tan bien los usuarios pueden igualar una condición de iluminación objetivo usando:
- Temperatura de color
- Intensidad
- Tonalidad (tinte de color)
-
Registrar:
- Parámetros finales de cada intento.
- Puntaje de coincidencia.
- Diferencias por lámpara en intensidad, Kelvin y color.
A partir de los logs se puede:
- Analizar patrones de error.
- Estudiar constancia del color bajo diferentes combinaciones de luces.
- Comparar desempeño entre participantes o condiciones experimentales.