Jump to content
zelleGames

Duda sobre tiling de un material

Recommended Posts

Buenas gente,

Tengo una duda/problema os comento, tengo un material para el suelo por ejemplo en el que a lo mejor le pongo un tiling de x:2 e y:2 a un suelo cuadrado y va bien, pero por ejemplo si le pongo ese mismo material a un pasillo alargado ya no queda igual y cambiando el tiling o cambia para todos. En el programa de 3D que uso (C4D) una misma textura despues puedes ajustarle el tiling a cada objeto individualmente ¿Hay alguna forma de hacer lo mismo en Unity? ¿O tengo que hacer un material por cada objeto y ajustar el tiling individualmente? ¿Quizas con un shader que dependiendo del tamaño del objeto calcule el tiling?

 

Gracias por adelantado

 

Saludos

Share this post


Link to post
Share on other sites

 

Seguramente las coordenadas UV no sean correctas. Las coordenadas UV definen qué punto de la textura corresponde a cada vértice de un triangulo.

En tu programa de 3D, tendrás que mapear las texturas correctamente, y exportar las coordenadas UV. En el material que uses en Unity, asegúrate de que está utilizando la primera de las coordenadas UV (puede haber varias). Por defecto, el Standard Shader así lo hace.

Si, una vez aplicadas las coordenadas UV, escalas un objeto en Unity, estarás distorsionando ese mapeo de texturas (normalmente no es muy deseable escalar los objetos una vez importados excepto por motivos de animación o similares).

Un saludo,

Edited by J Montes
  • Like 1

Share this post


Link to post
Share on other sites

Yo uso sketchup, las texturas que ves en sketchup van a parar tal cual a Unity, si necesito cambiar algo lo hage en Sketchup y se actualizan perfectamente. No dependen del tamaño de la cara ni nada.

La otra es usar pro-builder, que hace algo similar.

10 hours ago, zelleGames said:

¿Quizas con un shader que dependiendo del tamaño del objeto calcule el tiling?

Si necesitas aplicar materales con texturas a objetos individuales de varios tamaños (un buen ejemplo de esto son las rocas, pero hay muchos más) quizás lo mejor sería emplear materiales "UV-free", es decir con un planar o también (más famoso) tri-planar shader lo podés hacer. Pensalo como una proyección de la textura en las caras. Si las caras (por ende el objeto) cambian de escala, el material se mantiene.

Por ej, un terreno es genial para mostrar esto:

triplanar-screen_0.jpg

Ejemplos: Rocas (de todo tipo, forma y tamaño), tablas de madera (chiquitas, grandes, torcidas, etc), escombros, terrenos enteros, etc.

Pensalo, va a depender de los objetos que tengas. Si es un interior te recomiendo sketchup, pro builder , etc. Si son objetos muy variados y repetitivos quizás uno de estos shaders sea la solución.

Edited by lightbug
  • Like 1

Share this post


Link to post
Share on other sites

El truco para que la mayoría de terrenos y escenarios "queden bien" suele pasar por tratar un área o todo el nivel "como si fuera un cubo" , y/o aplicarle un material tri-planar. 

Más adelante, si necesitáis más detalle a cortas distancias, obviamente tileáis y separáis los trozos de esos escenarios, para darles detalle... El problema es que muchas veces no tenemos la referencia del concept-art del escenario, o nos lo estamos inventando, y por lo tanto no tenemos nada claro de qué zonas o trozos se compone nuestro escenario...

Un consejo para facilitarnos la vida es respetar la duración del trabajo en el que nos encontramos, y no pisarnos por querer correr demasiado. Os recomiendo que antes de texturizar, probéis a pintar con colores sólidos dichos trozos, y poco a poco vayáis rellenando los huecos o secciones con assets. Pero todo ésto, sólo pintando con colores simples, a modo de Material ID, porque así os irá dando una idea de qué queréis poner ahí...

Otro fallo cuando hacéis ésto, es que pensáis que estáis haciendo un Diorama, y no un videojuego. Se trata de relatar visualmente una historia o un momento del juego, a través de un escenario; de describirlo sin palabras. Los Diseñadores no creamos niveles en base a su apariencia ni formas, sinó que primero definimos una "navegación" y una serie de situaciones que queremos que ocurran (enfrentamientos, descansos, exploración, etc), y a partir de eso creamos la arquitectura, acorde a lo que necesitemos.

El truco aquí es crearos un pequeño guión o mini-historia sobre qué es ese escenario, qué representa en el juego y en qué momentos lo hace, y la razón por la que esté hecho de esa forma que queréis mostrar.

Es decir, no hagáis un terreno "porque sí" , tratad de darle un significado previo, una documentación. Eso os facilitará mucho luego la vida, a la hora de pintarlo.

Share this post


Link to post
Share on other sites

Buenas gente,

 

Lo primero pedir disculpas por tardar en contestar el hilo, no me gusta dejar sin contestar un hilo cuando os habéis tomado la molestia de contestar.

Creo que os he liado un poco con el ejemplo del programa 3D. A ver si consigo explicarme, jeje.

Os pongo una imagen como ejemplo, son dos superficies de distinto tamaño con un mismo material, el de la izquierda las baldosas tienen las proporciones que deseo, pero por ejemplo si un cacho de pared en la escena es mas pequeño como el de la derecha con ese mismo material  las baldosas quedan desproporcionadas compradas con el de la izquierda:

 

image.png

 

Lo puedo solucionar creando otro material y ajustando el tiling como abajo (no esta perfectamente ajustado pero es para el ejemplo):

 

image.png

Entonces mi pregunta es ¿Voy a tener que crear un material para cada pared e ir ajustando el tiling? ¿O hay alguna forma de que con un mismo material este se ajuste dependiendo del tamaño de la superficie?

On 3/18/2020 at 8:26 PM, lightbug said:

Si necesitas aplicar materales con texturas a objetos individuales de varios tamaños (un buen ejemplo de esto son las rocas, pero hay muchos más) quizás lo mejor sería emplear materiales "UV-free", es decir con un planar o también (más famoso) tri-planar shader lo podés hacer. Pensalo como una proyección de la textura en las caras. Si las caras (por ende el objeto) cambian de escala, el material se mantiene.

Esto me ayudo mucho, no para este caso en concreto pero si para los terrenos que me volvía loco, quedaban feisimos y no sabia porque.

 

On 3/20/2020 at 10:52 AM, pioj said:

Otro fallo cuando hacéis ésto, es que pensáis que estáis haciendo un Diorama, y no un videojuego. Se trata de relatar visualmente una historia o un momento del juego, a través de un escenario; de describirlo sin palabras. Los Diseñadores no creamos niveles en base a su apariencia ni formas, sinó que primero definimos una "navegación" y una serie de situaciones que queremos que ocurran (enfrentamientos, descansos, exploración, etc), y a partir de eso creamos la arquitectura, acorde a lo que necesitemos.

El truco aquí es crearos un pequeño guión o mini-historia sobre qué es ese escenario, qué representa en el juego y en qué momentos lo hace, y la razón por la que esté hecho de esa forma que queréis mostrar.

Muy buen consejo para aplicar.

 

Gracias  y disculpar la tardanza.

 

Saludos

Share this post


Link to post
Share on other sites

Lo que estás haciendo mal es el MAPEO UV, no el tiling...

Aquí entra otro temario para ti: 

  • O bien, le aplicas el concepto "Texels per Unit", que significa que desde el programa 3D trates de ajustar siempre el mapeo de esa superfície al mismo tiling/tamaño para ese material/textura (lo puedes hacer escalando el UV)...
  • O bien, usas la forma de modelar "modular" basada en unidades = pixels.  Se trata de asegurar que hagas que todaslas piezas tengan un mapeado UV proporcional a su tamaño idóneo de textura. Es decir, que modelas las cosas para que si un cubo de 1u/1m tiene mapeado 256px, entonces otra cosa que quieras a 512px tiene que medir exáctamente 2 cubos de alto... Me sigues?

 

Para el primer caso, se puede seguir el siguiente tutoríal para entender algo más de qué va el rollo del texel density ó texel scale : 

 

Share this post


Link to post
Share on other sites
18 hours ago, zelleGames said:

Entonces mi pregunta es ¿Voy a tener que crear un material para cada pared e ir ajustando el tiling? ¿O hay alguna forma de que con un mismo material este se ajuste dependiendo del tamaño de la superficie?

¡No! Si haces esto impides a la pipeline de rendering batchear ("dibujar en un único lote") todos esos meshes (subirán tus draw calls), y obligas a la tarjeta gráfica a hacer un cambio de estado innecesario entre meshes (no muy grave, porque no cambias la textura sino sólo su parametrización, pero no sé si Unity es TAN listo y lo importante son las draw calls de todas formas).

Lo que se hace es aplicar coordenadas UV en el software de modelado. Con ellas controlas cómo se muestran las texturas en cada cara de tus modelos. Cada vértice tiene unas coordenadas en 2D que indican qué coordenada de la textura se aplica ahí (las llamamos UV). Cada triángulo "sabe" qué porción de textura se le aplica. Las coordenadas UV van de 0 a 1 representando la superficie de la textura, pero si en un vértice pones coordenadas (0, y) y en otro (10.5, y), representas que la textura debe repetirse 10 veces y media en ese eje. De nuevo, esto no se hace a mano, el software de modelado te da herramientas para disponer las texturas a tu antojo (pero es un tostón).

Evidentemente tu programa de modelado tendrá que tener la textura configurada con el mismo tiling que luego usarás en el material en Unity (si es que Unity no importa el material, o si lo modificas). Si no, verás una cosa en el modelador y otra en Unity.

Configura el material primero en tu programa de modelado, y asigna coordenadas UV adecuadas a cada vértice (suelen tener herramientas para hacer esto). Si lo haces así, al cargar luego el modelo en Unity aparecerá bien texturizado.

Edited by J Montes
  • Like 1

Share this post


Link to post
Share on other sites

×
×
  • Create New...