Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

RenderCam y materiales

Iniciado por Igor, Julio 24, 2017, 05:00:24 PM

Tema anterior - Siguiente tema
Materiales, muchos materiales, cientos de materiales, millones de materiales
 
Buenas, es un tema relacionado con billboards, materiales y el offset
 
Mi objetivo es obtener imagenes para un monton de billboards para un monton de objetos diferentes, pero quiero la imagen con objetos animados y que puedan estar rotados en diferentes angulos
 
aparte de la CameraMain, tengo una RenderCamera que obtiene una target/rendertexture, la camara basicamente graba un monton diferente de objetos(3d animados y que cambian de rotacion) todos dispuestos en cuadricula enfrente de ella, son 16x16 objetos, 256
 
Obtengo la imagen que es como un tileset, una imagen que en realidad es una cuadricula de 16x16 imagenes,
 
Problema:
 
A la hora de poner el material a los billboard (un plano que mira a camara) He tenido que hacer cientos de materiales(256) porque, aunque todos usan el mismo tipo de material y la misma imagen (la rendertexture) cada uno tiene que tener diferente offset
 
Tener 256 materiales tansolo para los billboards me parece muy poco optimizado, reduce el rendimiento del programa
 
Hay algun metodo o algo para solucionar este "problema"
 
He pensado generar diferentes UV para cada mesh, igual cambiandolas con un script? Pero entonces lo que tendre seran demasiados objetos con script que permita cambiar la UV
 
Que puedo hacer? Alguna idea? algo que me haya perdido o pasado por alto? O igual estoy haciendo una burrada y esto se hace de otra manera?
 
 
 
 

Cita de: Igor date=1500908424Materiales, muchos materiales, cientos de materiales, millones de materiales
   


Excelente intro
 
Unity no tiene la posibilidad por defecto de crear instancias de un mismo material o por lo menos me lo pase. Es decir que todos los GameObjects leen su material desde un mismo lugar, por eso cuando cambias algo se cambian todos los objetos que tengan el material. Por eso para cambiar un offset tenes que crearte muchos materiales, cientos de materiales, millones de materiales.
 
Una cosa que podes probar para sacarte las dudas(en forma generica) es tener un objeto con un materialA y otro con un materialA tambien, salvo que este ultimo tendra un script que modifique el UV, fijate que una vez instanciado deberia verse como dos materiales distintos es decir tendrias (al darle play) un maaterialA con offset inicial, y un materialA con el offset modificado, siendo que partieron de un mismo material. Es decir que si elegis la posicion del "tileset" modificando el offset podrias hacerlo mediante codigo. Revisalo porque creo que deberia funcionar.
 
 

Oh, pues hace un tiempo me vi en un problema parecido,en verdad no pero una parte de la solucion creo que te puede servir.Lo que hice fue hacerme un shader para poder controlar los uv mediante los vertexcolors del mesh.
 
Acabo de hacer uno a ver si te sirve,hay dos versiones, la version que pone test es una modificacion con 4 sliders en el material simulando los vertex colors del mesh para que se vea mejor como funciona,que me suelo explicar muy mal :D
 
un pequeño resumen.
 
tilesinwidth/tilesinheight => especificamos n filas/columnas
 
textura => el "spritesheet"  generado (tiling y offset por defecto)
 
canal r => sirve para escojer que sprite se muestra (tendras que calcular el rango de cada sprite teniendo en cuenta el numero de sprites)
 
canal g => para tintar el sprite mediante un HUE
 
canal b => intensidad del tintado
 
canal a => para controlar el clipping del sprite
 
En cuanto lo veas lo pillas en un momento,ahora mismo el shader es del tipo Unlit,se puede cambiar si quieres.
 
 
 
un saludo!
 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=10657">TileSheetShaderTest.shader
//www.unityspain.com/applications/core/interface/file/attachment.php?id=10656">TileSheetShader.shader

Gracias por las respuestas,
 
de momento lo he dejado con los 256 materiales con la misma texture pero diferente offset
 
Si me da la grillada algun dia hare un script para cambiar los UV. 

Cita de: Igor date=1501064176Gracias por las respuestas,
   
   
      de momento lo he dejado con los 256 materiales con la misma texture pero diferente offset
   
   
      Si me da la grillada algun dia hare un script para cambiar los UV.
   


La solución ideal es la que te ha dado @lightbug . Hacer 256 materiales a mano es una burrada, es mucho más facil hacer un script que modofique el offset. Yo esto lo he hecho para un material que muestra un numero número de muelle, dependiendo el número muevo la textura con todos los numeros para que muestre un número o otro y si más adelante quiero hacer un cambio en el material solo hay que modificar un solo material.
 
Saludos.

Etiquetas: