Hola Mercury
Para hacer un cellshading (me refiero a la linea del objeto) puedes hacerlo de 2 formas relativamente facil y
SIN SHADERS. Para probar estos metodos puedes usar tu editor 3D no es necesario saber programar (para probarlo).
1- Con un enviroment mapping en el que la textura sea un fondo transparente con un circulo negro que toque los bordes de la textura. De esta forma la linea del circulo se dibujara todo alrrededor del modelo. Este metodo queda
ma o meno aunque no funciona correctamente con todos los objetos.
2 - Crear una copia de la malla del objeto, expandirla
(que no escalarla) e invertir las normales (dar la vuelta a los poligonos), luego pintas la superficie de esta malla de negro, colocas la malla sobre el objeto original y tachan! ya tienes una linea alrrededor del objeto.
Estos pasos los deberia hacer el programador, no es muy dificil currarse unas funciones que expandan la malla.
Este metodo queda muy bien pero tiene un problema. ESTAS UTILIZANDO EL DOBLE DE POLIGONOS, pero teniendo en cuenta que normalmente los modelos que usar cellshading no sueles tener muchos poligonos pues no hay problema.
Os dejo este trozo de codigo para expandir la malla, esta programado el BlitzMAX pero creo que os puede servir de referencia
- Código: Seleccionar todo
' expande la malla
For Local k:Int=1 To CountSurfaces(linea)
Local surf:tsurface=GetSurface(linea,k)
For Local Index:Int=0 To CountVertices(surf)-1
Local newx:Float=VertexX(surf,Index)+VertexNX(surf,Index)*ancho
Local newy:Float=VertexY(surf,Index)+VertexNY(surf,Index)*ancho
Local newz:Float=VertexZ(surf,Index)+VertexNZ(surf,Index)*ancho
VertexCoords surf,Index,newx,newy,newz
Next
Next
FlipMesh(linea)
' emparenta la linea con el pivote
EntityParent(linea,obj)
Este metodo realmente es lo que haria un shader pero nosotros nos lo curramos de forma artesanal. No es tan rapido como un shader pero quien dice que hay que expandir la malla en tiempo real en cada frame? Con que se expanda justo despues de cargar el objeto es suficiente.
Esta imagen es una muestra del metodo 2: (el sombreado que veis en los modelos esta hecho con un cubemapping)

Un saludo