Tutorial archivos ambiente (env files)
Posibilidades meteorológicas y astronómicas en Train Simulator

Una capa de cielo

Se compone de una serie de parámetros que definen su altitud, extensión, comportamiento según la hora del día, velocidad, textura... en el siguiente ejemplo comentado podremos comprender su funcionamiento:

world_sky_layerDefinición capa de cielo
(Paréntesis de inicio
    world_sky_layer_fadein ( 18:00:00 20:00:00 )hora de aparición de la capa y duración en la entrada
    world_sky_layer_fadeout ( 06:00:00 08:00:00 )hora de desaparición de la capa y duración en la salida
    world_sky_layer_topparte superior de la capa
    (Paréntesis de inicio
       world_sky_layer_top_nfaces ( 8 )caras de la parte superior de la capa
       world_sky_layer_top_radius ( 800 )Radio de la parte superior de la capa
       world_sky_layer_top_height ( 450 )Altura de la parte superior de la capa
    )Paréntesis de cierre
    world_sky_layer_edgeDefinición de ejes de la capa
    (Paréntesis de inicio
       world_sky_layer_edge_stepsDefinición de la parte inferior de la capa
       (Paréntesis de inicio
           1Número de ejes
           world_sky_layer_edge_step_height ( 0 )Altura de la parte inferior de la capa
            world_sky_layer_edge_step_radius ( 1800 )Radio de la parte inferior de la capa
       )Paréntesis de cierre
    )Paréntesis de cierre
    world_anim_shaderAnimación de la capa
    (Paréntesis de inicio
       world_anim_shader_framesDefinición cuadros de la animación
       (Paréntesis de inicio
           1Número de cuadros
           world_anim_shader_frameparámetros de la animación
           (Paréntesis de inicio
                world_anim_shader_frame_uvscroll ( 0 0.00005 )Velocidad de la capa
           )Paréntesis de cierre
       )Paréntesis de cierre
       world_shader ( BlendATexTipo de Shader
           terrain_texslots ( 1número de slots del terreno
                terrain_texslot ( starsky.ace 1 0 )Archivo de textura y repetición
           )Paréntesis de cierre
           terrain_uvcalcs ( 1Número de uvcalcs del terreno
                terrain_uvcalc ( 1 0 0 0 )Parámetros del uvcalc
           )Paréntesis de cierre
       )Paréntesis de cierre
    )Paréntesis de cierre
)Paréntesis de cierre

Toda esta serie de parámetros guardan una estrecha relación entre sí. Por tanto, una variación en uno de éllos puede cambiar completamente la apariencia de la capa, lo que conduce a mantener un margen coherente entre éllos. A continuación vamos a explicar en detalle los más importantes y sus efectos con ejemplos gráficos.

world_sky_layer_fadein ( 18:00:00 20:00:00 )
Con éste parametro opcional se definen las horas en que aparece la capa y el tiempo que tarda en aparecer. En el ejemplo, ya que se trata de la capa que contiene la textura del cielo estrellado, las horas están dispuestas en el horario del ocaso.
world_sky_layer_fadeout ( 06:00:00 08:00:00 )
En éste parámetro opcional se definen las horas en que desaparece la capa y el tiempo que tarda en desaparecer. Como el ejemplo se refiere al cielo estrellado, el horario es el del amanecer.
world_sky_layer_top_nfaces ( 8 )
Aquí se definen las caras que tiene la parte superior de la capa. Sin embargo, su alteración a 4 ó 16 no parece tener efecto visible alguno.
world_sky_layer_top_radius ( 800 )
Define el radio superior de la capa. Es uno de los parámetros que más efectos visibles tiene, como veremos más adelante gráficamente.
world_sky_layer_top_height ( 450 )
Define la altura superior de la capa. Como el anterior, tiene efectos muy visibles sobre el aspecto de la misma. De hecho, la combinación entre ambos parámetros es lo que más efectos visibles tiene
world_sky_layer_edge_step_height ( 0 )
Altitud de la parte inferior de la capa. Se pueden usar números negativos para ajustar la capa a un terreno montañoso, de manera que se esconda tras el horizonte.
world_sky_layer_edge_step_radius ( 1800 )
Radio de la parte inferior de la capa. Con valores bajos, el cielo se convertiría en una pared (alguna utilidad tendrá)
world_anim_shader_frame_uvtiles ( 2 2 )
Parámetro opcional que define las repeticiones de la textura. Valores mayores significan más repeticiones. Admite decimales.
world_anim_shader_frame_uvscroll ( 0 0.00005 )
Controla la velocidad y dirección del movimiento de la capa (N-S y E-O). Valores bajos son más lentos
world_shader ( BlendATex
Admite tres definiciones: ATexDiff, BlendATex y BlendATexDiff. La primera hace que la capa sólo aparezca por el día, la segunda sólo por la noche y la tercera tanto por el día como por la noche.
terrain_texslot ( starsky.ace 1 0 )
Nombre del archivo de textura. Los siguientes parámetros tienen curiosos efectos. 1 0 es lo habitual. Si son 2 0, se crea un espejo de la textura. 3 0 sólo dibuja la capa una vez, al principio de la Actividad (si se desplaza, desaparece). 4 0 crea una zona opaca alrededor de la textura. 5 0 crea 2 espejos y sólo la dibuja una vez, al principio de la actividad. 6 0 es igual que 5 0. y 7 0, 8 0, etc. Cambiar el segundo valor no tiene ningún efecto.
terrain_uvcalc ( 1 0 0 0 )
Es un misterio. Los cambios no producen efecto alguno, pero se dice que podría estar relacionado con un cambio de la capa a lo largo del terreno, con el objeto de poder variar la meteorología según nuestra posición.

La textura que utilizaremos para la capa superior del cielo (no transparente) tiene la muy importante particularidad de que sus lados coinciden consigo misma, tanto horizontal como verticalmente. Su resolución (detalle) dependerá de su tamaño en píxels, en este caso 512 x 512. Siempre ha de ser cuadrada y puede alcanzar los 2048 x 2048 píxels, aunque sólo es recomendable utilizar ése tamaño para la capa de las estrellas, donde se requiere mucha definición. En ese caso concreto, al existir una gran cantidad de negro, el archivo resultante ocupará relativamente poco. Hay que tener en cuenta siempre que con texturas muy grandes se puede reducir el rendimiento en equipos no muy potentes:

Textura (cielonubes.ace) utilizada para el cielo

En las siguientes imágenes en el simulador (hora: 12:00) vamos a ver gráficamente cómo varía enormemente el aspecto de la capa de cielo alterando sólo alguno de sus parámetros más importantes:

world_sky_layer_top_radius ( 100 )
world_sky_layer_top_height ( 800 )
world_sky_layer_edge_step_height ( 0 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )
world_sky_layer_top_radius ( 1000 )
world_sky_layer_top_height ( 800 )
world_sky_layer_edge_step_height ( 0 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )
world_sky_layer_top_radius ( 1000 )
world_sky_layer_top_height ( 100 )
world_sky_layer_edge_step_height ( 0 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )
world_sky_layer_top_radius ( 100 )
world_sky_layer_top_height ( 100 )
world_sky_layer_edge_step_height ( 0 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )

Observando las imágenes, podemos constatar que, simplemente variando dos parámetros (radio superior y altitud de la capa), obtenemos una variación notable en el aspecto global del cielo. Es importante señalar que en una Ruta montañosa y/o que tenga grandes variaciones en altitud, no es conveniente acercar en exceso una capa al suelo, porque al desplazarse por la zona más alta con los mismos parámetros que la última imagen, obtendremos algo así:

world_sky_layer_top_radius ( 100 )
world_sky_layer_top_height ( 100 )
world_sky_layer_edge_step_height ( 0 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )

En cuyo caso, tendremos que utilizar una solución de compromiso, ajustando el parámetro que se refiere a la altitud de la capa en su base pasándolo a un valor negativo, de modo que el aspecto en la zona montañosa sea el siguiente:

world_sky_layer_top_radius ( 100 )
world_sky_layer_top_height ( 100 )
world_sky_layer_edge_step_height ( -400 )
world_sky_layer_edge_step_radius ( 2000 )
world_anim_shader_frame_uvtiles ( 1 1 )
terrain_texslot ( cielonubes.ace 1 0 )

Una segunda capa de cielo

En alguno de los archivos de ambiente, podemos añadir una segunda capa al cielo, en este caso mediante una textura con canal alpha, representaremos nubes bajas que se desplazan en un sentido algo diferente a las que están más arriba, en la capa opaca. Como ésta es transparente, con canal alpha de 32 bits, nos permite ver lo que está arriba, creando un buen efecto de profundidad. Los parámetros que vamos a usar son los siguientes:

world_sky_layerDefinición capa de cielo
(Paréntesis de inicio
    world_sky_layer_topparte superior de la capa
    (Paréntesis de inicio
       world_sky_layer_top_nfaces ( 8 )caras de la parte superior de la capa
       world_sky_layer_top_radius ( 100 )Radio de la parte superior de la capa
       world_sky_layer_top_height ( 100 )Altura de la parte superior de la capa
    )Paréntesis de cierre
    world_sky_layer_edgeDefinición de ejes de la capa
    (Paréntesis de inicio
       world_sky_layer_edge_stepsDefinición de la parte inferior de la capa
       (Paréntesis de inicio
           1Número de ejes
           world_sky_layer_edge_step_height ( -150 )Altura de la parte inferior de la capa
           world_sky_layer_edge_step_radius ( 3000 )Radio de la parte inferior de la capa
       )Paréntesis de cierre
    )Paréntesis de cierre
    world_anim_shaderAnimación de la capa
    (Paréntesis de inicio
       world_anim_shader_framesDefinición cuadros de la animación
       (Paréntesis de inicio
           1Número de cuadros
           world_anim_shader_frameparámetros de la animación
           (Paréntesis de inicio
                world_anim_shader_frame_uvtiles ( 0.1 0.1 )Repeticiones de la capa
                world_anim_shader_frame_uvscroll ( 0.003 0.002 )Velocidad de la capa
           )Paréntesis de cierre
       )Paréntesis de cierre
       world_shader ( BlendATexDiffTipo de Shader
           terrain_texslots ( 1número de slots del terreno
                terrain_texslot ( nubes.ace 1 0 )Archivo de textura y repetición
           )Paréntesis de cierre
           terrain_uvcalcs ( 1Número de uvcalcs del terreno
                terrain_uvcalc ( 1 0 0 0 )Parámetros del uvcalc
           )Paréntesis de cierre
       )Paréntesis de cierre
    )Paréntesis de cierre
)Paréntesis de cierre

Podemos ver en esta capa que le faltan los parámetros de salida y puesta de la capa: esto significa que aún de noche, se seguirá mostrando la misma. Recordar que la textura también coincide consigo misma por todas las caras. Esta es una condición necesaria para todas las capas que representan nubes:

Textura para las nubes. La original tiene 512 x 512 píxelsCanal alpha para la textura de las nubes

El resultado es una sutil capa de nubes que se desplaza a mayor velocidad que las del fondo, lo que contribuye aún más al efecto de profundidad del paisaje:

La capa inferior transparente deja ver lo que está por encima

Podemos utilizar este tipo de capas para añadir otros fenómenos atmosféricos al cielo. Por ejemplo, es posible que nos interese añadir un arco iris en alguno de los archivos de ambiente que se utilizan para representar la lluvia, como por ejemplo en summerrain.env. En este tipo de capa, el código tendría un aspecto similar a éste:

world_sky_layerDefinición capa de cielo
(Paréntesis de inicio
    world_sky_layer_topparte superior de la capa
    (Paréntesis de inicio
       world_sky_layer_top_nfaces ( 1 )caras de la parte superior de la capa
       world_sky_layer_top_radius ( 100 )Radio de la parte superior de la capa
       world_sky_layer_top_height ( 100 )Altura de la parte superior de la capa
    )Paréntesis de cierre
    world_sky_layer_edgeDefinición de ejes de la capa
    (Paréntesis de inicio
       world_sky_layer_edge_stepsDefinición de la parte inferior de la capa
       (Paréntesis de inicio
           1Número de ejes
           world_sky_layer_edge_step_height ( -100 )Altura de la parte inferior de la capa
           world_sky_layer_edge_step_radius ( 400 )Radio de la parte inferior de la capa
       )Paréntesis de cierre
    )Paréntesis de cierre
    world_anim_shaderAnimación de la capa
    (Paréntesis de inicio
       world_anim_shader_framesDefinición cuadros de la animación
       (Paréntesis de inicio
           1Número de cuadros
           world_anim_shader_frameparámetros de la animación
           (Paréntesis de inicio
                world_anim_shader_frame_uvscroll ( -0.003 -0.002 )Velocidad de la capa
                world_anim_shader_frame_uvtiles ( 0 1 )Repeticiones de la capa
           )Paréntesis de cierre
       )Paréntesis de cierre
       world_shader ( TexDiffTipo de Shader
           terrain_texslots ( 1número de slots del terreno
                terrain_texslot ( arcoiris.ace 0 0 )Archivo de textura y repetición
           )Paréntesis de cierre
           terrain_uvcalcs ( 1Número de uvcalcs del terreno
                terrain_uvcalc ( 1 0 0 0 )Parámetros del uvcalc
           )Paréntesis de cierre
       )Paréntesis de cierre
    )Paréntesis de cierre
)Paréntesis de cierre

Podremos observar que hay varios parámetros diferentes a lo que sería la capa de cielo que contiene las nubes. A lo que hay que añadir una textura adecuada, con su correspondiente canal alpha y en 32 bits, para que sea relativamente transparente. Después de múltiples pruebas, la textura que nos ha dado mejores resultados gracias a su forma tiene este aspecto:

Textura para el arcoiris. La original tiene 512 x 512 píxelsCanal alpha para la textura del arcoiris

Desgraciadamente el resultado no puede ser totalmente perfecto, pues al desplazarse la capa por un cielo que no es perfectamente redondo (estructura tipo tienda de campaña), es imposible crear la apariencia de un arco circular. No obstante, ayuda a crear variedad en la ambientación de un paisaje lluvioso:

El resultado de añadir arcoiris y relámpagos a las capas del cielo. No es del todo real, pero se asemeja bastante.


Anterior < Siguiente >

Copyright © Antonio Asensio Yzquierdo 2005-2020. Derechos reservados.