Visleafs

Durante la compilación, el programa compilador del Half Life 2 (o de cualquier juego Source) divide el mapa en distintas áreas llamadas visleafs para determinar qué áreas pueden ser vistas desde un determinado punto y que entidades y sólidos han de mostrarse cuando el jugador se encuentra en un determinado lugar. Algo lógico ya que si se tuviese que calcular el mapa entero, sería una tarea muy pesada. El encargado de realizar dicho proceso es el programa vvis, el segundo que se ejecuta en el proceso de compilación y que se encarga del proceso mencionado anteriormente.

Vamos con un ejemplo gráfico para comprenderlo mejor; Para empezar tenemos un mapa de ejemplo:

[b]El primer paso[/b]; es dividir el nivel en distintas áreas, ignorando todas las entidades y displacements, e ir perfilando las zonas jugables:
Este paso es realizado por el vbsp, el primer programa que se ejecuta durante la compilación. El proceso se llama "portaling" y cada uno de los planos que se encuentran entre dos visleafs se llaman portal. El resultado es un archivo ([nombremapa].prt) que es cogido por el vvis, el segundo programa que se ejecuta durante la compilación. En rojo se encuentran marcados los visleafs, mientras que lo azul marca los portales. Este proceso apenas dura unos pocos segundos durante la compilación.

Segudo paso; Vvis en acción. En este paso, el vvis se encargará de realizar una serie de líneas entre los portales, si ambas líneas se cruzan, significa que ambos portales se pueden ver, luego ambos visleafs se verán juntos.

En la primera imagen, el visleaf 1 puede "ver" al visleaf 2, sin embargo en la siguiente imagen; el visleaf 2 no puede "ver" al visleaf 4
Al final; nuestra tabla de visivilidad quedará de la siguiente manera:
  • 1 -> 2 [color="#9ACD32"]visible
  • 1 -> 3 [color="#9ACD32"]visible
  • 1 -> 4 [color="#FF0000"]no visible
  • 2 -> 3 [color="#9ACD32"]visible
  • 2 -> 4 [color="#FF0000"]visible
  • 3 -> 4 [color="#9ACD32"]visible

Obviamente esta es una versión simplificada y reducida de todos los cálculos que se llegan a hacer en un mapa. ¿Te imaginas el número de cálculos que se llegan a hacer si no usas la entidad func_detail? En este caso si el jugador se sitúa en la primera habitación, los visleafs 1-> 4 no se “ven” por lo tanto no se dibujan, ahorrando así una cantidad considerable de trabajo al ordenador:

(La parte roja es la que no se dibuja, la verde sí. Los cuadrados son entidades) Aquí reside la explicación de por qué es importante reducir el número de visleafs y cómo afecta directamente al tiempo de compilación. Cuantos más visleafs haya, más tardará el mapa en compilarse.