Cursos e Bibliotecas Ver Mais

Galeria 3D1 Ver Mais

claudiosdr   Brasil - CE
Bruno Medeiros   Porto Alegre RS
juliano.lins   Recife-PE - AC
Ale   Joinville SC - AC
NataliaEM   Carlos Barbosa, RS - RS

Portfólios Ver Mais

Tina.m   Sao Paulo - AC
Ricardo   Fortaleza/Ceará/ Brasil - CE
luis martins   Viana do Castelo Portugal - AC
rudieriel   Gravataí - RS

Modelagem de peças em Poly

Por: Abilio  

Em: 19/09/2017 17:13


Você pode configurar pelo menu, no tipo de visualização da viewport, e setar cores diferentes para as superficies.
Se nao quiser utilizar pelo DIR.

Geralmente ela estão dentro da mesma direção, se vier a inverter ai sim você usa o Dir. mas é muito raro acontecer, por conta da forma que ela é construida.

qual a melhor forma de exportar para o max as lines do meu desenho no rhino ?
para refazer o modelo no max
eu não consigo mapear as meshes do rhino no max , tem macete ?

no caso de nurbs :
da pra exportar do rhino para o max em nurbs ?
eu tentei no FBX mas o max travou
Oi Abílio, tudo bem?

Este problema de objetos separados que foram anexados e deveriam agir como um só, acontece porque o Rhino cria a superfície em partes separadas, eu creio que dá para unir as duas de verdade lá no Rhino mesmo com o Joint.
Se você importar para o Max com as partes separadas terá que soldar no Max para realmente virar uma coisa só, pois o Attach apenas adiciona Meshes dentro de um Mesh para serem partes dele, mas partes separadas como Elements, então, se tem dois ou mais Elements que devem ser um só, precisa soldar os vértices entre estes Elements para virar uma malha só.

Normalmente é fácil fazer isso no Max, depois que usar o Attach para juntar as partes no mesmo Mesh precisa selecionar todos os vértices do objeto teclando CTRL+A e depois clicar no quadrinho do Weld como mostra a segunda imagem em anexo.
Vai aparecer a janelinha do Weld e você deve colocar um valor pequeno para não soldar todos os vértices do objeto em um só, você quer soldar apenas os vértices que estão bem próximos, justamente os vértices que estão sobrepostos na emenda da malha de cada parte do seu objeto e qualquer valor bem pequeno vai funcionar.

Veja o exemplo do cilindro que postei na primeira imagem, eu separei as laterais dele em 4 partes e juntei tudo com o Attach, mas os vértices entre as partes não estão soldados e olha o que aconteceu, gerou um sombreado na emenda das partes na Viewport.
É justamente isso que vai acontecer no Max e em outros programas, é pior ainda em programas Real-Time como Unreal e Substance, porque essa sombra ficará ainda mais forte quando fizer o Bake da iluminação, vai aparecer em alguns Bakes de mapas também, é exatamente o que não pode acontecer.
Na segunda imagem o cilindro aparece com a volta toda suave depois que soldei os vértices entre as partes com o Weld.

A malha deve estar toda soldada se o objeto é uma coisa só e o mapeamento também deve estar todo soldado, pois o Rhino vai enviar o mapeamento separado de cada parte e não vai soldar quando usar o Weld, terá que soldar no Unwrap UVW.

Agora, se mesmo separadas as malhas estiverem com o Material ID certo, elas vão receber o material correto, mas os problemas pela separação vão aparecer, as vezes pode ser melhor refazer o mapeamento do zero.

Você pode modelar no Max, mas em todos os casos vai ter que fazer o mapeamento do zero, um bom mapeamento sempre tem que fazer, independente de onde modele.

Quanto ao Fillet, se mapear com cuidado não haverá distorções, mas haverá emendas já que sempre terá que cortar em algum lugar para planificar corretamente, a textura é igual uma colagem de papel de presente na superfície de um objeto, tem que recortar cada parte para encaixar certinho.

Para não aparecer estas emendas que existe a técnica o Triplanar Map ou Blended Box Mapping como quiser, então, quando aplicar um Noise ou algo parecido para simular sujeira no material, mesmo um mapa procedural, ele vai apresentar a emenda onde o mapeamento foi cortado se não empregar o Triplanar Map do Substance Designer, por exemplo.

O Triplanar projeta o Noise nos 3 eixos e faz um Blend entre eles nas emendas para não aparecerem, mas só funciona com Noises e similares, não funciona com uma textura detalhada como tijolos, por exemplo, porque eles não iriam se encaixar corretamente depois da projeção nos 3 eixos.

Parece coisa de outro mundo mas não é, quando pegar o jeito vai texturizar qualquer objeto da forma que quiser e com facilidade.

Você pode enviar no meu email o FBX do objeto que mostrou na sua imagem?
Tenho certeza absoluta que é o mapeamento, pois se as partes do mapeamento não estiverem com o mesmo tamanho relativo, quando aplicar a textura ela vai aparecer mais definida nas partes grandes do mapeamento e sem resolução nas partes menores do mapeamento, que parece ser o caso desta quina que mostrou na imagem.

Abração e tudo de bom.

André Vieira
Oi Abílio, tudo bem?

Recebi o seu arquivo e os problemas realmente estavam nas malhas separadas e no mapeamento.

Acabei de enviar o arquivo corrigido no seu email contendo 4 exemplos do mesmo objeto e um pequeno texto na frente de cada um.
Também enviei os objetos no Substance Designer com o efeito básico de desgaste nas bordas, usei apenas duas cores para facilitar o estudo do gráfico do material, também deixei o Normal Map exagerado para você perceber bem, mas o correto é diminuir bastante a intensidade dele.

Vamos partir do início:

O objeto importado do Rhino estava com todas as partes separadas como é normal, então, a primeira coisa a fazer é o que eu te disse na outra mensagem, precisa soldar os vértices para unir de verdade as partes da malha, já que o Attach apenas junta várias malhas no mesmo Mesh e trata cada uma delas como um Element do Mesh.

Veja a primeira imagem em anexo, a malha está com 1492 vértices antes de aplicar o Weld e fica com 826 depois que aplicar o Weld, portanto, todos os vértices sobrepostos nas emendas das malhas se tornam um só, facilitando o mapeamento e reduzindo o peso da malha.
Entretanto, a malha não ficou com um bom sombreamento de Smooth Group como deveria ter ficado e como qualquer malha similar modelada no Max ficaria, você vai notar os passos de sombreamento mostrando as faces da malha nas laterais curvas.
Isso não é normal porque já recebi modelos do Rhino para texturizar e não aconteceu isso, aquele Rhino robô foi modelado pelo Diego no Rhino e quando ele me enviou também tive que refazer o mapeamento, mas não deu esse erro de Smooth Groups.

O próximo passo é o mapeamento, que costuma ser fácil e rápido na maioria dos casos.
Assim que apliquei o Unwrap UVW e abri o Editor, todas as ilhas de mapeamento estavam sobrepostas como é o normal.

Porém, quando acionei o Tools > Pack UVs para arrumar as ilhas na área útil do mapeamento, notei que elas estavam fora de escala, mesmo habilitando as opções Normalize Clusters e Rescale Clusters no Pack Uvs, como mostra a segunda imagem em anexo.

Então, neste ponto já começa a ficar difícil, pois é um problema que veio com o mapeamento do objeto e escalonar tudo manualmente é chato e trabalhoso, então, vale mais a pena remapear do zero.
Como é um objeto simples e pequeno, eu escalonei as ilhas para poder soldar tudo e tentei ajustar manualmente a escala das faces dos cantos arredondados no UV de acordo com o tamanho delas, então, foi bem no olhômetro, mas não tentei ajustar as faces dos arredondados nas 4 pontas do objeto, note no arquivo MAX como ficou muito distorcido, era isso que estava acontecendo, cada parte do Mesh tem uma escala diferente no UV e dai não tem condições.

Quando terminei de mapear vi que o Checker de teste aplicado no objeto estava com distorções no centro de algumas faces, que também não é normal, então, apliquei o Tools > Relax do Unwrap UVW para melhorar e isso distorceu bastante as faces no UV, portanto, certamente vai dar problema na iluminação nas Engines de Games e em qualquer tipo de Bake.
O resultado do mapeamento está na terceira imagem em anexo.

Repare como a diferença imensa entre o tamanho das ilhas deixa vazia uma grande área útil de mapeamento, fazendo as malhas ocuparem uma pequena parte da textura, isso é muito ruim.

Vou continuar na próxima mensagem.....
...continuando a mensagem anterior....


Para melhorar a distribuição das ilhas na área útil da textura e ter mais qualidade usando a mesma resolução de textura, eu separei na metade a ilha de mapeamento que dá a volta toda no objeto, então, em vez de ter apenas um corte, terá dois.
O ideal é ter o mínimo possível de ilhas, mas se uma ilha for muito grande em relação as outras é melhor dividí-la onde for possível.
Então, no final temos o mapeamento mostrado na primeira imagem em anexo.

Se olhar no objeto com o Checker no Max vai perceber que ficou uma porcaria, cheio de distorções, ou seja, não vale a pena o trabalho.

É mais fácil e rápido mapear de novo a partir do zero, vou descrever o que fiz para mapear o seu objeto.
Apliquei o Unwrap UVW, usei o Mapping > Flatten Mapping para planificar a malha, depois soldei cada um dos vários pedaços dos cantos arredondados que ficaram separados da lateral e dos tampos usando o Stitch Selected que fica no botão direito do mouse.
O resultado está na segunda imagem em anexo.

A terceira imagem mostra a diferença de resolução quando deixa a lateral numa ilha só bem grande, desperdiçando área útil da textura, além do mapeamento original do Rhino depois de um certo trabalho de correção, no objeto do lado esquerdo, em relação a cortar a ilha da lateral em duas partes para aumentar a área ocupada pela textura e também o novo mapeamento feito do zero no objeto do lado direito.

Vou continuar na próxima mensagem....
...continuando a mensagem anterior....

Você poderá usar o objeto no Substance Designer, Painter, Unity e Unreal sem os problemas que estava enfrentando depois do mapeamento refeito, porém, o problema de Smooth Groups na malha não tem como resolver e isso acontece as vezes em importação de prorgamas de CAD, vai ter que testar bastante, importar em diversos formatos e resolução até achar um que funcione bem, mas provavelmente vai aumentar bastante a quantidade de polígonos na malha e vai precisar fazer retopologia, então, por causa disso eu acho mais rápido e mais prático modelar no próprio 3ds max.

Claro que este objeto é apenas um exemplo, se você trabalha com design de produtos vai ter objetos muito mais complexos que não serão simples de modelar no Max e dai pode valer a pena o trabalho de retopologia, mas seja como for, no final vai ter uma malha criada no 3ds max, com polígonos quadrados, respeitando Edge Loops e sem variações bruscas entre o tamanho das faces, que é o ideal e facilita muito todo o resto.

Sendo assim, eu remodelei o objeto no 3ds max em Lowpoly e apliquei o mapeamento.
Desta vez foi bem mais fácil porque o objeto tem poucos polígonos, eles são regulares e respeitam os Edge Loops facilitando muito a seleção.

Eu apliquei o Unwrap UVW, ativei o Sub-Object Polygon, selecionei 6 faces no centro dos tampos e cliquei no Grow para selecionar o tampo todo, dai cliquei no Planar Map e os tampos foram separados da lateral no mapeamento, já ficando mapedos corretamente.
Depois selecionei uma Edge da lateral, cliquei no Ring para selecionar todas, apliquei o Flatten Mapping e soldei dois pedaços dos 4 que ele criou, soldei facilmente com 2 cliques nas Edges da borda para selecionar o Loop todo, enquanto que, no mapeamento do objeto modelado no Rhino eu tive que soldar os pedacinhos um por um.
Pronto, está mapeado corretamente e depois só apliquei o Turbo Smooth para suavizar a malha.

Também deixei outro exemplo de modelagem para você ver que é ainda mais fácil.
O quarto objeto do arquivo MAX foi modelado em super Lowpoly usando o sistema OpenSubdiv, onde você não precisa criar as Edges para chanfrar os cantos que deseja arredondar, basta selecionar as Edges da quina e aplicar um fator de Crease, no caso usei 0.5, assim, o modificador OpenSubdiv aplica a subdivisão da malha igual o TurboSmooth, mas fazendo o arredondamento nas quinas de acordo com o fator de Crease.
Desta forma tem ainda menos polígonos para mapear e fica mais fácil.
A primeira imagem em anexo mostra o mapeamento deste modelo feito com o OpenSubdiv.


Todos os objetos no arquivo MAX estão com os modificadores ativos para você ver passo a passo o que eu fiz.

Mas aqui eu dei Collapse All em todos para embutir das modificações no Mesh e poder exportar sem problemas em FBX, também apliquei um material Standard diferente em cada um e coloquei nome para identificar no Substance Designer.
Eu não exportei o modelo com o mapeamento do Rhino corrigido porque ficou ruim, exportei o modelo do Rhino com o mapeamento refeito do zero e os dois modelos criados no Max.

No Substance Designer eu importei o FBX e fiz o Bake de AO, Curvature, World Space Normal e Position de cada um dos 3 objetos, depois eu criei 3 gráficos, um para cada objeto, e usei as imagens de Bake de cada um com o Node Metal Edge Wear do Mesh Adaptive para criar o efeito de desgaste nos cantos arredondados.
Também fiz os mapa de Roughness, Normal e Metalic básicos para completar o material e exibir corretamente na Viewport.
Como disse, usei apenas duas cores na pintura para simplificar o gráfico, mas você pode colocar qualquer material BPR no lugar usando o Node Material Blend para misturar os dois, no exemplo eu usei o Node Blend comum porque estava misturando apenas duas cores.

A segunda imagem em anexo mostra o material aplicado no objeto modelado no 3ds max.
A terceira imagem em anexo mostra o material aplicado no objeto modelado no Rhino e que teve o mapeamento refeito no Max, note os erros de Smooth Groups na curvatura da lateral.

Estude os arquivos e qualquer dúvida é só falar.

Abração e tudo de bom.

André Vieira

Tem mais uma coisa muito importante que esqueci de falar.

As unidades que você está usando no Max dificultam muito qualquer tipo de trabalho, você mudou as unidades do sistema para metros, que exige trabalhar com valores minúsculos em muitos recursos.
Por exemplo, eu usei 0,001 para soldar os vértices e poderia ter usado apenas 0,1.
Portanto, eu importei o seu objeto num arquivo novo com as unidades padrões para facilitar o trabalho.
Quando for abrir o arquivo MAX no seu PC vai aparecer uma mensagem perguntando se deseja manter as unidades do arquivo (File) ou se deseja usar as unidades do sistema, escolha a opção File para usar as unidades do meu arquivo e mantenha assim no seu 3ds max, garanto que vai facilitar muito a sua vida.

Se quiser alterar manualmente, é só ir no Customize > Units Setup > System Units Setup.
Na listinha de unidades que aparece lá tem que deixar em Inches.
Depois, na janela do Units Setup, que aparece do lado esquerdo na imagem, você pode escolher no Display a unidade que deseja trabalhar, pode colocar metros se quiser, mas eu sugiro que use centímetros.

Isso é muito, muito, muito importante!!!!

Em breve eu vou postar os vídeos que fiz para um curso de Mental Ray que não terminei e um deles explica em detalhes esta questão das unidades, serve para qualquer render e qualquer tipo de trabalho no Max.

Abração e tudo de bom.

André Vieira



muito bem
entendi tudo

Andre , esta pergunta é para voce

vou refazer cada objeto no max

uma duvida :

como eu posso facilitar a modelagem no max ?
importo os objetos do rhino e modelo lado a lado ?
eu importei em formato autocad as lines mas quando eu fui extrudar uma delas o extrude não foi para o lado certo . da pra " resetar " as lines importadas no formato autocad no max ?
a melhor importação das linhas aqui foi pelo : adobe illustrator .ai , mas achata as linhas de acordo com a viewport que estava ativa quando exportou

para mapeamento dos modelos criados no max : tem que sempre fazer este processo descrito acima ? não rola nada mais automatico ?
voce tem tutoriais de mapeamento de objetos inorganicos no max ?
como eu sei que um objeto esta de fato bem mapeado ? porque os objetos que voce fez para mim no max possuem emenda nos fillets

o modificador : opensubdiv é uma subdivisão igual ao turbosmooth só que funciona melhor com real-time ?
existem muitos macetes , de modelagem e outras areas , para usar com real-time ?

como e proque voce quadriculou a linha extrudada do ultimo modelo , o com opensubdiv ?
foi nessessario aplicar fillet com o edit poly ? esse fillet foi feito com o opensubdiv
porque voce suaviza no final ? só o line-extrude-fillet com edit poly ja não faz um bom objeto para mapear ?


vou fazer uma pergunta que eu acho que só o Diego Dneo pode responder :
voce pode avisar ele pra mim ?
não ta rolando de fazer chat ou mensagem privada

usando o Power translator PRO eu posso resolver estes problemas ?
principalmente na questão de exportar para o substance designer e unreal ? mapeamento e conversão para mesh ?
tanto para modelar em nurbs no max quanto para importar modelos feitos no rhino ?

o power translator pro para max 2016 funciona no max 2017 ?

 

Oi Abílio, tudo bem?

A técnica mais comum quando você tem um objeto já modelado e detalhado é a retopologia, onde você usa o objeto pronto como base e vai criando a nova geometria poligonal em cima da superfície existente.
Geralmente depois disso é feito um Bake de Height Map e Normal Map com o Render To Texture e o modificador Projection, que gera o Cage em torno da malha para transferir os detalhes do Highpoly para os mapas do Lowpoly.

Estas ferramentas ficam no menu Ribbon do 3ds max, como mostra a imagem em anexo.
Também anexei um vídeo que dá uma boa idéia de como funciona a retopologia.

Agora, tudo depende da complexidade e detalhamento do objeto, as vezes pode ser mais rápido e mais prático modelar de novo no Max a partir do zero e tem várias técnicas que pode usar para isso.
Uma delas é extrudir uma Spline e depois converter em Poly para detalhar editando os polígonos, a outra é iniciar com um Plane de apenas 1 segmento e ir arrastando as Edges com o Shift para criar novos polígonos, dando a forma do objeto, também pode iniciar com uma primitiva e converter em Poly para modificar.
Se tiver tubos e cabos é melhor fazer com Spline e habilitar as opções de renderização para gerar a malha 3D, se quiser ainda pode converter em Poly para editar.
Independente da forma que iniciar, sempre vai modelar usando os recursos do Edit Poly.

Você também pode modelar em NURBS no Max se quiser, apesar que o sistema dele é bem pobre, mas tem o Plug-in PowerNurbs da NPower que adiciona um ótimo sistema de NURBS no Max.
Porém, depois vai ter que converter em Mesh e mesmo que não tenha tantos problemas para resolver, vai precisar mexer no objeto por ter sido feito em NURBS.
NURBS não consegue nem ser exibido na tela porque é uma superfície matemática, a exibição é feita com polígonos, então, se não for para enviar para CNC é melhor modelar com polígonos.

Qualquer programa 3D tipo DCC como o 3ds max e qualquer Engine de Game trabalha com polígonos.
Os sistemas de CAD são voltados para projetar objetos que serão manufaturados e é normal não conversarem tão bem com programas DCC, o 3ds max é o que conversa melhor com programas de CAD.
Você pode tentar importar em outros formatos, 3DS é muito antigo, tente IGES ou STEP, se não me engano tem até um Plug-in que importa o formato nativo do Rhino no Max, inclusive em Nurbs, mas para transformar em Poly com qualidade o objeto ficará com muitos polígonos e terá que fazer a retopologia.
Se modelar já em polígonos não precisará fazer a retopologia.

Portanto, não tem como fugir, se precisa realmente modelar em sistemas de CAD para levar para Engines a melhor opção é fazer a retopologia.
Se o objeto não precisa ser modelado em sistemas de CAD, a melhor opção é pegar o jeito de modelar em Poly no Max, pois vai conseguir fazer tudo que quiser com facilidade e velocidade, o Max é um ótimo modelador Poly.
Não é difícil e se precisar de ajuda pode contar comuigo.

Tem dois arquivos que coloquei na seção de Cenas de Estudo que mostram o básico do básico da modelagem Poly.

Este mostra o passo a passo de modelar uma colher: http://3d1.com.br/recursos/215/procedimento-basico-de-modelagem

Este mostra o passo a passo para curvar Loop de Edges: http://3d1.com.br/recursos/215/modelagem-poly-loops-e-furos



Sobre o mapeamento, é um processo meio chato mesmo, mas não é difícil.
Tem coisas que vai mapear rapidamente e tem coisas que precisa de um pouco mais de trabalho.
Conhecendo bem os recursos do Unwrap UVW você vai saber qual usar em cada situação e poderá fazer o trabalho facilmente.

Quanto menos separar a malha do objeto, melhor, pois terá que soldar poucas partes depois.
O bom mapeamento é aquele que a malha tem o menor número de pertes separadas, ocupando a maior parte da área útil da textura e sem distorções.

... continuo na próxima mensagem para anexar mais imagens...
...continuando...

Para mapear objetos orgânicos como personagens a ferramenta mais usada é o Pelt Map do Unwrap UVW..
Ele permite que você defina os locais onde deseja cortar para abrir e planificar a malha, depois ele faz um desenvelopamento automático e geralmente só precisa puxar algumas partes para acertar e aplicar um Relax.
Normalmente é muito mais fácil mapear um personagem do que uma máquina estilo Hardsurface.

O vídeo tutorial que anexei é explica como usar o Pelt Map.


Sobre a emenda nos Fillets, elas sempre vão existir, pois é impossível não ter a emenda, já que a única forma de planificar a malha é cortando em algumas partes como uma capa de tecido que reveste um objeto, tem que ter as costuras, não dá para ser um tecido só.

O mapeamento se guia pelas faces coplanares, as faces que possuem pouca diferença na inclinação entre uma e outra, portanto, nos Fillets é justamente o lugar onde vai acontecer os cortes e alguns você poderá soldar novamente com o Stitch do Unwrap UVW, mas outros não, caso contrário vai sobrepor as faces.

Foi justamente pela impossibilidade de retirar as emendas nos Fillets que inventaram o Triplanar Map, ele funciona perfeitamente e esconde as emendas, como mostra as imagens em anexo, primeiro sem o Triplanar e depois com o Triplanar.

OBS: Para o Triplanar funcionar tem que gerar o mapa de Position com a opção BSpehre em vez de BBox.


Sobre o modificador OpenSubdiv, ele funciona igual o TurboSmooth, mas permite arredondar os cantos usando menos polígonos do que exige o TurboSmooth, então, o objeto tem menos polígonos para mapear.
Porém, depois que converter em Mesh para exportar, a diferença na quantidade de polígonos entre o objeto criado com TurboSmooth e OpenSubdiv não muda muito, a vantagem é ter menos polígonos para editar e para mapear.

Não tem nenhum macete de modelagem para usar em Real-Time, se quiser pode levar objetos com muitos polígonos e com polígonos irregulares para as Engines, mas pode aparecer artefatos nos polígonos irregulares da mesma forma que aparece também na renderização no Max e até na Viewport do Max.

Por exemplo, aquele problema de Smooth Groups nas faces do objeto que me enviou apareceu no Max depois que soldou tudo e vai aparecer em qualquer programa.
Você está enfrentando tantos problemas porque está modelando num sistema de CAD em vez de modelar com polígonos como os programas DCC e Engines trabalham.
Se você for modelar no Maya, MODO, Cinema4D, Lightwave e Houdini vai funcionar bem sem tantos problemas, mas se modelar no SolidWorks, Catia, Rhino, Solidthinking, Inventor e outros deste tipo, vai ter os mesmos problemas.

O único macete que existe para Real-Time é criar o segundo canal de mapeamento, o resto é exatamente igual ao que qualquer renderizador realista exige, modelagem limpa e detalhada em Poly e bom mapeamento.

... continuo na próxima mensagem....

Faça o login para poder comentar

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 711009.

Total de membros registrados: 138483

Últimos membros registrados: FELIPERODRI@, isaque.220798, Anezio.neto, DANILO COSTA , frapsxiv, naej2077, Estéfanem.melo, Paiyne.

Usuário(s) on-line na última hora: 866, sendo 23 membro(s) e 843 visitante(s).

Membro(s) on-line na última hora: kiwikiaka, Michelazzo, gago, Negreiroscg, tsmodelagem3d, FELIPERODRI@, Celso Borttoloto, Fabio Catelleno, Fabio Amorim, Moura, Eber.Silva, Luana Chen, Geraldo Nunes, Osvaldo Arquiteto, Lisandro, Duda, Felipe Duarte, Max Idalgo, ricardo duarte, Fernando Cunha, marcio.alain, dallest91, Marco Rocha.

Legenda: Administrador, Especial, Moderador, Parceiro .

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