Cursos e Bibliotecas Ver Mais

Galeria 3D1 Ver Mais

Eddy   Toledo - Paraná - PR
new   Belo Horizonte - MG
marcelo de moraes   Osasco (SP) - AC
arbarcelos   Porto Alegre
Jomar Machado   Rio de Janeiro - RJ

Portfólios Ver Mais

anapinheiro   São José do Rio Preto
Anderson   Guararapes - SP - SP

GRUPO DE ESTUDO: MAXScript

Por: tiagodmed  

Em: 11/05/2009 21:18

Então pessoal, eu estou estudando maxscript por pura necessidade, e não por curiosidade como normalmente acontece. Eu nunca fui muito fã de programação, desde quando trabalhava com sites eu sempre tentei passar longe de programação. Mas hoje em dia eu me deparo com situações no max onde eu vejo que posso passar muito menos trabalho usando um script. Seja para apenas automatizar uma rotina ou para criar um recurso novo. Creio que agora alguns podem pensar, bom mas se for pra automatizar da para usar o recurso MAXScript Listener. E da, da mesmo, funciona muito bem, mas vai ter situações em que ele não vai funcionar, determinadas ações ele não grava, e é nessas horas que vem a necessidade de um conhecimento mais aprofundado ou detalhado. Então é em função disso que eu proponho a criar esse grupo, mas antes de pedir para o André fixar o tópico, eu quero ver se surgem interessados e alguém com um conhecimento pelo menos parcial sobre o assunto para poder ajudar as vezes, caso o contrario eu tenho certeza de que não vai dar certo, pois uma coisa é certa, muitas dúvidas vão surgir, e se elas não forem sanadas o grupo vai acabar. Bom é isso, mãos a obra. Relação de links sobre o assunto: http://www.scriptspot.com Vídeo tuto p1 Vídeo tuto p2 Vídeo tuto p3 Vídeo tuto p4 Tutorial sobre MaxScript em português Criar animação reversa com MaxScript Criar material com MaxScript (avançado) Ótimo link com 7 vídeo aulas
Vou postar um primeiro desafio. A ação é algo realmente simples, mas eu ainda não consegui resolver. A intenção era criar um controlador com o uso de spline, um simples "sphere control". Bom na minha falta total de conhecimentos de script, fui direto para o Listener (uma grande vantagem disso é que com o tempo a gente vai gravando e aprendendo vários comandos). [code:1:3083381b13]Circle radius:20 pos:[0,0,0] isSelected:on[/code:1:3083381b13] Circle radius:20 pos:[0,0,0] isSelected:on Bom nos meu parcos conhecimentos vou explicar o que significa cada uma dessas informações. Circle - informa ao software qual a ferramenta vai ser usada. radius: - informa o tamanho do raio do circulo a ser criado. 20 - valor do raio pos: - localização espacial onde o circulo vai ser criado [0,0,0] - coordenadas espaciais de onde o circulo vai ser criado, nesse caso X=0, Y=0 e Z=0 isSelected: - Indica se o circulo vai continuar selecionado após ser criado ou se ele não vai estar selecionado. "on" para ficar selecionado e "off" para ficar descelecionado. Isso é importante quando vamos adicionar um novo comando para esse circulo, pois se ele não estiver selecionado a nova ação não tem como ser aplicada. Mais um exeplo antes de proceguir: Comando para selecionar e comando para remover seleção: select $Circle01 - seleciona o objeto Circulo, o comando select indica que um objeto vai ser selecionado, o simbolo $ vem antes do nome de um objeto. clearSelection() - esse comando desseleciona todos os objetos que estiverem selecionados. Continuando a criação da esfera de controle: [code:1:3083381b13]Circle radius:20 pos:[0,0,0] isSelected:on $.name = "circulo_1" maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl select nnl $.name = "circulo_2" rotate $ (angleaxis 90 [1,0,0]) maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl select nnl $.name = "circulo_3" rotate $ (angleaxis 90 [0,0,1]) clearSelection()[/code:1:3083381b13] Quais são as novidades aqui: $.name = "circulo_1" - Renomeia o objeto (no caso o objeto foi renomeado para circulo_1). Evite usar o traço use o under line. circulo-1 > errado (esse simbolo pode fazer parte de um codigo então ele pode causar um erro no script) circulo_1 > certo rotate $ (angleaxis 90 [1,0,0]) - esse comando vai rotacionar o objeto circulo em um angulo de 90º no eixo X (lembrando que as coordenadas sempre são dadas por X,Y, Z) O resultado dessa ação deve ser esse: *obs.: quando o script é executado os 3 circulos criados são da mesma cor, eu mudei as core manualmente apenas para ficar visível que os circulos não estão unidos. Agora estamos chegando perto de onde eu não consegui prosseguir. Vamos agora converter esses circulos em editable spline, o código para isso é o seguinte: [code:1:3083381b13]macros.run "Modifier Stack" "Convert_to_Spline"[/code:1:3083381b13] Então vamos ver como o script esta até agora: [code:1:3083381b13]Circle radius:20 pos:[0,0,0] isSelected:on $.name = "circulo_1" macros.run "Modifier Stack" "Convert_to_Spline" maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl select nnl $.name = "circulo_2" rotate $ (angleaxis 90 [1,0,0]) macros.run "Modifier Stack" "Convert_to_Spline" maxOps.cloneNodes $ cloneType:#copy newNodes:&nnl select nnl $.name = "circulo_3" rotate $ (angleaxis 90 [0,0,1]) macros.run "Modifier Stack" "Convert_to_Spline" clearSelection()[/code:1:3083381b13] Bom a etapa seguinte seria fazer o comando attach, pesquisando no help do max eu achei o seguinte comando: [code:1:3083381b13]splineOps.startAttach <editable_spline_or_line_node_or_modifier>[/code:1:3083381b13] Porém eu não sei como usa-lo, e aqui começa o nosso grupo de estudos, espero que de certo :D
Bala iniciativa tiago, como te falei não manjo nada, mas vou ficar acompanhando a evolução do grupo. Abraço
Boa noite. Ótima iniciativa Tiago. Vou contribuir com um link que tenho guardado faz tempo. Nesta página do scriptspot tem vídeo tutoriais http://www.scriptspot.com/3ds-max/tutorials/free-video-tutorials
Valeu Malcon, ta adicionado o link ;)
Tiago não resisti a curiosidade e fui testar o desafio. Aqui deu certo a gravação do Attach pelo attach list. Da uma olhada neste codigo Box lengthsegs:1 widthsegs:1 heightsegs:1 length:50 width:50 height:50 mapcoords:on pos:[-21.3689,-2.38364,0] isSelected:on clearSelection() select $Box01 actionMan.executeAction 0 "50001" -- Tools: Select and Move toolMode.coordsys #view Pyramid widthsegs:1 depthSegs:1 heightsegs:1 width:19.8833 depth:22.5029 height:20.6415 mapcoords:on pos:[-64.8819,-3.01434,0.005] isSelected:on Teapot radius:15.1385 smooth:on segs:4 body:on handle:on spout:on lid:on mapcoords:on pos:[53.0736,-32.2883,0] isSelected:on select $Box01 macros.run "Modifier Stack" "Convert_to_Poly" $.EditablePoly.attach $Pyramid01 $ $.EditablePoly.attach $Teapot01 $ move $ [0,14.5844,0] clearSelection() Abraço
"color:yellow">Tiago não resisti a curiosidade e fui testar o desafio. Aqui deu certo a gravação do Attach pelo attach list. Da uma olhada neste codigo Box lengthsegs:1 widthsegs:1 heightsegs:1 length:50 width:50 height:50 mapcoords:on pos:[-21.3689,-2.38364,0] isSelected:on clearSelection() select $Box01 actionMan.executeAction 0 "50001" -- Tools: Select and Move toolMode.coordsys #view Pyramid widthsegs:1 depthSegs:1 heightsegs:1 width:19.8833 depth:22.5029 height:20.6415 mapcoords:on pos:[-64.8819,-3.01434,0.005] isSelected:on Teapot radius:15.1385 smooth:on segs:4 body:on handle:on spout:on lid:on mapcoords:on pos:[53.0736,-32.2883,0] isSelected:on select $Box01 macros.run "Modifier Stack" "Convert_to_Poly" $.EditablePoly.attach $Pyramid01 $ $.EditablePoly.attach $Teapot01 $ move $ [0,14.5844,0 disse: clearSelection() Abraço
Sem nem testar eu já vou dizer uma coisa, vc usou um Editable Poly, e eu usei um Editable Spline. São duas ferramentas bem diferentes dentro do max. Algumas tem recursos que foram escritos de uma maneira que o Listener consegue pegar, outras coisas o listener não pega pela maneira que o codigo da ferramenta foi escrito. :P Mas é ótimo saber que o editable poly funciona :D :D :D eu vou tentar adaptar essa tag de comando pra ver se funciona. ;) Valeu cara :D
É não funciona a ferramente é diferente mesmo. E só por curiosidade, algo que eu não sabia e creio que muitos não sabem é que as ferramentas Editable (spline, poligon, mesh...) e várias outras ferramentas, são nada mais do que scripts :P na verdade Macro script, que é um script que pode ser adicionado aos menus do max.
Opa Tiago, ótima ideia! Eu estou criando um script próprio e comecei do zero, sem saber nada de MaxScript. Aprendi bastante coisa e tá evoluindo. O meu script que comecei há 1 ano mais ou menos a ideia é bem simples mas não existe no max até essa versão nova (2010): ele dá um scale nos objetos, deixando-os com a proporção correta. Então é só digitar os valores de altura, comprimento e largura que ele coloca nos trinques qualquer geometria, até mesmo um grupo. Quando soube que implementaram isso no max 2010 fiquei muito feliz, porque minha ideia tinha sido boa! :D Na verdade, queria manter segredo meu projeto, mas já não mexo nele há um tempo e tem coisas que realmente não consigo fazer ou melhorar sem ajuda. Então aproveitei esse momento para falar. ;) Minha dica por enquanto é o MaxScript Help. É com certeza a melhor fonte de informação possível. Daqui a pouco venho com dúvidas para melhorar meu programa, pois, apesar de estar funcionando, não acredito que seja da melhor maneira. Abraços.
E ai Renan, po bacana cara legal que vc tb se interessa pelo assunto. Eu tenho um script que esta em desenvolvimento tb, na verdade 2. Um deles tb vai suprir uma deficiência do max, mais especificamente para usuários do mental ray. Como a maioria sabe o mental não renderiza pass do shader sss, então o script que estou desenvolvendo faz exatamente isso, e além de renderiza o pass do sss renderiza tb um pass de AO e um canal de reflexo do arch&design. O script esta funcionando, ele renderiza os pass, porém não consigo fazer ele salvar o render antes de iniciar o outro, hehehe. Na verdade ainda tem várias coisas que não estão como eu quero, só que não tenho conhecimentos suficientes pra isso, ainda mais que esse envolve interface. O outro script que estou trabalhando já esta pronto e na versão 2.0, hehehehe. Logo espero lançar a 2.1 Nesse script eu tenho a necessidade de usar o Attribute holder, só que não consigo colocar parametros nele. Então acabei usando Sliders, o que já resolve o problema, mas não é o que eu queria. Outro problema que tive foi exatamente com esse primeiro desafio que lancei. Isso que achei interessante em ter um grupo de estudos, pois cada um que estiver desenvolvendo algo vai descobrir um problema, um obstáculo e todos vão aprender com isso. Eu vou disponibilizar aqui o script que eu fiz para quem quiser testar ele :D . Esse scrípt é realmente muito específico, só serve pra quem trabalha com imagens 3d stereo (anaglifas, ou polarizadas), aquelas imagens que se vê com óculos especial. A função dele é criar as câmeras (precisa de 2 para criar o efeito) já corretamente posicionadas, pois existe uma proporção correta a ser seguida. Uma relação da distância entre as cameras com a distância do target, portanto se o target se move, as cameras tb tem que se mover seguindo uma proporção correta. http://www.scriptspot.com/3ds-max/stereo-cam-creator

Faça o login para poder comentar

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 711056.

Total de membros registrados: 138529

Últimos membros registrados: Gebio, MARCELO1977, breno001, erotique, Amândio Augusto Tavares , miteoelon, JointCare11, LumiLeanAvis Prix.

Usuário(s) on-line na última hora: 1258, sendo 5 membro(s) e 1253 visitante(s).

Membro(s) on-line na última hora: jessicatorres, Negreiroscg, billypaul, Starter, Allen Anderson.

Legenda: Administrador, Especial, Moderador, Parceiro .

3D1 © Três D1 © 1999-2024. Todos direitos reservados.