Optimización
Valve Hammer Editor
Actualización
Video explicativo sobre Optimización general para vuestro mapa en CS 1.6
[ https://youtu.be/qoVgBYRw-J4 ]
Descargar del mapa
[ Mapa optimización creado por ZorHerK ]
Optimizar es un factor importante cuando se trata de mapas, por lo cual debemos aprender cómo mejorar el rendimiento de nuestro trabajo. Para ello iremos por pasos ya que esto será un tanto extenso en explicaciones e información.
Optimización básica.
Compilar con Full VIS. Esta opción permite cálculos adicionales durante el proceso de VIS, lo que ayuda a reducir el número de errores de VIS en un mapa a diferencia de un VIS normal. Se recomienda utilizar esta opción una vez hayas terminado por completo tu mapa, ya que el tiempo de compilación aumenta aproximadamente en un 30% sobre un VIS normal.
Textura NULL. ¿Que cumple esta textura? Esta textura se elimina del mapa durante la compilación, por lo que no existirá cuando juegues el .bsp ya compilado. Esto ayuda bastante para mejorar el rendimiento y la reducción de wpolys. Es bueno usarlo en lugares los cuales el jugador jamás podrá visualizar o alcanzar, sobre todo al exterior/vacío del mapa.
Texturizado.
Lo primero que debemos tener en cuenta es el texturizado y el uso de archivos pesados (.wad), con esto quiero decir: no es buena idea usar texturas con un tamaño mayor a 512x debido a la calidad alta de imagen y una advertencia que te muestra el compilador si superas este límite. Eso sí, no significa que no compilara el mapa, nada más es mejor evitar todo tipo de advertencia que te muestre el compilador y evitar que el archivo .bsp pese más de lo que debería.
Otra cosa relacionada a las texturas en general es el aumento del tamaño escala de este, ¿en qué nos puede ayudar esto? Nos ayuda a mejorar el rendimiento y la reducción de wpolys de forma considerable a cambio de una calidad visual menor en nuestro mapa, así que piensa bien dónde usar este método.
Tamaños:
-
1.00 Tamaño escala por defecto.
-
2.00 / 4.00 Tamaño escala para sectores amplios como lo son rocas, tierra o un techo.
-
5.00 / 8.00 Tamaño escala para zonas lejanas a vista del jugador.
- 10.00 a más Tamaño escala para cosas más específicas.
Ahora hablemos de ciertas cosas que nos ayudan a optimizar de forma general nuestro mapa
Construcción general del mapa.
Dependiendo de cómo construyas tu mapa puede llegar a influir no solamente en los fps una vez dentro del juego, también afecta lo que demora en compilar el mapa. Existen obviamente varias formas para resolver este tipo de problemas las cuales iré mencionando:
- No construir espacios demasiado amplios. La razón de esto es a causa de todos los models / sprites / jugadores que debe renderizar el juego en ese espacio, por lo cual bajaría de forma muy notoria los fps. Evita crear mapas con tamaños muy exagerados y enormes.
Esto también va en conjunto con la distancia visible del jugador que lo recomendable dependerá de lo grande que sea tu mapa, como por ejemplo un mapa pequeño-mediano, 3000~5000. Un mapa mediano-grande, 6000~9000.
- No recomendado crear un Skybox. Al crear esto el mapa correrá a muchos menos fps de lo normal, más aún si tienes un LEAK que ilumine todo el mapa. Si no puedes encontrar un LEAK en tu mapa no procedas a este método, no resolverás nada en realidad.
- No usar func_water en áreas grandes. En este caso es mejor usar func_illusionary en lugar de func_water, porque func_water provoca caídas de fps. Desconozco las razones técnicas, pero se puede notar jugablemente si lo intentas.
- No usar la herramienta carve / tallar. El problema con esto es que genera cortes que no tienen sentido, generando más polígonos en el mapa y empeorando el rendimiento. Es recomendable usar la herramienta de corte y hacer pieza por pieza y luego ordenarlos como corresponde, tratando de reducir bloques innecesarios.
Puede ser contradictorio mencionar que usar carve / tallar igual puede ser de gran ayuda, solo si logras aprender cómo usarlo en conjunto con una de las herramientas más complicadas del programa, la cual vendría ser la herramienta de manipulación de vértices.
- No usar inmensas cantidades de sólidos sin entidad. Esto es en referencia con los wpolys, por lo cual si creas muchos sólidos sin una entidad el aumento de polígonos será bastante alto. Para resolver este problema podemos usar dos tipo de 'SolidEntity'. Func_wall, el cual es más primitivo y más fácil de usar. Simplemente transformamos el sólido a entidad y con esto ya reduciremos varios los wpolys, o podemos dar uso de func_detail el cual está diseñado para esto.
Func_detail:
¿Qué es? Es un 'SolidEntity' el cual permite reducir la cantidad de wpolys visibles/no visibles en un mapa, ayudando a mejorar considerablemente los fps. La gracia de este 'SolidEntity' es usarlo en bloques sólidos que no formen parte de la estructura básica del mapa, ya sean cajas, pilares, postes de luz, lámparas u otros objetos. Cabe recordar que este 'SolidEntity' no puede ser un sólido de agua o de sky y que la entidad no puede hacer contacto con el exterior/vacío del mapa, de lo contrario lanzará un LEAK el compilador.
Cómo usarlo:
Cuando transformas el sólido a func_detail éste automáticamente ya funcionará sin problemas así como lo será el resto.
Atributos de la entidad:
'Detail level' (importante) :
Con este atributo podemos marcar el nivel de detalle de menor a mayor de un sólido.
Los sólidos con niveles más altos en detalles no generarán cortes a otros con uno menor.
Ten en cuenta que esto tiene un límite de 3 niveles como máximo, así que no puedes abusar de los números como te plazca, de lo contrario ignorará su función y solo conseguirás que el archivo .bsp pese más.
Diferencias de un sólido normal y uno con entidad func_detail.
Información adicional:
'Lower it's level to chop others':
> Sacado de un artículo de sven co-op.
Si estableces este valor en un nivel no inferior al de 'Detail level', este brush puede cortar brushes del mundo (si el 'Detail level' menos 'Lower its level to chop others' es igual a 0) y brushes de 'Detail level' inferiores.
'Raise it's level to get chopped':
> Sacado de un artículo de sven co-op.
Específicamente para cortar brushes de niveles de detalle más altos que este func_detail.
'Priority when faces overlap':
> Sacado de un artículo de sven co-op.
Es posible definir la prioridad de renderizado de texturas cuando dos brushes de detail se superponen entre sí.
- Para ello seleccionamos dos brushes que estén superpuestos entre sí, luego los transformamos en func_detail, y nos aseguramos de que 'Detail level' sea el mismo en las dos entidades.
- Cambia 'Priority when faces overlap' al valor de tu elección- diferente en cada brush de func_detail. Una prioridad más alta hará que las caras del brush se rendericen primero.
'Detail level of cliphull':
> Mención del mismo vluzacn en ZHLT v3.4.
Siempre debe ser 0 o 1, a menos que estés intentando resolver algunos errores de cliphull ajustando este valor.
Cambiar el 'Detail level of cliphulls' a 0 reducirá el número de clipnodes, pero el cliphull de este func_detail no utilizará el nuevo método de contenido de leafnode.
'Passable':
Por como dice el mismo texto, permite que el sólido sea traspasable.
HINT & SKIP.
Antes de iniciar aclaremos algo: los visleaf (o leaf) son espacios de una superficie visibles dentro de un mapa. Esto básicamente se refiere con las habitaciones o espacios de un mapa. Cuando el jugador se encuentra en una habitación el juego debe renderizar todo ese lugar, tanto donde el jugador se encuentra, como la siguiente o anterior habitación. Por más que nosotros no veamos lo que hay a través de la pared, el juego la renderiza de todos modos.
Para evitar que suceda este renderizado innecesario se da el uso de HINT y SKIP. Ten en cuenta que el mal uso de estas dos texturas puede causar un mal rendimiento.
¿Qué son? Wpolys significa "Worldpolys", o su traducción, Polígonos del mundo. Estos son el número de polígonos que el mapa genera en el proceso de compilación de VIS, haciendo que genere cortes en el mapa formando más polígonos de los creemos que hay.
¿Cómo puedo saber y poder ver la cantidad de wpolys de un mapa?
Para visualizar estos wpolys y saber cuantos hay en un mapa debemos abrir la consola dentro del juego y escribir los siguientes comandos:
"sv_cheats 1; developer 1; gl_wireframe 2; r_speeds 2; deathmatch 1".
Luego debes escribir en la misma consola "map <nombre_del_mapa>", obteniendo esto como resultado.
Como cada PC es diferente uno del otro, los fps siempre serán diferentes, ¿pero cómo podemos saber que tan óptimo se encuentra nuestro mapa? Los números más apropiados para una buena optimización en cuanto a wpolys son los siguientes:
-
400~900 wpolys: el mapa tiene un rendimiento excelente.
-
1000~1300 wpolys: el mapa está bien.
-
1400~1800 wpolys: dentro de este punto los fps comienzan a bajar en aquellos ordenadores los cuales son de calidad baja.
-
+2000 wpolys: los fps son más bajos para los que tienen un PC de potencia media.
- +3000 wpolys: el mapa completo sería un problema para jugar debido a la mala optimización. Es recomendable editar el mapa y reducir polígonos extras.
Te pido que leas bien toda la información dada anteriormente, gran parte de lo que se escribió aquí es importante para obtener un buen rendimiento en tu mapa, especialmente la parte básica de optimización.
Si tu mapa aun continua con bajos fps vuelve a echarle un ojo a la información escrita, y revisa detenidamente tu mapa en busca de algún error.
Este tutorial es una actualización del tutorial de @LeaN, también gran parte de la información que se dio fue sacada por parte de foros como lo es Gamebanana además de otros. Gracias.