Mapping y Hammer

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_camera corresponde 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

  1. Planificar: decide qué es solo decorado: cordilleras, hileras de edificios lejanas, masas de agua, bosque.
  2. 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.
  3. Escalar: selecciona toda la copia y escálala con Tools → Transform (Ctrl+M) con el factor 0.0625. Eso equivale a 1/16.
  4. Mover: lleva la referencia reducida a un sitio libre, lejos del mapa principal.
  5. Colocar la cámara: pon la sky_camera exactamente sobre el brush marcador. Deja el valor de escala de la entity en su valor por defecto, 16.
  6. Construir el decorado: crea el paisaje lejano alrededor de la referencia en miniatura, por ejemplo con displacements, brushes sencillos y unos pocos modelos.
  7. Sellar: rodea por completo la sala del skybox con brushes que usen tools/toolsskybox. Tiene que estar sellada como cualquier otra sala.
  8. Quitar la referencia: borra la copia en miniatura del mapa principal o muévela a un VisGroup oculto. Los objetos ocultos no se compilan.
  9. Preparar el mapa principal: allí donde deba verse la lejanía, las caras necesitan tools/toolsskybox. Con tools/toolsnodraw el skybox no se ve.
  10. Probar: compila el mapa y revisa las transiciones dentro del juego. r_3dsky 0 y r_3dsky 1 desactivan 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_camera juntos.
  • 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_controller y 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 1 es la opción segura.

Hay más opciones en el artículo sobre optimizar el rendimiento de un mapa de GMod.

Errores habituales

SíntomaCausaSolución
El skybox 3D no se veNo hay sky_camera, o el mapa principal no usa tools/toolsskybox en sus bordesColoca la entity, revisa las texturas, revisa r_3dsky
El decorado flota o está desplazado hacia un ladoLa sky_camera no está sobre el origen escalado, o el factor es incorrectoRepite la alineación con la referencia y el marcador
Leak tras añadir el skyboxLa sala del skybox no está selladaCierra la sala por completo con world brushes
Borde duro en el horizonteLa niebla de la sky_camera y la del env_fog_controller son distintasIguala el color y las distancias
Los modelos lejanos son enormesModelo normal en lugar de una variante para skyboxUsa un modelo pequeño
El paisaje en miniatura se ve en el mapa principalLa sala del skybox toca el mapa principal o está abierta hacia élAleja 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.