Apostila de Blender 3D

Apostila de Blender 3D

(Parte 1 de 3)

Apostila de Blender 3D

Programando com o Python

Sumário:

Público alvo

2.Sobre o BlenderCap 1
3.Sobre o PythonCap 2
4.Criando uma cameraCap 3
5.Criando um objetoCap 4
6.Criando uma fonte de luzCap 5
Cap 6
8.Script Macro -Cristal PersonaCap 7
9.Material adicional de BlenderCap 8

1. Introdução 7.Renderizando uma cena por linha de código (e salvando uma imagem) 10.Dados do autor

Público alvo

Todos os entusiastas ou profissionais que mexem com o programa Blender e a linguagem de programação Python. É necessário ter requisitos básicos de interfaces e funcionalidades do programaBlender da versão 2.46e saber programar um pouco emPython.

O material aqui contido é uma versão modificadaem .pdf dos tutoriais que estão localizados no sitehttp://Blender3Dcarioca.wordpress.com. [Bônus] Exceto o capítulo7 que é umprograma chamado "Script Macro - Cristal Persona" lançado por mim. Ao contrário do Script Macro - AnimPro ver 1.0. Este mesh poderá ser acessado diretamente no ADD\MESH\Cristal Persona.

Basta coloca-lo no caminhoArquivos de programas\Blender Foundation\Blender\.Blender\Scripts\CristalPersona.py

Script (por Rafael Junqueira) OScript Macro - AnimPro ver 1.0é um script que renderiza uma animação e gera um TumbNail de 114x57 na pasta Temp\TMP.

Introdução

Este artigo tem por finalidade reunir 4 tutoriais publicados no siteBlender3Dcariocapara um formato PDF com um capítulo bônus onde descrevo a criação de uma interface gráfica para interação de um cubo personalizado utilizando um recurso chamado "PupBlock" o script se chama "Cristal Persona" que significaCristal personalizado.

Nocapítulo 1falo sobrealgumas características do Blender. Nocapítulo 2falo sobre a linguagem Python, e seu objetivo dentro desta apostila.

Nocapítulo 3reproduzo o tutorial de criação de camera disposto no linkProgramando no Python(Criando uma camera) -2(Com alguns acréscimos de informação) Nocapítulo 4reproduzo o tutorial de criação deobjeto disposto no linkProgramando no Python (Criando uma cena) -3(Com alguns acréscimos de informação) Nocapítulo5reproduzo o tutorial de criação de fonte de luz disposto no linkProgramando no Python (Script personalizado - RGB) -4(Com alguns acréscimos de informação) Nocapítulo6falo sobre a criação de um código que renderiza uma cena com a propriedade de salvar uma imagem ao mesmo tempo. (Recurso do qual o Blender faz separadamente) Nocapítulo 7é um bônus, e trata de criar uma interface (uma janela) de interação de propriedades de um objeto do tipo Cristal. Nocapítulo 8diferente da bibliografia listo sites que podem servir de material de estudo tanto para o Blender e Python para acompanhar esta apostila.

Sobre o Blender - Capítulo 1

O programa Blender é uma suíte de funcionalidades que desenham\modelam gráficos 3D, e que podem servir de plataforma para criar animações em diversos formatos de vídeos (favorecendo a compatibilidade com a rede ou com a reprodução em computadores domésticos) e uma enginner (motor) para criar video games (Dando suporte funcional - ou seja apenar mexer em paineis de controles ou procedural, programando na linguagem python) para criar elementos de física e interação (compátivel com o motorCrystal Space).

O programa é de graça e é Open-Source (código aberto, isso significa que usuários podem desenvolver aplicações para serem rodadas no aplicativo Blender. Um exemplo disso são os Scripts que podem ser desenvolvidos na linguagem Python com algum editor de texto e roda-lo juntamente do programa ou disponibilizar o código na pasta de Scripts do diretório Blender.

A sua atualversão é 2.47, mas o programa utilizado para esta apostila é aversão 2.46. Quasquer testes dos usuários para com os scripts presentes nesta apostila numa versão anterior ou posterior á 2.46 ficará a critério dos mesmos.

O site oficial do programa éhttp://w.blender.org.

Sobre o Python - Capítulo 2

O python pronuncia-se como "Pai-ton". De acordo com uma palestra ministrada na Universidade Veiga de Almeida, a origem do nome para esta linguagem veio do programa humorístico inglês Python (Monty Python - Em busca do cálice sagrado e entre outros). A linguagem é utilizada pela empresa Google e pela Nasa conforme citados no site http://www.python.org/e ela é uma linguagem nativa do Blender.

Tornando possível criar funcionalidades ou aperfeiçoar as antigas dentro do programa. Isso significa que o próprio usuário pode batizar uma nova versão dependendo do grau de inovação que o mesmo contribuir para o programa. (Digo batizar no modo particular, para si)

O programa possui uma sintaxe (forma de programar) trivial em relação aos demais programas. Muito embora ficará a cargo de cada um julgar esta facilidade. Ele é um elemento inovativo do Java para o C. Possui as complexidades [comandos poderosos] e a facilidade de programar. Como programador de Java e C, achei o Python muito melhor para aprender,mas existem obstáculos dentro da linguagem que podem oferecer tarefas tediosas quando surge um erro no script.

A aplicação da linguagem nesta apostila será para computação gráfica.

Não é necessário baixar o python 5.1 ou a versão mais atual para que os scripts citados nos capítulos 3 ao 6 funcionem. Porém para o capítulo 7 sugiro a instalação pois para este não testei-o antes de instalar o pacote de Python.

Para criar um arquivo Python é preciso duas coisas. Uma ter um editor texto qualquer (txt,Word) e um programa que rode como (IDE uma interface de execução, ou um aplicativo compátivel como o Blender). No caso de um arquivo texto, podemos usar o txt\word ou Text Editor disponível no próprio Blender. Abra um novo arquivo nos três casos, e quando salva-lo faça do seguinte modo:

a)Dê um nome e acrescente um ponto e extensão "py" (Ex: Script.py)

Criando uma câmera - Capítulo 3

Todos os códigos foram feitos no Shell do Blender. Shell é uma interface DOS que se perde após fecharmos o Blender. Para que o programa aqui não fique perdido, sugiro que copiem o código e colem no Text Editor do Blender e salvem como arquivo .py.

Como disposto no linkProgramando no Python(Criando uma camera) -2existe um tutorial ilustrativo. Com explicações que o original não possui do código.

Como criar uma camera(Transform Properties,Ortográfica ou perspectiva): Tópicos de estudos: a)Como configurar a posição b)O modo de visão - ortográfico (visão do tipo mapa topográfico) e o modo perspectiva, a visão que geralmente se usa para modelar de modo detalhado. (Ative o teclado numérico com o Num Lock e pressione a tecla 5 para alterar entre Ortográfico e pespectiva)

O Blender permanece a visão no modo Ortográfico como padrão. (Default) Entendendo a classe Camera:

A construtora da classe Camera possui como sintaxe a seguinte forma: Camera.New(Tipo,nome). A explicação da classe construtora. Toda classe conhecida como constructor(construtora) monta um objeto conforme suas configurações.

Quando digitamos Camera.New(’persp’,”Camera Set 1″) estaremos criando uma camera de modo de visão em perspectiva de nome “Camera Set 1″.Bem é o ponto importante de toda a questão. Vamos tratar da classe presente neste linkCAMERA CLASSEcom uma ligeira diferença de tipo, já que no exemplo ele utiliza ortho, utilizaremos Persp, e entre outras coisa que modifiquei para que este tutorial seja inédito e não mais uma repetição.

Definindo a Camera e a construindo: (Camera A) import Blender from Blender import Camera,Object,Scene #São outras classes que precisaremos d = Camera.New('persp',"Camera Set 1") d.scale = 10.0 atual = Scene.getCurrent() ob = Object.New('Camera') ob.link(d) atual.link(ob) atual.setCurrentCamera(ob)

Explicação do código (Camera A) -

Como toda linguagem de programação é necessário chamar asbibliotecas de funções. No caso do C os Headers (io.h,Math.h e etc.).O blender deve possuir a chamada de código "From Blender import classe X" porque senão ele não irá puxar as funções dispostas no código. Sem este reconhecimento, o código não é executado, porque ele não existe. Então o primeiro ponto de observação é chamar as bibliotecas que contém classes de funções.

Cada linguagem a chama de um jeito. No caso do exemplo citado, o C é feito da seguinte forma:

#include <io.h>(que inclui o header\cabelaçalho de comandos de entrada e saida)

Ele importa a classe Camera, a classe Object e a classe Scene. (O que é cada classe está no decorrer desta explicação)

O comando depois das duas barras#chama-se comentário. Não tem nenhum valor em código. Mas serve para orientar o programador ou uma manuntenção por terceiros. O simbolo de comentário modifica pelas linguagens.

Após isso temos um comando que fornece á variavel d (variavel é todo container que pode receber valores diversos) uma camera do tipo deperspectivade nome "Camera Set 1". Mas por que atribuir esta configuração da camera á uma variável? A camera não recebe os valores e propriedades diretamente. Ela tem que possuir um "auxiliar". Este auxiliar irá receber os valores no seu lugar, mas ele sofrerá os efeitos das propriedades.

d = Camera.New(’persp’,”Camera Set 1″)

Exemplo:Imagine um conjunto A que engloba o conjunto B. O conjunto B herda todas as propriedades do conjunto A. No caso o auxiliar é o conjunto A. Para os programadores de Flash reconhecerão esta definição como o container.

O próximo caso é a atribuição da propriedade Scale (dimensão do objeto) ou escala que é adotado somente no modo de visão ortográfica. Ela não tem nenhuma utilidade no código acima. Percebemos qued.Scale = 10.0é Camera.new('persp',"Camera Set 1") = 10.0. Mas como expliquei anteriormente, a camera não recebe diretamente este tipo de propriedade então ela precisa que uma variavel a receba em seu lugar.

d.scale = 10.0 // Só vale para ortho

A próxima linha é um método que cria a cena 3D. É como se dissesse "Vamos criar um plano 3D para colocar elementos 3D" a variável atual é para armazenar a cena 3D. Poderia ter sido colocada Cena3D ou qualquer outro nome que fizesse menção á função, o que eu recomendo no código é colocar as variáveis com a idéia do método em questão.

atual = Scene.getCurrent()

A variável ob ou objeto ou qualquer coisa que faça menção á um elemento. Vai por fim criar o objeto chamado Camera. Até o d, ela não existia no modo do Scene.GetCurrent(). O objeto é tudo dentro do mundo 3D. Tudo é objeto. Camera,fonte de luz,objeto (Meshes) que é comumente chamados assim. Mas o objeto é todo elemento pertencente ao mundo virtual. Por exemplo, uma pessoa 3D é chamado de Objeto 3D. É uma nomenclatura. Todo objeto recebe um número de propriedades definidas. Neste caso, estamos definindo a camera alocada na variavel d como um objeto. Logo ela passa existir.

ob = Object.New(’Camera’)

Na próxima linha o ob que definimos que era um objeto do tipo Camera irá "ligar" ou "Conectar" o objeto Criado camera ao d que recebeu a classe Camera. Parece confuso? Imagine que odé um carro. E que oobé a definição quedé um carro.E que o ob admite oficialmente e que receberá todos os atributos de d como um carro.

ob.link(d)

E por vez a cena, que atribuimos para a variável atual irá conectar o ob (Camera sendo uma camera agora) dentro da cena 3D. Ela passará a existir como um objeto 3D virtual. Antes era um conceito. Quando o ob.link(d) ele o tornou uma camera. Quando o atual o conectou ele tornou um elemento existencial.

atual.link(ob)

Na ultima linha temos um comando que determina que a camera ob.link(d) que d recebe Camera. Será a camera da cena.

A camera será criada na posição 0,0,0. E podemos ter uma nova camera. É possivel criar ‘n’ cameras na cena, serve para aquelas tomadas de cenas complexa que exigem diferentes angulos.

Imagem Ilustrativa da criação da Camera:

Definindo a posição da camera:

import Blender from Blender import Camera,Object,Scene cena = Blender.Scene.getCurrent() ob = Blender.Object.New('Camera') camera = Blender.Camera.New('persp',"Camera Set 3") ob.link(camera) cena.link(ob) ob.setLocation(0.0,0.0,7.0) Blender.Redraw()

Explicação do código (Camera A com posicionamento) - O que está vermelho sugiro que leia a explicação daCamera Aanteriormente.

Existem alguns termos novos neste código em relação ao outro. Só irei citar que os métodos Blender.Scene.getCurrent(), Blender.Object.New('Camera') e Blender.Camera.New('persp',"Camera Set 3")é uma versão diferentedos métodos deAtual = Scene.GetCurrent(), ob = Object.New('Camera') e d = Camera.New('persp',"Camera Set 3")isso quer dizer que eles possuem o mesmo efeito.

O que vou explicar neste código está localizado nas duas ultimas linhas.

ob.setLocation(x,y,z) define a localização da camera no espaço 3D ou 3D VIEW. Cada coordenada X, Y e Z recebem um valor para localizar o objeto dentro do 3D VIEW.

ob.setLocation(0.0,0.0,7.0)configura o objeto Camera na posição X e Y (origem) e numa altura de 7.0 (Z).Se pressionar N no 3D VIEW (com o mouse sobre a tela do Blender) irá surgir uma tela chamada "Transform Properties" que possui três alternadores denominados "LocX,LocY e LocZ" perceba que a camera selecionada apresenta LocX e LocY = 0.0e LocZ = 7.0.

E a última linha apresenta um comando que substitue o atual.setCurrentCamera(ob) que é o Blender.Redraw() que significa Redesenho.

Criação de um objeto - Capítulo 4

Como disposto no linkProgramando no Python (Criando uma cena) -3existe um tutorial ilustrativo. Com explicações que o original não possui do código.

Diferente do código acima, não irei criar uma cena inteira (Com camera,objeto e fonte de luz), somente o objeto. Não colocarei uma ilustração porque a mesma encontra-se com uma imagem não tão nitida.

Inserindo um mesh. (Esfera - UVsphere):

import Blender from Blender import *

#Campo de definição de classes Esfera = Mesh.Primitives.UVsphere(32,32,5)

#Campo de definição de cena 3D Cena3D = Scene.getCurrent()

#Campo de definição de objetos 3D Objeto3D = Object.New('Mesh') Objeto3D.link(Esfera) Objeto3D.setLocation(0.0,5.0,0.0)

#Configuração de Cena e Objeto Cena3D.link(Objeto3D)

#Montagem da cena Blender.Redraw()

Explicação do código (Esfera):

Parte deste código está diferente do tutorial original. Como vimos neste código ele está com comentários que dizem o que cada linha de código representa. Não é recomendável encher um código de comentários quando já sabemos o que tal comando faz. Este tipo de procedimento é para efeitos didáticos.

As linhas que explicarei será somente aEsfera = Mesh.Primitives.UVsphereeObjeto3D = Object.New('Mesh')as demais são iguais á camera.

O comando "Esfera = Mesh.Primitives.UVsphere" recebe o valor de uma malha do grupo primitivas denominado Esfera. Mas o que isso quer dizer? Mesh é um objeto geométrico que pode ser manipulado por três elementos básicos:Edge(aresta),vertex (vertices)e faces (face).

Primitives signifca um conjunto de objetos geométricos pré-definidos. Todo programa gráfico possui um conjunto de primitivas, e a seleção dos objetos segue um padrão comum. Por exemplo no Blender existem as primitivas (Cubo,Plano,Grid,Torus,Esfera,Circulo,Cilindro e Cone) e a primitiva especial Monkey(Suzanne)no caso do 3D Max Studio (vem as primitivas e compostas) esta última para o Blender vem em forma de Script (Decaedro,Hexagono) e no caso do 3D MAX temosTeaPot(que é a primitiva composta mais conhecida e comum no mundo 3D).

E UVsphere é uma forma de malha do conjunto primitiva. É um desenho geométrico que relaciona os numero de aneis por segmentos com um raio X. (Em outras palavras: Rings\Segments\Ratio) disposto no campo de parâmetros do comando Mesh.Primitives.UVsphere(rings,segments,ratio).

(Parte 1 de 3)

Comentários