Arquitectura - Art - Desing - Skycrapers - Ciudades - Urbanismo - Energia - Ingenieria
Arquitectura
 

Foro ARciber Arquitectura

Inicio

Foro
 
Escribiendo un plugin de Secuencia
Este foro está bloqueado: no se puede publicar, responder, ni editar mensajes en este tema.   El tema está bloqueado: no pueden editarse ni agregar mensajes. Índice de Foro Arciber -> Foro / 3D Studio Max
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Dreamer
Administrador


Registrado: 18 Dic 2006
Mensajes: 1614

MensajePublicado: Jue Ene 04, 2007 5:04 am    Título del mensaje: Escribiendo un plugin de Secuencia Responder citando

Escribiendo un plugin de Secuencia
Chapter 22. Tecnicas especiales de modelado

Claudio "malefico" Andaur
22.1. Introducción

Relevant to Blender v2.31

Una vez que hemos superado la "fiebre de modelado por extrusión" y que hemos empezado a buscar desaf?os de modelado más interesantes, quizás empecemos la búsqueda de métodos alternativos para realizar la tarea. Existe un grupo de técnicas especiales de modelado en Blender que no solo facilitan nuestro trabajo sino que a veces de no ser por ellas no sería posible realizarlo.

Estas así llamadas técnicas "especiales" de modelado involucran no solo la manipulación de vértices sino el uso de procedimeintos no intuitivos que requiren de una experiencia o conocimiento más profundo que del novato promedio.

En este cap?tulo describiremos estas técnicas en detalle y explciaremos su utilidad en varios casos de modelado que no podrían haberse resuelto de otra manera.

Cita:
Relativo a Blender v2.31

En esta sección escribiremos un plugin de secuencia b?sico y luego seguiremos los pasos para usar un plugin de secuencia. Las bases de un plugin de secuencia son: se reciben unas entradas (1-3 buffers de imagen de entrada, así como alguna otra información), y se produce como resultado un buffer de imagen de salida.

Todos los archivos necesarios para el desarrollo de plugins así como unos pocos plugins de ejemplo pueden encontrarse en el directorio blender/plugins. Puede conseguir adicionalmente un puíado de plugins en http://www.cs.umn.edu/~mein/blender/plug...
27.6.1. Especificación:

Relativo a Blender v2.31

*

#include <plugin.h>

Todos los plugins de Blender deben incluir este fichero cabecera, que contiene todas las estructuras y definiciones necesarias para trabajar correctamente con Blender.
*

char name[]="Blur";

Un string (cadena de caracteres) conteniendo el nombre del plugin, este valor se usar? para indicar el Título de la textura en la ventana de botones de textura.
*

VarStruct varstr[]= {...};

"varstr" contiene toda la información que Blender necesita para mostrar los botones del plugin. Los botones para los plugin pueden ser de tipo numerico para introducir datos, o de tipo texto para introducir comentarios u otra información. Se pueden utilizar como máximo 32 variables en los plugins.

Cada estructura VarStruct consta de un tipo, un nombre, un rango de información y una nota emergente sobre la herramienta.

El tipo define el tipo de dato para cada botón, y la manera en la que se muestra dicho botón. Para botones numericos este valor debería ser una combinación (ORed) de INT o FLO para el formato del numero y NUM, NUMSLI o TOG para el tipo de botón. Los botones de texto son de tipo LABEL.

El nombre es lo que se mostrará en el botón y está limitado a 15 caracteres.

El rango de información consiste en 3 numeros reales que definen los valores maximo, minimo y "por defecto" para el botón. Para los botones TOG el minimo es configurado cuando el boton se haya presionado y el maximo cuando está sin presionar.

La nota emergente (tool tip) es una cadena de caracteres que se mostrará cuando el puntero está encima del botón (si el usuario tiene los tool tips activos). Tiene un límitede 80 caracteres y se tiene que poner a NULL (") si no se utiliza.
*

typedef struct Cast {...};

La estructura Cast se usa en la llamada a la función doit, y simplifica el acceso de cada plugin a los valores de los datos.

La estructura Cast debería contener, en este orden, un entero o numero real por cada botón definido en varstr, incluidos los botones de texto. Tipicamente deberian tener el mismo nombre que el botón para permitir una busqueda o una referencia sencilla.
*

float cfra

El valor cfra actualizado por Blender a su valor actual antes de que todos los renders se hagan. Este valor es el numero de frame +/- .5 dependiendo de las configuraciones del campo.
*

Prototipo de plugin_seq_doit

La funcion plugin_seq_doit deberia ser prototipada para que pueda ser usada por la funcion getinfo. No necesita cambiar esta linea.
*

plugin_seq_getversion

Esta funcion deberia estar en cada plugin para que pueda ser cargado correctamente. No debería cambiar esta función.
*

plugin_but_changed

Esta función se usa para pasar información sobre que botones cambia el usuario en la interface. La mayoria de los plugins no necesitan esta función, solo cuando el interface permita al usuario modificar algunas variables que furze al plugin a recalcularse (una tabla hash aleatoria por ejemplo).
*

plugin_init

Si fuese necesario los plugins pueden utilizar esta funcion para inicializar datos internos. NOTA: Esta función de iniciacion se puede llamar varias veces si el mismo plugin de textura se copia. En esta función, no inicialice datos globales especificos a una unica instancia de un plugin.
*

plugin_getinfo

Esta función se usa para comunicar información a Blender. Nunca deberías cambiarla.
*

plugin_seq_doit

La función de secuencia doit es responsable de aplicar el efecto del plugin y de copiar los datos finales en el buffer de salida.

Los argumentos

o

Cast *cast

La estructura Cast, que contiene los datos del plugin; víase la entrada Cast más arriba.
o

float facf0

El valor de la curva IPO del plugin para el offset del primer campo. Si el usuario no ha hecho una curva IPO, su rango va entre 0 y 1 para la duración del plugin.
o

float facf1

El valor de la curva IPO del plugin para el offset del segundo campo. Si el usuario no ha hecho una curva IPO, su rango va entre 0 y 1 para la duración del plugin.
o

int x int y

La anchura y altura de los buffers de imagen, respectivamente.
o

Imbuf *ibuf1

Un apuntador al primer buffer de imagen al que el plugin está vinculado. será siempre un buffer de imagen válido.
o

Imbuf *ibuf2

Un apuntador al segundo buffer de imagen al que el plugin está vinculado. Los plugins que usan este buffer deberían comprobar si es un buffer NULL, pues el usuario puede no haber vinculado el plugin a dos buffers.
o

Imbuf *out

El buffer de imagen de la salida del plugin.
o

Imbuf *use

Un apuntador al tercer buffer de imagen al que el plugin está vinculado. Los plugins que usan este buffer deberían comprobar si es un buffer NULL, pues el usuario puede no haber vinculado el plugin a tres buffers.

Estructura de imagen ImBuf

La estructura ImBuf contiene siempre 32 bits de datos de píxel ABGR.

Las estructuras ImBuf son siempre iguales en tamaño, indicado por los valores de x e y.

Interacción con el usuario

Blender no tiene ninguna manera de saber cuántas entradas espera el plugin, por lo que le es posible a un usuario adjuntar sólo una entrada a un plugin que espera dos. Por esta razón es importante comprobar siempre los buffers que usa el plugin para asegurarnos de que son todos válidos. Los plugins de secuencia deberían incluir También una etiqueta de texto describiendo el número de entradas requeridas en la interfaz de botones.
27.6.2. Plugin de Secuencia Gen?rico:

#include "plugin.h"
char name[24]= ";

/* estructura para los botones,
* butcode name default min max 0
*/

VarStruct varstr[]= {
{ LABEL, "In: X strips", 0.0, 0.0, 0.0, "},
};


/* La estructura cast es para entrada en la función doit principal
Varstr y Cast deben tener las mismas variables en el mismo orden */

typedef struct Cast {
int dummy; /* debido al botón 'etiqueta' */
} Cast;

/* cfra: el fotograma actual */

float cfra;

void plugin_seq_doit(Cast *, float, float, int, int,
ImBuf *, ImBuf *, ImBuf *, ImBuf *);

int plugin_seq_getversion(void) {
return B_PLUGIN_VERSION;
}

void plugin_but_changed(int but) {
}

void plugin_init() {
}

void plugin_getinfo(PluginInfo *info) {
info->name= name;
info->nvars= sizeof(varstr)/sizeof(VarStruct);
info->cfra= &cfra;

info->varstr= varstr;

info->init= plugin_init;
info->seq_doit= (SeqDoit) plugin_seq_doit;
info->callback= plugin_but_changed;
}

void plugin_seq_doit(Cast *cast, float facf0, float facf1, int xo, int yo,
ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *outbuf, ImBuf *use) {
char *in1= (char *)ibuf1->rect;
char *out=(char *)outbuf->rect;

}

27.6.3. Nuestras modificaciones:

El primer paso es diseíar un plan de juego. Quá hará este plugin, Cómo interactuarán con él los usuarios. Para este ejemplo crearemos un filtro simple que tendrá un botón de deslizamiento para una intensidad de 0-255. Si alguno de los componentes R, G o B de un píxel en la imagen fuente es menos de la intensidad seleccionada, devolvera negro y alfa; de lo contrario devolvera lo que haya en la imagen. Ahora copiaremos nuestro plugin gen?rico a simpfilt.c y rellenaremos los vacíos.

Siempre es una buena idea aíadir algunos comentarios. Primero, explicar a los usuarios lo que hace el plugin, d?nde pueden obtener una copia, a quión deberían contactar para fallos/mejoras, y cualquier restricción de licencia sobre el Código. Al usar comentarios, debemos asegurarnos de usar comentarios del estilo /* */. Los plugins están en c, y algunos compiladores de c no aceptan comentarios del estilo //.

/*
Descripción: Este plugin es un ejemplo de plugin de secuencia que filtra píxeles
de baja intensidad. Funciona con un Strip como entrada.
Autor: Kent Mein (mein@cs.umn.edu)
Sitio web: http://www.cs.umn.edu/~mein/blender/plug...
Licencia: Dominio Público
última modificación: Sun Sep 7 23:41:35 CDT 2003
*/


después necesitamos rellenar el Nombre, debería ser el mismo que el archivo .c. Preferiblemente descriptivo, menos de 23 caracteres, sin espacios, y todo minúsculas.

char name[24]= "simpfilt.c";

Cast y varstr necesitan estar sincronizados. Queremos una barra de desplazamiento por lo que haremos lo siguiente:

varStruct varstr[]= {
{ LABEL, "In: 1 strips", 0.0, 0.0, 0.0, "},
{ NUM|INT, "Intensity", 10.0, 0.0, 255.0, "Our threshold value"},
};

typedef struct Cast {
int dummy; /* debido al botón 'etiqueta' */
int intensity;
} Cast;


Ahora necesitamos rellenar plugin_seq_doit. Básicamente queremos pasar por cada píxel y si RGB es menor que la intensidad seleccionada, coloca el píxel de salida a: 0,0,0,255; si no, devuelve el mismo valor que el píxel de entrada para esa posición.

int x,y;

for(y=0;y cast->intensity) &
(in1[1] > cast->intensity) &
(in1[2] > cast->intensity)) {
out[0] = out[1] = out[2] = 0;
out[3] = 255;
} else {
out[0] = in1[0];
out[1] = in1[1];
out[2] = in1[2];
out[3] = in1[3];
}
}
}



Terminamos pues con simpfilt.c.
27.6.4. Compilando:

bmake es una utilidad simple (shell script) para ayudar a la compilación y desarrollo de plugins, y puede encontrarse en el subdirectorio plugins del directorio de instalación de Blender. Se invoca mediante: bmake (nombre_plugin.c) e intentar? enlazar las librerías adecuadas y compilar el archivo C especificado adecuadamente para su sistema. Si usted está intentando desarrollar plugins en una m?quina windows, bmake puede no funcionar en este caso; debería usar lcc. Puede usar lo siguiente para compilar un plugin con lcc, asumiendo que usted tiene sus plugins en c:\blender\plugins: Aquá tiene un ejemplo de Cómo se compilaría el plugin de secuencia sweep.c. Abra una ventana DOS y haga lo siguiente: (Nota: Aseg?rese de que el directorio lcc\bin está en su path)

cd c:\blender\plugins\sequence\sweep
lcc -Ic:\blender\plugins\include sweep.c
lcclnk -DLL sweep.obj c:\blender\plugins\include\seq.def
implib sweep.dll


fuente


Ultima edición por Dreamer el Jue Ene 04, 2007 5:05 am; editado 1 vez
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Dreamer
Administrador


Registrado: 18 Dic 2006
Mensajes: 1614

MensajePublicado: Jue Ene 04, 2007 5:05 am    Título del mensaje: Responder citando

Volumen I de la Documentación de Blender - Guía de Usuario: Last modified December 07 2004 S68

Chapter 13. El Mundo y el Universo

Blender proporciona una gran cantidad de opciones muy interesantes para completar las generaciones de imágenes (renderings) aíadiendo un bello fondo y unos cuantos efectos 'de profundidad' interesantes. Todo esto está disponible mediante el Shading Context (Contexto de sombreado)(F5) y el subcontexto World Buttons (Botones de Mundo) ( ) mostrados en Figure 13-1. Por defecto se presenta un mundo uniforme y muy sencillo, aunque se puede editar este Mundo o aíadir uno nuevo.

Figure 13-1. Botones del mundo

13.1. El Fondo del Mundo

Importante en Blender v2.31

La forma más f?cil para usar los "World Buttons" es dar a las imágenes un fondo bonito hecho con gradientes para imágenes. Los botones en el World Panel (Figure 13-2) permiten definir un color en el horizonte (botones HoR, HoG, HoB ) y en el cenit (botonesZeR, ZeG, ZeB ).

Figure 13-2. Background colors

Estos colores se interpretan de forma distinta, según se usen los Botones en elPreview Panel (Figure 13-2):

*

Blend - El color de fondo se degrada desde el horizonte hacia el cenit. Si sólo está pulsado botón, el gradiente va desde la parte inferior a la superior de la imagen generada independientemente de la orientación de la cámara
*

Real - Si este botón También está pulsado el degradado depende de la orientación de la cámara. El color del horizonte será exactamente ése en el horizonte (en el plano x-y), y el color del cenit se usar? para los puntos que están justo en la vertical de la cámara, tanto arriba como abajo.
*

Paper - Si se pulsa este botón el gradiente se produce en los colores cenit-horizonte-cenit. De esta forma, habr? dos transiciones en la imagen, lo que refleja la rotación de la cámara pero mantiene el color del horizonte hacia el centro y el color del cenit en los extremos.

El menú World Buttons También tiene un Panel de Textura con dos Pestaías. Se usan prácticamente igual que las texturas de Material, excepto por un par de diferencias (Figure 13-3):

*

sólo hay seis canales de textura.
*

Texture mapping - Tiene sólo las opciones Object y View, siendo View (Vista) la orientación por defecto.
*

Affect - La Textura afecta sólo al color, pero de cuatro maneras diferentes: Puede afectar al canal de degradado Blend, haciendo que el color del Horizonte aparezca donde la textura es distinta de cero; el color del horizonte Horizona; y el color del cenit, arriba o abajo (Zen Up, Zen Down)

Figure 13-3. Botones de textura
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Dreamer
Administrador


Registrado: 18 Dic 2006
Mensajes: 1614

MensajePublicado: Jue Ene 04, 2007 5:07 am    Título del mensaje: Responder citando

Renderizando la Radiosidad

Relativo a Blender v2.31

Asumamos que tenemos una escena lista, y que queremos renderizarla con Renderizado de Radiosidad. Lo primero que debe comprenderse al usar Radiosidad es que no es necesaria ninguna Lamp, aunque se requieren algunas mallas con la propiedad de material Emit mayor que cero, pues serán las fuentes luminosas.

Puede construirse la escena de prueba mostrada en Figure 18-1; es bastante sencillo. Simplemente debe crearse un cubo grande para la habitación, darle materiales diferentes a las paredes laterales, aíadir un cubo y un cubo estirado en su interior, y aíadir un plano con un valor Emit diferente de cero junto al techo para simular la luz de área (Figure 18-2).

Se asignan materiales como de costumbre a los modelos de entrada. El valor RGB del Material define el color del Parche. El valor 'Emit' de un Material define si un Parche es cargado con energía al principio de la simulación de Radiosidad. El valor 'Emit' es multiplicado por el área de un Parche para calcular la cantidad inicial de energía no disparada.

Tip Caras emisoras:


?Compruebe el número de 'emisores' en la consola de Blender! Si es cero, no puede suceder nada interesante. Es necesario como mínimo un Parche emisor para obtener luz, y en consecuencia, una solución.

Figure 18-2. Decorado para la prueba de Radiosidad.

Al asignar materiales debemos asegurarnos de que todos tienen el conmutador Radio activado, para habilitar el Panel Shaders de los botones del subcontexto Material (Figure 18-3).

Figure 18-3. Material con la Radiosidad habilitada.

Nótese que la emisión de luz está gobernada por la dirección de las normales de una malla, por lo que el plano emisor de luz debería tener una normal apuntando hacia abajo, y el cubo exterior (la habitación) debería tener las normales apuntando hacia adentro (?inviórtalas!).

Seleccione el subcontexto Radiosidad del Contexto Shading. Los Paneles, mostrados en Figure 18-4, son dos: Radio Rendering (renderizado de radiosidad) el cual gobierna la Radiosidad cuando es usado como herramienta de renderizado (caso presente), y Radio Tool (herramienta de radiosidad), el cual gobierna la Radiosidad como una herramienta de modelado (próxima sección).

Figure 18-4. Botones Radiosidad para renderizado de radiosidad.

Los botones definen:

*

Hemires: - La resolución del hemicubo, es decir, de las imágenes codificadas con color, utilizadas para encontrar los Elementos que son visibles desde un "Parche de disparo", y así recibir energía. Los Hemicubos no son almacenados, sino recalculados cada vez para cada Parche que dispara energía. El valor 'Hemires' determina la calidad de la Radiosidad e influye significativamente en el tiempo de resolución.
*

Max Iterations: - El número máximo de iteraciones de Radiosidad. Si se pone a cero, la Radiosidad seguirá hasta que se cumpla el criterio de convergencia. Se recomienda fuertemente asignarle un número diferente de cero, normalmente mayor que 100.
*

Mult:, Gamma: - El espacio de color de la solución de Radiosidad, es muchísimo más detallado de lo que puede expresarse con simples valores RGB de 24 bits. Cuando los Elementos se convierten en caras, sus valores de energía son convertidos a un color RGB usando los valores Mult y Gamma. Con el valor Mult puede multiplicarse el valor de la energía; con Gamma puede ajustarse el contraste de los valores de la energía.
*

Convergence: - Cuando la cantidad de energía no disparada en un entorno es inferior a este valor, la resolución de Radiosidad se detiene. La energía inicial no disparada en un entorno se multiplica con el área de los Parches. Durante cada iteración, parte de la energía es absorbida, o desaparece cuando el entorno no es un volumen cerrado. En el sistema de coordenadas estándar de Blender, un emisor típico (como en los archivos de ejemplo) tiene un área relativamente pequeía. Por esta razón, el valor de convergencia es dividido por un factor de 1000 antes de la prueba.

Ponga Max Iterations a 100 y seleccione el Contexto Scene y el Subcontexto Render (F10).

Localice el botón conmutador Radio (Figure 18-5) en el Panel Render y p?ngalo a 'on' para habilitar la Radiosidad, y luego ?Render! (F12).

Figure 18-5. Habilitando la Radiosidad en los botones de Render.

El render tardará más que de costumbre; en la consola apreciar? un contador subiendo. El resultado será bastante pobre (Figure 18-6, izquierda) porque el render automático de radiosidad ?no realiza un refinado adaptativo!

Seleccione todas las mallas, una tras otra, y en EditMode subdivídalas al menos tres veces. La habitación, que es mucho mayor que las otras mallas, puede ser subdividida incluso cuatro veces. Aumente Max Iterations un poco, 300 o más. Intente renderizar una vez más (F12). Esta vez el renderizado tardará incluso más, pero los resultados serán mucho mejores, con sombras suaves y derrame de colores. (Figure 18-6, derecha).

Figure 18-6. Render de Radiosidad para mallas rudas (izquierda) y mallas refinadas (derecha).

Note

En el renderizado de Radiosidad, Blender actía como en un renderizado normal; esto significa que las texturas, curvas, superficies e incluso Objetos Dupliframe son correctamente tratados.

7.5. Modelado Simétrico

Relativo a Blender v2.34

Con frecuencia es necesario modelar objetos que posee algúntipo de simetría. Para simetría radial, rotacional o m?ltiple, la mejor aproximación es modelar cuidadosametne una estructura base y luego , como paso final, duplicar la c?lula b?sica utilizando SpinDup o cualquier comando apropiado.

Para los objetos con simetría bilateral, es decir aquellos con un plano de simetría como la mayoría de los seres vivos (inluyendo al hombre) y muchas m?quinas, el método supone el modelado de la mitad del objeto, y luego rebatir especularmente un duplicado de la primera mitad para obtener el objeto entero.

Como normalmente es dificil mantener las proporciones correctas modelando solo una mitad, es posible duplicar la mitad antes de que está totalmente modelada, y actuar solo sobre ésta actualizando automáticamente la otra.

Figure 7-21. Un plano.

En la Vista Frontal, agregue un plano o cualquier otro objeto (Figure 7-21). Considerelo como el punto inicial para la mitad del objeto. Digamos la mitad derecha del objeto, la cual para nosotros en la viata frontal, se encontrar? ala izquierda de la pantalla. El plano de simetría es el plano YZ. Mueva la malla en ModoEdición, de manera que quede totalmente a la izquierda del centro. Elimine algunos vertices, y alíada otros para darle la forma general como se ve en la Figure 7-22.

Figure 7-22. Mitad derecha.

Ahora cambie a ModoObjeto y con la mitad seleccionada, haga un duplicado vinculado con ALT-D. Pulse ESC para salir del Modo Mover, y presione NKEY. En el panel de entrada numérica que aparece, ponga SizeX a -1 (Figure 7-23). esto rebatir? especularmente la copia vinculada con respecto al centro del Objeto, por ello la importancia de mantener el centro sobre u nplano de simetría.

Figure 7-23. Rebatiendo especularmente el duplicado vinculado.

Haber duplicado el Objeto como un duplciado vinculado, siginifica que los dos objetos comparten los mismos datos de malla, los que están implicitamente rebatidos, por el escalado negativo unitario sobre el eje X, que es perpendicular al plano de simetría.

Ahora puede editar cualquier ed las dos mitades. Como comparten los datos de malla, cualquier cambio, sea un extruidado, borrado, corte en bucle de caras, etc, se reflejar? inmediatamente en la otra mitad (Figure 7-24).

Figure 7-24. Editando una mitad.

Editando cuidadosamente una mitad, y posiblemente utilizando un esquema o diagrama como fondo que sirva de guía, se pueden lograr resultados muy interesantes (Figure 7-25, izquierda).

Figure 7-25. Una cabeza. Izquierda: ModoEdición; Centro: ModoObjeto; Derecha: Unida.

Como último paso, cuando está completo el modelado Simétrico, se deben seleccionar las dos mitades y unirlas en un único objeto (CTRL-J). Esto hace desaparecer la junta (muy visible en la Figure 7-25, centro). Una vez unidas en un objeto único, (Figure 7-25, derecha), puede comenzar a modealr las sutiles asimetrías que toda persona tiene.

Note

En Blender 2.33 y versiones anteriores, la implementación OpenGL provocaba que los duplicados vinculados rebatidos, tuviesen nomrales erróneas, de modo que una de la smitades era negra. Esto fue corregido en Blender 2.34, pero versiones viejas pueden aprovechar esta técnica igualmente, haciendo que la malla sea de lado simple cuando se usa el modelado Simétrico.

7.8. Herramienta Diezmador (Decimator)

Relativo a Blender v2.33

La herramienta Diezmador, es una caracteristica a menudo pasada por alto que permite reducir la cantidad de caras/vertices de una malla con un mínimo cambio de forma.

Esto no es aplicable a mallas que han sido creadas modelando cuidadosa y econ?micamente, donde todos los vertices y caras son necesarios para definir correctamente la forma, pero si la malla es el resultado de un modelado complejo, con edición proporcional, reinamientos sucesivos, incluso alguna conversión de malla Subsurf a malla sin Subsurf, podría muy bien termianr con una malla con montones de vertices que no sean realmente necesarios.

Un ejemplo simple es un plano, y un objeto Cuadrácula 4x4 sin deformar. Ambos renders son exactamente iguales, pero el plano tiene una cara y cuatro vertices, mientras que la cuadrácula tiene nueve caras y 16 vertices, es decir montones de vertices y caras innecesarios.

La Herramienta Diezmador (Figure 7-43) permite eliminar estas caras innecesarias. Su deslizador numérico informa la cantidad de caras de la malla seleccionada en Modo Objeto. El diezmador solo manipula triangulos, por lo que cada cara cuadril?tera es dividida implicitamente en dos triangulos para ser "diezmada".

Figure 7-43. Botones del Diezmador.

Consideremos el ejemplo utilizado en la sección Bisel. Como quizás observe, hay una pequeía cara triangular sobre cada vertice del cubo que muy probablemente sea innecesaria (Figure 7-44, arriba a la izquierda). La cabecera dice que el cubo tiene 98 caras y 96 vertices. El botón Diezmador dice que el cubo tiene 188 caras triangulares, es decir 90 cuadrilateros (que serían 180 triangulos) y 8 triangulos.

Figure 7-44. El Diezmador "diezmando".

Cambiando el número en el botón numérico del diezmador, pulsando con el rat?n o bien tipeando en ?l, la malla cambia inmediatamente a "sólo triangulos". A medida que el número disminuye, las caras van desapareciendo una tras otra. Blender hace que las caras coplanares y los vertices sobre aristas alineadas desaparezcan primero. Esto tiende a preservar la forma de la malla. A medida que más y más caras son eliminadas, menos vertices coplanares y colineales son soldados, por lo tanto podría ocurrir un cambio de forma apreciable (Figure 7-44, arriba al centro).

En este caso particular, si solo deseamos que el triangulo central de cada vertice del cubo desaparezca, esperamos que la malla final sera de 2x6=12 caras por cada cara del cubo, 2x3x12=72 caras por cara arista biselada, y 9x8=72 caras por cada vertice biselado, totalizando 156 caras. Es muy raro saber de antemano cuantas caras puede tener la malla final, comúnmente debe verificar cuidadosamente la malla en la Ventana3D para constatar que la forma a?n es aceptable.

Los dos botones inferiores del Diezmador, finalizan o cancelan el diezmado. Una vez terminado, los triangulos ya no se mostrarán más (Figure 7-44, arriba a la derecha) pero la malla no obstante está hecha solamente de triangulos (Figure 7-44, abajo a la izquierda). Puede volverla a cuadriláteros si así lo desea seleccionando todos los vertices y pulsando ALT-J (Figure 7-44, abajo al centro). De esta manera redujimos la cuenta de vertices a 80 y la de caras a 82, sin ninguna páridad apreciable en la forma. podrá parecer una ganancia exigua, pero si este cubo va a ser duplicado con "Dupliverts" en un sistema de partículascon 1000 partículas, seguramente habr? valido la pena.

Figure 7-45. Paisaje diezmado, arriba: original; medio: ligeramente diezmado; abajo: fuertemente diezmado.

La Figure 7-45 muestra un paisaje generado por medio de la cuidadosa aplicación de la técnica de Ruido descrita anteriormente, sobre una cuadrácual bastante extensa. En la parte superior, el resultado de la malla original y debajo dos niveles de diezmado distintos. Para el ojo, la diferencia es efectivamente apenas apreciable, pero la reducción en la cuenta de vertices aquá representa una gran ganancia.

6.8. Garfios de Objeto (Object Hooks)

por Kenneth Styrberg

Relativo a Blender v2.35

Los Garfios (Hooks) proveen acceso a nivel de objeto, a la geomtría subyacente de mallas, curvas, superficies o ret?culas. Un Garfio, es una caracter?stica de objeto, y es como el padre de un objeto, pero para vertices. En un objeto puede crear tantos garfios como quiera, y asignar para cada uno distintos vertices de influencia. También es posible superponer garfios, en cuyo caso se dispone de un factor de ponderación de peso para cada uno, que determina el nivel de influencia de cada garfio sobre los vertices compartidos.

Note

Cuando remodela completamente algún objeto, muy probablemente También deba reasignar los garfios exitentes.

6.8.1. Agregando garfios

Como los garfios están relacionados con vertices o puntos de control, la mayoría de las opciones de edición se encuentran disponibles en el ModoEdición para mallas, curvas, superficies y ret?culas. Seleccione un número cualquiera de vertices y presione CTRL-H para acceder al menú Garfios.

Figure 6-47. menú de garfios

Add, New Empty Crea un nuevo garfio y un nuevo objeto Empty, que será el padre de la selección y será ubicado en el centro de la misma.

Add, To Selected Object Cuando hay seleccionado otro objeto (puede hacerlo en ModoEdición con CTRL-RMB) se crea el nuevo grafio y se lo emparenta a ese objeto.
6.8.2. Usando garfios

Dentro de ModoEdición los garfios se deshabilitan para permitir un modelado Cómodo. Los garfios pueden usarse ?nicamente estando en Modo Objeto. Todas las opciones y transformaciones a nivel objeto son posibles, incluyendo el uso de jerarquías, restricciones, y animaciones de recorrido y de curvas IPO.

También puede hacer que el padre garfio sea un hijo del objeto original si no desea que las transformaciones del objeto deformen los garfios.
6.8.3. Opciones de ModoEdición

Una vez que en un objeto hay garfios disponibles, el menú CTRL-H nos ofrecer? opciones adicionales:

Figure 6-48. menú extendido de garfios

Remove... (Eliminar...) Nos ofrecer? un nuevo menú con una lista de garfios para eliminar.

Reassign... (Reasignar...) Usela si desea reasignar nuevos vertices al garfio.

Select...(Seleccionar...) Para seleccionar los vertices de un garfio determinado.

Clear Offset...(Borrar Desplazamiento...) Neutralizar? las trnasformaciones actuales del padre garfio.
6.8.4. Panel de Garfios

Puede encontrar botones para Garfios en la pestaía Hooks del contexto de objeto (F7). Aquá se le puede dar un nombre nuevo al garfio, el nombre por omisión es el nombre del padre; se le puede asignar un nuevo padre escribiendo el nombre del nuevo padre, o se le puede modificar el factor de ponderación de peso Force.

Figure 6-49. Panel de Garfios

Force (Fuerza) Como varios garfios pueden actuar sobre los mismos vertices, con este control puede ponderar la influencia de cada garfio. Las reglas de ponderación son:

*

Si la suma total de todas las fuerzas es menor que 1.0, el resto, 1.0 - Fuerzas, será el factor que la posición orginal tiene como fuerza.
*

Si la suma total de todas las "fuerzas" es mayor que 1.0, solo se utilizan las transformaciones producidas por garfios, promediando sus pesos.

Falloff Si es distinto de cero, el falloff es la distancia a la que la influencia de un garfio vale cero. Actualmente emplea un ainterpolación suave, parecida a la Herramienta de Edición Proporcional. (Ver Section 7.6)

Delete Borra el garfio del objeto.

Clear offset Neutraliza la trnasformación actual de un garfio.

6.2. Modo Edición

Relativo a Blender v2.31

Cuando se trabaja con objetos geom?tricos en Blender, se lo puede hacer en dos modos: Modo Objeto y Modo Edición. Básicamente, como se vio en la sección anterior, las operaciones en Modo Objeto afectan a la los objetos completos, y la soperaciones en ModoEdición solo afectan a su geometría pero no a sus propiedades globales como la Posición o la Rotación.

En Blender puedes pasar de un modo al otro mediante TAB . El Modo Edición funciona solamente con un objeto a la vez: el objeto activo. Fuera de Modo Edición los objetos se dibujan en color rosado en la Ventana 3D (en modo alambre) cuando son seleccionados de lo contrario aparecen en color negro. El objeto Activo en Modo Edición se dibuja en color negro, pero cada v?rtice es resaltado en color rosado (Figure 6-2). Los vértices seleccionados son dibujados en color amarillo (Figure 6-3) y, si se encuentran presionados los botones apropiados(Draw Faces and Draw Edges) en el Panel Mesh Tools 1 del Contexto Edición (F9) También se resaltarán las caras y las aristas.

Figure 6-2. Dos piramides, una en ModoEdición (izquierda) y una en Modo Objeto (derecha).

Figure 6-3. Cubo con los vértices seleccionados en amarillo.

6.2.1. Estructuras: vértices, Aristas y Caras

En las mallas b?sicas, todo se construye a partir de tres estructuras: vértices, Aristas y Caras. (Aquá no estamos incluyendo a Curvas, NURBS, etc.) Pero no hay razón para desanimarse: esta simplicidad nos provee un c?mulo de posibilidades que serán la base para todos nuestros modelos.
vértices

Un v?rtice es elementalmente un punto o una posición en el espacio 3D. Normalmente es invisible al renderizar y en Modo Objeto. (No confundir el punto central de un objeto con un v?rtice, es similar pero es más grande y además no puedes seleccionarlo.)

Para crear un nuevo v?rtice, cambia a ModoEdición, mant?n presionada CTRL, y pulsa con el LMB. Por supuesto, como la pantalla de la computadora es bidimensional, Blender no puede determinar las tres coordenadas del v?rtice a partir de un click de rat?n, por lo que el nuevo v?rtice se ubica sobre el plano de profundidad del cursor 3D "dentro" de la pantalla. Cualquier v?rtice seleccionado previamente será conectado automáticamente al nuevo por medio de una arista.
Aristas

Una arista siempre conecta dos vértices con una linea recta. Las aristas son los "alambres" que vez cuando un malla se ve en la vista de alambre. Normalmente son invisibles en la imagen renderizada. Se usan para construir caras. Crea una arista seleccionando dos vértices y pulsando FKEY.
Caras

Una Cara es la estructura de más alto nivel en una malla. Las caras se usan para construir la superficie del objeto propiamente dicha. Las caras son lo que ves cuando renderizas una malla. Se la define Cómo el área entre tres o cuatro vértices, con una arista en cada lado. Los trióngulos siempre funcionan bien porque siempre son planos y f?ciles de calcular.

Ten cuidado al crear caras de cuatro lados, porque internamente son separados en dos trióngulos. Las caras de cuatro lados solo funcionan bien si la cara es practicamente plana (todos sus puntos descansan en un plano imaginario) y convexa (en ninguna esquina el ángulo es mayor o igual a 180 grados). Este es el caso con las caras de un cubo por ejemplo. (Esta es la razón por la que no pueden verse ninguna diagonal en modo alambre, porque dividiría cada cara cuadrada en dos trióngulos. Aunque tu puedes crear un cubo con caras triangulares, solo se vería más confuso en Modo Edición.)

Sin embargo, el área entre tres o cuatro vértices, delineada por aristas, no tiene que ser una cara necesariamente. Si esta área no tiene una cara, será simplemente transparente o inexistente en la imagen renderizada. Para crear una cara, selecciona tres o cuatro vértices y pulsa FKEY.
6.2.2. Edición B?sica

La mayoría de las operaciones simples de Modo Objeto (como seleccionar, mover, girar y escalar) funcionan de manera id?ntica sobre vértices a como lo hacen sobre objetos. Por lo tanto puedes aprender muy r?pido Cómo utilizar las operaciones b?sicas de Modo Edición. La ?nica diferencia notable es un nueva opción para escalar ALT-S que escala los vértices seleccionados en la dirección de las normales (achica-engorda). Por ejemplo, la piramide truncada en Figure 6-4, fue creada con los siguientes pasos:

1.

Agrega un cubo en una escena vacía. Entra en Modo Edición.
2.

Asegurate que todos los vértices están deseleccionados (rosa). Usa la selección por área (BKEY) para seleccionar los cuatro vértices de la parte superior.
3.

Verifica que el centro de escalado está seteado como cualquier cosa excepto el cursor 3D (ver Figure 5-1), luego cambia a Modo Escalar (SKEY), reduce el tamaño y confirma con LMB.
4.

Sal de Modo Edición pulsando TAB.

Figure 6-4. Pir?mide truncada

Una caracter?stica adicional para Modo Edición es la herramienta de Simetría. Si tienes seleccionados algunos vértices y pulsas MKEY aparecerá un menú con nueve opciones. Puedes seleccionar una para rebatir el v?rtice seleccionado sim?tricamente respecto de cualquiera de los ejes X, Y o Z de las referencias Globales, local o según la vista.

En ModoEdición También se encuentra disponible el modo SelecciónCircular. Se lo invoca pulsando dos veces la tecla BKEY en lugar de una sola vez como harías para la Selección por áreas. aparecerá alrededor del cursor un c?rculo gris y con un click LMB se seleccionarán todos los vértices dentro de este circulo. Con NUM+ y NUM- o la MW, si la hubiera, se agranda o reduce el circulo.

Todas las operaciones en ModoEdición son ejecutadas sobre los vértices; las caras y aristas se adaptan automáticamente ya que dependen de la posición de los vértices. Para seleccionar una arista debes seleccionar los dos puntos de los extremos o bien ubicar el rat?n sobre la arista y pulsar CTRL-ALT-MMB. Para seleccionar una cara, se debe seleccionar cada esquina.

Las operaciones en Modo Edición son muchas y la mayoría se encuentran resumidas en la ventana de Botones de Contexto Edición, que se accede a través del botón de la cabecera ( ) o por medio de F9 (Figure 6-5). Observa el grupo de botones en el Panel Mesh Tools 1:

Figure 6-5. Botones de Edición

*

NSize: - Determina la longitud, en Unidades de Blender, de las normales a las caras, si son dibujadas.
*

Draw Normals - Activa/desactiva la representación de Normales. Si se encuentra activada, las normales de las caras se dibujarán como segmentos de color ción.
*

Draw Faces - Si está activada, las caras se dibujan con un azul trasl?cido, o rosado trasl?cido si están seleccionadas. Si está en OFF, las caras son invisibles.
*

Draw Edges - Las aristas se dibujan en negro, pero si este botón está activado, las aristas seleccionadas se dibujarán en amarillo. Las aristas que unan un nodo seleccionado y uno no seleccionado, tendrán un gradiente amarillo-negro.
*

All Edges - En Modo Objeto se muestran solamente las aristas indispensables para definir la forma de un objeto. Con este botón puedes forzar a Blender a mostrar todas las aristas.

Note

Por supuesto, todos estos colores son personalizables en el Editor de Temas.

Con WKEY puedes invocar el menú "Specials" (Figure 6-6). Con este menú puedes acceder rápidamente a muchas funciones de uso habitual en el modelado de pol?gonos.

Tip Tip


Puedes acceder a los items en un menú emergente utilizando la tecla numérica correspondiente. Por ejemplo, pulsando WKEY y luego 1KEY subdividir?s las aristas seleccionadas sin tener que tocar para nada el rat?n.

Figure 6-6. menú Specials

*

Subdivide - Cada arista seleccionada se divide en dos, en el punto medio se crean vértices nuevos, y las caras se subdividen También si es necesario.
*

Subdivide Fractal - Igual que la anterior, pero los vértices nuevos son desplazados aleatoriamente dentro de un rango definido por el usuario.
*

Subdivide Smooth - Como la anterior, pero los nuevos vértices son desplazados hacia el baricentro (centro de masa) de los vértices conectados.
*

Merge - Funde los vértices seleccionados en un único v?rtice ubicado en el baricentro o en la posición del cursor.
*

Remove Doubles - Funde todos los vértices seleccionados cuya distancia relativa sea menor que un umbral especificado (0.001 por omisión).
*

Hide - Oculta los vértices seleccionados.
*

Reveal - Muestra los vértices ocultos.
*

Select Swap - Todos los vértices seleccionados se deseleccionan y viceversa.
*

Flip Normals - Cambia la dirección de las normales de las caras seleccionadas.
*

Smooth - Suaviza una malla moviendo los vértices hacia el baricentro de los vértices enlazados.
*

Mirror - Id?ntica a MKEY descrita anteriormente.

Muchas de estas acciones tienen asignado un botón propio en el Panel Mesh Tools de la Ventana de Botones de Edición (Figure 6-5). El umbral para Remove Doubles se puede especificar all? También.
6.2.3. Deshacer para Mallas

A partir de Blender 2.3 disponemos de un verdadero Deshacer. Solo funciona para Mallas y ?nicamente en ModoEdición.

El comando Deshacer para mallas trabaja en segundo plano almacenando en memoria copias de tu malla a medida que es modificada. Pulsando UKEY en ModoEdición volvemos a la malla salvada deshaciendo la última operación de edición (Figure 6-7).

Las operaciones de Deshacer solo se almacenan para una malla a la vez. Puedes salir e ingresar a la misma malla sin perder información de Deshacer, pero una vez que editas otra malla, se perder? la información de Deshacer para la primera.

Figure 6-7. Deshacer y Rehacer

Pulsando SHIFT-U re-hace la última operación deshacer (Figure 6-7). Pulsando ALT-U invoca la menú Deshacer (Figure 6-8). All? se listan todos los pasos de Deshacer por nombre para que puedas encontrar rápidamente el camino hasta un punto conocido aceptable de tu trabajo. El menú ALT-U contiene También la opción All Changes. Esta opción es más poderosa que simplemente pulsar varias veces UKEY y recuperar? la malla a como estaba al comienzo de la sesión de edición, incluso si has agotado todos los pasos de Deshacer.

Figure 6-8. Undo Menu

El comando Deshacer de edición puede consumir mucha memoria. Una malla de 64.000 caras y vértices puede usar más de 3MB de RAM por cada paso. Si ESTáS trabajando en una m?quina con poca memoria RAM puedes ajustar el número máximo de pasos de Deshacer en la Ventana de Preferencias de Usuario, bajo Edit Methods. El rango permitido va de 1 a 64. El valor por omisión es 32.

16.6. Ventana de Acciones

Relativo a Blender v2.31

Una Acción está hecha de uno o más canales de Acción. Cada canal corresponde a uno de los huesos del armature, y además, cada canal tiene una curva IPO de Acción asociada al mismo. La Ventana de Acción provee una forma de visualizar y editar juntas todas las curvas IPO asociadas con la Acción.

Tip

Puedes activar la ventana de Acción con SHIFT-F12 (Figure 16-10).

Figure 16-10. Ventana de Acción

Para cada grupo de keys en una IPO de Acción, en la Ventana de Acción se mostrará un marcador en el frame que corresponda. Esto es parecido al modo "Key" en la Ventana IPO. Para los canales con IPOs de Restricciones, habr? uno o más canales de restricción adicionales debajo de cada canal de Acción. Estos canales se pueden seleccionar independientemente de los canales de sus due?os. (Figure 16-11).

Figure 16-11. Ventana de Acción con una Restricción

Un bloque de keys de Acción se puede seleccionar tanto con RMB sobre él como utilizando la herramienta de selección por áreas (BKEY). Los keys son resaltados en amarillo. Una vez seleccionados, los keys pueden moverse pulsando GKEY y moviendo el rat?n. Manteniendo presionada CTRL el movimiento se hará en intervalos de un cuadro. Haciendo LMB se terminar? el desplazamiento de keys, mientras que con ESC se cancela y se vuelve al estado inicial.

Un bloque de keys de Acción También puede escalarse horizontalmente (lo que acelerar? o ralentizar? la Acción), para ello basta con seleccionar un número de keys y presionar SKEY. Moviendo el rat?n horizontalmente se escalar? el bloque. Con LMB se terminar? la operación.

Una o más keys de Acción pueden borrarse pulsando XKEY cuando el puntero del rat?n se halle sobre el área de KeyFrames en la Ventana de Acción.

Un bloque de Acción puede duplicarse y moverse dentro de la misma Acción, seleccionando los keys que se deseen y pulsando SHIFT-D. Esto entrar?s inmediatamente en modo Mover con lo que se podrán trasladar el nuevo grupo de keys. El movimiento lo finalizamos con LMB. Con ESC se abortar? el desplazamiento pero no eliminar? los duplicados generados.

También puedes borrar una o más Acciones o canales de restricción completos (con todas las keys asociadas) seleccionado los canales en la parte más a la izquierda de la Ventana de Acción (los canales seleccionados se resaltarán en azul). Con el puntero del rat?n sobre esta zona izquierda de la ventana presiona XKEY y confirma el borrado. Observa que no hay deshacer así que realiza esta operación cuidadosamente. Asimismo observa que si borras un canal de Acción que contiene canales de restricción, borrar?s esos canales de restricción También.

Tip Horneando Acciones


Si tienes una animación que involucra restricciones y deseas usarla en el motor de juego (que no evalía restricciones y cuya descripción escapa al alcance de este libro), puedes "hornear" la Acción pulsando el botón BAKE en la barra de herramientas de la Ventana de Acción. Esto crear? una nueva Acción en la que cada cuadro es un KeyFrame. La Acción puede ser reproducida en el motor de juego y debería ejecutarse perfectamente una vez eliminadas todas las restricciones. Para obtener resultados ?ptimos, asegurate que todos los blancos de las restricciones están ubicados dentro de la misma armature.

Puedes ver la IPO de Acción asociada a un hueso en la Ventana IPO en lugar de la Ventana de Acción simplemente de hecho cambiando a una ventana IPO (Figure 16-12). La IPO de Acción es un tipo de IPO especial que solo es aplicable a huesos. En lugar de ángulos de Euler para codificar la rotación, las IPO de Acción utilizan quaterniones, los que dan una mejor interpolación entre Poses.

Figure 16-12. IPO de Acción

Los Quaterniones usan vectores de cuatro componentes. En general es difícil y poco intuitivo describir las relaciones entre estos quaterniones y la orientación resultante pero a menudo esto no es necesario. Es mucho mejor generar los Keyframes de quaterniones manipulando directamente los huesos y editando estas curvas solo para ajustar transiciones de ataque y decaimiento.

Especificación

Relativo a Blender v2.31

*

#include <plugin.h>

Todos los plugins de Blender deben incluir este fichero cabecera, que contiene todas las estructuras y definiciones necesarias para trabajar correctamente con Blender.
*

char name[]="Tiles";

Un string (cadena de caracteres) conteniendo el nombre del plugin, este valor se usar? para indicar el Título de la textura en la ventana de botones de textura
*

#define NR_TYPES 2 char stnames[NR_TYPES][16]= {"Square", "Deformed"};

A los Plugins se les permite tener subtipos separados para variaciones minimas en algoritmos - por ejemplo la textura "clouds (nubes)" que está por defecto en Blender tiene los subtipos "Default" y "Color".

NR_STYPES debería ser definido con el numero de subtipos que el plugin requiera, y además a cada subtipo se le tiene que dar un nombre. Cada plugin debe tener al menos 1 subtipo y el nombre de ese subtipo.
*

VarStruct varstr[]= {...};

"varstr" contiene toda la información que Blender necesita para mostrar los botones del plugin. Los botones para los plugin pueden ser de tipo numerico para introducir datos, o de tipo texto para introducir comentarios u otra información. Se pueden utilizar como máximo 32 variables en los plugins.

Cada estructura VarStruct consta de un tipo, un nombre, un rango de información y una nota emergente sobre la herramienta.

El tipo define el tipo de dato para cada botón, y la manera en la que se muestra dicho botón. Para botones numericos este valor debería ser una combinación (ORed) de INT o FLO para el formato del numero y NUM, NUMSLI o TOG para el tipo de botón. Los botones de texto son de tipo LABEL.

El nombre es lo que se mostrará en el botón y está limitado a 15 caracteres.

El rango de información consiste en 3 numeros reales que definen los valores maximo, minimo y "por defecto" para el botón. Para los botones TOG el minimo es configurado cuando el boton se haya presionado y el maximo cuando está sin presionar.

La nota emergente (tool tip) es una cadena de caracteres que se mostrará cuando el puntero está encima del botón (si el usuario tiene los tool tips activos). Tiene un límitede 80 caracteres y se tiene que poner a NULL (") si no se utiliza.
*

typedef struct Cast {...};

La estructura Cast se usa en la llamada a la función doit, y simplifica el acceso de cada plugin a los valores de los datos.

La estructura Cast debería contener, en este orden, un entero o numero real por cada botón definido en varstr, incluidos los botones de texto. Tipicamente deberian tener el mismo nombre que el botón para permitir una busqueda o una referencia sencilla.
*

float result[8];

El vector result se usa para enviar y recibir información al plugin. Los valores de result estan definidos de esta manera:

Result Indice


Significado


Rango

result[0]


Valor de la intensidad


0.0 to 1.0

result[1]


Valor del color rojo


0.0 to 1.0

result[2]


Valor del color verde


0.0 to 1.0

result[3]


Valor del color azul


0.0 to 1.0

result[4]


Valor del color transparente (alpha)


0.0 to 1.0

result[5]


Valor del desplazamiento normal en X


-1.0 to 1.0

result[6]


Valor del desplazamiento normal en Y


-1.0 to 1.0

result[7]


Valor del desplazamiento normal en Z


-1.0 to 1.0

El plugin siempre devuelve el valor de la intensidad. Devolver el color (RGB) o la normal es opcional, y se debería indicar con el "return" de la funcion doit(), siendo "1" para (RGB) y "2" para (Normal).

Antes de que se llame al plugin, Blender asigna el resultado de renderizar normalmente en result[5], result[6] y result[7].
*

float cfra

El valor cfra actualizado por Blender a su valor actual antes de que todos los renders se hagan. Este valor es el numero de frame +/- .5 dependiendo de las configuraciones del campo.
*

Prototipo de plugin_tex_doit

La funcion plugin_tex_doit deberia ser prototipada para que pueda ser usada por la funcion getinfo. No necesita cambiar esta linea.
*

plugin_tex_getversion

Esta funcion deberia estar en cada plugin para que pueda ser cargado correctamente. No debería cambiar esta función.
*

plugin_but_changed

Esta función se usa para pasar información sobre que botones cambia el usuario en la interface. La mayoria de los plugins no necesitan esta función, solo cuando el interface permita al usuario modificar algunas variables que furze al plugin a recalcularse (una tabla hash aleatoria por ejemplo).
*

plugin_init

Si fuese necesario los plugins pueden utilizar esta funcion para inicializar datos internos. NOTA: Esta función de iniciacion se puede llamar varias veces si el mismo plugin de textura se copia. En esta función, no inicialice datos globales especificos a una unica instancia de un plugin.
*

plugin_getinfo

Esta función se usa para comunicar información a Blender. Nunca deberías cambiarla.
*

plugin_tex_doit

La función doit es la responsable de devolver información a Blender sobre pixeles requeridos.

Los argumentos

o

int stype

Este es el número de subtipos seleccionados, mira las entradas NR_TYPES y char stypes anteriores.
o

Cast *cast

La estructura Cast que contiene los datos del plugin, mira la entrada Cast anterior.
o

float *texvec

Esto es un puntero a 3 floats, los cuales son las coordenadas para las cuales un valor de la textura debe retornarse.
o

float *dxt float *dyt

Si los punteros son no-NULL apuntarán a 2 vectores (2 arrays de 3 floats) que definen el tamaño del valor textura requerida en el espacio pixel Apuntan solo a no-NULL cuando el OSA está activado, y se usan para calcular adecuadamente el antialiasing.

La función doit debería rellenar el array result y devolver 0, 1, 2 o 3 dependiendo de que valores hayan rellenado el array. La función doit debería siempre rellenarse con el valor intensidad. Si la funcion asigna el valor "color" debería devolver 1, si asigna el valor "normal" debería devolver 2 y si asigna todo devería devolver 3.

Interacción Texturas/Materiales

Blender es algo diferente de la mayoría de paquetes 3D en lo que se refiere a la separación lógica entre materiales y textura En Blender las texturas son objetos que devuelven ciertos valores, son generadores de seíales de hecho. Los materiales controlan el mapeado de texturas en los objetos, lo que está afectado, en que cantidad, en que manera, etc. Plugins adecuadamente diseñados deberían incluir unicamente variables que afecten a la seíal devuelta no al mapeado de ella. Es mejor incluir botones para controlar el escalado, el rango, los ejes, etc unicamente cuando hagan a la textura más facil de usar (en caso del botón tamaño en el plugin Tiles) o aceleran el calculo (los subtipos Intensity/Color/Bump en el plugin Clouds2). De otra manera los botones del material hacen a esos botones redundantes, y la interfaz incrementa innecesariamente su complejidad
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Dreamer
Administrador


Registrado: 18 Dic 2006
Mensajes: 1614

MensajePublicado: Jue Ene 04, 2007 5:08 am    Título del mensaje: Responder citando

Toda la informacion de este topic es rescatada de un sitio web que desaparecio y sus restos quedaron en el cache de google , por eso que hay partes cortadas
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Mostrar mensajes anteriores:   
Este foro está bloqueado: no se puede publicar, responder, ni editar mensajes en este tema.   El tema está bloqueado: no pueden editarse ni agregar mensajes.  Índice de Foro Arciber -> Foro / 3D Studio Max Todas las horas están en GMT
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

Creative Commons License Matematica educativa Futbol Wallpaper Pasión Tuerca
Pluginpackage Pasajes de Avión - Turismo Adbux
Clases Particulares Arquitectura Google pack ONB.org Links GOOGLE PACK Calentamiento Global
Directorio y buscador web Directorio Web El Yunke Directorios Gratis Jardin Maternal Rodante Poder del pensamiento Jehova Forever Blog
     


Powered by phpBB © 2001, 2005 phpBB Group

Posicionamiento