Blender PT

Blender 3D, Modelação, Renderização, Arte tudo em Português

Você não está autenticado.

#1 2013-06-06 11:16:08

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Pequenos scripts

Para ajudar em algumas tarefas mais chatas, vou colocando aqui alguns scripts que podem ser úteis ou que podem dar ideias para modificarem para outras tarefas parecidas.

Começando por mudar o material de vários objectos, basta seleccionarem os objectos que pretendem e correr este scritp com apenas 3 linhas, substituindo 'teste' pelo nome do material que querem atribuir a todos os objectos seleccionados.


import bpy
for ob in bpy.context.selected_objects:
    ob.data.materials.[0] = bpy.data.materials['teste']

basta por isso copiar estas 3 linhas para um ficheiro de texto no text editor e pressionar o botão "run script".
o que o script vai fazer é substituir o primeiro material dos objectos seleccionados pelo material 'teste'.

se quiserem algo parecido, em vez de mudar o material, fazer outra coisa qualquer, tipo adicionar um modificador a todos os objetos seleccionados, é só dizerem que adapta-se facilmente.

Offline

#2 2013-06-06 12:08:29

Josemaria RRA
Membro
Registado: 2013-06-06
Mensagens: 6

Re: Pequenos scripts

Obrigado Renato, pelos teus scripts smile
Mas não é o mesmo que carregar no Ctrl+L (make link) e selecionar "Materials"?

Offline

#3 2013-06-06 13:10:18

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Pequenos scripts

sim, neste caso com o Ctr+L consegue-se fazer a mesma coisa, desde que o material que pretendemos seja o do último objecto seleccionado.

fica então a ideia para outro caso, onde acho que não existe atalho (se calhar alguém vai descobrir entretanto só para me lixar)
imaginemos que temos dezenas de objectos com materiais diferentes e queremos alterar a specular intensity para zero do primeiro material de cada um dos os objectos seleccionados, ficaria então:


import bpy
for ob in bpy.context.selected_objects:
    ob.material_slots[0].material.specular_intensity=0

ou se quisermos fazer o mesmo mas para todos os materiais independentemente de estarem nos objectos seleccionados ou estarem a ser usados:

import bpy
for mat in bpy.data.materials:
    mat.specular_intensity=0

Offline

#4 2013-06-20 05:45:02

jonathan
Membro
Registado: 2013-06-20
Mensagens: 1

Re: Pequenos scripts

amigo estou com uma duvida! estou fazendo um jogo e me deparei com uma duvida q esta em matando! meu pesonagen tem uma açao dele morrrendo ,mas como eu faço para um cubo por exemplo colidir com ele e ele executar essa animaçao?

Offline

#5 2013-06-20 12:42:33

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Pequenos scripts

Viva, não sei se estás a usar só os logic bricks ou se estás a fazer em python.
Com os logic bricks podes fazer assim, usando um sensor de "touch" com o material do cubo e ligar depois à acção que pretendes. Fiz um exemplo em que quando a esfera colide com o cubo ele executa uma animação pré-feita. Se estiveres a fazer tudo em python, também dá para o fazer, mas precisaria de mais tempo para ver como é.

Ficheiro .blend para download com o exemplo.

colisao_bge.jpg

Última edição por renatogsousa (2013-06-20 12:43:59)

Offline

#6 2013-08-27 18:38:30

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Pequenos scripts

Este não é um pequeno script, acabou por ficar grandinho, mas é mais um exemplo de utilização do Python para outros fins que não os de animação/renderização.
Estou novamente a trabalhar em CFD (computational fluid dynamics) e na falta de um visualizador em Linux para as malhas que são criadas com um código desenvolvido internamente, nada como criar no Blender um visualizador, para me facilitar o debug e ver se está tudo correcto:
6403335.png

Mais uma vez, as coordenadas dos pontos são lidas de um ficheiro externo, ficam aqui umas dicas de como criar um objecto com Python, duas simples faces quadradas:

import bpy
#definir coordenadas dos pontos  (lista de coordenadas [x,y,z])
points = [ [0,0,0] , [1,0,0], [1,1,0], [0,1,0], [0,0,1] , [1,0,1], [1,1,1], [0,1,1] ]

# definir os edges (se necessários) a indicando os indices (da lista de pontos) dos pares que constituem um edge
edges = [ [ 0, 1 ] , [ 1, 2], [ 2, 3], [ 3, 0], [ 4, 5 ] , [ 5, 6], [ 6, 7], [ 7, 4] ]

# definir as faces, indicando os indices (da lista de pontos) dos pontos que constituem as faces
faces = [ [0, 1, 2, 3], [ 4, 5, 6, 7] ]


nome = 'nome_do_objecto'
#cria uma entidade mesh nova
mesh = bpy.data.meshes.new(nome)
#associa a mesh a um novo objecto
object = bpy.data.objects.new(nome,mesh)

object.location=(0,0,0)

# liga o objecto à cena
bpy.context.scene.objects.link(object)

# cria os pontos, edges e faces da mesh
mesh.from_pydata(points,edges,faces)

Última edição por renatogsousa (2013-08-27 19:16:56)

Offline

#7 2013-08-28 15:23:47

SlykDrako
Membro
De: Portugal
Registado: 2013-02-24
Mensagens: 426
Website

Re: Pequenos scripts

Há uns tempos atrás andei à procura de como criar um objecto em python (no blender) e vi-me "grego" para encontrar informação sobre isso. A documentação da API ainda estava muito incompleta e ainda não existia o bmesh. Quer-me parecer que o processo era um pouco mais complexo.

Obrigado pelo script smile

Offline

#8 2013-08-28 15:39:08

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Pequenos scripts

sim a API deixa muito a desejar, é por vezes difícil encontrar o que se quer.
não sei se há outros métodos de criar objectos partindo do nada, este foi o que descobri.

Pode dar jeito quer para o que eu utilizei, que foi ler as coordenadas de um ficheiro externo e criar o respectivo modelo ou para quem quiser parametrizar a criação de um determinado objecto, onde pode definir as coordenadas em função de alguns parâmetros geométricos.

Offline

Rodapé do site