Computação Gráfica: Blender Interface, Transformações & Scripts. Prof. Rafael Vieira Janelas: Descrição 1 4 5 2 1. Info 2. 3D View 3. Python Console 4. Outliner 5. Properties 3 As 5 janelas do Blender. http://daliafernandes.com/wp-content/uploads/2014/11/mafalda-duvidas2.png Janelas: Descrição ● Existem 17 tipos de janelas que podem ser exibidas. ● A princípio o Blender vem com 5 janelas ativas. ● É possível ativar ou reduzir o número de janelas. ● Pode-se também repetir janelas. http://daliafernandes.com/wp-content/uploads/2014/11/mafalda-duvidas2.png Alterar o tipo de janela ● Clique no ícone com duas setas apontando em direções opostas, para exibir o menu de troca de janelas. Troca da janela Python Console por 3D View. http://daliafernandes.com/wp-content/uploads/2014/11/mafalda-duvidas2.png Aumentar a quantidade de Janelas ● Clique no triângulo listrado no canto de qualquer janela, mantendo pressionado arraste na direção de onde a nova janela deve aparecer. 4 Janelas de 3D View exibindo visão da câmera, da esquerda, do fundo e livre. http://daliafernandes.com/wp-content/uploads/2014/11/mafalda-duvidas2.png Reduzir a quantidade de Janelas ● Para unir janelas clique no mesmo ícone anterior, segure por 2 segundos, depois arraste na direção da janela que deseja unir. 2 Janelas 3D View sendo unidas, a seta indica em que direção a união ocorrerá. Nem todas as janelas podem ser unidas em qualquer direção, mas sempre há como uni-las. Salvar modificações nas Janelas ● Na Janela Info, no menu File, clique em Save Startup File (Ctrl+U). Para restaurar o padrão, clique em Load Factory Settings. Janela Info: Descrição ● A Janela Info também permite abrir e salvar arquivos, assim como configurar suas preferências pessoais (cor do blender, addons, caminhos, etc). Lista de comandos Menu principal Janela Info do Blender Preferências do Usuário Janela 3D View: Descrição Câmera Fonte de Luz Objeto 3D Menu principal Ambiente default do Blender. Janela 3D View: Usando o mouse ● Botão esquerdo posiciona o cursor 3D (um ponto qualquer do espaço). ● Botão direito seleciona. ● Botão do meio (roda a visualização do modelo). ● Scroll aplica zoom na visualização. Janela 3D View: Ferramentas e Transformações 'T' ou no símbolo de + na lateral esquerda da janela. 'N' ou no símbolo de + na lateral esquerda da janela. Mr. Squeegee Feet (Blender Cloud) e menus de ferramentas e transformações. Janela 3D View: Transformações (Translação) ● Translação clique G ou G + eixo (x, y, z) de translação. Mr. Squeegee Feet (Blender Cloud) e seção de Translação. Os cadeados permitem que um modelo fique proibido de sofrer transformações no eixo. Janela 3D View: Transformações (Rotação) ● Rotação por Euler clique R ou R + eixo (x, y, z) de rotação. Mr. Squeegee Feet (Blender Cloud) e menu de rotações. Lembre-se que o quaternion deve ser normalizado. Q = (vxsenA, vysenA, vzsenA, cosA) Janela 3D View: Transformações (Escala) ● Translação: Clique S ou S + eixo (x, y, z) da escala. Mr. Squeegee Feet (Blender Cloud) e seção de Translação. Os cadeados permitem que um modelo fique proibido de sofrer transformações no eixo. Janela 3D View: Modos de Interação ● Existem 7 modos, em destaque, citamos o modo Objeto e o modo de Edição. Daniel do projeto Aleijadinho 3D: Modos de Objeto e de Edição. http://www.aleijadinho3d.icmc.usp.br/ Janela 3D View: Camadas. ● São espaços 3D que podem ser sobrepostos uns sobre os outros. ● Cada objeto pode pertence a uma camada diferente. ● E o número de camadas sendo exibidas pode variar. ● Usa-se como meio de organização. Daniel do projeto Aleijadinho 3D: Camadas. Janela 3D View: Imã ● O imã permite efetuar movimentos do modelo guiados por um referencial. – – Volume Face – Aresta Vértice – Grade – Daniel do projeto Aleijadinho 3D: Imã. Janela 3D View: Visões (Modo interativo) ● É possível visualizar a malha de diversas maneiras (Lateral, Frontal, Visão da Câmera, Perspectiva, Ortogonal, etc.) Daniel do projeto Aleijadinho 3D: Visão da Câmera. O modo vôo (Flight) permite explorar um cenário como um jogo de exploração e até simular gravidade. Janela 3D View: Andando em uma Cena ● Adicione um plano que servirá como chão. (Add → Mesh → Plane) ● Escalone o plano usando S para aumentar seu tamanho. ● Adicione quaisquer outros modelos que desejar na cena. ● Altere o modo de visualização para caminhar (View → Navigation → Walk) ● Use as teclas a,w,s,d para se mover no espaço, e, uma vez em cima do plano, aperte g para criar gravidade. ● Pode-se explorar o espaço 3D como um jogo de simulação. ● Esse efeito também pode ser usado para explorar modelos de protótipos, ou ambientes 3D. Janela 3D View: Selecionando elementos (vértices, arestas e faces) ● Modo de edição. Tecla B seleciona uma área. Daniel do projeto Aleijadinho 3D: Seleção de uma face. CTRL + “+” permite crescer uma seleção para elementos vizinhos conexos. Janela 3D View: Espaços Locais e Globais ● Espaço local é o espaço em que o objeto foi modelado. Global é a posição aonde objeto está no mundo. Daniel do projeto Aleijadinho 3D: Espaços. Janela Python Console: Descrição ● ● ● ● ● Uma janela prompt para executar comandos do python e APIs do blender de modo interativo. Todo comando do blender pode ser executado via python. (Olhem as dicas dos menus.) Se existe um processo repetitivo que se deseja aplicar a diversas malhas escrever um script é a maneira mais rápida e eficaz. Aplicar algoritmos que não existem no blender sobre modelos. (Pode-se imaginar o Blender como uma biblioteca gráfica avançada na visão do Python.) Biblioteca principal bpy. Janela Python Console: Acessando propriedades dos objetos (alto nível) ● Bpy.data.objects[x].name: nome do objeto ● Bpy.data.objects[x].location: posição ● Bpy.data.objects[x].parent: seu pai, caso exista ● Bpy.data.objects[x].matrix_world: matriz do mundo ● dir(Bpy.data.objects[x]) : todas as propriedades X é a quantidade de objetos na cena, Incluindo luzes e câmera. Janela Python Console: Acessando propriedades das malhas (baixo nível) ● Bpy.data.meshes[x].name: nome da malha ● Bpy.data.meshes[x].transform: aplica uma matriz de transformação ● Bpy.data.meshes[x].update: atualiza estado de uma malha ● Bpy.data.meshes[x].vertices[m].*: vértices da malha ● Bpy.data.meshes[x].polygons[n].*: faces da malha ● Bpy.data.meshes[x].polygons[n].vertices[p]: índices do vértices de uma face da malha ● dir(Bpy.data.meshes[x].*) : todas as propriedades X é a quantidade de malhas na cena, excluindo luzes e câmera (não são malhas). M é a quantidade de vértices. N é a quantidade de faces. P é a quantidade de vértices na face. Janela Python Console: Aplicando Transformações ● Import mathutils ● A = Matrix.Translation((2.0, 3.0, 4.0)) # vetor de translação ● B = Matrix.Scale(2, 4) # (fator de escala, tamanho matriz) ● C = Matrix.Rotation(math.radians(45.0), 4, 'X') # (angulo, tamanho matriz, eixo) ● D = Matrix.Shear(“XY”, 4, (2,0)) # (plano de shear, tamanho matriz, vetor de shear) ● E = Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) # matriz qualquer Na Janela Python Console: 1) Crie matriz A conforme este slide. 2) Execute bpy.data.meshes[0].transform(A) 3) Execute bpy.data.meshes[0].update() Janela Python Console: Usando Scripts ● blender -b arquivo.blend -P script.py import bpy, os,re,sys prefix = sys.argv[-1] ext = ".obj" obj_files = [f for f in os.listdir(os.getcwd()) if f.endswith(ext)] obj_files = sorted(obj_files) for o_file in obj_files: ################### # Extract Data # ################### # import obj bpy.ops.import_scene.obj(filepath=os.getcwd() + "/" + o_file, filter_glob="*.obj;*.mtl", use_ngons=True, use_edges=True, use_smooth_groups=True, use_split_objects=True, use_split_groups=True, use_groups_as_vgroups=False, use_image_search=True, split_mode='ON', global_clamp_size=0.0, axis_forward='-Z', axis_up='Y') ########################## # Convert Tri to Quads # ########################## try: bpy.context.scene.objects.active = bpy.data.objects[2] bpy.ops.object.mode_set(mode = 'EDIT') bpy.ops.mesh.tris_convert_to_quads() bpy.ops.object.mode_set(mode = 'OBJECT') except: print ("Cannot convert to triangles!") ################### # Save Data # ################### bpy.ops.export_scene.obj(filepath=os.getcwd() + "/" + prefix + "_" + o_file, check_existing=True, filter_glob="*.obj;*.mtl", use_selection=False, use_animation=False, use_edges=False, use_normals=False, use_uvs=False, use_materials=False, use_triangles=False, use_nurbs=False, use_vertex_groups=False, use_blen_objects=True, group_by_object=False, group_by_material=False, keep_vertex_order=False, axis_forward='-Z', axis_up='Y', global_scale=1.0, path_mode='AUTO') O uso de um arquivo blend base auxilia na configuração do blender (para não ter que configurar tudo via script, embora possa ser feito). Janela Python Console: Usando Scripts ● Limpe a cena ao acabar ################### # Clear Data # ################### # if scene is not empty if len (bpy.data.objects) > 2: bpy.context.scene.objects.active = bpy.data.objects[2] bpy.ops.object.mode_set(mode = 'OBJECT') candidate_list = [item.name for item in bpy.data.objects if item.type == "MESH"] # select them only. for object_name in candidate_list: bpy.data.objects[object_name].select = True # remove all selected. bpy.ops.object.delete() # remove the meshes, they have no users anymore. for item in bpy.data.meshes: bpy.data.meshes.remove(item) Leia sobre funções API do blender Lembre-se de usar dir e olhar dicas nos menus. Exercícios Baixe uma cópia do Blender e pratique o conteúdo do slide. ● Blender 2.75a – Autores: Blender Foundation. – Website: https://www.blender.org/ – Ano: 2015. Fim [email protected]