apostila de blender 3d program an do com python

Upload: cleytongnunes

Post on 30-May-2018

240 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    1/21

    Apostila de Blender 3D

    Programando com o Python

    Sumrio:Pblico alvo

    1. Introduo2. Sobre o Blender ... Cap 13. Sobre o Python ... Cap 24. Criando uma camera ... Cap 35. Criando um objeto ... Cap 46. Criando uma fonte de luz ... Cap 57. Renderizando uma cena por linha de cdigo (e salvando uma imagem)

    ... Cap 68. Script Macro - Cristal Persona ... Cap 79. Material adicional de Blender ... Cap 8

    10. Dados do autor

    Pblico alvo

    Todos os entusiastas ou profissionais que mexem com o programa Blender e a linguagemde programao Python. necessrio ter requisitos bsicos de interfaces e funcionalidadesdo programa Blender da verso 2.46 e saber programar um pouco em Python.

    O material aqui contido uma verso modificada em .pdf dos tutoriais que esto

    localizados no site http://Blender3Dcarioca.wordpress.com . [Bnus] Exceto ocaptulo 7 que um programa chamado "Script Macro - Cristal Persona" lanadopor mim. Ao contrrio do Script Macro - AnimPro ver 1.0. Este mesh poder seracessado diretamente no ADD\MESH\Cristal Persona.

    Basta coloca-lo no caminho Arquivos de programas\BlenderFoundation\Blender\.Blender\Scripts\CristalPersona.py

    Script (por Rafael Junqueira)O Script Macro - AnimPro ver 1.0 um script que renderiza uma animao e gera umTumbNail de 114x57 na pasta Temp\TMP.

    Introduo

    Este artigo tem por finalidade reunir 4 tutoriais publicados no site Blender3Dcarioca paraum formato PDF com um captulo bnus onde descrevo a criao de uma interface grficapara interao de um cubo personalizado utilizando um recurso chamado "PupBlock" o scriptse chama "Cristal Persona" que significa Cristal personalizado.

    No captulo 1 falo sobre algumas caractersticas do Blender.No captulo 2 falo sobre a linguagem Python, e seu objetivo dentro desta apostila.

    http://blender3dcarioca.wordpress.com/http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://blender3dcarioca.wordpress.com/http://blender3dcarioca.wordpress.com/http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://blender3dcarioca.wordpress.com/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    2/21

    No captulo 3 reproduzo o tutorial de criao de camera disposto no link Programando noPython(Criando uma camera) - 2 (Com alguns acrscimos de informao)No captulo 4 reproduzo o tutorial de criao de objeto disposto no link Programando noPython (Criando uma cena) - 3 (Com alguns acrscimos de informao)No captulo 5 reproduzo o tutorial de criao de fonte de luz disposto no link Programandono Python (Script personalizado - RGB) - 4 (Com alguns acrscimos de informao)

    No captulo 6 falo sobre a criao de um cdigo que renderiza uma cena com apropriedade de salvar uma imagem ao mesmo tempo. (Recurso do qual o Blender fazseparadamente)No captulo 7 um bnus, e trata de criar uma interface (uma janela) de interao depropriedades de um objeto do tipo Cristal.No captulo 8 diferente da bibliografia listo sites que podem servir de material de estudotanto para o Blender e Python para acompanhar esta apostila.

    Sobre o Blender - Captulo 1

    O programa Blender uma sute de funcionalidades que desenham\modelam grficos 3D, eque podem servir de plataforma para criar animaes em diversos formatos de vdeos(favorecendo a compatibilidade com a rede ou com a reproduo em computadores

    domsticos) e uma enginner (motor) para criar video games (Dando suporte funcional - ouseja apenar mexer em paineis de controles ou procedural, programando na linguagempython) para criar elementos de fsica e interao (comptivel com o motor Crystal Space ).

    O programa de graa e Open-Source (cdigo aberto, isso significa que usurios podemdesenvolver aplicaes para serem rodadas no aplicativo Blender. Um exemplo disso so osScripts que podem ser desenvolvidos na linguagem Python com algum editor de texto eroda-lo juntamente do programa ou disponibilizar o cdigo na pasta de Scripts do diretrioBlender.

    A sua atual verso 2.47, mas o programa utilizado para esta apostila a verso 2.46.Quasquer testes dos usurios para com os scripts presentes nesta apostila numa verso

    anterior ou posterior 2.46 ficar a critrio dos mesmos.O site oficial do programa http://www.blender.org .

    Sobre o Python - Captulo 2

    O python pronuncia-se como "Pai-ton". De acordo com uma palestra ministrada naUniversidade Veiga de Almeida, a origem do nome para esta linguagem veio do programahumorstico ingls Python (Monty Python - Em busca do clice sagrado e entre outros). Alinguagem utilizada pela empresa Google e pela Nasa conforme citados no sitehttp://www.python.org/ e ela uma linguagem nativa do Blender.

    Tornando possvel criar funcionalidades ou aperfeioar as antigas dentro do programa. Isso

    significa que o prprio usurio pode batizar uma nova verso dependendo do grau deinovao que o mesmo contribuir para o programa. (Digo batizar no modo particular, parasi)

    O programa possui uma sintaxe (forma de programar) trivial em relao aos demaisprogramas. Muito embora ficar a cargo de cada um julgar esta facilidade. Ele umelemento inovativo do Java para o C. Possui as complexidades [comandos poderosos] e afacilidade de programar. Como programador de Java e C, achei o Python muito melhor para

    http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://www.crystalspace3d.org/main/Main_Pagehttp://www.blender.org/http://www.python.org/http://www.python.org/http://www.blender.org/http://www.crystalspace3d.org/main/Main_Pagehttp://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    3/21

    aprender,mas existem obstculos dentro da linguagem que podem oferecer tarefas tediosasquando surge um erro no script.

    A aplicao da linguagem nesta apostila ser para computao grfica.

    No necessrio baixar o python 5.1 ou a verso mais atual para que os scripts citados nos

    captulos 3 ao 6 funcionem. Porm para o captulo 7 sugiro a instalao pois para este notestei-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 execuo, ou umaplicativo comptivel como o Blender). No caso de um arquivo texto, podemos usar otxt\word ou Text Editor disponvel no prprio Blender. Abra um novo arquivo nos trs casos,e quando salva-lo faa do seguinte modo:

    a)D um nome e acrescente um ponto e extenso "py" (Ex: Script.py)

    Criando uma cmera - Captulo 3

    Todos os cdigos foram feitos no Shell do Blender. Shell uma interface DOS que se perdeaps fecharmos o Blender. Para que o programa aqui no fique perdido, sugiro que copiemo cdigo e colem no Text Editor do Blender e salvem como arquivo .py.

    Como disposto no link Programando no Python(Criando uma camera) - 2 existe um tutorialilustrativo. Com explicaes que o original no possui do cdigo.

    Como criar uma camera (Transform Properties,Ortogrfica ou perspectiva):

    Tpicos de estudos:

    a) Como configurar a posio

    b) O modo de viso - ortogrfico (viso do tipo mapa topogrfico) e o modo perspectiva, aviso que geralmente se usa para modelar de modo detalhado. (Ative o teclado numricocom o Num Lock e pressione a tecla 5 para alterar entre Ortogrfico e pespectiva)

    O Blender permanece a viso no modo Ortogrfico como padro. (Default)

    Entendendo a classe Camera:

    A construtora da classe Camera possui como sintaxe a seguinte forma:Camera.New(Tipo,nome). A explicao da classe construtora. Toda classe conhecida comoconstructor(construtora) monta um objeto conforme suas configuraes.

    Quando digitamos Camera.New(persp,Camera Set 1) estaremos criando uma camera demodo de viso em perspectiva de nome Camera Set 1. Bem o ponto importante detoda a questo. Vamos tratar da classe presente neste link CAMERA CLASSE com umaligeira diferena de tipo, j que no exemplo ele utiliza ortho, utilizaremos Persp, e entreoutras coisa que modifiquei para que este tutorial seja indito e no mais uma repetio.

    Definindo a Camera e a construindo: (Camera A)

    http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://www.blender.org/documentation/242PythonDoc/Camera-module.htmlhttp://www.blender.org/documentation/242PythonDoc/Camera-module.htmlhttp://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    4/21

    import Blenderfrom Blender import Camera,Object,Scene #So outras classes que precisaremos

    d = Camera.New('persp',"Camera Set 1")d.scale = 10.0atual = Scene.getCurrent()

    ob = Object.New('Camera')ob.link(d)atual.link(ob)atual.setCurrentCamera(ob)

    Explicao do cdigo (Camera A) -

    Como toda linguagem de programao necessrio chamar as bibliotecas defunes. No caso do C os Headers (io.h,Math.h e etc.). O blender deve possuir achamada de cdigo "From Blender import classe X" porque seno ele no ir puxaras funes dispostas no cdigo. Sem este reconhecimento, o cdigo no

    executado, porque ele no existe. Ento o primeiro ponto de observao chamaras bibliotecas que contm classes de funes.

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

    #include (que inclui o header\cabelaalho de comandos de entrada esaida)

    Ele importa a classe Camera, a classe Object e a classe Scene. (O que cadaclasse est no decorrer desta explicao)

    O comando depois das duas barras # chama-se comentrio. No tem nenhum valor

    em cdigo. Mas serve para orientar o programador ou uma manunteno porterceiros. O simbolo de comentrio modifica pelas linguagens.

    Aps isso temos um comando que fornece variavel d (variavel todo containerque pode receber valores diversos) uma camera do tipo de perspectiva de nome"Camera Set 1". Mas por que atribuir esta configurao da camera uma varivel?A camera no recebe os valores e propriedades diretamente. Ela tem que possuirum "auxiliar". Este auxiliar ir receber os valores no seu lugar, mas ele sofrer osefeitos 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 osprogramadores de Flash reconhecero esta definio como o container.

    O prximo caso a atribuio da propriedade Scale (dimenso do objeto) ou escalaque adotado somente no modo de viso ortogrfica. Ela no tem nenhumautilidade no cdigo acima. Percebemos que d.Scale = 10.0 Camera.new('persp',"Camera Set 1") = 10.0. Mas como expliquei

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    5/21

    anteriormente, a camera no recebe diretamente este tipo de propriedade ento elaprecisa que uma variavel a receba em seu lugar.

    d.scale = 10.0 // S vale para ortho

    A prxima linha um mtodo que cria a cena 3D. como se dissesse "Vamos criarum plano 3D para colocar elementos 3D" a varivel atual para armazenar a cena3D. Poderia ter sido colocada Cena3D ou qualquer outro nome que fizesse meno funo, o que eu recomendo no cdigo colocar as variveis com a idia do mtodoem questo.

    atual = Scene.getCurrent()

    A varivel ob ou objeto ou qualquer coisa que faa meno um elemento. Vai porfim criar o objeto chamado Camera. At o d, ela no existia no modo doScene.GetCurrent(). O objeto tudo dentro do mundo 3D. Tudo objeto.Camera,fonte de luz,objeto (Meshes) que comumente chamados assim. Mas oobjeto todo elemento pertencente ao mundo virtual. Por exemplo, uma pessoa 3D

    chamado de Objeto 3D. uma nomenclatura. Todo objeto recebe um nmero depropriedades definidas. Neste caso, estamos definindo a camera alocada na variaveld como um objeto. Logo ela passa existir.

    ob = Object.New(Camera)

    Na prxima 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. Parececonfuso? Imagine que o d um carro. E que o ob a definio que d um carro. Eque o ob admite oficialmente e que receber todos os atributos de d comoum carro.

    ob.link(d)

    E por vez a cena, que atribuimos para a varivel atual ir conectar o ob (Camerasendo uma camera agora) dentro da cena 3D. Ela passar a existir como um objeto3D 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 drecebe Camera. Ser a camera da cena.

    A camera ser criada na posio 0,0,0. E podemos ter uma nova camera. possivelcriar n cameras na cena, serve para aquelas tomadas de cenas complexa queexigem diferentes angulos.

    Imagem Ilustrativa da criao da Camera:

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    6/21

    Definindo a posio da camera:

    import Blenderfrom 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()

    Explicao do cdigo (Camera A com posicionamento) -

    O que est vermelho sugiro que leia a explicao da Camera A anteriormente.

    Existem alguns termos novos neste cdigo em relao ao outro. S irei citar que osmtodos Blender.Scene.getCurrent(), Blender.Object.New('Camera') eBlender.Camera.New('persp',"Camera Set 3") uma verso diferente dosmtodos de Atual = Scene.GetCurrent(), ob = Object.New('Camera') e d =Camera.New('persp',"Camera Set 3") isso quer dizer que eles possuem omesmo efeito.

    O que vou explicar neste cdigo est localizado nas duas ultimas linhas.

    http://docs.google.com/File?id=dcqd5fvh_24dh7nvffq_bhttp://docs.google.com/File?id=dcqd5fvh_24dh7nvffq_b
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    7/21

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

    ob.setLocation(0.0,0.0,7.0) configura o objeto Camera na posio X e Y(origem) e numa altura de 7.000 (Z). Se pressionar N no 3D VIEW (com omouse sobre a tela do Blender) ir surgir uma tela chamada "Transform Properties"que possui trs alternadores denominados "LocX,LocY e LocZ" perceba que a cameraselecionada apresenta LocX e LocY = 0.000 e LocZ = 7.000.

    E a ltima linha apresenta um comando que substitue oatual.setCurrentCamera(ob) que o Blender.Redraw() que significaRedesenho.

    Criao de um objeto - Captulo 4

    Como disposto no link Programando no Python (Criando uma cena) - 3 existe um tutorialilustrativo. Com explicaes que o original no possui do cdigo.

    Diferente do cdigo acima, no irei criar uma cena inteira (Com camera,objeto e fonte deluz), somente o objeto.No colocarei uma ilustrao porque a mesma encontra-se com uma imagem no to nitida.

    Inserindo um mesh. (Esfera - UVsphere):

    import Blenderfrom Blender import *

    #Campo de definio de classesEsfera = Mesh.Primitives.UVsphere(32,32,5)

    #Campo de definio de cena 3DCena3D = Scene.getCurrent()

    #Campo de definio de objetos 3DObjeto3D = Object.New('Mesh')Objeto3D.link(Esfera)Objeto3D.setLocation(0.0,5.0,0.0)

    #Configurao de Cena e ObjetoCena3D.link(Objeto3D)

    #Montagem da cenaBlender.Redraw()

    Explicao do cdigo (Esfera):

    Parte deste cdigo est diferente do tutorial original. Como vimos neste cdigo ele est comcomentrios que dizem o que cada linha de cdigo representa. No recomendvel encher

    http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    8/21

    um cdigo de comentrios quando j sabemos o que tal comando faz. Este tipo deprocedimento para efeitos didticos.

    As linhas que explicarei ser somente a Esfera = Mesh.Primitives.UVsphere e Objeto3D= Object.New('Mesh') as demais so iguais camera.

    O comando "Esfera = Mesh.Primitives.UVsphere" recebe o valor de uma malha do grupoprimitivas denominado Esfera. Mas o que isso quer dizer? Mesh um objeto geomtrico quepode ser manipulado por trs elementos bsicos: Edge(aresta), vertex (vertices) efaces (face).

    Primitives signifca um conjunto de objetos geomtricos pr-definidos. Todo programagrfico possui um conjunto de primitivas, e a seleo dos objetos segue um padro comum.Por exemplo no Blender existem as primitivas(Cubo,Plano,Grid,Torus,Esfera,Circulo,Cilindro e Cone) e a primitiva especialMonkey(Suzanne) no caso do 3D Max Studio (vem as primitivas e compostas) esta ltimapara o Blender vem em forma de Script (Decaedro,Hexagono) e no caso do 3D MAXtemos TeaPot (que a primitiva composta mais conhecida e comum no mundo 3D).

    E UVsphere uma forma de malha do conjunto primitiva. um desenho geomtrico querelaciona os numero de aneis por segmentos com um raio X. (Em outras palavras:Rings\Segments\Ratio) disposto no campo de parmetros do comandoMesh.Primitives.UVsphere(rings,segments,ratio).

    Esfera = Mesh.Primitives.UVsphere(32,32,5)

    O objeto 3D denominado Objeto3D recebe a classificao de "Mesh" isso significa que elereceber todas propriedades que uma Mesh possui. o equivalente do ob.link(d) do cdigode como criar uma camera. Ou para fins explicativos deste item neste captulo transformar o objeto geomtrio Esfera em objeto existencial do mundo 3D.

    Objeto3D = Object.New('Mesh')

    Criando uma fonte de luz - Captulo 5

    Como disposto no link Programando no Python (Script personalizado - RGB) - 4 existe umtutorial ilustrativo. Com explicaes que o original no possui do cdigo.

    Criar uma fonte de luz o mesmo procedimento de criao da camera e do objeto. Se vocestiver vindo pela primeira vez, e no leu os captulos 3 e 4, respectivamente criando umacamera e criando um objeto, sugiro l-los.

    Uma fonte de luz um objeto. Um objeto que deve existir no mundo 3D (elemento

    existencial) para isso devemos definir uma fonte de luz.O tutorial que segue este captulocriava trs fontes de luzes e trs objetos esferas alinhados com cada luz. Como o objetivoaqui criar uma fonte de luz, vou criar uma do tipo spot de luz azul.

    Conceito de propriedades da fonte de luz (Spot\RGB:0,0,1 e Halo=true)

    O que est entre parnteses significa o seguinte. Spot uma propriedade da fonte de luzque gera uma espcie de contorno de cone que abrange uma determinada rea. Spot

    http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    9/21

    podemos ter como exemplo, luzes de palcos de teatros ou geradores de penumbra entre asfolhas de rvores.

    RGB uma tabela de cor que segue um padro de combinao para gerar as 7 coresconhecidas e suas 'n' tonalidades. Dependendo do sistema numrico utilizado, o RGB podeassumir as classificaes de "Gradiente" ou "Plano simples", a ultima definio no existe.

    Mas ela significa que teremos uma tonalidade para cada cor. A primeira se chama gradiente,e existe o termo, que define uma tela com diversas tonalidades de uma mesma cor.

    Plano simples (RGB = 0,0,1) azul puro. (S ele, na mesma tonalidade)Gradiente (RGB = 150,150,255) azul com tonalidades claras, tipico de um cu.

    Mas o que so estas letras do RGB? Red-vermelho\Green-verde e Blue-azul com estas corescombinadas possvel obter as 7 cores. Dependendo da potncia de cada componente doRGB (cada letra uma componente) teremos uma gradiente. O link acima leva para umtutorial onde trs fontes de luzes geram as trs cores do RGB, se cruzar uma fonte com aoutra, ver surgir outras cores.

    Por exemplo se fizer a combinao de RGB sendo 1,1,1 (1.000,1.000 e 1.000) ter cor

    branca ao contrrio cor preta. E assim por diante. Bem este um bsico para curiosidadedo funcionamento do RGB e das cores.

    Vamos ao cdigo de criao de uma fonte de luz nas configuraes j citadas.

    Construo da fonte de luz

    from Blender import *from Blender.Scene import Render

    cena = Scene.getCurrent()

    B = Lamp.New('Spot',"Azul")B.setMode('Square','Halo')B.setEnergy(2.000)B.R = 0.0B.G = 0.0

    objetoB = Object.New('Lamp')objetoB.setLocation(0.0,5.0,10.0)objetoB.link(B)cena.link(objetoB)

    s configurar a camera para uma altura de 10.0 e posio X = 0.0 e Y = 5.0 e pressionara tecla F12 para conferir a cena renderizada.

    Explicao da fonte de Luz:

    O que estiver em vermelho no vou explicar, esta parte est bem mastigada nos captulosanteriores.

    Na primeira linha da cor preta, temos uma varivel B que assume o valor da class Lampcom as seguintes propriedades. Spot o tipo de luz e de nome "Azul". Este nome no definea cor ainda da fonte. somente o nome do objeto.

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    10/21

    B = Lamp.New('Spot',"Azul")

    A prxima linha define o modo de luz do Spot. O spot o unico que contm a propriedadeHalo. Square uma abragncia da luz neste formato.

    B.setMode('Square','Halo')

    Agora definido a potncia da energia de luz. O valor 1.000 considerado mediano. Nocaso da fonte de luz do tipo Area, 1.000 considerado mais forte, por isso os valores 0.250 o apropriado. Voltando para o Spot foi definido 2.000 (que 2 no 2 mil).A potnciaseria exageradamente imensa. O que ofuscaria toda a viso 3D.

    B.setEnergy(2.000)

    Esta parte um entendimento bsico. Quando queremos definir uma fonte de luz, padroque toda fonte de luz tenha RGB = 1,1,1. Isso significa dizer que, para termos um valor dotipo azul, qual seria nossa configurao do RGB? As componentes R e G com o valor zero?Sim. E vice-versa. o que observamos no cdigo.

    B.R = 0.0 => A lampada de cor azul define que a componente vermelha seja zeroB.G = 0.0 => A lampada de cor azul menos a componente vermelha define que acomponente verde seja zero

    O resultado a lampada de cor azul menos a componente vermelha e verde.

    Como nos casos da camera e do objeto. Ns definimos que o o objeto ter que assumir ovalor da classe. Para que a classe fosse um elemento existencial. Logo teriamos que definirque o objeto era uma fonte de luz.

    objetoB = Object.New('Lamp')

    Criando uma renderizao ( e salvando uma imagem) - Captulo 6

    Ao contrrio dos demais, este captulo no possui link para o referido site. Apesar de que notutorial de RGB e no Script Macro - AnimPro ver 1.0, exista um comando que renderize umacena e salve uma imagem (como o caso do TumbNail), preferi refazer o cdigo para quepudesse tomar uma explicao mais detalhada.

    Vamos considerar um objeto do tipo Toride (Torus ou Donut) para fazer parte da cena. Euma fonte de luz, e uma camera. Destes todos, s iremos criar em linha de cdigo orenderizador e salvar uma imagem. Os demais iremos adicionar pelo modo funcional doprograma. (Clicando em painis).

    Adicionando os elementos:Selecione todos os elementos pressionando a letra A, clique em Delete(Del) doteclado sobre as teclas direcionais no numricas. E diga OK.

    Pressione a tecla de espao e selecione ADD\CAMERA Pressione N (Transform Properties) com a camera selecionada Defina para LocZ o valor de 7.000 (e deixe o LocX = 0.000 e LocY = -5.000) Agora defina para RotX o valor de 90.000 e deixe RotY e RotZ em 0.000

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    11/21

    Pressione a tecla O ou Ins (do teclado numrico) para ter a viso da camera

    Pressione a tecla de espao e selecione com o mouse ADD\MESH\TORUS Surgir uma tela com quatro configuraes, clique em Ok sem mudar nada Pressione N (Transform Properties) com o Torus selecionado Defina para LocZ o valor 7.000 (e deixe para o LocX e LocY o valor de 0.000)

    Defina o RotX para 30.000 (e RotY e RotZ deixe com 0.000) Pressione F9 (Editing) e localize na pgina inferior da tela do Blender uma abadenominada "Link and Materials", clique em Set Smoot (Smooth -suavizao)[Opcional]

    Pressione a tecla de espao e selecione ADD\LAMP\SUN Pressione N (Transform Properties) com a fonte de luz selecionada Defina para LocZ o valor de 8.000 (e deixe o LocX = 15.000 e LocY = 0.000) Defina para o RotX para 90.000 e RotZ para 90.000 (deixe o RotY em 0.000)

    Antes de passar para o cdigo de renderizao, vou explicar o que renderizar. oprocesso que calcula os elementos (Objetos de cena, a cena,matrizes,normais) para sergerado um aspecto virtual apresentvel. A cena se resume em linha de cdigo e clculosmatemticos, mas para efeitos representativos a renderizao gera uma cena

    "apresentvel" destes clculos. ( como a geometria, uma matemtica grfica)

    Criando uma renderizao

    from Blender import *from Blender.Scene import Render

    cena3D = Scene.GetCurrent()IMAG = cena3D.getRenderingContext()Render.EnableDispWin()

    IMAG.render()

    Explicao do cdigo (Renderizao)

    Este cdigo no tem ainda um comando para mandar salvar uma imagem. um cdigosimples de renderizao. Se manda-lo executar, a cena que criamos com os elementos decamera,fonte de luz e a torus sero renderizados e mostrados numa tela.

    Mesmo esquema, o que estiver em vermelho no tem explicao.

    A varivel IMAG recebe a renderizao da cena 3D. Que por sua vez pega a cena existenteno comando "Scene.GetCurrent()".

    IMAG = cena3D.getRenderingContext()

    No comando seguir temos um formato de renderizao. Isso significa que ele vai abriruma janela que mostra a renderizao. Podemos renderizar na tela do programa, ou seja ainterface do programa substituida por um workplace de renderizao (Workplace lugar),ou uma janela acoplada interface.

    Render.EnableDispWin()

    E o ltimo comando gera a renderizao.

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    12/21

    IMAG.render()

    Criando uma renderizao + salvando uma imagem:

    Repetiremos o cdigo acima, acrescentando mais alguns comandos para salvar uma

    imagem da cena renderizada. Para explicar este recurso. s entender que a camera domundo virtual como a camera do mundo real. Como ela pode filmar, ela pode tirar fotos.E o tirar fotos como se revelassemos ela. E podemos salvar uma foto no formato(JPEG,BMP,PNG,TIFF), no tamanho (Resoluo 110x110, 1200x1200 e etc.).

    from Blender import *from Blender.Scene import Render

    cena3D = Scene.GetCurrent()

    IMAG = cena3D.getRenderingContext()

    Render.EnableDispWin()

    IMAG.extensions = TrueIMAG.imageType = Render.PNGIMAG.sizeX = 640IMAG.sizeY = 480

    IMAG.render()IMAG.saveRenderedImage("\Imag")

    Explicao do cdigo (Renderizao + Salvando uma Imagem)

    No Imag.Extensions configurado para True, porque ele configura que este comandodefina os formatos de imagens esteja disponveis. Estes formatos so oPNG,TIFF,BMP,JPG.

    IMAG.extensions = TrueNa linha seguinte definido o formato que imagem ser salva. No caso PNG.

    IMAG.extensions = True

    Na outras duas linhas seguintes, a resoluo da imagem(tamanho). Coloquei um tamanhopadronizado de 640 por 480. SizeX entende-se por largura e SizeY por altura. A unidade decontagem pixel.

    IMAG.sizeX = 640

    IMAG.sizeY = 480

    E a ltima linha o comando para salvar uma imagem renderizada. No caso ela vai salvar aimagem na pasta tmp dentro do meu computador. ( possivel modificar esta pasta noBlender). Quando coloca-se ("\Imag") entende-se que ("C:\Meucomputador\tmp\Imag.png") , o nome Imag o nome da imagem que criou-se.Podemos definir qualquer nome.

    IMAG.saveRenderedImage("\Imag")

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    13/21

    Um fato curioso que, as configuraes definidas no cdigo modificam as configuraes dospaineis. Para conferir isso, pressione F10 (Scene) e veja na aba Format a resoluo (SizeX eSizeY) e o formato PNG selecionado. Para informao, o formato padro de imagem JPG.

    Script Macro - Cristal Persona - Captulo 7

    Este um captulo de lanamento de Script Macro para verso 2.46 do Blender. Acreditoque deva funcionar no 2.47 porque as duas verses parecem ter como ponto de diferenasas correes de bugs que foi notificado pelos desenvolvedores do Blender, e asfuncionalidades dos Script pode no ter sido abalada por duas verses que tem poucasmodificaes de funcionalidades. (As duas foram lanadas no mesmo ano com umadiferena pequena de lanamentos).

    Partindo para o contexto do Script, ele se chama "Script Macro - Cristal Persona ver 1.0", ea grande novidade, que so duas que este Script possui aquela interface que o UVspherepossui quando queremos adicionar uma esfera. Uma caixa de dialogo para definirmos ossegmentos e aneis, e o raio. E a outra noticia, que ao invs de ter que executar o Script

    pelo Text Editor, disponibilizei para que fosse executado do ADD\MESH\Cristal Persona.

    O processo de instalao simples, v no local de download no endereohttp://br.groups.yahoo.com/group/Blender-Python_B3DC/files/ e leia um pacote .zip com ottulo "Cristal Persona - Blender3Dcarioca.zip.zip" neste ter um arquivo txt de ajuda(Instalao,compatibilidade). Basta extrair o CristalPersona.py para a pasta Arquivos deprogramas\Blender Foundation\Blender\.Blender\Scripts\CristalPersona.py

    Caso esteja com o Blender aberto quando fizer este procedimento, feche-o e abra-o novamente.

    Cristal Persona - configuraes: - Figura 1

    http://www.blender.org/development/release-logs/blender-247/http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://www.blender.org/development/release-logs/blender-247/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    14/21

    Para os que observarem esta figura tem uma aparncia muito semelhante ao smboloSkedar (do jogo Perfect Dark do console N64). Mas a minha inteno inicial no foi cria-lo,mas sim uma malha que pudesse ser adicionada, e que fosse complexa de certa forma. Ocdigo foi relativamente simples para criar esta estrutura. Por isso que a linguagem deprogramao aplicada ao Blender pode gerar cenrios comelementos complexos at mesmo para quem no tem prtica.

    Mas ressalto que o cdigo pode ser tedioso, porque encontrei dificuldades em partesinfirmas do cdigo que podem no ser encontradas com tanta facilidade. Uma delasconsistia em separar o cdigo de linha, bastava alinha-los que ele causava erro de Script. Opython parece conter estes tipos de erros. (Sintaxe,posicionamento e lgica).

    Durante uma palestra soube que um design 3D no precisa saber desenhar para criar os

    elementos no mundo 3D, mas percebi que para criar um carro preciso ter uma noobsica de desenho. E de certa forma, at hoje no consegui criar um carro decente. Entose tivesse um Script que gerasse uma carroceria, ou os sistemas e eixos (parte de baixo docarro) no facilitaria? Muito.

    Existem muitos scripts que criam primitivas para o Blender, temos o exemplo da Torus(Toride) que foi um passo para primitivas compostas (tudo que objeto geomtricocomplexo, alm de uma esfera e cubo) que possua um certo malabarismos com asfaces,arestas e vrtices.

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    15/21

    Cristal Persona de Lado:

    As fonte de luz Spot no fazem parte da cena Script. Mas meus futuros projetos preveemcriar cenas inteiras com primitivas e cenrios inclusive (Como um set,Prop do jogo TheMovie) para serem manipulados como se fosse um cenrio da vida real. S com adiopersonalizada da parte do usurio com elementos, primitivas do Blender e objetos 3Dexternos.

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    16/21

    Figura Wire do Cristal Persona e como acessa-lo:

    Tutorial como fazer uma primitiva:

    A principio o desenvolvedor deve ter em mente o que vrtices e faces, e seus possveisrelacionamentos. Pode parecer incrivel, mas com uma combinao diferente possivel obterde um cubo um Teapot. Como fazer um plano? Um plano desenhado com 4 vrtices, 2formam uma reta. Portanto para formar uma face(plano) preciso de pelo menos 4. E comofazer isso? Observe o seguinte cdigo:

    vertices .append([-(Largura/2),(Altura/2),0.0])vertices .append([-(Largura/2),-(Altura/2),0.0])vertices .append([(Largura/2),-(Altura/2),0.0])vertices .append([(Largura/2),(Altura/2),0.0])

    O cdigo acima um trecho da construo do Cristal Persona. O que ele quer dizer? umdesenho feito no plano cartesiano. Em primeiro lugar a linha de cdigo vertices.append([-(Largura/2),(Altura/2),0.0]) significa Anexao de vrtices 1 (x,y,z). Vourepresentar as coordenadas das quatro linhas acima num plano 2D e ver que se forma umplano (ADD\MESH\Plane).

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    17/21

    Apartir deste raciocinio possvel montar o Cubo, Torus, Piramide,Escadas,Planetas,Cidadesinteiras. O conceito inicial saber como um elemento 3D se porta no plano cartesiano.Dica: Mantenha sempre uma folha de rascunho com planos cartesianos para lidar com estestipos de clculos. Sabendo disso, hora de construir as faces. At o Vertices, se mandarcriar uma figura assim s vai aparecer os vrtices. Para isso devemos utilizar um comandoparecido com "faces.append([])"

    Antes de partir para este prximo passo, vou escreve um cdigo semi-completo:

    import BPyAddMeshimport Blender

    def PlanoBasico(Largura, Altura):

    vertices = []faces1 = []

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    18/21

    vertices .append([-(Largura/2),(Altura/2),0.0]) -> Equivale ao indice 0vertices .append([-(Largura/2),-(Altura/2),0.0]) -> Equivale ao indice 1vertices .append([(Largura/2),-(Altura/2),0.0]) -> Equivale ao indice 2vertices .append([(Largura/2),(Altura/2),0.0]) -> Equivale ao indice 3

    faces1.append([0,1,2,3])

    Explicao do cdigo (Parte de criao de primitivas)

    A importaao de classes do tipo BPyAddMesh permite que haja mtodos para definir umsistema de coordenadas em primitivas do tipo Mesh. Ela vai proporcionar que a primitivatambm seja includa no grupo AddMesh do Blender como vai ser visto mais adiante.

    Existe uma funo bsica de Python seguir (def nomeFuncao(parametro):) que vaiconsruir a primitiva. Bem agora vem a parte importante do algoritmo\Script. Os vertices e

    faces so vetores. Para maior entendimento, so matrizes de posio unica. Que guardamvalores em trs coordenadas. Para entender faces1.append([0,1,2,3]) preciso saberque [] um sinal de vetor. Quando este mtodo realiza este procedimento ela est fazendoa seguinte operao:

    Foi desenhado o V1,V2,V3 e V4 no desenho 2D. Agora vou pegar cada um destesvrtices desenhados construir com eles uma face.Cada valor dentro do [] nocomando faces1.append([0,1,2,3]) um valor de indice. Sempre comea do zero.

    Sabendo isso fcil de deduzir como se faz um cubo. uma unio de faces conjunto devrtices.

    return vertices ,faces1 O comando anterior o responsvel por gerar a primitiva no3D VIEW, no exatamente quem constroi, mas a quem possibilita a construo.

    vertices ,faces1 = CristalPersona(Largura.val, Altura.val) No final do cdigo existe umcomando que pega a funo inicial (que construir a primitiva) e a ela adiciona osvalores do parametro da caixa de dialogo e retorna como primitiva existencial.

    BPyAddMesh.add_mesh_simple('Cristal Persona', vertices , [], faces1) Este cdigo oresponsvel por adicionar o script no menu ADD\MESH.

    Como construir a caixa de dilogo?

    O comando para construir Draw.PupBlock(Nome,Opes) - O cdigo a seguirdefine um vetor que o elemento do PupBlock:

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    19/21

    block = [] pode ser dado qualquer nome um vetor, um conjunto deelementos quasquer.

    block.append(("Largura: ", Largura, 0.01, 100, "Largura do Cristal")) O vetoranexa um indice X que largura do vertices.append (anteriormente) recebaum valor entre 0.01 e 100.block.append(("Altura: ", Altura, 0.01, 100, "Altura do Cristal")) O vetor anexa

    um indice X que altura do vertices.append (anteriormente) receba um valorentre 0.01 e 100.

    Observa as palavras em negrito e vermelho. Elas so variveis. E precisam receberum valor entre 0.01 para que a caixa de dialogo fornea ao objeto Cristal Personaum valor de largura e altura. E como fazer isso. Para os programadores delinguagens (funcionais - tipo Visual Basic) podem ter uma familiaridade neste caso.No caso da referida linguagem bastava que TextBox1.text = valor

    O caso parecido, mas usa-se Largura = Draw.Create(valor X) [no caso docdigo Blender.Draw.Create(valor X)]

    O cdigo abaixo monta e gera uma caixa de dialogo na 3D VIEW do Blender.Quando Blender.Draw.PupBlock("Adicionar Cristal Persona",block): ele est dizendoque uma caixa de dialogo de nome "Adicionar Cristal persona" contendo as opesdo vetor Block (Altura\Largura) retornar uma primitiva definida no Cristalpersona.

    if not Blender.Draw.PupBlock("Adicionar Cristal Persona",block):return

    vertices ,faces1 = CristalPersona(Largura.val, Altura.val)

    O cdigo abaixo faz jus a funcionalidade do import BPYaddMesh, com o nome"Cristal Persona" ele vai surgir no menu ADD\MESH.

    BPyAddMesh.add_mesh_simple('Cristal Persona', vertices , [], faces1)

    Material adicional de Blender - Captulo 8

    Este captulo uma substituio da seo bibliografia, que listava alguns documentosreferentes ao assunto. Parte do material aqui destacado no foi usado para fazer estaapostila. Exceto o site prprio, e um site que pesquisei sobre PupBlocks, conforme suasseguintes identificaes e assuntos.

    Ela serve para orientar os usurios novos no Blender.

  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    20/21

    1. Blender 3D Carioca - Diretrio de tutoriais componentes desta Apostila(Modificados) por Rafael Junqueira

    http://blender3dcarioca.wordpress.com/2008/03/30/programando-no-blender-python-1/ - Scritps com NMESH (anterior ao 2.46)

    http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/ - Script para criar uma camera

    http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/ - Script para criar uma cena

    http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/ - Script para criar uma fonte de luz (Composta porobjetos)

    http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/ - Download doScript AnimPro e CristalPersona

    http://opendimension.org/blender_en/index.php - Site de estudo sobre criao deprimitivas (Ingls)

    http://wiki.blender.org/index.php/Scripts - Download de Scripts no site Wiki.Blender(Ingls)

    2. Diretrio de Blender - (Site oficial ou no\nacional ou no)

    http://www.blender.org/documentation/246PythonDoc/index.html - Referncia docdigo para verso 2.46 (Ingls)

    http://BlenderTotal.wordpress.com - Blog com tutoriais,noticias sobre Blender(Portugus)

    http://cogitas3d.procedural.com.br/ - Site de Design de Ccero Morais (Aka utilizadoCogitas) (Portugus)

    http://calebfs.wordpress.com/ - Site de Caleb (Tutoriais de blender) (Portugus)

    http://www.blender.com.br - Site de Blender (Foruns,contests,estudos,eventos)(Portugus)

    3. Diretrio sobre a linguagem Python

    http://blender3dcarioca.wordpress.com/2008/03/30/programando-no-blender-python-1/http://blender3dcarioca.wordpress.com/2008/03/30/programando-no-blender-python-1/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://opendimension.org/blender_en/index.phphttp://wiki.blender.org/index.php/Scriptshttp://www.blender.org/documentation/246PythonDoc/index.htmlhttp://blendertotal.wordpress.com/http://cogitas3d.procedural.com.br/http://calebfs.wordpress.com/http://www.blender.com.br/http://www.blender.com.br/http://calebfs.wordpress.com/http://cogitas3d.procedural.com.br/http://blendertotal.wordpress.com/http://www.blender.org/documentation/246PythonDoc/index.htmlhttp://wiki.blender.org/index.php/Scriptshttp://opendimension.org/blender_en/index.phphttp://br.groups.yahoo.com/group/Blender-Python_B3DC/files/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/07/programando-no-python-script-personalizado-rgb-4/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/06/programando-no-python-criando-uma-cena-3/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/08/05/programando-no-pythoncriando-uma-camera-2/http://blender3dcarioca.wordpress.com/2008/03/30/programando-no-blender-python-1/http://blender3dcarioca.wordpress.com/2008/03/30/programando-no-blender-python-1/
  • 8/14/2019 Apostila de Blender 3D Program an Do Com Python

    21/21

    http://docs.python.org/index.html - Referncia da linguagem Python (Ingls)

    http://www.pythonbrasil.com.br/moin.cgi/ - Referncia da linguagem Python(Portugus)

    Dados do autor

    Copyright 2008Rafael Junqueira.

    Este artigo no pode ser reproduzido sobre nenhuma circustncia excetopara uso privado. Nenhum site deve reproduzir este material sem permissodireta do autor. Qualquer parte deste documento reproduzida ser consideradaviolao dos direitos autorais.

    Sites do autor:http://Blender3Dcarioca.wordpress.comhttp://SahelBlender3D.googlepages.com

    http://docs.python.org/index.htmlhttp://www.pythonbrasil.com.br/moin.cgi/http://www.pythonbrasil.com.br/moin.cgi/http://docs.python.org/index.html