lunes, 2 de mayo de 2022

Instalar paquetes de phyton en blender

Para agregar nuevos paquetes o mpdulos al phyton que tiene blender tenemos dos opciones según la documentación de blender 

1. Reemplazar el python original por uno configurado por el usuario
2. Copiar los paquetes que se necesitan en el subdirectorio de phyton, pero ésta opción modifica el programa original lo que no es recomendable ya que puede afectar en el funcionamiento del programa

Lo que haremos es instalar los paquetes que necesitamos sin tocar blender en absoluto creando un entorno virtual y una ruta de los paquetes

Con Anaconda

Primer paso es revisar la versión de phyton de la carpeta bin en nuestro Blender instalado

Luego abrimos anaconda3 Prompt y escribimos el siguiente código: conda create -n blender python=3.10.4 (la versión más reciente)

Le damos enter para que instale .a versión de python, luego y

Luego escribimos activate blender y veremos como la base cambia por blender

Ahora agregamos una nueva ventana de anaconda Prompt

Luego volvemos a la ventana anterior de anaconda y usamos el pip para instalar pandas. pip install pandas

Con cmd

Lo primero que hacemos es crear una carpeta enb nuestro disco llamada Virtual enviroment y en la zona de la ruta escribimos cmd

Luego vamos a la carpeta bin donde se encuentra el archivo phyton.exe y copiamos la ruta

Luego pegamos esa ruta entre comillas y agregamos \python.exe y el comando -m venv venv para crear la carpeta venv

Vamos al archivo activate y copiamos su ruta

Luego la pegamos entre comillas para ser ejecutada

Luego debemos escribir: python -m pip install --upgrade pip
para así actualizar phyton

Ahora procedemos a instalar los paquetes usando pip

Ahora desde blender, para utilizar los módulos instalados en el entorno digital debemos usar el siguiente código:
import site
site.addsitedir(r'.....dirección del site-packages ')

Solo de esta forma podemos seguidamente importar las librerías ya instaladas


domingo, 17 de abril de 2022

Apy phyton de Blender

Modo Scripting

Editor de texto

Tenemos el editor de texto y solo se puede escribir presionando "Nuevo", entonces podemos escribir código y ejecutarlo. Para aumentar el tamaño simplemente presionamos Ctrl y le damos a la rueda del ratón 


Consola Phyton 

Sirve para incluir comandos de manera directa 


Ventana de información

En esta ventana aparece cualquier cosa que hagamos a nuestros modelos 3d. Si movemos el cubo veremos como aparece un comando que podemos seleccionar. También aparecerá un comando si borramso el bojetos, creamos uno nuevo, escalamos, rotamos, etc.


Si presionamos el tabulador 2 veces podemos abrir las opciones

Consola Blender
Para abrir la consola Blender debemos ir a ventana y seleccionar la consola de sistema

En esta consola se ejecuta todo lo que ejecutemos desde el editor de texto y también se verá reflejado en la escena 3d 

Por ejemplo si agregamos un cubo en la ventana de información nos aparece un comando que podemos traspasar al editor de texto

Import bpy. Antes de todo debemos importar la librería bpy que es la librería de blender en phyton. Las librerías son algo similar a los addon o plug in que lo que hacen es aumentar la capacidad del funcionamiento de los códigos

Ahora podemos ejecutar ese código para poder  agregar un cubo pero podemos achicar el código dejándolo  de la siguiente forma. 

Bucle For

For significa "para", lo que viene seguidamente de un valor que vamos a usar como una variable con nombre arbitrario, en un rango ("in range")

Si creamos un "bucle for" con la variable EJE_X en un rango de 0 a 5 podemos hacer la acción de agregar un cubo varias veces usando el mismo comando para agregar el cubo pero se debe hacer debajo del comando for con un espacio para que "tabule" ya que los bucles van vinculados a las tabulaciones.
En el parentesis debemos reemplazar el primer cero que corresponde al eje x por la variable que pusimos en el "for" que es el EJE_X y le agregamos.
Lo que hace es duplicar el cubo 5 veces de 

Si vemos en la posición de transformación veremos como la posición se duplicó de uno en uno (1m)


Pero que pasa si esa variable la duplicamos por 3? Lo que hará es que cada valor pasará a multiplicarse, pasaría de (0,1,2,3,4) a (0,3,6,9,12)

Luego para agregar las duplicaciones en los otros ejes simplemente agregamos esos bucles for con sus variasbles

Módulos de la aplicación

La api de Blender se compone de 3 módulos principales:
  1. Modulo de la aplicación: Cualquier acción que realicemos en Blender, agregar, eliminar objetos, editar, etc. Solo está sucediendo gracias a este modulo
  2. Modulo independiente
  3. Motor de juego: (que fue eliminado en la 2.80)

Manual de programación en Blender


Si vamos a los módulos de aplicación podemos encontrar context, data, type y operadores que son los más importantes

Context

El bpy.context son todas estas zonas


Si usamos bpy.context.select_objects y ejecutamos nos señalará cuál es el bojeto seleccionado, en este caso el cubo

Si usamos el bpy.context.scene y ejecutamos nos dará la escena actual

Si cremoa una nueva escena y nos posicionamos en ella y ejecutamos bpy.context.scene nos mostrará la escena actual. Eso quiere decir que funcioan tal y como dice su palabra, en el contexto

Data

Si usamos el bpy.data.objects podemos obtener el numero de objetos que total en el actual archivo .blend que en este caso son 4, y si metemos este código dentro de una función llamada list obtendremos el listado de objetos independiente de en que escena se encuentren

Si usamos el bpy.data.scene



Types

Todo lo que usamos en Blender, objetos, materiales, fotogramas, etc. está definido en types. Si usamos el bpy.types con Scene u Objects (siempre con mayuscula) simplemente nos ejecuta la clase y al tipo que corresponde

Si dentro de type usamos el context.selected_objects podemos definir el tipo del objeto seleccionado. Si tenemos 3 bojetos seleccionados y ysamos el corchete podemos definir el número del objeto por el index


Operadores

Cada botón, clic, eventos del mouse, pulsaciones de teclas está llamando a un operador. Si eliminamos o agregamos un objeto, creamos una nueva escena, cambiamos de una escena a otra, etc. Cualquier cosa que realice una operación puede llamarse operador.

En la documentación de la Phyton Api si vamos a Operadores podemos ver una serie de submodulos. Éstos son los operadores

Si entramos a Mesh operators y presionamos Ctrl+F podemos buscar lo que necesitamos como por ejemplo "cube". Aquí podemos ver  la función con todos los argumentos 


Los ops funcionan sobre lo seleccionados. 
El ops.mesh funciona sobre objeto seleccionado en modo edición

Si hago la misma operación bpy.ops.mesh.subdivide() teniendo el objeto en modo objeto generará un error

Solo podemos operar en modo objeto con "object"

Con los modificadores es distinto. Si tenemos varios objetos seleccionados solo podemos aplicarlo al objeto activo, que es el último objeto seleccionado

Operadores personalizados
  1. Lo primero que necesitamos hacer es definir la operación que queremos ejecutar cada vez que se llama a este operador
  2. Luego debemos calificar el conjunto de tareas y acciones como un operador. En este caso usamos el ops 

  3. Debemos registrarnos como un operador en el módulo bpi.ops. Primero colocar las 3 operaciones dentro de la función DEF excecute que se utiliza para ejecutar y necesitamos pasar auto y contexto (self, context). Finalizando la función usamos el return {'FINISHED'}

  4. Luego debemos pasar esta función a una clase con un nombre creado por nosotros. La llamaremos MiOperador
  5. También daremos el nombre al Operador para poder llamarlo y a la etiqueta. 

  6. Finalmente registramos la clase usando utils.register_class()
import bpy
        
# Task 1: create cubo
# Task 3: Apply wareframe modifier
# Task 3: Rotate cube along z axis

class MyOperator(bpy.types.Operator):
    bl_idname = "mesh.micuboperator"
    bl_label = "My Operator"
    
    def execute(self, context):
        bpy.ops.mesh.primitive_cube_add()
        bpy.ops.object.modifier_add(type='WIREFRAME') 
        bpy.context.selected_objects[0].rotation_euler.z +=10
        return {"FINISHED"}

bpy.utils.register_class(MyOperator)

Para llamar al operador primeramente lo ejecutamos desde el scripting y luego en la consola phyton lo llamamos con el nombre que hemos creado

Ejemplos de librerías


Librería random

Para usar la opción random usamos random.random

Ejemplo 
1. Importamos la librería random con "from random import*"
2. Tenemos una variable que se llama obs que le vamos a dar el valor de "todos los objetos seleccionados" 
3. Luego vamos a crear un bucle for en esa variable cambiando la posición en z con valor random 



Matemáticas



1. Para importar matemáticas se usa la librería math

y puedes comenzar a utilizar símbolos matemáticos como pi
...radians, etc.

Instalar paquetes de phyton en blender

Para agregar nuevos paquetes o mpdulos al phyton que tiene blender tenemos dos opciones según la documentación de blender   1. Reemplazar el...