Es mostren els missatges amb l'etiqueta de comentaris Python. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris Python. Mostrar tots els missatges

dijous, 16 de febrer del 2012

Notes sobre Blender (2.61) i Python (Part I)

Útil per poder fer exportadors:

bpy.context.object #objecte actualment seleccionat


En general, per exportar un mesh, necessitem la següent informació:


  • Vertexos
    • Posició
    • Normals
    • Coordenades de textura
    • Pesos (d'animació)
  • Cares
    • Apuntadors a 3 vertexos
Per poder construir, hem de donar unes quantes voltes a les dades de Blender, ja que no estan en l'ordre que ens agradaria.

*------------------------------------------------*
|               Objecte                          |
+------------------------------------------------+
| - data:                                        |
|   *------------------------------------------* |
|   |                   Mesh                   | |
|   +------------------------------------------+ |
|   | - faces: Array de:                       | | 
|   |   *------------------------------------* | | 
|   |   |             MeshFace               | | |
|   |   +------------------------------------+ | |
|   |   | - vertices: Array de 3 o 4 ints    | | |
|   |   |   que indiquen els vertexos        | | |
|   |   |   corresponents                    | | |
|   |   |                                    | | |
|   |   | - material_index: index al material| | |
|   |   |   de la cara.                      | | |
|   |   |                                    | | |
|   |   | - normal: normal a la cara         | | |
|   |   *------------------------------------* | |
|   |                                          | |
|   | - vertices: Array de:                    | |
|   |   *------------------------------------* | |
|   |   |          MeshVertex                | | |
|   |   +------------------------------------+ | |
|   |   | - co: Array de 3 floats indicant   | | |
|   |   |   les coordenades                  | | |
|   |   |                                    | | |
|   |   | - groups: Array de:                | | |
|   |   |   *------------------------------* | | |
|   |   |   |     VertexGroupElement       | | | |
|   |   |   +------------------------------+ | | |
|   |   |   | - weight: pes de l'os        | | | |
|   |   |   |                              | | | |
|   |   |   | - group: index del grup      | | | |
|   |   |   *------------------------------* | | |
|   |   |                                    | | |
|   |   *------------------------------------* | |
|   |                                          | |
|   | - uv_textures: Mapa de                   | |
|   |   *------------------------------------* | |
|   |   |       MeshTextureFaceLayer         | | |
|   |   +------------------------------------+ | |
|   |   | - name                             | | |
|   |   |                                    | | |
|   |   | - data: Array on cada element      | | |
|   |   |   correspon a una cara             | | |
|   |   |   *------------------------------* | | |
|   |   |   |      MeshTextureFace         | | | |
|   |   |   +------------------------------+ | | |
|   |   |   | - uv1: coordenades del 1r    | | | |
|   |   |   |   vertex                     | | | |
|   |   |   |                              | | | |
|   |   |   | - uv2: coordenades del 2n    | | | |
|   |   |   |   vertex                     | | | |
|   |   |   |                              | | | |
|   |   |   | - uv3: coordenades del 3r    | | | |
|   |   |   |   vertex                     | | | |
|   |   |   |                              | | | |
|   |   |   | - uv4: coordenades del 4rt   | | | |
|   |   |   |   vertex                     | | | |
|   |   |   *------------------------------* | | |
|   |   |                                    | | |
|   |   *------------------------------------* | |
|   |                                          | |
|   | - materials: array de materials (dades   | |
|   |   apuntades per separat)                 | |
|   *------------------------------------------* |
|                                                |
| - vertex_groups: Array de:                     |
|   *------------------------------------------* |
|   |            VertexGroup                   | |
|   +------------------------------------------+ |
|   | - name: nom del grup (de l'ós que        | |
|   |   influencia)                            | |
|   *------------------------------------------* |
|                                                |
*------------------------------------------------*

Ara que ja tenim informació de les malles, per definir el material necessitem:
  • Paràmetres d'especular
  • Paràmetres de paral·lax
  • Alpha blended
  • Textures
    • Nom
    • Tipus

*------------------------------------------------*
|                  Material                      |
+------------------------------------------------+
| - specular_intensity                           |
|                                                |
| - specular_hardness: (potència especular)      |
|                                                |
| - texture_slots: Mapa de:                      |
|   *------------------------------------------* |
|   |          MaterialTextureSlot             | |
|   +------------------------------------------+ |
|   | - use_map_alpha: si utilitza l'alpha     | |
|   |                                          | |
|   | - use_map_color_diffuse: textura         | |
|   |   d'albedo (color)                       | |
|   |                                          | |
|   | - use_map_normal: mapa de normals        | |
|   |                                          | |
|   | - use_map_displacement: mapa d'alçades   | |
|   |                                          | |
|   | - texture.image: (la textura ha de tenir | |
|   |   el tipus correcte)                     | |
|   |   *------------------------------------* | |
|   |   |               Image                | | |
|   |   +------------------------------------+ | |
|   |   | - name                             | | |
|   |   |                                    | | |
|   |   | - filepath_raw: fitxer on es       | | |
|   |   |   guarda la imatge                 | | |
|   |   |                                    | | |
|   |   | - save(): guarda la imatge         | | |
|   |   *------------------------------------* | |
|   |                                          | |
|   *------------------------------------------* |
|                                                |
*------------------------------------------------*

dimecres, 25 de febrer del 2009

Menys assignatures, més feina.

Així ho diu el títol, així és.

A qui se li va acudir fer una assignatura menys aquest semestre? Bé, això sense contar la de Blender, 9 hores de classe a la setmana, més la feina a casa, poca cosa!! Afortunadament, dura un mes i mig.

Però les assignatures "normals" no s'estan per osties ni res: a Arquitectura de Computadors tenim un examen a la setmana, sense que l'home hagi fet gaire (per no dir zero) de teoria. Se suposa que avui he estudiat això per l'examen de demà, i no sembla complicat, però qui sap!

Què més tenim? Intel·ligència Artificial encara no he començat a fer res seriós, tot i que té la pinta que m'hauré de passar unes hores a la peixera de la ETSE fent-li cops de cap al Matlab per contar dígrafs de textos, cosa divertida divertida. Per no parlar de Teoria del Senyal, més difícil que la temuda Senyals i Sistemas (alias SS), però que no tindrà la mateixa mala llet interna (esperem i desitgem).

Grafics per Computador, per la seva banda, és una assignatura interessant. De fet, ens fan fer un projecte "de la nostra elecció" de l'àmbit aquest de gràfics. Per a nosaltres, un taulell d'escacs. Simple? Hem de dibuixar les peces en 3D i representar-hi partides, això és el mínim. Què més hi afegirem? Partides jugador-jugador, animacions de peces quan es mouen-ataquen-moren, qui sap si una mica de IA amb Alfa-Beta i aquestos algoritmes. De moment m'he encarregat de buscar una llibreria d'animació esqueletal, Cal3D, lliure i aquestes coses jipis...

Per cert, m'he matat a corregir un script de Blender per a exportar models al format del Cal3D de marras. És curiós per que jo mai he après Python (idioma dels scripts de Blender) ni se suposa que sàpiga gens de com funciona internament el Blender. Que hagi pogut corretgir-ho vol dir, entre altres coses, que Python realment és un idioma senzill (chapó de part meva) i que la interfície de Blender és igualment senzilla (altre chapó).

Suposo que ja que he canviat de tema, us acavo dient que estic fent uns tutorials de Blender a aquest mateix bloc. Espero no sorprendre-us, ja que ja n'hi ha 2 de penjats. La idea és d'anar redactant el que vagi aprenent al curs, doncs així jo mateix ho tindré en algun lloc per si mai oblido res...

Us deixo ja, amb el video que vaig fer a la primera sessió. Blender no és un programa senzill, però es poden fer coses pseudointeressants amb només 4 hores i mitja de classe!