Resultados 1 al 10 de 10

Tema: Alguien le da al scripting en XSI

  1. #1
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,115

    Softimage Xsi Alguien le da al scripting en xsi?

    Tengo alguna duda 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
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,206

    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"
    <img src=images/smilies/molesto.gif border=0 alt= title=Sad class=inlineimg />

  3. #3
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,115

    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
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,115

    Alguien le da al scripting en xsi?

    Nuevo experimento: el operador del XSI getpixelarray, funciona correctamente para leer una imagen de 4 píxeles de ancho y 2 de alto, cuando le doy estos datos (pide un array para saber las posiciones de los píxeles 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 píxeles 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, sobre todo a la hora de conseguir el array necesario sin dar tantos rodeos.
    Código:
    XSI = application.
    
    Orot = application. Activescenerot.
    
    Ocube = orot. 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:, resolución)).
    
    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,resolución):
    XSI. Logmessage ((%s%s)%(datos del pixel:, i)) txsi. Logmessage (colorr = +str(oim[0][i])) txsi. Logmessage (colorg = +str(oim[1][i])) txsi. Logmessage (colorb = +str(oim[2][i])) txsi. Logmessage (colora = +str(oim[3][i])) txsi. 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 : -
    Posdata: con esto mi batalla contra el pinpanel sin utilizar el operador push (ni Houdini) esta prácticamente ganada, viva yo.

    Posdata: 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 01:50

  5. #5
    Fecha de ingreso
    Jun 2007
    Mensajes
    1,368

    Alguien le da al scripting en xsi?

    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 inglés.
    "muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza".

  6. #6
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,115

    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.

    Vaya, extend(temp).
    valor de m: [0, 0, 0, 0, 1, 1, 1, 1]
    .

  7. #7
    Fecha de ingreso
    Jun 2007
    Mensajes
    1,368

    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.
    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
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,206

    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 porque no sustituyes.

    M=[].

    For I in range (ancho):
    temp=[i]*alto.

    Vaya, extend(temp)
    .

    Por:
    Vaya = [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 03:49
    "La vida es como el tetris, cuando llegan los palos no sabes como encajarlos"
    <img src=images/smilies/molesto.gif border=0 alt= title=Sad class=inlineimg />

  9. #9
    Fecha de ingreso
    Apr 2004
    Mensajes
    3,115

    Alguien le da al scripting en xsi?

    Ahora soy yo el que está 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 Tb, 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.

    Posdata: Geogiomar, 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 07:03

  10. #10
    Fecha de ingreso
    Jun 2005
    Mensajes
    1,206

    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
    : 31-08-2015, 08:49
  2. Blender Blender 2 49 scripting
    Por Freemind en el foro Programas de Diseño 3D y CAD
    Respuestas: 0
    : 06-06-2012, 23:24
  3. Unreal scripting
    Por corsario_ll en el foro Oferta y demanda profesional
    Respuestas: 0
    : 05-01-2011, 15:28
  4. Scripting reel 2006
    Por agedito en el foro Demoreel
    Respuestas: 6
    : 21-02-2007, 06:52
  5. Scripting reel 2006
    Por agedito en el foro Trabajos Finalizados
    Respuestas: 6
    : 21-02-2007, 06:52