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_layer | Definició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_top | parte 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_edge | Definición de ejes de la capa |
| ( | Paréntesis de inicio |
| world_sky_layer_edge_steps | Definición de la parte inferior de la capa |
| ( | Paréntesis de inicio |
| 1 | Nú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_shader | Animación de la capa |
| ( | Paréntesis de inicio |
| world_anim_shader_frames | Definición cuadros de la animación |
| ( | Paréntesis de inicio |
| 1 | Número de cuadros |
| world_anim_shader_frame | pará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 ( BlendATex | Tipo de Shader |
| terrain_texslots ( 1 | número de slots del terreno |
| terrain_texslot ( starsky.ace 1 0 ) | Archivo de textura y repetición |
| ) | Paréntesis de cierre |
| terrain_uvcalcs ( 1 | Nú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_layer | Definición capa de cielo |
| ( | Paréntesis de inicio |
| world_sky_layer_top | parte 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_edge | Definición de ejes de la capa |
| ( | Paréntesis de inicio |
| world_sky_layer_edge_steps | Definición de la parte inferior de la capa |
| ( | Paréntesis de inicio |
| 1 | Nú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_shader | Animación de la capa |
| ( | Paréntesis de inicio |
| world_anim_shader_frames | Definición cuadros de la animación |
| ( | Paréntesis de inicio |
| 1 | Número de cuadros |
| world_anim_shader_frame | pará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 ( BlendATexDiff | Tipo de Shader |
| terrain_texslots ( 1 | número de slots del terreno |
| terrain_texslot ( nubes.ace 1 0 ) | Archivo de textura y repetición |
| ) | Paréntesis de cierre |
| terrain_uvcalcs ( 1 | Nú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íxels | Canal 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_layer | Definición capa de cielo |
| ( | Paréntesis de inicio |
| world_sky_layer_top | parte 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_edge | Definición de ejes de la capa |
| ( | Paréntesis de inicio |
| world_sky_layer_edge_steps | Definición de la parte inferior de la capa |
| ( | Paréntesis de inicio |
| 1 | Nú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_shader | Animación de la capa |
| ( | Paréntesis de inicio |
| world_anim_shader_frames | Definición cuadros de la animación |
| ( | Paréntesis de inicio |
| 1 | Número de cuadros |
| world_anim_shader_frame | pará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 ( TexDiff | Tipo de Shader |
| terrain_texslots ( 1 | número de slots del terreno |
| terrain_texslot ( arcoiris.ace 0 0 ) | Archivo de textura y repetición |
| ) | Paréntesis de cierre |
| terrain_uvcalcs ( 1 | Nú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íxels | Canal 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.