Durante años, plataformas como 8thWall demostraron que la realidad aumentada en navegador podía ser una herramienta increíble para experiencias interactivas, marketing, visualización 3D y contenido educativo. Cuando 8thWall cerró operaciones como plataforma independiente y posteriormente liberó parte de su tecnología, quedó algo muy claro: todavía existe un enorme interés por crear experiencias WebAR accesibles, abiertas […]
Durante años, plataformas como 8thWall demostraron que la realidad aumentada en navegador podía ser una herramienta increíble para experiencias interactivas, marketing, visualización 3D y contenido educativo. Cuando 8thWall cerró operaciones como plataforma independiente y posteriormente liberó parte de su tecnología, quedó algo muy claro: todavía existe un enorme interés por crear experiencias WebAR accesibles, abiertas y controladas por los propios desarrolladores. Al mismo tiempo, muchas plataformas WebAR tradicionales obligaban a simplificar materiales, texturas y ciertos workflows 3D para asegurar compatibilidad y rendimiento en dispositivos móviles. Parte de la idea detrás de este proyecto fue precisamente ofrecer un pipeline más flexible y abierto para trabajar con escenas GLTF/GLB modernas, materiales PBR y arquitecturas runtime más extensibles. Ahí es donde nace este proyecto. WebAR exporter for RanGE207.81 KBMay 17, 2026 Downloads: 19 Download Incluye: instalación exportación WebAR configuración AR viewer mode runtime systems troubleshooting flujo de trabajo recomendado Documentación Guía y documentación del addon: WebAR For Range ¿Qué es Range WebAR Exporter? <img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-1273" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_2.jpg" alt="" width="1197" height="659" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_2.jpg 1197w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_2-300x165.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_2-1024x564.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_2-768x423.jpg 768w" sizes="(max-width: 1197px) 100vw, 1197px" /> Range WebAR Exporter es un addon para Range Engine enfocado en exportar escenas interactivas a experiencias WebAR modernas usando: Three.js WebXR GLTF / GLB Runtime modular portable El objetivo no es solo “exportar modelos 3D”, sino crear una base flexible para experiencias interactivas en navegador con arquitectura extensible y orientada a runtime. Características actuales Exportación directa a WebAR Viewer Mode y AR Mode Hit-test placement Runtime modular Sistema de componentes y eventos Hotspots interactivos Animaciones runtime Overlay debug tools Arquitectura portable basada en SceneData Preparación para integración futura con sistemas visuales de nodos <img loading="lazy" decoding="async" class="size-full wp-image-1308 alignnone" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_3.png" alt="" width="260" height="302" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_3.png 260w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/WebAR_Experience_3-258x300.png 258w" sizes="auto, (max-width: 260px) 100vw, 260px" /> Usa el lector de QR en tu telefono y prueba los archivos de demostración Requisitos para WebAR Durante el uso dentro de Range Engine, el addon puede visualizar los proyectos utilizando un servidor local temporal generado automáticamente para pruebas rápidas y desarrollo. Sin embargo, para publicar experiencias WebAR y utilizarlas correctamente en dispositivos móviles, es necesario usar un servidor con HTTPS. Esto se debe a las restricciones actuales de WebXR y acceso a cámara/sensores en navegadores modernos. Abrir directamente el index.html desde el explorador de archivos (file://) no permitirá utilizar correctamente: acceso a cámara sesiones WebXR hit-test AR tracking AR Opciones recomendadas para publicación: Hosting HTTPS GitHub Pages Netlify Vercel Servidor HTTPS propio Algunas funciones WebXR pueden variar dependiendo del navegador y dispositivo utilizado. Más que un exporter <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1278" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01.jpg" alt="" width="1632" height="656" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01.jpg 1632w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01-300x121.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01-1024x412.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01-768x309.jpg 768w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/webar_01-1536x617.jpg 1536w" sizes="auto, (max-width: 1632px) 100vw, 1632px" /> Con el tiempo, el proyecto comenzó a evolucionar más allá de un simple exportador. Actualmente el runtime ya cuenta con: sistemas modulares lifecycle management component registries event/action architecture SceneData abstraction layer La meta a largo plazo es construir un pipeline portable donde la lógica visual pueda reutilizarse entre distintos backends y runtimes. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1280" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/RNC.jpg" alt="" width="980" height="515" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/RNC.jpg 980w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/RNC-300x158.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/RNC-768x404.jpg 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /> ¿Por qué hacerlo? Porque WebAR sigue siendo una tecnología extremadamente poderosa. No requiere instalar apps. Funciona desde el navegador. Es ideal para: educación visualización de productos museos marketing prototipos interactivos experiencias inmersivas ligeras Y sobre todo: porque todavía hay espacio para herramientas abiertas, experimentales y hechas por desarrolladores independientes. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1281" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/futureOfwebAR.jpg" alt="" width="1520" height="704" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/futureOfwebAR.jpg 1520w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/futureOfwebAR-300x139.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/futureOfwebAR-1024x474.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/05/futureOfwebAR-768x356.jpg 768w" sizes="auto, (max-width: 1520px) 100vw, 1520px" /> Estado del proyecto El proyecto sigue en desarrollo activo y actualmente está enfocado en: consolidar arquitectura runtime SceneData como formato portable modularidad integración futura con sistemas visuales tipo Range Node Core (más información proximamente) Todavía hay mucho trabajo por delante, pero la base ya comienza a tomar forma. Más avances próximamente.
Range Material Editor – Addon para Range 1.6 Rev 2 🆓
Range Material Editor Range Material Editor es un addon que desarrollé para Range Game Engine diseñado para agilizar la creación y edición de materiales dentro del motor. Ofrece una interfaz intuitiva, organizada en pestañas, que centraliza todas las propiedades necesarias para construir materiales completos: desde PBR hasta configuraciones físicas, texturas y efectos avanzados. A diferencia […]
Range Material Editor Range Material Editor es un addon que desarrollé para Range Game Engine diseñado para agilizar la creación y edición de materiales dentro del motor. Ofrece una interfaz intuitiva, organizada en pestañas, que centraliza todas las propiedades necesarias para construir materiales completos: desde PBR hasta configuraciones físicas, texturas y efectos avanzados. A diferencia del editor de materiales nativo, en Range Material Editor lo haces todo desde una sola vista. Con este addon puedes trabajar de forma más rápida, ordenada y consistente en tus proyectos. Instalación Descarga el archivo .zip . En RanGE, ve a File > Engine Settings > Add-ons > Install Add-on from File. Selecciona el archivo descargado y haz click en Install Activa la casilla de Range Material Editor para habilitarlo. Interfaz La interfaz está organizada en pestañas, cada una enfocada en un aspecto específico del material: Main → Configuración general y exportación PBR → Propiedades físicas del material (metallic, roughness, etc.) Textures → Asignación de mapas (diffuse, normal, height, etc.) Physics → Parámetros físicos (fricción, rebote, etc.) Surface → Ajustes de superficie (sombreado, oclusión, etc.) Shadows → Configuración de sombras SSS → Subsurface Scattering Foliage → Parámetros especializados para vegetación Cada sección agrupa controles relevantes, permitiendo un flujo de trabajo limpio y eficiente. Creación de materiales En la Vista 3D, abre el panel lateral (T) y accede a la pestaña Range Material Editor. Haz clic en New para crear un nuevo material. Asigna un nombre descriptivo. Ajusta los parámetros en las diferentes pestañas según tus necesidades. Haz clic en Export para guardar el material. Export/Import y Presets El addon incluye una biblioteca de presets preconfigurados para acelerar tu flujo de trabajo: Abre el menú Presets. Selecciona una categoría (Metales, Madera, Piedra, etc.). Elige un preset. Los valores se aplicarán automáticamente al material actual, y podrás modificarlos libremente. Aunque son básicos la ventaja real es que tambien puedes crear tus propios presets y tener tu libreria de materiales. Tambien tienes opcion de exportar tu configuracion de material completo, es decir todo lo que incluye tu material (settings, mapas, etc) y podrás compartirlo con alguien mas o simplemente guardarlo en tu equipo para importarlo cuando lo necesites. Recomendaciones Usa nombres claros para mantener tus materiales organizados Combina múltiples texturas para lograr mayor riqueza visual Ajusta correctamente roughness, metallic y specular para controlar reflejos Utiliza mapas normales para añadir detalle sin aumentar geometría Optimiza sombras para mejorar el rendimiento en tiempo real Crea materiales de alta calidad de forma rápida y estructurada con Range Material Editor. Si encuentras algún problema o tienes sugerencias, puedes reportarlo en el repositorio de GitHub. Descarga Range Material Editor: Range Material Editor23.47 KBApril 28, 2026 Downloads: 70 Download
🐍 Llamando Sensores y Actuadores desde Python en Range
🐍 Llamando Sensores y Actuadores desde Python en Range En este tutorial aprenderás a acceder y utilizar sensores y actuadores directamente desde un script en Python dentro de Range. La idea es simple: vamos a usar un cubo llamado “Player”, que se moverá utilizando las teclas W, A, S, D, pero a diferencia del tutorial […]
Llamando Sensores y Actuadores desde Python en Range En este tutorial aprenderás a acceder y utilizar sensores y actuadores directamente desde un script en Python dentro de Range. La idea es simple: vamos a usar un cubo llamado “Player”, que se moverá utilizando las teclas W, A, S, D, pero a diferencia del tutorial anterior, esta vez utilizaremos mas sensores y actuadores y los mandaremos llamar completamente desde código. Preparación en la escena Crea un cubo y renómbralo como: Player Agrega los siguientes sensores tipo Keyboard: W A S D Agrega los siguientes actuadores tipo Motion: W A S D Muy importante: Asegúrate de que cada sensor y actuador tenga exactamente el mismo nombre. Agrega un controller Python y enlaza todos los sensores a este controller. Para que no quede dudas en este paso de colocar Sensores, Controladores y Actuadores, aqui tienes este GIF para que veas el proceso completo. Script en Python A continuación tenemos el siguiente script en Python. A grandes rasgos, este script se encarga de enlazarse con el controller y obtener referencias a los sensores y actuadores por medio de sus nombres. Es importante que respetes la nomenclatura utilizada, ya que los nombres de los sensores y actuadores deben coincidir exactamente con los definidos en el código. De lo contrario, el script no podrá encontrarlos y no funcionará correctamente. import Range # ========================================================= # OBTENER EL CONTROLLER Y EL OBJETO # ========================================================= # Obtenemos el controller que está ejecutando este script # Este controller es el puente entre Python y los Logic Bricks cont = Range.logic.getCurrentController() # Obtenemos el objeto dueño del controller (en este caso, el cubo "Player") own = cont.owner # ========================================================= # ACCESO A LOS SENSORES # ========================================================= # Aquí estamos "llamando" cada sensor por su nombre # Estos nombres deben coincidir exactamente con los que creaste en el objeto w = cont.sensors["W"] # Sensor de la tecla W s = cont.sensors["S"] # Sensor de la tecla S a = cont.sensors["A"] # Sensor de la tecla A d = cont.sensors["D"] # Sensor de la tecla D # ========================================================= # ACCESO A LOS ACTUADORES # ========================================================= # Igual que con los sensores, accedemos a los actuadores por nombre # Cada uno controla un movimiento diferente del objeto w_act = cont.actuators["W"] # Actuador para avanzar s_act = cont.actuators["S"] # Actuador para retroceder a_act = cont.actuators["A"] # Actuador para moverse a la izquierda d_act = cont.actuators["D"] # Actuador para moverse a la derecha # ========================================================= # LÓGICA DE MOVIMIENTO # ========================================================= # Cada sensor tiene una propiedad llamada "positive" # Esta propiedad es TRUE cuando la tecla está presionada # -------- TECLA W -------- if w.positive: # Si la tecla W está presionada, activamos su actuador cont.activate(w_act) else: # Si no está presionada, desactivamos el actuador cont.deactivate(w_act) # -------- TECLA S -------- if s.positive: cont.activate(s_act) else: cont.deactivate(s_act) # -------- TECLA A -------- if a.positive: cont.activate(a_act) else: cont.deactivate(a_act) # -------- TECLA D -------- if d.positive: cont.activate(d_act) else: cont.deactivate(d_act) # ========================================================= # NOTA IMPORTANTE # ========================================================= # Este script se ejecuta constantemente (cada frame del juego) # Esto significa que en todo momento está revisando: # - Si una tecla está presionada # - Y activando o desactivando su actuador en consecuencia Copia y pega este Script dentro del editor de texto de Range y nombralo “mover.py“. Aquí te dejo un video del proceso de pegar el script en el editor de texto de Range. Ahora que ya tienes el script listo en el editor de texto, es momento de asignarlo al controller. Para hacerlo, cambia el tipo de controller de “And“ a “Python“. Después, haz clic en el campo de texto del script; esto desplegará la lista de archivos disponibles desde el editor de texto de Range. Ahí deberías ver tu archivo “mover.py“. Selecciónalo y con eso tu script quedará correctamente vinculado al controller. ¿Qué está pasando aquí? Obtenemos el controller activo Desde ahí accedemos a: Sensores → detectan entrada del usuario Actuadores → ejecutan acciones Usamos .positive para saber si una tecla está presionada Activamos o desactivamos actuadores en tiempo real Resultado Al ejecutar la escena: El cubo Player se moverá usando W, A, S, D Todo el control pasa por Python Estás combinando lógica visual con scripting En este punto, es posible que con los valores actuales de los actuadores el movimiento del cubo se sienta muy lento, tanto al avanzar y retroceder como al rotar. Esto es completamente normal y puedes ajustarlo fácilmente modificando los valores directamente en los actuadores. Por ejemplo: Para W y S puedes usar valores como 0.1 y -0.1 para controlar el avance y retroceso. Para A y D puedes usar valores como 1.5 y -1.5 para lograr una rotación más notoria. Te recomiendo experimentar con estos valores hasta encontrar un comportamiento que se sienta cómodo y adecuado para tu proyecto. Nota final Si no entiendes todo el script al inicio, no te preocupes. Es completamente normal comenzar trabajando con código que no escribiste tú mismo. Lo importante aquí es empezar a reconocer patrones: cómo se llaman sensores, cómo se activan actuadores, y cómo se estructura la lógica. Con la práctica, estos comandos se irán quedando en tu memoria y cada vez te resultará más natural programar dentro de Range. Y como siempre aqui abajo te dejo el archivo, por si necesitas revisarlo y probarlo. Python -Sensor Actuators85.00 KBMarch 20, 2026 Downloads: 111 Download
🐍🎮 Tutorial básico en Range: Movimiento con WSAD usando Python
🎯 Objetivo del tutorial El objetivo de este tutorial es darte una introducción clara y práctica a la programación en Range, para que puedas comenzar a crear comportamientos interactivos dentro de tus proyectos. A lo largo del contenido, aprenderás los conceptos básicos necesarios para trabajar con scripts, entender cómo se ejecuta la lógica en tiempo […]
Objetivo del tutorial El objetivo de este tutorial es darte una introducción clara y práctica a la programación en Range, para que puedas comenzar a crear comportamientos interactivos dentro de tus proyectos. A lo largo del contenido, aprenderás los conceptos básicos necesarios para trabajar con scripts, entender cómo se ejecuta la lógica en tiempo real y cómo controlar objetos dentro del motor. Esto te permitirá dar el salto de escenas estáticas a sistemas dinámicos y funcionales. Al finalizar, contarás con las bases necesarias para seguir desarrollando tus propias mecánicas y profundizar en la programación dentro de Range. Cuando comienzas en Range Engine, uno de los primeros pasos es aprender a mover objetos dentro de la escena. En este tutorial veremos cómo controlar un cubo usando W, A, S, D mediante Python. Paso 1: Preparar la escena Abre Range Usa la escena por defecto Selecciona el cubo Paso 2: Crear el script en Python Ve al Text Editor y crea un script llamado movimiento.py: Y copia y pega el siguiente script: import Range # Módulo principal del motor def main(): # Obtenemos el controlador actual cont = Range.logic.getCurrentController() # Objeto dueño del script (el cubo) own = cont.owner # Acceso al teclado keyboard = Range.logic.keyboard # Velocidad de movimiento speed = 0.1 # Estado de las teclas keys = keyboard.events # -------------------------------------------------- # Movimiento hacia adelante (W) # -------------------------------------------------- if keys[Range.events.WKEY] == Range.logic.KX_INPUT_ACTIVE: # Movimiento en eje local Y positivo own.applyMovement((0, speed, 0), True) # -------------------------------------------------- # Movimiento hacia atrás (S) # -------------------------------------------------- if keys[Range.events.SKEY] == Range.logic.KX_INPUT_ACTIVE: # Movimiento en eje local Y negativo own.applyMovement((0, -speed, 0), True) # -------------------------------------------------- # Movimiento hacia la izquierda (A) # -------------------------------------------------- if keys[Range.events.AKEY] == Range.logic.KX_INPUT_ACTIVE: # Movimiento en eje local X negativo own.applyMovement((-speed, 0, 0), True) # -------------------------------------------------- # Movimiento hacia la derecha (D) # -------------------------------------------------- if keys[Range.events.DKEY] == Range.logic.KX_INPUT_ACTIVE: # Movimiento en eje local X positivo own.applyMovement((speed, 0, 0), True) El procedimiento sería así: Sobre el código Si al ver este script sientes que hay partes que no entiendes del todo, no te preocupes — es completamente normal. Cuando se empieza a programar en Range Engine, es muy común trabajar primero con código que uno no escribió. Esto no solo es válido, sino que forma parte natural del proceso de aprendizaje. Lo importante en esta etapa no es memorizar todo, sino familiarizarte poco a poco con los comandos, la estructura y la lógica del código. Con el tiempo, empezarás a reconocer patrones: cómo se accede a los objetos cómo se leen inputs cómo se aplican acciones Y sin darte cuenta, muchos de estos elementos se irán quedando en tu memoria. Con práctica constante, experimentar y hacer pequeños cambios por tu cuenta, la programación comenzará a sentirse cada vez más natural y fluida. Paso 3: Conectar el script Con el cubo seleccionado: Sensor: Always Activa True Level Triggering (Pulse) Controller: Python (Module) Escribe: movimiento.main Conecta el sensor al controlador. ¿Cómo funciona el sensor Always? Esta combinación de bloques de lógica se puede interpretar de la siguiente manera: El sensor Always es, literalmente, un sensor que se activa constantemente. Esto significa que ejecutará en cada frame todo lo que esté conectado a él, ya sea un script en un controlador o un actuador a través de un controlador. True Level Triggering Aquí es donde entra uno de los puntos más importantes: Activado (True Level Triggering) El sensor se ejecuta continuamente en cada frame. Desactivado El sensor se ejecuta solo una vez. En otras palabras, este botón define si el comportamiento es continuo o puntual. Parámetro Skip El parámetro Skip controla la frecuencia con la que se envía la señal de activación. Skip = 0 → Se ejecuta en cada frame (máxima fluidez) Skip = 1 → Se salta un frame entre ejecuciones Skip = 60 → Aproximadamente una ejecución por segundo (dependiendo del framerate) Es una forma sencilla de “dosificar” la ejecución sin necesidad de código adicional. ¿Por qué usamos esta configuración? En este tutorial buscamos un movimiento fluido y continuo, por lo tanto usamos: True Level Triggering activado Skip = 0 Esto asegura que el script se ejecute en cada frame, permitiendo una respuesta inmediata al input del jugador. Ejemplo práctico Estos detalles son importantes para entender cuándo usar cada configuración. Por ejemplo: Si conectas un sensor Always a un actuador de tipo Motion sin controlar la frecuencia, el objeto se moverá constantemente sin detenerse. Pero si desactivas True Level Triggering, el movimiento solo ocurrirá una vez. Este tipo de configuraciones son fundamentales para comprender cómo fluye la lógica dentro de Range Engine y cómo se sincroniza con el game loop del motor. Paso 4: Ejecutar Presiona P para iniciar. Ahora puedes mover el cubo: W → adelante S → atrás A → izquierda D → derecha ¿Qué está pasando? Cada frame: El sensor Always ejecuta el script Se detecta la entrada del teclado Se aplica movimiento al objeto Esto ocurre dentro del famoso game loop del motor. vs Coordenadas globales y locales Este punto es clave Coordenadas globales (world) own.worldPosition.x += 0.1 Basadas en los ejes del mundo No dependen de la rotación del objeto Útiles para lógica simple Problema: si el objeto gira, el movimiento puede sentirse incorrecto Coordenadas locales (local) own.applyMovement((0, 0.1, 0), True) Relativas al objeto Se adaptan a su rotación Son las más usadas en videojuegos Resultado: W siempre mueve hacia “adelante” del objeto, sin importar su orientación Para comprobarlo vamos a añadir un sensor Mouse y cambia el tipo de sensor a “Movement”, después conecta con un controlador And y un Actuador Mouse y veremos el resultado Aqui tienes el archivo resultante del tutorial, en caso de que prefieras estudiarlo directamente y aprender de el. WASD- Python84.92 KBMarch 19, 2026 Downloads: 128 Download Conclusión Este es un ejercicio básico, donde ya se te proporciona el script listo para usar. La intención no es que memorices el código, sino que comiences a entender cómo está estructurado y cómo se conecta dentro del flujo de trabajo en Range Engine. A partir de aquí, es importante que poco a poco te adentres en la API del motor, ya que existen muchas otras formas de manipular objetos: desde físicas, rotaciones, inputs más avanzados, hasta sistemas completos de interacción. Este tipo de ejercicios son el primer paso para pasar de usar lógica visual a pensar en código, que es donde realmente tienes mayor control sobre el comportamiento de tu juego. ¿Y ahora qué? Bienvenido al desarrollo real con Range Game Engine : Leer documentación Optimizar código Usar print() para depurar Desesperarte un poco Pero Range + Python te permite hacer MUCHÍSIMAS cosas . No es fácil Pero vale totalmente la pena La programación es un juego de paciencia y perseverancia . En el siguiente tutorial con python usaremos código para mandar llamar actuadores y sensores para activarlos o desactivarlos en tiempo real. ¡Buena suerte y feliz scripting en Range!
📥 Cómo descargar escenas externas en Range y guardarlas en AppData
🎯 Objetivo del tutorial El objetivo de este tutorial es enseñarte cómo descargar y gestionar escenas externas en Range, almacenándolas correctamente en AppData para su uso dentro de tus proyectos. A lo largo del proceso, aprenderás a integrar recursos externos de forma organizada, optimizando la reutilización de contenido y mejorando el flujo de trabajo en […]
Objetivo del tutorial El objetivo de este tutorial es enseñarte cómo descargar y gestionar escenas externas en Range, almacenándolas correctamente en AppData para su uso dentro de tus proyectos. A lo largo del proceso, aprenderás a integrar recursos externos de forma organizada, optimizando la reutilización de contenido y mejorando el flujo de trabajo en el desarrollo de tus juegos o aplicaciones interactivas. Además, comprenderás la importancia de manejar correctamente las rutas y la persistencia de archivos, evitando errores comunes al trabajar con contenido dinámico. Al finalizar, tendrás la capacidad de implementar sistemas más flexibles y escalables que aprovechen recursos externos dentro de Range. Introducción Cuando desarrollamos un juego en Range o UPBGE, especialmente proyectos con muchas escenas o contenido pesado, puede ser una buena idea separar esos archivos del ejecutable principal. Esto permite crear juegos más modulares, donde algunos recursos se descargan solo cuando son necesarios. Con este enfoque podemos: Mantener el ejecutable ligero Descargar contenido cuando el juego lo necesite Actualizar niveles sin recompilar todo el juego Guardar datos del juego en una carpeta propia del sistema En este tutorial veremos cómo: 1⃣ Crear una carpeta del juego dentro de AppData 2⃣ Descargar archivos .range desde internet 3⃣ Guardarlos localmente 4⃣ Cargar escenas dinámicamente dentro del juego 1. Crear una carpeta del juego en AppData En Windows, AppData es la ubicación estándar donde las aplicaciones guardan sus datos. Podemos obtener esa ruta desde Python usando variables de entorno. import os import pathlib #Crear ruta a la carpeta del juego dentro de AppData pathGameData = pathlib.Path(os.environ[“APPDATA”] + “/My Game Folder”) #Crear carpeta si no existe if not pathGameData.exists(): pathGameData.mkdir() Esto creará una carpeta como esta: C:\Users\Usuario\AppData\Roaming\My Game Folder Aquí podremos guardar: escenas descargadas configuraciones partidas guardadas recursos adicionales del juego 2. Descargar un archivo desde internet Python incluye herramientas para descargar archivos desde una URL. Podemos usar urllib para descargar un archivo .range. from urllib.request import urlopen #Descargar archivo desde internet fileData = urlopen(“https://github.com/bgempire/TedTheFrog/raw/master/Ted%20The%20Frog.blend”) #Leer el archivo en memoria como bytes fileData = fileData.read() Después de ejecutar esto, fileData contiene el archivo completo en memoria. 3. Guardar el archivo descargado Si queremos guardar el archivo .blend en la carpeta del juego: #Ruta del archivo que se guardará resultingBlendFile = pathGameData / “DownloadedBlendFile.blend” #Guardar archivo with open(resultingBlendFile.as_posix(), “wb”) as openedFile: openedFile.write(fileData) Ahora el archivo descargado estará disponible en: AppData/My Game Folder/DownloadedBlendFile.blend Después podemos cargarlo usando funciones normales de Range como: Range.logic.startGame() Range.logic.LibLoad() 4. Cargar escenas directamente desde memoria <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1023" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/post003-e1773247328250.jpg" alt="" width="1024" height="546" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/post003-e1773247328250.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/post003-e1773247328250-300x160.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/post003-e1773247328250-768x410.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> Range o UPBGE también permite cargar datos directamente desde memoria, sin necesidad de guardar el archivo en disco. Esto puede hacerse con LibLoad. import bge # Cargar escena desde datos en memoria bge.logic.LibLoad(“DownloadedLib”, “Scene”, fileData) Parámetros de la función: LibLoad(nombreBiblioteca, tipo, datosBytes) Ejemplo: LibLoad(“DownloadedLib”, “Scene”, fileData) Esto cargará la escena contenida dentro del .blend descargado. Ventajas de este método Usar este sistema permite construir juegos con una arquitectura más flexible. Algunas ventajas son: Ejecutables más ligeros Descarga de niveles bajo demanda Actualización de contenido sin reinstalar el juego Soporte para contenido modular También puede ayudar a mantener ciertos recursos fuera del ejecutable para evitar que el jugador modifique fácilmente las escenas del juego. Posibles usos en juegos Este sistema puede utilizarse para implementar diferentes características dentro de un juego: Descargar nuevos niveles Actualizar assets Instalar mods Descargar DLC Cargar escenarios generados por la comunidad Conclusión La posibilidad de descargar y cargar archivos .range dinámicamente abre muchas posibilidades interesantes para proyectos desarrollados con Range / UPBGE. En lugar de empaquetar todo el contenido dentro del ejecutable, es posible construir juegos más modulares y flexibles, donde los niveles, escenas o recursos pueden descargarse cuando el juego los necesita. Este enfoque también permite: mantener el ejecutable principal más ligero actualizar contenido sin recompilar el juego distribuir nuevos niveles después del lanzamiento experimentar con sistemas de contenido descargable o mods Aunque este tipo de sistemas requiere una planificación adecuada de los recursos y las rutas de archivos, puede convertirse en una herramienta muy buena para proyectos que estén planeados crecer con el tiempo o bien que desean distribuir contenido de forma dinámica.
🧱 Librería gratuita de assets 3D retro para desarrollo de videojuegos
Si te gusta trabajar con gráficos 3D de estilo retro, especialmente del tipo que se veía en PlayStation 1, PC de los 90 o motores low-poly, este repositorio puede resultarte muy interesante. Existe una colección pública de assets disponibles aquí: 👉 https://github.com/Miziziziz/Retro3DGraphicsCollection Este repositorio contiene una biblioteca de modelos 3D de estilo retro que pueden […]
Si te gusta trabajar con gráficos 3D de estilo retro, especialmente del tipo que se veía en PlayStation 1, PC de los 90 o motores low-poly, este repositorio puede resultarte muy interesante. Existe una colección pública de assets disponibles aquí: https://github.com/Miziziziz/Retro3DGraphicsCollection Este repositorio contiene una biblioteca de modelos 3D de estilo retro que pueden utilizarse libremente en tus propios proyectos. Los assets están publicados bajo Creative Commons Attribution 4.0, lo que significa que pueden usarse en proyectos personales o comerciales siempre que se dé el crédito correspondiente. ¿Qué es esta colección? Retro3DGraphicsCollection es un repositorio que reúne assets 3D de estilo retro y low-poly, diseñados para recrear la estética de los videojuegos clásicos en 3D. Este tipo de recursos es ideal para: juegos de estilo retro proyectos estilo PS1 juegos indie prototipos de videojuegos mundos 3D estilizados experimentos con arte low-poly Además, al ser modelos ligeros, funcionan muy bien en motores en tiempo real y proyectos pequeños. ¿Qué tipo de assets incluye? Dentro del repositorio se pueden encontrar distintos tipos de recursos 3D, como por ejemplo: entornos edificios props objetos elementos decorativos gráficos experimentales de estilo retro Muchos de estos modelos siguen un flujo de trabajo low-poly, lo que facilita su uso en motores como: Unity Unreal Godot UPBGE / Blender Game Engine o cualquier otro motor 3D Licencia Los assets están publicados bajo Creative Commons Attribution 4.0 (CC BY 4.0). Esto significa que puedes: usarlos en proyectos personales usarlos en proyectos comerciales modificarlos incluirlos en videojuegos La única condición es dar crédito al autor original. Por qué los assets retro siguen siendo útiles Los gráficos retro no solo son nostálgicos — también son muy prácticos para el desarrollo. Los assets low-poly: renderizan más rápido son más fáciles de modificar funcionan bien en hardware modesto permiten crear prototipos rápidamente Para muchos desarrolladores indie, este estilo también es una decisión estética intencional. Repositorio Puedes explorar toda la colección aquí: https://github.com/Miziziziz/Retro3DGraphicsCollection
🎯 Objetivo del tutorial El objetivo de este tutorial es ayudarte a identificar y solucionar problemas de retraso (lag) en el audio dentro de Range (UPBGE), mejorando la sincronización y la calidad de la experiencia en tus proyectos interactivos. A lo largo del contenido, comprenderás las posibles causas del audio lag, desde configuraciones internas hasta […]
Objetivo del tutorial El objetivo de este tutorial es ayudarte a identificar y solucionar problemas de retraso (lag) en el audio dentro de Range (UPBGE), mejorando la sincronización y la calidad de la experiencia en tus proyectos interactivos. A lo largo del contenido, comprenderás las posibles causas del audio lag, desde configuraciones internas hasta limitaciones de rendimiento, y aprenderás a aplicar soluciones prácticas para optimizar la reproducción de sonido en tiempo real. Al finalizar, tendrás un mejor control sobre el sistema de audio, logrando proyectos más fluidos, profesionales y libres de errores perceptibles para el usuario. Cómo solucionar el audio lag en UPBGE / Blender Game Engine Si alguna vez has intentado crear un juego o una aplicación interactiva usando UPBGE o el antiguo Blender Game Engine, es posible que hayas notado un comportamiento extraño al trabajar con archivos de audio grandes: retraso en el audio o reproducción con lag. Hace varios años trabajé en un proyecto que incluía una introducción en video bastante larga. Ya fuera que el audio estuviera incrustado en el archivo de video o reproducido como un archivo separado, el resultado siempre era el mismo: un retraso notable en el audio. En ese momento no logramos encontrar una solución. Más adelante descubrimos que el problema estaba relacionado con el buffer de audio. El proyecto Mars Rover, que era uno de los proyectos de referencia del BGE, no implementaba correctamente el buffering de sonido, lo que podía provocar lag al reproducir archivos de audio grandes. Después de buscar en algunos foros y hacer varias pruebas, finalmente encontré una solución sencilla, así que decidí compartirla aquí por si puede ayudarle a alguien más. <img loading="lazy" decoding="async" class="aligncenter wp-image-1008 size-full" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag01-e1773167194302.jpg" alt="alt="UPBGE audio lag problem caused by large audio files"" width="1024" height="546" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag01-e1773167194302.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag01-e1773167194302-300x160.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag01-e1773167194302-768x410.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> La solución: usar buffering para el audio Puedes cargar el audio en memoria antes de reproducirlo. Esto evita que el motor tenga que estar leyendo el archivo constantemente desde el disco. Ejemplo de script: import audimport bgesfx_music = aud.Factory.buffer( aud.Factory( bge.logic.expandPath(“//Audio/yourmusicORaudio.wav“) ) ) music = aud.device().play(sfx_music) music.volume = 0.5 music.loop_count = –1 <img loading="lazy" decoding="async" class="aligncenter wp-image-1010 size-full" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag02-e1773167284223.jpg" alt="alt="Audio buffering diagram showing sound loaded into RAM for game engines"" width="1024" height="548" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag02-e1773167284223.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag02-e1773167284223-300x161.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/audiolag02-e1773167284223-768x411.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> ¿Qué hace el buffering? El buffering carga el sonido seleccionado en la memoria RAM de tu computadora. Esto significa que el motor ya no necesita acceder continuamente al archivo en el disco durante la reproducción, lo cual reduce problemas de rendimiento y retrasos en el audio, especialmente cuando se trabaja con archivos grandes. Propiedades útiles En el ejemplo anterior se usan dos propiedades: volume — controla el volumen del sonido loop_count — controla cuántas veces se repite (-1 significa loop infinito) Hay muchas otras propiedades disponibles. Para explorarlas puedes ejecutar: print(dir(music)) ¿Cuándo deberías usar buffering? El buffering es muy útil, pero no debería usarse para todos los sonidos del juego. El buffering carga completamente el archivo de audio en la memoria RAM, por lo que usarlo en demasiados sonidos puede aumentar el uso de memoria innecesariamente. Buenos casos para usar buffering El buffering funciona mejor con sonidos que: Son archivos de audio grandes Se reproducen durante mucho tiempo Se usan como música del juego Se usan en introducciones o cinemáticas Necesitan reproducción estable sin lag Ejemplos: Música de fondo Videos de introducción Sonidos ambientales largos Cuándo no es necesario Para efectos de sonido pequeños, normalmente no es necesario usar buffering. Ejemplos: Pasos Disparos Sonidos de interfaz Sonidos cortos de interacción Estos archivos son pequeños y se cargan muy rápido desde el disco, por lo que el buffering no aporta una ventaja significativa. Consejo práctico Una buena estrategia es: Usar buffering para sonidos grandes (música, ambiente, cinemáticas) Reproducir normalmente los sonidos pequeños Esto te dará un buen balance entre rendimiento y uso de memoria. Conclusión Este pequeño truco puede marcar una gran diferencia cuando trabajas con música, pistas largas de audio o introducciones en video dentro de proyectos hechos con UPBGE/BGE/Range. Espero que esto le ahorre tiempo a alguien que se encuentre con el mismo problema que nosotros tuvimos hace años.
🌳 EZ-Tree: Genera árboles 3D gratis desde tu navegador con un generador procedural
En el desarrollo 3D —ya sea para videojuegos, visualización arquitectónica o proyectos web— los árboles siempre representan un pequeño reto: modelarlos lleva tiempo, optimizarlos aún más. Por eso herramientas como EZ-Tree resultan especialmente interesantes. Se trata de un generador procedural de árboles 3D gratuito y basado en navegador, que permite crear modelos listos para exportar […]
<img loading="lazy" decoding="async" class="aligncenter size-full wp-image-991" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/EZ-Tree01.jpg" alt="" width="947" height="494" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/EZ-Tree01.jpg 947w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/EZ-Tree01-300x156.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/EZ-Tree01-768x401.jpg 768w" sizes="auto, (max-width: 947px) 100vw, 947px" /> En el desarrollo 3D —ya sea para videojuegos, visualización arquitectónica o proyectos web— los árboles siempre representan un pequeño reto: modelarlos lleva tiempo, optimizarlos aún más. Por eso herramientas como EZ-Tree resultan especialmente interesantes. Se trata de un generador procedural de árboles 3D gratuito y basado en navegador, que permite crear modelos listos para exportar sin instalar absolutamente nada. ¿Qué es EZ-Tree? EZ-Tree es una herramienta online que genera árboles de forma procedural en tiempo real. Funciona directamente en el navegador y está construida con Three.js, lo que la hace ligera y accesible. Además, es un proyecto open-source disponible en GitHub, bajo licencia MIT. En otras palabras: puedes usarla gratis y también estudiar o adaptar su código. ¿Qué puedes hacer con ella? La herramienta incluye más de 50 parámetros ajustables para modificar: Altura y grosor del tronco Cantidad y distribución de ramas Densidad de hojas Variación aleatoria (seed) Forma general del árbol También incluye presets base (pino, roble, etc.) que puedes modificar para crear variaciones rápidamente. Todo se actualiza en tiempo real mientras ajustas los controles. Opciones de exportación Uno de sus puntos fuertes es que permite exportar: .GLB → Modelo 3D listo para usar en motores como Unity, Unreal, proyectos WebGL e incluso el ahora open source 8ThWall. .PNG con fondo transparente → Ideal para ilustración, prototipos o UI. Esto la vuelve especialmente útil para: Prototipado rápido de escenarios Visualización arquitectónica ligera Juegos indie Proyectos WebXR/WebAR o experiencias interactivas Limitaciones a considerar Los modelos generados pueden tener entre 10k y 40k triángulos, por lo que quizá necesiten optimización si se usarán en proyectos en tiempo real. No incluye: LOD automático Rigging Animación de viento Optimización avanzada para engines Es una herramienta de generación, no un sistema completo de vegetación. ¿Por qué vale la pena? Porque elimina fricción. No necesitas Blender abierto. No necesitas plugins. No necesitas pagar. Solo entras a la web, ajustas parámetros y exportas. Para artistas técnicos, desarrolladores web 3D o quienes disfrutan entender cómo funcionan los sistemas procedurales, es una herramienta pequeña pero poderosa. Enlace Puedes probarla aquí: https://www.eztree.dev/
8thWall y su transición al mundo open source
Cuando una plataforma cambia, pero el conocimiento permanece Durante varios años, 8thWall fue una de las plataformas más interesantes para desarrollar experiencias de realidad aumentada directamente en el navegador. Sin aplicaciones nativas. Sin instalaciones. Solo WebAR. Para quienes trabajamos en el sector educativo creando experiencias interactivas, fue una herramienta poderosa: permitía publicar proyectos accesibles desde […]
Cuando una plataforma cambia, pero el conocimiento permanece Durante varios años, 8thWall fue una de las plataformas más interesantes para desarrollar experiencias de realidad aumentada directamente en el navegador. Sin aplicaciones nativas. Sin instalaciones. Solo WebAR. Para quienes trabajamos en el sector educativo creando experiencias interactivas, fue una herramienta poderosa: permitía publicar proyectos accesibles desde cualquier dispositivo móvil con cámara y navegador compatible. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-977" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/1post-e1772637822464.jpg" alt="" width="1024" height="635" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/1post-e1772637822464.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/1post-e1772637822464-300x186.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/1post-e1772637822464-768x476.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> El cierre comercial y la incertidumbre Cuando se anunció el cierre de operaciones comerciales de 8thWall, muchos desarrolladores nos encontramos en una situación delicada: Proyectos activos en producción Experiencias publicadas Clientes con implementaciones funcionando Código dependiente de infraestructura externa No era solo una herramienta más. Era parte del flujo de trabajo. El riesgo de depender de servicios cerrados volvió a ponerse sobre la mesa. En mi caso, la situación incluso me llevó a recordar una conversación previa con un cliente. En su momento, nos cuestionó la elección de la plataforma 8thWall para el desarrollo del proyecto. La respuesta fue clara: se trataba de una plataforma robusta, de paga, con trayectoria en el mercado y un modelo comercial consolidado. Esa combinación transmitía certeza, estabilidad y respaldo técnico. Paradójicamente, tiempo después, el escenario cambió y aquella conversación se convirtió en una reflexión más profunda sobre algo que a veces damos por hecho: que un modelo comercial sólido equivale necesariamente a permanencia. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-978" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/2post-e1772637877204.jpg" alt="" width="1024" height="590" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/2post-e1772637877204.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/2post-e1772637877204-300x173.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/2post-e1772637877204-768x443.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> La transición hacia 8thwall.org Posteriormente, el proyecto resurgió como 8thwall.org bajo un enfoque open source. Este cambio fue significativo: Mayor transparencia Comunidad como motor Menor dependencia SaaS Posibilidad de auto-hospedaje El paso al open source no es solo un cambio legal. Es un cambio filosófico. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-979" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/3post-e1772637936842.jpg" alt="" width="1024" height="550" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/3post-e1772637936842.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/3post-e1772637936842-300x161.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/3post-e1772637936842-768x413.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> ¿Qué implica realmente que sea open source? Muchos interpretan “open source” como “gratis”. Pero en realidad implica algo más profundo: Acceso al código fuente Libertad para modificar Adaptación personalizada Comunidad activa Para quienes desarrollamos tecnología educativa o cultural, esto representa autonomía técnica. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-980" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/4post-e1772637986368.jpg" alt="" width="1024" height="765" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/4post-e1772637986368.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/4post-e1772637986368-300x224.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/4post-e1772637986368-768x574.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> Lo que aprendí de esta transición Más allá del caso específico, hay una lección importante: Las plataformas cambian. El conocimiento técnico permanece. Si aprendiste WebGL, optimización móvil, tracking, arquitectura WebAR… ese conocimiento sigue siendo válido. Las herramientas van y vienen, La base conceptual se queda. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-981" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/5post-e1772638020642.jpg" alt="" width="1024" height="538" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/5post-e1772638020642.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/5post-e1772638020642-300x158.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/5post-e1772638020642-768x404.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /> El paso de 8thWall hacia el mundo open source no solo representa una segunda vida para la plataforma. También es un recordatorio: Construir sobre estándares abiertos ofrece mayor resiliencia. Para quienes exportamos proyectos locales y mantuvimos builds HTML5 independientes, la transición fue una mezcla de incertidumbre y oportunidad. Hoy, el panorama es distinto. Y quizá más interesante. <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-982" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/6post-e1772638063331.jpg" alt="" width="1024" height="488" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/6post-e1772638063331.jpg 1024w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/6post-e1772638063331-300x143.jpg 300w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/03/6post-e1772638063331-768x366.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" />
🎮 ZGameEditor: un motor ligero para juegos y demos procedurales
ZGameEditor es una herramienta gratuita y open-source pensada para el desarrollo rápido de juegos y aplicaciones multimedia ultra ligeras. Su objetivo principal es permitir crear proyectos completos con tamaños ridículamente pequeños (incluso 64 KB o menos), usando contenido procedural en lugar de grandes archivos de texturas, modelos o audio. Este enfoque lo ha hecho muy […]
ZGameEditor es una herramienta gratuita y open-source pensada para el desarrollo rápido de juegos y aplicaciones multimedia ultra ligeras. Su objetivo principal es permitir crear proyectos completos con tamaños ridículamente pequeños (incluso 64 KB o menos), usando contenido procedural en lugar de grandes archivos de texturas, modelos o audio. Este enfoque lo ha hecho muy popular dentro de la escena demo-scene, pero también es una opción interesante para desarrolladores curiosos, programadores gráficos y creadores de prototipos. Filosofía del motor A diferencia de motores modernos que dependen de assets pesados, ZGameEditor apuesta por: Generación procedural de gráficos, geometría y audio Uso intensivo de shaders GLSL Código compacto y control total del pipeline Ejecutables finales auto-contenidos Esto lo convierte en una herramienta ideal para aprender cómo funcionan realmente los motores por dentro, sin capas innecesarias. Características principales Desarrollo basado en componentes ZGameEditor trabaja con un sistema modular de componentes, donde cada elemento del juego o demo controla un aspecto específico: Render Entrada de usuario Audio Lógica Animación Cámaras Post-procesado Esto permite construir escenas complejas de forma ordenada y flexible. Gráficos 3D y shaders <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-935" src="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/02/ejemplos.jpg" alt="" width="699" height="261" srcset="https://salvador.mata.com.mx/blog/wp-content/uploads/2026/02/ejemplos.jpg 699w, https://salvador.mata.com.mx/blog/wp-content/uploads/2026/02/ejemplos-300x112.jpg 300w" sizes="auto, (max-width: 699px) 100vw, 699px" /> El motor soporta: Renderizado 3D con OpenGL Shaders GLSL Geometría procedural Render to Texture Efectos visuales avanzados (bloom, blur, distorsiones, etc.) Ideal si te interesa experimentar con programación gráfica y efectos visuales en tiempo real. Audio procedural y música Incluye un sintetizador de audio en tiempo real, lo que permite generar música y efectos sin archivos de sonido externos. También soporta MIDI y audio RAW. Esto es clave para mantener los proyectos extremadamente pequeños. FL Studio / ZGameEditor Visualizer ZGameEditor Visualizer es un plugin orientado a la creación de efectos de visualización con soporte para renderizado de video. Su funcionamiento se basa en ZGameEditor, un motor gratuito y de código abierto que permite desarrollar objetos de visualización de forma procedural y reutilizarlos directamente dentro del plugin. Gracias a esta integración, es posible crear visualizaciones personalizadas y efectos gráficos avanzados, aprovechando las capacidades del motor —como el uso de shaders y generación procedural— sin depender de recursos pesados o flujos de trabajo complejos. Scripting Cuenta con un lenguaje de scripting estilo C, usado para controlar lógica, comportamiento y sistemas más complejos. Si vienes de lenguajes como C, C++ o incluso GLSL, te sentirás bastante cómodo. Multiplataforma El editor corre en Windows Los proyectos pueden exportarse para: Windows Linux macOS Android Exportación y licencias Genera ejecutables independientes También permite crear screensavers Licencia MIT, totalmente libre para uso personal o comercial El código fuente está disponible para quien quiera estudiarlo o modificarlo Documentación y aprendizaje La página oficial incluye: Documentación técnica Referencia de componentes Ejemplos Tutoriales introductorios Aunque la curva de aprendizaje puede ser un poco empinada al inicio, es una herramienta muy educativa si quieres entender cómo se construye un motor desde abajo. ¿Para quién es ZGameEditor? ZGameEditor es ideal si: Te interesa la demo-scene Quieres aprender programación gráfica y shaders Buscas experimentar con contenido procedural Te gustan los motores alternativos y poco convencionales Quieres crear prototipos rápidos o proyectos experimentales No es un reemplazo directo de motores como Unity o Unreal, o incluso Range pero sí es una joya técnica para desarrolladores curiosos. Ejemplos incluidos en ZGameEditor ZGameEditor viene acompañado de varios ejemplos prácticos que muestran el potencial del motor y su enfoque procedural. Estos ejemplos son clave para entender cómo se construyen escenas completas sin depender de grandes assets. Algunos de los ejemplos más representativos incluyen: Demos procedurales Pequeñas escenas animadas donde: La geometría se genera por código Los efectos visuales se logran con shaders GLSL La música y el audio se sintetizan en tiempo real Este tipo de demos es muy común en la demo-scene y demuestra cómo se pueden crear experiencias visuales impactantes con un tamaño mínimo. Ejemplos de shaders y post-procesado Incluyen efectos como: Bloom Blur Distorsiones de pantalla Efectos psicodélicos y abstractos Render to Texture Estos ejemplos son especialmente útiles si te interesa aprender shaders o experimentar con efectos visuales avanzados sin la complejidad de motores más grandes. Escenas 3D interactivas Algunos ejemplos muestran: Cámaras 3D Movimiento en tiempo real Entrada por teclado y mouse Objetos animados Perfectos como punto de partida para juegos simples o prototipos. Capturas y material visual En la página oficial de ZGameEditor se pueden encontrar capturas de pantalla y videos que muestran claramente el tipo de proyectos que se pueden crear con el motor. En estas capturas podrás ver: Interfaces minimalistas del editor Escenas 3D con iluminación procedural Efectos visuales generados por shaders Demos abstractas típicas de la demo-scene Proyectos extremadamente ligeros corriendo en tiempo real Puedes ver este material directamente en el sitio oficial, en las secciones de ejemplos y documentación, donde se muestran proyectos hechos completamente con ZGameEditor. ¿Por qué los ejemplos son tan importantes? A diferencia de otros motores, en ZGameEditor los ejemplos no son solo “plantillas”, sino casos reales de estudio. Revisarlos te permite entender: Cómo se organiza un proyecto Cómo interactúan los componentes Cómo se integran shaders, audio y lógica Cómo se logra tanto con tan poco tamaño Si vienes de motores como Range / UPBGE, estos ejemplos te pueden abrir mucho la mente sobre otras formas de trabajar. Recomendación final Si decides probar ZGameEditor, lo más recomendable es: Abrir los ejemplos incluidos Ejecutarlos y observar el resultado Analizar los componentes y shaders Modificar valores y experimentar Es un motor que se aprende tocándolo, no solo leyéndolo. Conclusión ZGameEditor es uno de esos proyectos que no intentan competir con los grandes motores comerciales, sino que ofrecen algo distinto: control, minimalismo y aprendizaje profundo. Si te gusta ensuciarte las manos con código, shaders y creatividad procedural, definitivamente vale la pena echarle un ojo.