Guía de skybox 3D en Hammer: configuración con sky_camera
Cómo crear un skybox 3D en Hammer: escala 1/16 con sky_camera, alineación limpia con el mapa principal, niebla a juego y los errores más comunes.
Un skybox 3D es una sala pequeña y sellada dentro de tu mapa que contiene el entorno lejano a escala 1/16. El motor la renderiza desde la posición de la entity sky_camera y muestra el resultado allí donde en el mapa principal se ve la textura tools/toolsskybox. Así el mapa parece mucho más grande sin que las montañas, el skyline o el mar existan a tamaño real.
Cómo funciona el skybox 3D
El motor dibuja primero el cielo 2D normal, después el skybox 3D y por último, encima, el mapa en sí. La cámara dentro del skybox se mueve con el jugador, pero solo una dieciseisava parte de la distancia, de modo que el paisaje se desplaza de forma creíble mientras caminas.
De ahí salen dos reglas:
- La posición de la
sky_cameracorresponde al origen del mapa principal, la coordenada 0 0 0. Toda la alineación depende de ello. - Los jugadores nunca entran en el skybox. Todo lo que deba ser accesible va en el mapa principal.
Construirlo paso a paso
- Planificar: decide qué es solo decorado: cordilleras, hileras de edificios lejanas, masas de agua, bosque.
- Crear una referencia: copia el contorno aproximado del mapa principal con brushes sencillos, por ejemplo los bordes del suelo y los muros exteriores. Coloca además un pequeño brush marcador exactamente en el origen 0 0 0 e inclúyelo en la copia.
- Escalar: selecciona toda la copia y escálala con Tools → Transform (
Ctrl+M) con el factor 0.0625. Eso equivale a 1/16. - Mover: lleva la referencia reducida a un sitio libre, lejos del mapa principal.
- Colocar la cámara: pon la
sky_cameraexactamente sobre el brush marcador. Deja el valor de escala de la entity en su valor por defecto, 16. - Construir el decorado: crea el paisaje lejano alrededor de la referencia en miniatura, por ejemplo con displacements, brushes sencillos y unos pocos modelos.
- Sellar: rodea por completo la sala del skybox con brushes que usen
tools/toolsskybox. Tiene que estar sellada como cualquier otra sala. - Quitar la referencia: borra la copia en miniatura del mapa principal o muévela a un VisGroup oculto. Los objetos ocultos no se compilan.
- Preparar el mapa principal: allí donde deba verse la lejanía, las caras necesitan
tools/toolsskybox. Contools/toolsnodrawel skybox no se ve. - Probar: compila el mapa y revisa las transiciones dentro del juego.
r_3dsky 0yr_3dsky 1desactivan y activan el skybox 3D para comparar.
Comprobar la escala y la alineación
Una unidad en el skybox equivale a 16 unidades en el mapa principal. Una montaña que deba parecer de 2048 unidades de altura en el juego mide, por tanto, 128 unidades en el skybox. Esto tiene consecuencias:
- No caben detalles finos. Trabaja con una rejilla pequeña y formas toscas.
- Un desfase de una unidad en el skybox se convierte en un desfase de 16 unidades en el juego. Mueve siempre el decorado y la
sky_camerajuntos. - Los modelos no se reducen automáticamente. Usa modelos hechos para skyboxes, a escala pequeña. Un modelo normal se ve dieciséis veces más grande de la cuenta.
Comprueba la alineación donde se encuentran el mapa principal y el skybox, por ejemplo a lo largo de una carretera o del borde de un terreno. Si la altura y la dirección coinciden, la cámara está en su sitio.
Ajustar la niebla y la luz
La sky_camera tiene sus propios ajustes de niebla. El mapa principal, en cambio, suele depender de un env_fog_controller. Si los dos no coinciden, ves un borde duro en la transición.
- Usa el mismo color de niebla en las dos entities.
- Para la distancia inicial y la final, empieza con los mismos valores que en el
env_fog_controllery ajústalos después de una prueba en el juego. - Elige un color de niebla que encaje con el horizonte de la textura del cielo 2D, que sigue estando detrás del skybox 3D.
La niebla también disimula el bajo nivel de detalle del decorado. El sol de light_environment ilumina también la sala del skybox, porque usa el mismo cielo. Allí las sombras quedan toscas enseguida por culpa de la escala. El artículo sobre iluminación en Source Engine lo explica más a fondo.
No perder de vista el rendimiento
Según el código del Source SDK, el skybox 3D se renderiza además del mapa principal en cuanto puede verse cielo desde la posición del jugador, y no solo cuando hay una cara de cielo en pantalla. En mapas abiertos eso ocurre casi siempre.
- Mantén la geometría sencilla y la sala tan pequeña como permita el decorado.
- Usa pocos modelos y sencillos, y deja fuera todo lo que nadie pueda distinguir de lejos.
- Según el código del Source SDK, el skybox 3D se dibuja en una sola pasada, sin reflejo ni refracción propios, así que el agua con reflejos en tiempo real no funciona allí como en el mapa principal. Un material de agua barato con
$forcecheap 1es la opción segura.
Hay más opciones en el artículo sobre optimizar el rendimiento de un mapa de GMod.
Errores habituales
| Síntoma | Causa | Solución |
|---|---|---|
| El skybox 3D no se ve | No hay sky_camera, o el mapa principal no usa tools/toolsskybox en sus bordes | Coloca la entity, revisa las texturas, revisa r_3dsky |
| El decorado flota o está desplazado hacia un lado | La sky_camera no está sobre el origen escalado, o el factor es incorrecto | Repite la alineación con la referencia y el marcador |
| Leak tras añadir el skybox | La sala del skybox no está sellada | Cierra la sala por completo con world brushes |
| Borde duro en el horizonte | La niebla de la sky_camera y la del env_fog_controller son distintas | Iguala el color y las distancias |
| Los modelos lejanos son enormes | Modelo normal en lugar de una variante para skybox | Usa un modelo pequeño |
| El paisaje en miniatura se ve en el mapa principal | La sala del skybox toca el mapa principal o está abierta hacia él | Aleja la sala y séllala por separado |
Si VBSP informa de un leak después de añadir el skybox, el compile log nombra la entity desde la que se rastreó el leak, por ejemplo la propia sky_camera. Cómo encontrar el hueco se explica en el artículo sobre solucionar el error de leak del mapa. El Map Scanner detecta causas raíz, errores derivados y soluciones adecuadas en logs de VBSP, VVIS y VRAD.
Preguntas frecuentes
¿Qué escala usa un skybox 3D?
La estándar es 1/16. El valor 16 está guardado en la sky_camera y conviene no tocarlo, porque los modelos de skybox existentes están hechos para esa escala. Escala tu referencia en Hammer con el factor 0.0625.
¿Dónde pongo la sala del skybox?
En un sitio libre, lejos del mapa principal. La sala no debe tocar el mapa principal y tiene que estar sellada por sí sola. Dónde quede en el editor da igual, lo único que cuenta es la posición de la sky_camera respecto al decorado.
¿Un skybox 3D consume mucho rendimiento?
Depende de lo que contenga. Un decorado sencillo hecho con displacements y unos pocos modelos apenas se nota. Muchos modelos, materiales elaborados o grandes superficies de agua lo encarecen.
¿Por qué no veo el skybox 3D en el juego?
Normalmente falta la sky_camera, o las caras del mapa principal no usan tools/toolsskybox. Comprueba también que r_3dsky esté en 1.