Long ago I remember writing in Twitter something about me experimenting with Self Shadowed Bumpmaps, a feature in the Source engine that was released back with the Orange Box, since then all following Valve games have included them, and just a couple of days ago I found my old files and started doing more tests with them, so here will write a little of my knowleage about them, hope you will find some of it useful.
Ok so as some of you may already know to create a regular "Normal" Map or "Bump" Map there is the need of a height map, for Self Shadowing Bump Maps (SSBM from now on) those are also needed.
Unless! you have already a Normal Map that you want to convert over, now, Valve gots a set of command line tools to make both actions, "height2ssbump.exe" and "normal2ssbump.exe" respectively, you can see plenty of documentation about those in the Valve Dev Wiki,here I will talk about neither of those since I don't use them because of their lact of GUI, but I bet they can be useful to handle large amount of textures in batch ways.
The tool I use, and recomend you to use it, is the free tool called SSBump Generator, you can grab it from here: http://ssbump-generator.yolasite.com/ here is a mirror in case it's down.
Ok, so let's start, here it's the texture we will be creating the SSBM:
It's a HL2 texture, "props/metalcrate001d"
So, let's create a Height Map that works for that texture, I will suppose you know how heightmaps work(dark is low, white is hight), there are multiple ways to create them, you can use the base texture in grey tones and then go from there, when it's something sharp like metal I tend to recreate the texture in vectorial for a better more clean thing. There are also ways to create them with 3D tools like 3DMax or Mudbox, but I will leave that to you to learn how to do that.
Here it's the heightmap I created:
So now that we have that we go to the SSbumpmap generator's regular Bump map generator(wich is also pretty cool)
Load the heightmap, create a new layer and check how it looks:
Looks a bit boring, the real trick for a good SSBumpmap is to have a good Bump map to start from!
So let's make it sharper, let's add a Fine Detail layer on top:
Ok, it's better now, let's say it's perfect.
Now we can convert that bumpmap to a SSBumpmap:
So.. we now have this SSBM that works as regular bumpmap..
But there is something missing here.. come on, it's in the name.. you should know it.. ok, it's the shadows!
Here is the trick, you need to open the bumpmap you created before in an image editor soft and add an alpha channel to it, that alpha channel is the heightmap(can be the same or another), the one that will be used to cast shadows in our SSBM, so we do that, and now we repeat the step before but change this first:
So now it will take a bit longer, and so we got this:
The ray caster now generated this Ambient Occlussion that goes right on the texture, this is how those shadows alone look:
This effect can be made stronger, just play a bit with the sliders.
And that's it, now you have your SSBumpmap, then you can do other stuff like add an alpha channel to it to use it like a specular mask and then create the VTF with vtex.exe or VtfEdit.
Here it's how it looks without the SSBM and later with it:
Here some wisdom:
* Don't Use SSBumpmaps on floors unless it's complex terrain or the game uses a lot of low light sources with very closed angles like flashlights, else they will be not noted.
* The heightmaps for the shadows cast should be always clean, only big stuff, you can leave the small details to the heightmap you used for the bumpmap, for example:
There I overlayed another texture to the main texture and then overlayed a new normal map on top of the one we previously did, but didn't touch the heightmap that had that normal map so the shadows created by SSBM generator will not change.
* You can have only shadows(Ambient Occlussion) SSBM.
* If you material gots specular, don't abuse of Shadows, they will also deform the reflexes with potentially unwanted results, to address that you should keep it in mind when you are creating the specular mask to avoid the areas with shadows, or eliminate the shadows completelly, thou, if doing so, there is no longer a point in using a SSBM so you should stick to use a regular Bump Map instead.
* Here it's an interesting article made by Valve explaining how they work: SIGGRAPH2007_EfficientSelfShadowedRadiosityNormalMapping.pdf
Wan't the short version? ok, Regular Bump maps have 4 light sources in 2 channels, red and green, the blue one is for AO, rarelly used, SSBM have 3 lightsources with "baked" shadows in the 3 channels RGB, period.
Ok, that's all for now, just felt I needed to document a bit about this than just telling about it to my friends, also the blog needed some new ink, it's been more than a year since the last post, hopefully will write something much better soonish about Blendtextures, wich are less documented than SSBM.
I leave you with other examples of textures without SSBM and later with them:
Tiempo atras recuerdo haber escrito algo sobre estar experimentando con Self Shadowed Bumpmaps(Bumpmaps con sombras propias), una característica que esta disponible desde el lanzamiento de el paquete de juegos Orange Box, desde entonces los siguientes juegos de Valve los han incluido, y un par de días atrás encontré mis viejos archivos y empecé a hacer mas pruebas con ellos, así que hoy voy a escribir un poco de mis conocimientos sobre ellos, espero que encuentren algo útil de todo esto.
Bien, quizás algunos de ustedes ya sepan que para crear un "Normal Map" o "Bump Map" regular se necesita de un Height Map(mapa de elevaciones), para crear Self Shadowing Bump maps(SSBM desde aquí) también es necesario.
¡A no ser que! ya tengas un Normal Map que quieras convertir a SSBM, bien, Valve tiene un par de herramientas sin interfase para realizar ambas acciones, "height2ssbump.exe" y "normal2ssbump.exe" respectivamente, podrás ver abundante documentación sobre ellas en la Wiki para Desarrolladores de Valve, aquí no hablare de ninguna de ellas dado que yo no las utilizo justamente por su carencia de una interfase, pero estoy seguro de que son muy útiles a la hora de procesar grandes cantidades de texturas de forma automatizada.
La herramienta que uso y recomiendo que tu también lo hagas, es una gratuita llamada SSBump Generator, la puedes conseguir aquí: http://ssbump-generator.yolasite.com/ aquí hay un espejo en caso de que no este disponible.
Bien, empecemos, aquí esta la textura para la que estaré creando el SSBM:
Es una textura que se puede encontrar en HL2, "props/metalcrate001d"
Así que vamos a crear un Height Map acorde para esa textura, voy a suponer que sabes como estos funcionan(negro es profundo, blanco es elevado), hay múltiples formas de crearlos, puedes partir de la textura base en tonos de grises y modificarla luego, cuando se trata de una textura de algo recto, creado por maquinas/humanos, yo prefiero recrear la textura de forma vectorial para un terminado mas agudo y limpio.
Hay también formas de crear Height Maps con programas de diseño 3D como 3D Max o Mudbox, pero aprender eso te lo dejare a ti.
Aquí esta el Height Map que cree:
Ahora que tenemos eso listo, nos dirigimos a el generador de Bump Maps regulares que trae la herramienta SSBump Generator(el cual es también muy bueno)
Carga el Height Map, crea una nueva capa y comprueba como se ve:
Se ve algo aburrido, el verdadero truco para conseguir un buen SSBM, es tener un buen Bump Map como base.
Así que hagámoslo mas intenso, agreguemos una capa de Detalle Fino sobre la anterior:
Bien, esta mejor ahora, digamos que esta perfecto.
Ahora podemos convertir ese Bump Map a un SSBM:
Así que... ahora obtuvimos este SSBM que funciona como uno Bump Map regular...
Aquí esta faltando algo... vamos, esta en el nombre... deberías saberlo... bien, ¡Son las sombras!
Esto es importante, tienes que abrir el Bump Map que creaste antes, en un programa editor de imágenes, y agregarle un canal Alpha(transparencia en algunos formatos), este debe ser un Height Map(puede ser el mismo o otro), y este será usado como referencia para crear las sombras en nuestro SSBM, una vez echo eso, volvemos y repetimos el paso anterior pero cambia esto antes:
Le tomara un poco mas de tiempo, y obtendremos esto:
La herramienta ahora genero estas sombras que están superpuestas directamente en la textura.
Así es como se ven estas sombras solas:
Este efecto se puede hacer mas intenso, solo experimenta un poco con los controles.
Y eso es todo, ya tienes tu Self Shadowing Bump Map, después puedes hacer otras cosas, como agregarle un canal Alpha para usarlo como mascara de reflexión en el juego antes de convertirlo a VTF con vtex.exe o VTFEdit.
Aquí es como se ve sin el SSBM y luego con el:
Algo de sabiduría sobre el tema:
* No crees SSBM para pisos, a menos que sea para terreno complejo o que el juego use mucho fuentes de luz bajas, como las linternas, de lo contrario no se apreciaran.
* El Height Map para las sombras(en el canal alpha del Bump Map) debera ser siempre simple y limpio, solo las cosas mas notables, puedes dejarle los detalles a el Height Map que usaste para crear el Bump Map, aquí un ejemplo:
Ahí superpuse otra textura a la principal y luego hice lo mismo con un nuevo Bump Map sobre el creado con anterioridad, pero no toque el Height Map que ese Bump Map tiene, así las sombras creadas no cambiaran pero lo detalles menores si.
* Puedes crear SSBM que contengan solo sombras.
* Si tu textura tiene efectos de reflexión(specular) no generes sombras muy notables ya que estas deforman también el reflejo con resultados potencialmente indeseados, para solucionarlo puedes tenerlo en mente cuando creas la mascara de reflexión para evitar que las áreas donde hay sombras reflejen, o eliminar las sombras completamente, aunque al llegar a ese punto tener un SSBM ya no tiene sentido y deberás usar un Bump Map regular en su lugar.
* Aquí hay un interesante artículo escrito por Valve explicando como funcionan los SSBM: SIGGRAPH2007_EfficientSelfShadowedRadiosityNormalMapping.pdf
¿Quieres la versión corta? Bien, los Bump Maps regulares tienen 4 fuentes de luz en 2 de los canales de la imagen, rojo y verde, el azul es para Sombras, raramente usado, SSBM tienen 3 fuentes de luz con sombras "prehechas" en los 3 canales de la imagen, punto.
Bien, creo que eso es todo por ahora, simplemente creí que necesitaba documentar un poco sobre esto además de solo comentarle a mis amigos, además, el blog necesitaba algo de tinta fresca, ha pasado mas de un año desde la ultima entrada, con algo de suerte escribiré algo mejor pronto sobre Blend Textures, las cuales están menos documentadas que los SSBM.
Y aquí les dejo algunos ejemplos mas de texturas sin SSBM y luego con estos.
No hay comentarios:
Publicar un comentario