Gracias Gracias:  0
Resultados 1 al 10 de 10

Tema: alguien le da al scripting en XSI

  1. #1
    Método Polaco Avatar de Stewie
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,275

    Softimage Xsi ¿Alguien le da al scripting en XSI?

    Tengo alguna dudilla de novato, concretando, intento sacar las coordenadas UV de los puntos de un objeto. Consigo llegar a ellos desde los triángulos, pero en el array que me crea, salen repetidos (es lógico, el triángulo 1 tiene puntos en común con el triángulo 2, y como evalúa cada punto de cada triángulo, en el listado total se repiten). ¿Hay alguna manera de llegar a las coordenadas UV directamente utilizando Points, y no a partir de Triangles -> Pointsí Sólo por este camino es posible sacar el UVArray (me extraña que no haya una manera más directa, sin entrar por triángulos. Se podría meter la lista en una lista (valga la redundancia), y eliminar los repetidos, pero es un poco chapuza creo yo... aparte de ser un coñazo).

    Pongo el script que he hecho, en Python:
    Código:
    obj = Application.selection(0)
    triangle = obj.Activeprimitive.Geometry.triangles
    for A in triangle:
    	for oPoint in A.Points:
    		a=oPoint.UVArray
    		Application.LogMessage ("index: "+str(`oPoint.index`)+" U:"+str(a[0])+",V:"+str(a[1]))

  2. #2
    · Avatar de pedropp
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,257

    Re: ¿Alguien le da al scripting en XSI?

    pues a falta de una solución mejor, podrías hacer algo parecido a esto para tener en lista_UV las coordenadas de los puntos no repetidos.


    obj = Application.selection(0)
    lista_UV = []
    for triángulo in obj.Activeprimitive.Geometry.triangles:
    lista_UV.extend([punto.UVArray for punto in triángulo.Points if punto.UVArray not in lista_UV])
    # y para mostrar la lista:
    for coordenadas in lista_UV:
    Application.LogMessage("%s, %s" % coordenadas)

    (es solo un "supuesto teórico", no uso XSI así que no lo he comprobado)
    "La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
    [SIGPIC][/SIGPIC]

  3. #3
    Método Polaco Avatar de Stewie
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,275

    Re: ¿Alguien le da al scripting en XSI?

    Gracias! Esta noche le echo un vistazo a ver si lo consigo. Tanta gaita para mirar algo que aparece automáticamente al seleccionar el punto en el UV Editor...

  4. #4
    Método Polaco Avatar de Stewie
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,275

    Re: ¿Alguien le da al scripting en XSI?

    Nuevo experimento: el operador del XSI "getpixelarray", funciona correctamente para leer una imagen de 4 pixels de ancho y 2 de alto, cuando le doy estos datos (pide un Array para saber las posiciones de los pixels que debe mirar):
    Array1: [0, 0, 1, 0, 2, 0, 3, 0, 0, 1, 1, 1, 2, 1, 3, 1]

    Si la imagen es de 4 pixels de ancho x uno de alto, funciona también con este array:
    arr=[[0,1,2,3],[0,0,0,0]]

    He intentado que en la imagen de 4x2 lea el array [0,1,2,3][0,0,0,0][1,1,1,1], pero (obviamente) no funciona...
    ---
    Edito: Fallo mío, lo correcto es darle [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]], así sí que funciona (lógicamente, 1 del a con 1 del b, 2 del a con 2 del b...). No sé si será más sencillo de conseguir este array, o directamente el "desglosado", seguramente éste, porque el valor A ya lo tienes con a*alto, sólo habría que hacer el loop para sacar el B... mañana miro.

    ---
    Así que le doy el Array como lo quiere y vía. El "pero" que le encuentro a esta manera, es que tengo que dar un rodeo, explico la parte interesante:

    Primero consigo los dos arrays, el del ancho y el del alto.
    w=[]
    for i in range(Ancho):
    w.append(i)

    Resultado para un Ancho=4: [0,1,2,3]

    h=[]
    for i in range(Alto):
    h.append(i)

    Resultado para un Alto=2: [0,1]




    Ahora creo un array temporal así:
    temp = [(x,y) for y in h for x in w]

    Valor de Temp= [(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)]


    Lo ideal sería que me dejara hacer eso sin tener que poner los paréntesis en (x,y), como no me deja (o no doy con la manera correcta), transformo ese resultado en el array que necesita el comando GetPixelArray:
    arr=[]

    for i in temp:
    arr.extend(i)

    Valor de Arr = [0,0,1,0,2,0,3,0,0,1,1,1,2,1,3,1]


    El resto no tiene nada de chicha... pongo el script completo por si alguien quiere investigarlo, y por si veis alguna manera más lógica de hacerlo, sobretodo a la hora de conseguir el array necesario sin dar tantos rodeos...

    Código:
    xsi = Application
    oRoot = Application.ActiveSceneRoot
    oCube = oRoot.FindChild ("grid")
    oMat = oCube.Material
    oClips = oMat.ImageClips
    oClip = oClips(0)
    oSource = oClip.Source
    
    Ancho = oSource.Parameters("XRes").Value 
    Alto = oSource.Parameters("YRes").Value 
    Resolución = Ancho * Alto
    
    xsi.logmessage(("%s%s")%("Nombre de la imagen: ", oClip.name))
    xsi.logmessage(("%s%s")%("Ancho de la imagen: ", Ancho))
    xsi.logmessage(("%s%s")%("Alto de la imagen: ", Alto))
    xsi.logmessage(("%s%s")%("Resolución de la imagen: ", Resolucion))
    xsi.LogMessage ("--------------------------")
    
    w=[]
    for i in range(Ancho):
    	w.append(i)
    
    h=[]
    for i in range(Alto):
    	h.append(i)
    
    temp = [(x,y) for y in h for x in w]
    
    arr=[]
    for i in temp:
     arr.extend(i)
    
    oIm = oClip.GetImage().GetPixelArray(arr)
    
    for i in range (0,Resolucion):
    	xsi.LogMessage (("%s%s")%("Datos del pixel: ",i))
    	xsi.LogMessage ("colorR = "+str(oIm[0][i]))
    	xsi.LogMessage ("colorG = "+str(oIm[1][i]))
    	xsi.LogMessage ("colorB = "+str(oIm[2][i]))
    	xsi.LogMessage ("colorA = "+str(oIm[3][i]))
    	xsi.LogMessage ("--------------------------")
    Resultado del script sobre una imagen de 4 de ancho x 2 de alto (OJO! No probéis el script con imágenes grandes, por razones obvias )
    Código:
    # INFO : Nombre de la imagen: small_tif
    # INFO : Ancho de la imagen: 4
    # INFO : Alto de la imagen: 2
    # INFO : Resolución de la imagen: 8
    # INFO : --------------------------
    # INFO : Datos del pixel: 0
    # INFO : colorR = 1.0
    # INFO : colorG = 1.0
    # INFO : colorB = 0.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 1
    # INFO : colorR = 0.0
    # INFO : colorG = 1.0
    # INFO : colorB = 1.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 2
    # INFO : colorR = 1.0
    # INFO : colorG = 0.0
    # INFO : colorB = 1.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 3
    # INFO : colorR = 1.0
    # INFO : colorG = 1.0
    # INFO : colorB = 1.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 4
    # INFO : colorR = 0.0
    # INFO : colorG = 0.0
    # INFO : colorB = 0.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 5
    # INFO : colorR = 1.0
    # INFO : colorG = 0.0
    # INFO : colorB = 0.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 6
    # INFO : colorR = 0.0
    # INFO : colorG = 1.0
    # INFO : colorB = 0.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    # INFO : Datos del pixel: 7
    # INFO : colorR = 0.0
    # INFO : colorG = 0.0
    # INFO : colorB = 1.0
    # INFO : colorA = 1.0
    # INFO : --------------------------
    P.D. Con esto mi batalla contra el PinPanel sin utilizar el operador Push (ni Houdini ) esta prácticamente ganada, viva yo!

    P.D.2. Hacerlo con GetPixel en lugar de GetPixelArray (= hacerlo de uno en uno), es mucho más sencillo, se hace un loop y listo, pero supongo que a la hora de calcular una imagen grande, siempre que se puedan recoger todos esos datos accediendo una sola vez a la imagen, será mucho más rápido que acceder a la imagen miles de veces... si tengo tiempo traduzco el script utilizando GetPixel y mido los tiempos para comparar...
    Última edición por Stewie; 14-08-2007 a las 02:50

  5. #5
    libre pensador Avatar de JEOGIOMAR
    Fecha de ingreso
    Jun 2007
    Mensajes
    1,381

    Re: ¿Alguien le da al scripting en XSI?

    Cita Iniciado por Stewie Ver mensaje
    Código:
    # INFO : Nombre de la imagen: small_tif
    # INFO : Ancho de la imagen: 4
    # INFO : Alto de la imagen: 2
    # INFO : Resolución de la imagen: 8
    # INFO : --------------------------
    # INFO : Datos del pixel: 0
    # INFO : colorR = 1.0
    # INFO : colorG = 1.0
    # INFO : colorB = 0.0
    # INFO : colorA = 1.0
    P.r...
    cada vez me confundo más con el scripting, pensaba que todos los comandos tenían que ser en ingles.
    "muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza".

  6. #6
    Método Polaco Avatar de Stewie
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,275

    Re: ¿Alguien le da al scripting en XSI?

    Es que eso no son comandos, es el resultado del script, y lo que aparece en español son líneas explicativas que he escrito yo

    La manera correcta de sacar el array [0, 0, 0, 0, 1, 1, 1, 1] sería así, y no como hice arriba (tengo un don especial para buscar soluciones enrevesadas...):

    m=[]
    for i in range(ancho):
    temp=[i]*alto
    m.extend(temp)

    Valor de m: [0, 0, 0, 0, 1, 1, 1, 1]

  7. #7
    libre pensador Avatar de JEOGIOMAR
    Fecha de ingreso
    Jun 2007
    Mensajes
    1,381

    Re: ¿Alguien le da al scripting en XSI?

    Cita Iniciado por Stewie Ver mensaje
    Es que eso no son comandos, es el resultado del script, y lo que aparece en español son líneas explicativas que he escrito yo
    muchas gracias por tu aclaración, ya me gustaría tener una ínfima parte de tus conocimientos.
    saludos.
    "muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza".

  8. #8
    · Avatar de pedropp
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,257

    Re: ¿Alguien le da al scripting en XSI?

    a estas horas ya no veo... pero si he entendido bien m[] es algo temporal que no te importa los valores que contenga.
    Entonces por que no sustituyes

    m=[]
    for i in range(ancho):
    temp=[i]*alto
    m.extend(temp)



    por:

    m = [0]*alto*ancho



    (mañana despierto lo vuelvo a mirar y seguro que ya lo veo más claro

    Edito: y como seguro que estoy tonto y no es eso lo que quieres, te hago otra sugerencia para tu método: Para que usas una variable intermedia, temp, y no directamente metes el valor que quieres, me refiero a temp=[i]*alto y después m.extend(temp) en vez de directamente m.extend([i]*alto)
    Última edición por pedropp; 14-08-2007 a las 04:49
    "La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
    [SIGPIC][/SIGPIC]

  9. #9
    Método Polaco Avatar de Stewie
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,275

    Re: ¿Alguien le da al scripting en XSI?

    Ahora soy yo el que esta espeso, pero creo que lo que me dices de m=[0]*ancho*alto no me sirve.
    Necesito llegar a un array R[] del tipo [a,b], donde:

    a= [0,1,2,3,0,1,2,3]
    b= [0,0,0,0,1,1,1,1]

    ( R sería por tanto [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]])


    Conseguir [a] es sencillo, multiplicando [0,1,2,3]*2.
    Para conseguir[B], lo hago así:
    >>> b=[]
    >>> for i in range(2):
    temp=[i]*4
    b.extend(temp)

    >>> b
    [0, 0, 0, 0, 1, 1, 1, 1]
    >>>


    Lo que sí puedo hacer es sustituir directamente el temp de b.extend por su valor, [i]*4, pero por el momento tiendo a separarlo todo para verlo mejor (aunque en este caso sea una chorrada):
    >>> b=[]
    >>> for i in range(2):
    b.extend([i]*4)
    >>> b
    [0, 0, 0, 0, 1, 1, 1, 1]


    Gracias!

    P.D. JEOGIOMAR, no es tan complicado como parece, al principio suena todo a chino, pero tras tener 4 nociones puedes hacer cosas interesantes
    Última edición por Stewie; 14-08-2007 a las 08:03

  10. #10
    · Avatar de pedropp
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,257

    Re: ¿Alguien le da al scripting en XSI?

    bien, olvida lo que te dije, no había entendido nada!

Temas similares

  1. Manual Scripting GamePlay Unity 3D
    Por Fantasy Games Studios en el foro Unity
    Respuestas: 6
    Último mensaje: 31-08-2015, 09:49
  2. Blender Blender 2 49 Scripting
    Por Freemind en el foro Blender Art Magazine nº28 (in English)
    Respuestas: 0
    Último mensaje: 07-06-2012, 00:24
  3. unreal scripting
    Por corsario_ll en el foro Colaboraciones e Iniciativas
    Respuestas: 0
    Último mensaje: 05-01-2011, 17:28
  4. Scripting Reel 2006
    Por agedito en el foro Demoreel
    Respuestas: 6
    Último mensaje: 21-02-2007, 08:52
  5. Scripting Reel 2006
    Por agedito en el foro Trabajos Finalizados
    Respuestas: 6
    Último mensaje: 21-02-2007, 08:52

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •