Desde hace tiempo que tengo en la agenda escribir un artículo sobre Texturas para ser utilizadas tanto en Second Life como en los grids basados en Opensim. Obviamente, fiel a mis intereses, dándole al tema una mirada lo más técnica posible y, como siempre, hablando de algo sabiendo muy poco sobre ello.
Pues bien, para poder hablar de algo sin ser un experto, lo primero que suelo hacer es dedicar algunas horas de mi tiempo libre recorriendo sitios, leyendo manuales, tutoriales, documentación técnica y toda cosa que caiga en mis manos (o cerca) y que me permita tener un mejor conocimiento de lo que quiero hablar para, al menos, hacer que el lector crea que sé de lo que estoy hablando.
Esta vez, en vez de elaborar un informe propio con toda la información recolectada, he decidido (por el bien de mi salud mental), traducir y transcribir una guía sobre texturas para Second Life y Opensim, publicada por la usuaria Chosen Few (quién, gentilmente me dió su visto bueno para que yo pueda destrozar la perfecta explicación que dió sobre el tema) en el foro oficial de Second Life.
Espero que mi traducción sea lo suficientemente buena y correcta para trasmitir la calidad y perfección de la explicación del tema dada por Chosen Few, por ende, sin mas y encomendando mi alma a San Linden, los dejo con la guía de texturas:
Tamaño del archivo vs. Memoria de la textura
No es raro para quienes son nuevos en el texturizado suponer que deben utilizar los formatos de alta compresión como JPEG en la creencia errónea de que mantener pequeño el tamaño de archivo aumentará el rendimiento. La gente, por lo general, viene por esta presunción como resultado de la experiencia cotidiana en el uso de Internet, donde es fácil ver que las páginas web se cargan más rápido con archivos de imagen más pequeños que con los más grandes. Para el principiante, la expectativa de que este mismo comportamiento se aplica igualmente a las aplicaciones gráficas es lógico pero, es incorrecto.
Realmente, esta correlación percibida entre el tamaño del archivo y la velocidad en la web no es más que una mera ilusión, que no tiene nada que ver con el procesamiento de gráficos. En lo que respecta a Internet, la velocidad está determinada principalmente por la velocidad a la que los archivos se pueden enviar desde una computadora a otra. Dado que los archivos más pequeños tienen menos información para entregar, por supuesto que llegan a su destino mucho más rápido.
La velocidad a la que las imágenes gráficas se procesan en la pantalla en realidad no tiene nada que ver con el tamaño del archivo. El procesamiento de gráficos tiene que ver con la memoria de la textura, no se trata de espacio de almacenamiento.
La memoria de textura siempre está determinada por la cantidad y profundidad de los píxeles reales en la imagen, no de los bits y bytes en los que el archivo se almacena. Mientras el tamaño de archivo de cualquier imagen dada puede variar en función de en qué formato se guarda, el consumo de memoria real de la textura siempre será el mismo. La cantidad de píxeles en una imagen por el número de bits en cada píxel será siempre igual a la cantidad de memoria de la textura que la imagen usa.
Por qué eso es importante para el creador de texturas en SL es bastante simple. Conocer los principios matemáticos elementales de cómo las imágenes afectan el rendimiento le permite optimizar sus texturas para poder asegurarse de que sus creaciones son tan libres de lag como sea posible y, al mismo tiempo, ser de tan alta calidad como pueden ser. La clave del éxito en cualquier aplicación de gráficos en tiempo real es siempre encontrar el equilibrio adecuado entre el detalle y la velocidad. Haz tus texturas demasiado grandes, y utilizarán demasiada memoria, ralentizando la velocidad por cuadros (y todo los demás). Hazlas demasiado pequeñas, y aunque el rendimiento del sistema será relativamente bueno, tu creación puede tener un aspecto terrible.
El tamaño de archivo no es parte de la ecuación cuando se piensa en este contexto. Lo que es relevante para el rendimiento y la calidad visual son las imágenes reales, no los archivos que las almacenan en los discos duros. El rendimiento gráfico no se ve afectado en absoluto por el tamaño del archivo, pero si por el consumo de memoria de la textura. La memoria de la textura se determina por la cantidad de píxeles que componen cada imagen, y la cantidad de bits de memoria en cada píxel. Es asi.
Cómo calcular la Memoria de la Textura
La determinación de la cantidad de memoria de textura que una imagen consumirá es bastante sencilla. Se trata básicamente de un conteo de la cantidad total de píxeles en la imagen, multiplicado por el número de bits en cada píxel.
Las imágenes en color RGB sin transparencia tienen 24 bits por píxel, y con transparencia tienen 32 bits por píxel. Así, por ejemplo, si tienes un color de imagen no transparente que es de 1024×1024 píxeles, así es como se desglosan los cálculos:
- 1024×1024 = 1.048.576 píxeles totales
- 1.048.576 x 24 bits en cada píxel = 25.165.824 bits totales en la imagen
- 25.165.824 bits / 8 bits en cada byte = 3.125.728 bytes o, mas precisamente, 3 megabytes.
Matemática simple. Una imagen de 1024×1024 (sin transparencia) siempre utilizará exactamente 3 megabytes de memoria de textura. Eso es independientemente de si el archivo se comprime o no para su almacenamiento. En lo que se refiere a la tarjeta gráfica, una imagen es solo una colección de píxeles a ser dibujados, no un archivo a ser guardado.
Solamente para información, a continuación se muestra el desglose de todos los tamaños de texturas que soporta SL y su correspondientes requerimientos de memoria:
Nótese que las texturas mas grandes demandan mayor cantidad de información que las más pequeñas.
¡Una textura de 1024×1024 utilizas 16 veces mas memoria que una de 256×256!
La principal causa de porque SL es lento muchas veces es porque mucha gente utiliza texturas muy grandes. Cuando la demanda de memoria de texturas es muy alta la tarjeta gráfica se ve exigida y saturada y tu tasa de cuadros por segundo cae como piedra.
Por el bien de todos, haz lo que hacen los artistas de juegos profesionales. ¡Mantén siempre tus texturas lo mas pequeñas posible!
Regla de Oro:
- Al menos el 80% de las texturas deben ser de 256×256 o mas pequeñas
- 15% o menos deben ser de 512×512
- Sólo el 5% debe ser de 1024×1024
La tarjeta de vídeo promedio sólo puede procesar unos pocos cientos de megabytes de texturas a la vez. Los artistas profesionales de juegos son muy conscientes de esto y por eso se aseguran de optimizar todas sus texturas para mantenerlas lo más pequeñas posible. SL, como un entorno donde la mayoría de los creadores son aficionados, no tiende a beneficiarse de la misma sabiduría profesional y, como resultado, una escena ocupada promedio en SL puede tener, literalmente, valores de gigabytes de texturas en pantalla. Obviamente, esto no es una fórmula para un desempeño eficaz en tiempo real.
Por el bien de todos, intenta siempre mantener todas las texturas lo más pequeñas posible. Por lo general sugiero como una regla de oro que alrededor del 80% de las texturas deben ser de 256×256 o menor, alrededor del 15% deben ser de 512×512, y alrededor del 5% deberían ser de 1024×1024. SL es muy bueno mostrando pequeñas texturas en objetos a pantalla completa, de hecho, mejor que casi cualquier otro programa que he visto en mi vida. No es normal que haya una razón legítima para ir mucho más allá que 256×256.
Eligiendo el mejor tamaño de textura para el Trabajo
Los dos factores más importantes para determinar qué tamaño usar para hacer una textura es pensar acerca de cuánto espacio en pantalla es probable que la textura ocupe y cuanto detalle realmente necesitan en relación a su tamaño.
Por ejemplo, si estás haciendo una réplica de tamaño natural de la Capilla Sixtina, con murales gigantes en el techo y que es probable que ocupe toda la pantalla, y con un montón de pequeños detalles que la gente tiende a acercar y estudiar, no hay opción que ir con 1024 sin discusión. Sin embargo, para las partes que no ocuparán gran parte de la pantalla, como ser la pequeña caja de donación al lado de la puerta principal que nadie va a mirar, usar una textura mucho más pequeña es lo ideal.
Por supuesto, sólo porque algo va a llenar la pantalla no significa automáticamente que exige una gran textura. Una pared de ladrillo, por ejemplo, es sólo un patrón de repetición. El patrón en sí mismo no necesita ser muy grande para ser efectivo. Puedes pintar tan sólo unos ladrillos en exquisito detalle quizá a 128×128, y luego repetir la textura a través de la superficie de la pared a través de la repetición y ajustes dentro SL.
Si la pared necesita otros detalles incrustados en ella como ser ventanas, puertas, enredaderas, etc, entonces ya no es sólo un patrón de repetición; es una pintura en general. En ese caso, entonces si, tendrás que ir con una textura más grande para poder ajustar todas esas cosas al objeto.
Lo que se quiere evitar es hacer las cosas como usar una textura de 1024×1024 en un cartelito de 2 palabras que nadie nunca va a mirar de cerca. Por eso, algo tan pequeño como una textura de 64×64 probablemente sería suficiente. Siempre haz cada textura sólo tan grande como tiene que ser, ni un píxel más.
Una vez más, se trata de encontrar el equilibrio óptimo entre la memoria de textura y los detalles de la textura. Eso significa el uso del buen juicio. Elige el tamaño de las texturas cuidadosamente. Adopta las decisiones oportunas.
Formatos de archivo de origen que se pueden utilizar para Texturas en SL
SL te permite utilizar cualquiera de cuatro formatos de imagen diferentes como archivos de origen para subir, TGA, BMP, JPEG y PNG. Aquí hay un poco de información breve sobre los cuatro:
Archivo de Formato TAG – TARGA
Ventajas:
- Alta calidad
- Sin pérdidas
- Soporta transparencias
- Tamaño de archivo totalmente predecible
- Formato de mapa de bits simple fácilmente de leer en cualquier computador.
- Formato estándar de texturas en la industria, también de uso en aplicaciones de video.
Desventajas:
- Tamaño grande archivo
- No legible por programas gráficos de gama baja o por los programas no destinados al trabajo intensivo de gráficos (por ejemplo, no se puede ver una TGA en el Visor de imágenes de Windows)
- No es muy adecuado para impresión
Historia:
- Inventado en 1984 por Truevision para sus tarjetas gráficas TARGA
- Actualizado a la versión actual en 1989
- Significa Truevision Advanced Raster Graphics Adapter (Adaptador Gráfico Avanzado de rasterizado Truevision)
- Fue el primer formato de archivo en soportar color verdadero en las PCs compatibles IBM.
BMP -Formato Windows BMP
Ventajas:
- Alta calidad
- Enteramente sin pérdidas
- Tamaño de archivo totalmente predecible
- Formato de mapa de bits simple fácilmente de leer en cualquier computador.
Deventajas:
- Tamaño grande de archivo
- No soporta transparencias
- No es muy adecuado para impresión
- No es un formato de elección común en la industria gráfica
Historia:
- Desarrollado en los 80 por Microsoft como formato de imagen estándar para los sistemas operativos Windows
- Al día de hoy es utilizado para cosas simples, como ser fondos de escritorio y no mucho más
JPEG – Joint Photographic Expert Group Format
Ventajas:
- Archivo de tamaño pequeño
- Utilizado por la mayoría de los programas
Desventajas:
- Utiliza compresión con pérdida
- La calidad de la imagen se degrada cada vez que es grabado en disco
- No soporta transparencia
- No es muy adecuado para impresión
Historia:
- Inventado en 1986 por el Joint Photographic Experts Group (Grupo Unión de expertos en fotografía)
- Al día de hoy, es el formato de imagen mas utilizado en la web, el lugar donde el tamaño del archivo es más importante que la calidad de la imagen.
- También, es el más utilizado en las cámaras fotográficas, pero esto está cambiando rápidamente.
PNG – Portable Network Graphics Format (Formato portable de red)
Ventajas:
- Archivo de tamaño pequeño
- Compresión sin pérdida
- Soporta transparencias
Desventajas:
- Aunque posiblemente superior, PNG no es tan ampliamente apoyado como JPEG o GIF
- No es muy adecuado para impresión
Historia:
- Inventado en 1995
- Originalmente concebido como no-se-necesita-licencia, alternativa visual superior a GIF
- PNG, a veces, es conocido por el nombre recursivo «PNGs’s not GIF» (PNG no es GIF)
Tengamos en cuenta, al subir una imagen para SL, que ésta es almacenada en el servidor en formato JPEG2000, un tipo opcional de archivo comprimido sin pérdida. Tu archivo fuente original de imagen nunca, realmente, sale de tu propio disco duro. Cuando se pulsa el botón Subir, SL hace una copia JPEG2000 de tu imagen, y es esa copia la que se termina subiendo.
No me molestaré en publicar mucha información sobre JPEG2000, ya que la implementación del mismo en SL es algo que está fuera de nuestro control como usuarios. Si tienes curiosidad, puedes leer todo sobre ella en http://www.jpeg.org/jpeg2000/index.html (en inglés).
Para obtener los mejores resultados en SL, recomiendo siempre utilizar TGA como formato de archivo de origen. Ha sido durante mucho tiempo un estándar de la industria para texturizar y para otros trabajos gráficos en pantalla.
Recomiendo no usar JPEG nunca para texturizar. Es muy bueno para las páginas web, pero no es muy adecuado para el trabajo en 3D. Dado que, de todos modos, los servidores de SL guardarán tus imágenes como JPEG2000, no hay necesidad de preocuparse por el tamaño del archivo, lo que anula una y la única ventaja real de JPEG, dejándote nada más que con todos los inconvenientes. Implica una pérdida de datos, es un formato de baja calidad.
Además, ya que la implementación de SL de JPEG2000 es un poco con pérdida, el uso de JPEG como imagen de origen sólo agrava el problema. Cuando tu fuente de subida es un TGA sin pérdidas, sólo se comprime una vez, y sólo se pierde calidad una vez. Cuando la fuente es un archivo JPEG con pérdida, se comprime dos veces, y pierde calidad dos veces. Es semejante al efecto «copia de una copia». (NT: El efecto «copia de una copia» significa degradación de calidad de la imagen copiada, ya que al tomar una copia de una copia, con cada copia subsecuente, la última copia siempre será la de menor calidad).
Si eres un diseñador de páginas web, y utilizas JPEG durante todo el día, es lógico, pero si eres un artista de texturas 3D, mantente alejado de este formato. Para el trabajo de texturizado, como siempre digo, utiliza TGA, todos los días, TGA todo el camino.
Para cerrar este artículo y como me habían quedado un par de dudas sobre este tema, especialmente en cuanto a ciertas costumbres personales que tengo a la hora de crear y subir texturas a SL (en mi calidad, como dice la autora, de 100% aficionado en texturas), le hice la consulta respectiva, a lo cual, Chosen, amablemente me respondió y aclaró muchísimas cosas, con lo cual, me comprometo a mejorar mi forma de hacer y utilizar las texturas en Second Life.
Las preguntas fueron:
1) ¿Es válido o no utilizar el formato PNG y guardar el archivo sin compresión?
2) ¿Es recomendado utilizar el uso de grillas con varias texturas en una sola (por ejemplo, una grilla de 256×256 o 1024×1024 y colocar en ella 4 texturas diferentes)?
Ambas preguntas están basadas en cosas que suelo hacer por costumbre y porque, alguien, alguna vez, me lo recomendó. La respuesta obtenida es amplia e instructiva, por lo cual, cometeré de nuevo el crimen, por comodidad, de traducir el contenido del email con su respuesta, el cual es el siguiente:
«Permíteme responder a la segunda pregunta primero. El término para lo que estás preguntando sobre la textura es atlasing (Atlas de texturas). Siempre que sea posible, sí, es mejor combinar varias texturas en un único atlas que tener un montón de texturas separadas. Mientras que el uso de la memoria de vídeo seguirá siendo el mismo, el atlasing va a reducir el tráfico de la red, reducir potencialmente las llamadas de dibujo, etc.
Al respecto de tu pregunta sobre PNG, aquí va el mensaje que he intentado enviarte anteriormente. (Hace referencia a un mensaje fuera de línea que intentó enviarme pero SL se negó a recibirlo)
El formato PNG siempre es comprimido. La diferencia es que la compresión de PNG es sin pérdida, mientras que la compresión de JPEG es con pérdida. Todo lo demás es igual, una textura PNG sin pérdida será convertida a JPEG2000 de la misma manera que se hará con una imagen sin comprimir.
No obstante, hay otras razones por las cuales yo no recomiendo PNG. Paso a explicarlo.
En primer lugar, deja una gran puerta abierta para un error muy común del usuario. Debido a que PNG soporta múltiples formas de la transparencia, es fácil acabar con una textura de 32 bits, cuando se supone que tienes una de 24-bits. Si, incluso un solo píxel es menor que 100% opaco en PNG, entonces la textura en SL será de 32 bits.
La gente comete este error todo el tiempo, y SL está lleno de texturas de 32 bits innecesarias como resultado. Esto contribuye a generar lag, y causa problemas de visualización (fallos en el orden de los canales alfa – Ver nota personal al fin del artículo).
Con TGA, por otra parte, es casi imposible crear accidentalmente una textura de 32-bit. Si quieres que sea de 32 bits, se agrega un canal alfa, y si quieres de 24 bits, no se agrega. No podría ser más sencillo. Así que ¿por qué correr el riesgo con PNG?
Si sientes que simplemente debes utilizar PNG, puedes evitar la posibilidad de crear accidentalmente archivos de 32 bits, utilizando la opción Guardar para Web en Photoshop, y desmarcando la casilla de transparencia. Sin embargo, esto, obviamente, agrega un paso adicional para el flujo de trabajo. Ese paso extra es sólo lo suficientemente molesto y que hace que la mayoría de la gente no se moleste con él, y abunden los errores.
En segundo lugar, porque PNG admite transparencia visual, que tiende a ser una opción popular entre aquellos que son demasiado mentalmente perezosos para aprender a utilizar los canales alfa. Lo que esas personas no se dan cuenta es que no utilizar alfa suele hacer el trabajo mucho más difícil, hacer que se necesite mucho más tiempo, y los resultados serán mucho más descuidados.
El Mapeo Alpha es LA habilidad más importante para cualquier artista de texturas, y es muy sencillo de dominar. Aquellos que se aferran a PNG como excusa para seguir siendo ignorantes de un estándar de la industria tan fundamental se perjudican a sí mismos en formas que ni siquiera pueden imaginar.
Los formatos comprimidos de imagen como JPEG y PNG, mientras son geniales para la web y para dispositivos con espacio de almacenamiento limitado (teléfonos celulares), simplemente no son muy adecuados para el texturizado. En la Industria en general, TGA es el formato de textura más utilizado, por una buena razón. Si no está roto, no lo arregles.»
Al respecto, debo reconocer que siempre me ha llamado la atención ciertos problemas en la visualización de texturas con canales Alpha en SL. Por ejemplo, cuando dos texturas con trasnsparencias se superponen, la que está primero (visualmente) se vuelve invisible. Y esta respuesta me clarifica mucho las cosa ya que si, he notado que esto suele pasar cuando una, al menos, de las texturas involucradas fue creada a partir de una imagen con formato PNG (En su momento, cuando descubrí esto, dada mi ignorancia en este tema, lo atribuí a un bug del código del visor).
De más está repetir que a partir de ahora voy a modificar completamente mis costumbres de uso de formatos al crear texturas para subir a Second Life.
Y, por último, solo me queda agradecer efusívamente a Chosen Few por toda la buena voluntad y predisposición para atender y resolver mis dudas en este interesante tema. Y, dejando avisado que, pronto habrá otro artículo similar: la traducción de la Guía de Transparencias también confeccionada por Chosen.
SaludOS/2
Sé que este artículo fue creado hace varios años; pero me hubiera encantado el tutorial de texturas con transparencias. Usted dice que las texturas con alfa hechas en PNG y superpuestas son las que se vuelven invisibles, sin embargo, las texturas que uso (quiero crear cabellos) son formato .tga y se hace invisibles de igual forma que los PNGs. Me gustaría saber cómo pudo solucionar eso, ya que me están enloqueciendo. Muchas gracias.
El problema aqui es que muchas veces, aunque hagamos bien la textura para evitar este efecto de superposición, nuestra textura, en algún momento, se superpondrá con alguna textura que no hayamos creado nosotros, y si esta es una textura png, el efecto ocurre igual, a nuestro pesar.
He visto también que este problema se puede solucionar con un paso adicional al trabajar con la textura y las máscaras alfa. Te dejo aquí una guía que utilice para solucionar problemas donde el efecto de superposición persiste cuando guardamos la textura como tga: https://helpx.adobe.com/es/photoshop/using/saving-selections-alpha-channel-masks.html
SaludOS/2
Hola, una duda Bro.. intente encontrarte en SL para ver si me puedes ayudar.., pero no apareces con el nombre que firmas en este articulo, en fin, te cuento que estúpidamente …y lo digo así por que subí texturas sin antes leer tus artículos jajaja y pues el error ahora es que son PNG y cuando las coloco sobre el modelo se ven muy bien de cerca, si alejo la cámara simplemente desaparecen los objetos o bien en algunos autos al girar la cámara, se ve el interior del auto… a través de las puertas… esto no debería pasar, se que hay una forma de corregirlo para que no se vea trasparente donde no debe serlo, pero no se como… alguien me comento que eso era muy fácil de arreglar en las propiedades de la textura, el problema es que no me dijo como… me puedes ayudar con este detalle?… como corrijo eso sin tener que subir nuevamente las texturas?…. (un gastadero de lindens con esto).
de antemano gracias por el interés que puedas prestar a mi comentario.