XSIforum.com

Multi submap del Max en XSI?

0 Usuarios y 1 Visitante están viendo este tema.

Multi submap del Max en XSI?
« en: 02 Marzo 2010, 13:42:08 »
Hola,
me acaban de enseñar una propiedad de 3D max que está genial.
Lo conectas al diffuse de un shader, y puedes tener varios mapas diffuse en un solo shader.
Está genial para hacer variaciones de un mismo shader, pero sin duplicar el shader varias veces, con todo el beneficio que ello supone.

Ejemplo, estoy haciendo un puesto de frutas para una peli, y ya me he creado un shader para aguacates, otro para tomates y otro para naranjas.
Con esta propiedad conectada al diffuse, puedo tener una variedad de tomates utilizando un solo shader con 4 diffuse diferentes y queda mucho  más bonito que si todos tienen el mismo shader con el mismo diffuse.
Yo lo he hecho en XSI duplicando 4 veces el shader y cada shader con un diffuse distinto. Obviamente, lo otro mola más :)

No se, lo veo super útil, sabéis si hay algo similar para XSI y Maya? o hay que recurrir a programación externa?

Gracias!

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Multi submap del Max en XSI?
« Respuesta #1 en: 02 Marzo 2010, 18:35:20 »
Hola,



Siempre ha existido esto en XSI, pero con otro nombre.

Para cada objeto le creas un TextureMap con Get,Property->Texture Map->Texture Map. Cuando te aparece, especificas la imagen que quieras para ese objeto y que UVs usar (si hay mas de un projection, sino no importa.)

Luego, en tu material, usas un Nodes->Map Lookups->Color, lo enchufas al diffuse o lo que quieras y en el lookup node le especificas que quieres el color del "Texture Map". Ya esta. ;)

Re: Multi submap del Max en XSI?
« Respuesta #2 en: 03 Marzo 2010, 08:43:19 »
Ok, gracias, funciona.
Pero no consigo que funcione con clusters, que es realmente lo que me interesa.
Es decir, tengo por ejemplo una pared de piedras, cada piedra no será un objeto, si no que será un solo objeto con todas las piedras mergeadas y con varios clusters.

Por otra parte, en Max también hay un modificador que te hace una selección de id's de forma aleatoria, y eso está muy bien. Es decir, que te crea clusters de forma aleatoria, para el ejemplo que puse de una pared de piedras está muy bien.

No hay nada así "de fábrica" para XSI? Recuerdo que el crack de agedito preparó una herramienta cojonuda para esto, pero eso eran otros tiempos :) Aquí tenemso toda una UI para hacer esto en Maya con muchas opciones, pero me interesa mas para XSI.
Voy a investigar ;)

Gracias alan!

alanf

  • *****
  • 6029
  • Pipeline Developer @ Felix & Paul Studios
Re: Multi submap del Max en XSI?
« Respuesta #3 en: 04 Marzo 2010, 05:56:52 »
Pero no consigo que funcione con clusters, que es realmente lo que me interesa.
Es decir, tengo por ejemplo una pared de piedras, cada piedra no será un objeto, si no que será un solo objeto con todas las piedras mergeadas y con varios clusters.
Para eso solo necesitas multiples texturemaps. Puedes crear cuantos quieras. En el material de cada cluster especificas un TextureMap distinto. (Ya se, no es perfecto, pero es lo que hay.)


Por otra parte, en Max también hay un modificador que te hace una selección de id's de forma aleatoria, y eso está muy bien. Es decir, que te crea clusters de forma aleatoria, para el ejemplo que puse de una pared de piedras está muy bien.


Aqui tienes algo de Python para selecciones aleatorias...
Código: [Seleccionar]
xsi = Application
from random import sample

mode = xsi.Selection.Filter.Name
componentTypes = {"Polygon":"poly","Edge":"edge","Vertex":"pnt"}

if mode == "object":
objects = str(xsi.Selection.GetAsText()).split(",")
selectHowMany = int(  xsi.XSIInputBox("How many objects from selection to randomly select?", "Type a number:", (xsi.Selection.Count/2) )  )
objectsToSelect = sample( objects, selectHowMany )
xsi.Selection.SetAsText( ",".join(objectsToSelect) )

elif mode in componentTypes.keys():
if xsi.Selection(0):
oSubComponent = xsi.Selection(0).SubComponent
obj = oSubComponent.Parent3DObject
components = []
for cmp in oSubComponent.ComponentCollection: components.append(cmp.Index)
counter = oSubComponent.ComponentCollection.Count

else:
xsi.ActivateObjectSelTool("")
obj = xsi.Selection(0)
geo = obj.ActivePrimitive.Geometry
counters = {"Polygon":geo.Facets.Count,"Edge":geo.Segments.Count,"Vertex":geo.Points.Count}
counter = counters.get(mode)
components = range(counter)

selectHowMany = int(  xsi.XSIInputBox("How many components to select?", "Type a number:", (counter/2) )  )
componentsToSelect = sample( components, selectHowMany )

xsi.SelectGeometryComponents(obj.FullName+"."+componentTypes.get(mode)+str(componentsToSelect))

Para usarlo, puedes:
- seleccionar un solo objeto y entrar en modo polys/edges/points sin nada seleccionado y ejecutarlo. Podras elegir cuantos de los componentes quieres.
- Hacer lo mismo de antes, pero con una seleccion de componentes, entonces la seleccion aleatoria se basara en tu seleccion existente.
- O alternativamente, seleccionar varios objetos y ejecutarlo si quieres una seleccion aleatoria de tu seleccion de objetos.

Una vez tienes la seleccion que quieras es facil hacerte un cluster a mano.