Areaportal
Un areaportal es una entidad sólida , func_areaportal, func_areaportalwindow, que puede usarse para sellar hojas VIS separadas y controlar la visibilidad.
Los areaportales tienen dos funciones separadas: omitir geometría y evitar que se rendericen zonas enteras.
Los areaportales son como puertas que pueden estar abiertas o cerradas. Cuando un areaportal está cerrado, se bloquea la visibilidad de la geometría y otros objetos que haya tras él. Al abrirse, la geometría tras él es visible. Los areaportales pueden abrirse dinámicamente y cerrarse mientras el motor está en funcionamiento. Normalmente se usan para abrir o cerrar conjuntos de sólidos trigger_multiple con el sistema de entidades de entrada y salida o combinados con una entidad de puerta .
Propiedades
Areaportales:
- están unidos a la entidad func_areaportal.
- deben construirse con un solo sólido. Las entidades de areaportal con más de un sólido generarán un error al compilarse con vbsp .
- deben usar el material
tools\toolsareaportal
aplicado a todas las caras del sólido del areaportal. - no pueden contener desplazamientos , ya que generarán un error vbsp si lo hacen.
- deben usarse para sellar zonas completas que conectan entre sí, para evitar filtraciones y consumos excesivos.
- son superficies volumétricas, no individuales. Pero los areaportales pueden tener cualquier tamaño, generalmente son sólidos finos del tamaño de las zonas (puertas de paso) que conectan (pero no puede ser de cualquier tamaño, ya que si se excede cierto límite dará un error de nombre «FindUniquePoints» debido a la sobrecarga (tamaño 512) y se producirán filtrados ).
- generan un nuevo VIS del tamaño del volumen del areaportal.
- se pueden colocar para abrir o cerrar zonas con lógicas de entidades o adjuntándolo a la entidad de una puerta.
«areaportal_window»
La entidad func_areaportalwindow se comporta como un areaportal estándar, con el añadido de desvanecerse y cerrarse si el jugador se aleja cierta distancia. Esto evita el efecto de aparición espontánea de areaportales o interiores que se abren de repente.
Construcción
- Crea el volumen del areaportal con un único sólido , sellando por completo el espacio entre dos zonas que quieras controlar (varios areaportales pueden hacer esto si fuera necesario. Evita dar más de 6 caras a cualquier entidad de areaportal.)
- Si el areaportal conecta dos zonas como si fuese una puerta, haz el sólido del areaportal del tamaño de la apertura y el grosor de los muros que conecta. Si las zonas están abiertas, como patios, el grosor puede ser de cualquier medida (lo habitual son tamaños de 8, 16, 32, etc.).
- Aplica el material Tool textures#Optimisation tools\toolsareaportal a todas las caras del sólido.
- Une el sólido a la entidad func_areaportal o func_areaportalwindow.
- Establece el valor clave Estado inicial para que no bloquee la visibilidad cuando no deba hacerlo. Si quieres vincularlo a una puerta con nombre pon como Estado inicial del portal el mismo que para la puerta y pon el nombre de la puerta en el valor clave «Nombre de puerta vinculada» (Name of Linked Door, en inglés) del portal. Cuando la puerta está cerrada, el Estado inicial del areaportal debe ser también «Cerrado» y viceversa.
Rendimiento
Los areaportales abiertos (estén siempre abiertos o registrados para abrirse) tienen un comportamiento que oculta la geometría visible a través del areaportal. Similar a mirar por la ventana abierta de una casa, solo las visleaves que se vean directamente a través del areaportal serán renderizadas por el motor del juego. De este modo, la geometría no visible del juego queda ocultada, limitando al renderización a lo que se ve por el tamaño de la ventana, reduciendo la cantidad de geometría renderizada y aumentando el rendimiento. Además, la geometría del modelo (objetos del mapa) no se renderiza a menos que sea directamente visible (o visible desde algún ángulo) desde el areaportal. Esto hace que los areaportales abiertos sean muy útiles para controlar la visibilidad de la geometría de modelos.
Debido a estos beneficios de rendimiento, los areaportales suelen usarse en estado siempre abierto. Estos areaportales se crean estableciendo el valor clave «Estado inicial» en la entidad func_areaportal en «Abierto». Los areaportales siempre abiertos se usan en otras zonas con gran cantidad de visleaves y geometría. Por ejemplo, con colocar un areaportal siempre abierto al final de un pasillo que se abre hacia una zona má amplia se produce una mejora de rendimiento sustancial. Mientras el jugador está dentro, mirando a la puerta, solo se mostrará la geometría visible de cada hoja.
Exceso
Hay que tener cuidado con abusar del uso de areaportales al mismo tiempo. Estos también conllevan un coste de procesamiento y si los portales no están lo suficiente dosificados, el abuso de ellos puede ser más perjudicial que beneficioso.
Los areaportales no forman sólidos en un mapa compilado, por lo que no cuentan para el límite de sólidos. Esto puede ser útil al tener un .BSP completo.
Compilación
Es vital que algunas zonas que deberían sellar areaportales no se filtren entre sí. Como pasa con las filtraciones, una zona del mapa solo se considera sellada con otra que esté completamente rodeada de sólidos (a excepción de areaportales) del mapa (no entidades), sin huecos. Si hay varios caminos que comuniquen con esas zonas, cada uno de los caminos debe tener un areaportal.
Puede ayudar imaginarlo como una pecera llena de agua con agujeros a sus lados. El areaportal taparía esos agujeros para que no hubiera filtraciones, ya que esas filtraciones provocarían errores de vbsp .
Los areaportals deben sellar cada entrada a una zona. Los sólidos func_detail , texturas traslúcidas y desplazamientos sellan una zona y generan filtraciones que evitan que el mapa funcione correctamente. Si el compilador puede encontrar un camino entre dos superficies principales de un portal, se producirá una filtración.
Errores de compilación
Los errores de compilación de areaportales se producen por VBSP . Si se produce una filtración, verás esto:
Brush <brush number>: areaportal brush doesn't touch two areas done
Estos mensajes de error no facilitan, en ocasiones, encontrar la filtración , pero para encontrar la filtración en el mapa, el vbsp generará un archivo de posición «pointfile» para ayudarte.
Areaportales y agua
Otra cosa complicada de usar areaportales es que no cruzan límites de agua, como superficies. Para ello, será necesario dividir el portal en dos; un areaportal en la superficie y otro debajo del agua, que se unan en el plano acuático.
Fusión
Para optimizar, los areaportales que comparten el mismo plano (están alineados) se fusionan automáticamente por el motor. Si no se desea esta acción, simplemente habrá que hacer que los sólidos de los areaportales no estén en el mismo plano. Sería tan fácil como mover uno de ellos ligeramente en el editor para que dejen de estar alineados. Con una cuadrícula sería suficiente para evitar esta fusión automática.
r_DrawPortals 1
en la consola.Mirar a través de areas
Los areaportales solo se ocultan entre zonas selladas. Atención a la imagen de la derecha: los contenidos de la construcción están ocultados, pero la visibilidad entre hojas VIS no se ve afectada porque están conectadas entre sí por los lados de la construcción.
Esto se puede corregir creando dos areaportales más a los lados de la construcción.
Comandos de consola
Puedes depurar y probar los portales desde el juego, utilizando comandos específicos de portales en la consola :
- r_DrawPortals 0/1
- Se remarca el borde de de cualquier superficie del portal (entre dos áreas) en verde cuando está en «1». A veces se puede condensar más de un portal. Si el portal que le pertenece está abierto, se trazará una segunda caja verde, mostrando la visibilidad del otro lado.
- mat_wireframe 0/1/2/3
- Traza la geometría en una malla, haciendo más fácil ver los efectos de los areaportales del mapa. Al deporar los areaportales se debería usar
mat_wireframe
en «1» o «2», ya que el «3» puede ocultar la geometría que renderiza. - r_portalscloseall 0/1
- Al ponerlo en «1» se fuerza a los areaportales a estar cerrados (no se abren bajo ningún concepto). Sobrescribe
r_portalsopenall 1
(esto se puede usar si los portales parecen no estar haciendo su función. Puede darnos el resultado al problema de que no se cierren correctamente.)
- r_portalsopenall 0/1
- Al ponerlo en «1» se fuerza a los areaportales abiertos (por lo que no pueden cerrarse).
BindToggle
para permitir una única para usar como variable.En multijugador
Los areaportales son muy útiles en juegos multijugador. Su creación es idéntica a la del modo individual, pero su función y uso es ligeramente distinto. Al haber varios jugadores en un servidor hay menos control sobre qué areaportales están abiertos y el rendimiento del mapa puede verse perjudicado por este método (cuando todos los areaportales están en funcionamiento, por ejemplo). Por ello, en la mayoría de casos, se usan areaportales siempre abiertos seguidos de areaportales vinculados a puertas y controlados por activadores. En el peor de los casos, un areaportal siempre abierto aumentará el rendimiento más que los portales diseñados para activarse.
Un areaportal de ventana también puede usarse para sellar estructuras en multijugador, pero es menos útil, ya que puede crear desigualdades en partidas multijugador competitivas. Un jugador desde dentro, que esté cerca del areaportal, podrá ver todo lo que se ve a través de la ventana, pero el jugador que esté alejado no verá al que se encuentra dentro..
Relaciones con oclusión
Los areaportales son similares a los func_occluder , en el sentido de que ayudan a controlar la visibilidad. Sus diferencias son:
- Los func_occluder solo ocultan el modelo (objetos del mapa, conocidos como prop). Los areaportales ocultan todo.
- Los areaportales sellan las zonas (evitando filtraciones ), mientras que los func_occluder pueden ser independientes para zonas dentro de ´-áreas.
- Los func_occluder son más costosos por objeto que los areaportales abiertos.
- Los func_occluder tienen control sobre el tamaño de los objetos que ocultan, en base a la zona que se ve en pantalla.
Véase también
- func_areaportal /
CAreaPortal
- func_areaportalwindow
CAreaPortalOneWay
(código C++ para nuevas entidades)- Control de visibilidad de geometría y tiempos de compilación
- Filtración
- Hoja VIS