Proxy (achu que é assim que se escreve)

Por: doidim_batera  

Em: 31/12/2006 17:16

é pra falar verdade eu queria issu mesmo, a parte de compor a shader mesmo, porque eu já estou um pouco tempo aprendendo 3d mais até me resgistrar no fórum só tinha aprendido a parte de modelagem, agora que estou dando valor mesmo para essa parte. mas eu já estou lendo alguns tutoriais daqui e já estou aprendendo. e a parte de escrever as shaders deve ser programação mesmo, C ou C++, já que eu li uma fez que os plugins são assim.
críticas e sugestões... sempre bem vindas
Oi gente, tudo bem? Marco, é justamente isso que estou tentando te explicar. Da forma que você está seguindo os estudos, é muito mais difícil, muito mais. E agora você quer escrever Shaders, essa é a parte mais difícil de todas, tem que conhecer todas as chamadas de Shaders e seus parâmetros no código do Mental Ray. Na mensagem anterior eu disse para você começar a estudar a composição de materiais só com os recursos do Mental Ray e os mapas procedurais do Max, sem nenhum material Standard ou RayTrace. Porque configurar o Render você já sabe, pode não saber os detalhes e macetes mais escondidos, mas já tira qualquer render sem problema. Então, é a hora de estudar a composição de materiais puros do Mental Ray com os Shaders que vem com o Max e Shaders simples de terceiros. Escrever Shader são muitos degraus acima disso e não tem como pular essas etapas, é impossível, porque para escrever um Shader tem que pelo menos saber montar um Shader com os componentes que o Mental Ray já oferece no Max, pois é a mesma coisa, só que vai escrever em vez de montar com os Shaders que vem com o programa. Sem saber montar Shaders com os recursos que já vem no Max, fica muito difícil montar Shaders de terceiros e pode acontecer do Max ficar fechando na sua cara. Não é bug, é porque colocou um Shader onde não deveria. Os Shaders de terceiros não tem a definição de categoria que o Max oferece, então, eles aparecem em qualquer lugar. Se aplicar onde não pode, trava o Max e fecha o programa. Os Shaders que vem com o Max tem a tag para definir a categoria, assim, eles só aparecem onde podem ser aplicados, o que facilita muito o estudo e o entendimento do processo. Por tudo isso que eu estou tentando te explicar que a sua linha de estudo é muito mais complicada, pulando etapas importantes e querendo fazer coisas que depende de anos de experiência com o Render. Escrever Shader vai levar um bom tempo, eu estou estudando isso desde o Max 6 e só consigo fazer bebeirinhas. Porque para criar novas funções no Render, é necessário compilar uma DLL do Shader em C++. Agora, para escrever um Phenomenon, que não cria novas funções no Render, apenas gera um Shader, é bem mais fácil. Mesmo assim, não tem como fazer sem saber montar Shaders com os recursos que já estão disponíveis no programa e sem conhecer os recursos das bibliotecas nativas do Mental Ray, assim como os códigos dos parâmetros que compõe cada um destes recursos. Vou postar aqui um Shader que eu escrevi para estudo, é bem simples, mas permite a montagem de um material Blinn com Bump, transparência e reflexão sem usar nenhum material padrão do 3ds max. EU ia fazer em inglês, mas achei melhor fazer em português para depois poder colocar no site e ajudar os iniciantes que querem compor materiais puros do Mental Ray. Copia e cola no Notepad, depois, muda a extensão para MI e coloca na pasta Autoload/Include do Mental Ray. Use-o com um Output no diffuse, para poder controlar a cor em relação ao nível de FG na cena pelo RGB Level, se não tiver FG, não precisa. 3D1 Blinn Base Shader declare phenomenon color "3D1_Blinn_Base" ( struct "p" { color "Ambience", color "Ambient", color "Diffuse" }, struct "s" { color "Specular", scalar "Roughness", scalar "Spec Ior" }, struct "r" { color "Ref Color", color "Transp Color" }, struct "l" { integer "Mode", array light "Lights" } ) shader "Blinn" "mib_illum_blinn" ( "ambience" = interface "p.Ambience", "ambient" = interface "p.Ambient", "diffuse" = interface "p.Diffuse", "specular" = interface "s.Specular", "roughness" = interface "s.Roughness", "ior" = interface "s.Spec Ior", "mode" = interface "l.Mode", "lights" = interface "l.Lights", ) shader "Transparency" "mib_transparency" ( "input" = "Blinn", "transp" = interface "r.Transp Color" ) shader "Reflex" "mib_reflect" ( "input" = "Transparency", "reflect" = interface "r.Ref Color" ) root = "Reflex" apply texture, material gui "gui_3D1_Blinn_Base" { control "Global" "Global" ( "category" "Illumination", "uiName" "3D1 Blinn Base", "addApply" "illum", ) control "p" "struct" ("uiName" "Parâmetros") { control "Ambience" "color" ("uiName" "Ambientação", "value" 0.0 0.0 0.0) control "Ambient" "color" ("uiName" "Ambiente", "value" 0.0 0.0 0.0) control "Diffuse" "color" ("uiName" "Cor difusa", "value" 1.0 1.0 1.0) } control "s" "struct" ("uiName" "Especular") { control "Specular" "color" ("uiName" "Cor especular", "value" 1.0 1.0 1.0) control "Roughness" "scalar" ("uiName" "Rugosidade", "value" 0.2) control "Spec Ior" "scalar" ("uiName" "IOR especular", "value" 10) } control "r" "struct" ("uiName" "Reflexo e Transparência") { control "Ref Color" "color" ("uiName" "Cor de reflexo", "value" 0.1 0.1 0.1) control "Transp Color" "color" ("uiName" "Cor de transparência", "value" 0.0 0.0 0.0) } control "l" "struct" ("uiName" "Luzes") { control "Mode" "integer" ("uiName" "Modo das luzes", "value" 0) control "Lights" "array light" ("uiName" "Luzes") } } end declare Veja como você define o tipo de parâmetro primeiro, depois você chama um Shader da livraria do Mental Ray e indica a qual parâmetro desse Shader cada parêmtro do seu Shader se refere, por fim, define a aparência da interface no GUI. Parece uma babaquice, mas para fazer uma bobeira como essa funcionar, eu apanhei bastante. Eu vou tentar colocar o Output dentro dele, para não ter que aplicar depois no Diffuse e vou tentar colocar recursos de AO também. Se eu conseguir, eu coloco aqui para você baixar e usar. Doidim, o seu caso eu já acho que é diferente, mas o que você está fazendo é o mesmo que o Marco, querendo pular etapas importantes no estudo. Se para o Marco eu indiquei que ele estude a composição de Shaders com os recursos próprios do Mental Ray. Para você eu sugiro que estude o Mental Ray em si, porque não tem como trabalhar com ele sem saber configurar o render. Então, tem que estudar todos os parâmetros das fichas do Mental Ray que aparecem na janela Render Scene e conseguir configurar qualquer cena sem problema. Já que todos os materiais podem ser feitos com os materiais padrões do Max e alguns poucos Shaders simples do Mental Ray. Só depois disso que vai partir para configurar Shaders puros com recursos exclusivos do Mental Ray, que é onde o Marco está agora. Depois disso vai começar a estudar composição com Shaders de terceiros e composições complexas de materiais. Por fim vai estudar como escrever Shaders simples para o Mental Ray. Sem seguir uma linha adequada de estudo, fica muito mais difícil, porque o Mental Ray não é o V-Ray. Material é uma coisa e Shader do Mental Ray é outra, Shader para o Mental Ray é um componente do Render, não necessariamente do material. O Shader que eu escrevi acima e dei para o Marco, seria impossível de ser feito dessa forma no V-Ray, só programando em C++ e conhecendo o SDK do V-Ray. Abraços
Oi gente, tudo bem? Fazia tempo que eu não brincava com esse lance de escrever Shader, porque o tempo estava curto, mas ontem eu resolvi tantar fazer o Shader com Ambient Occlusion junto, assim, facilita para qualquer iniciante que deseja trabalhar só com materiais puros do Mental Ray e ainda não sabe compor com os Shaders. Para facilitar ainda mais, eu fiz a interface em português. Aproveitei e coloquei função para reflexão borrada também. Basta aplicar o Shader no Slot Surface do material Mental Ray, as configurações de Photons, Shadows e Material já estão definidas. Espero que gostem. Abaixo um render de teste com Final Gather, Area Light, reflexão borrada e Ambient Occlusion. BAIXAR O SHADER Abaixo segue o código do Shader declare phenomenon color "3D1_Blinn_AO" ( struct "p" { color "Ambience", color "Ambient", color "Bright", color "Specular", scalar "Roughness", scalar "Spec Ior" }, struct "r" { color "Reflect Color", scalar "Reflectivity", boolean "Blur Reflection", scalar "Spread", integer "Samples" }, struct "o" { color "Dark", scalar "AOspread", scalar "Max_distance", integer "AOsamples" }, struct "l" { integer "Mode", array light "Lights" } ) shader "Occlusion" "mib_amb_occlusion" ( "bright" = interface "p.Bright", "dark" = interface "o.Dark", "spread" = interface "o.AOspread", "max_distance" = interface "o.Max_distance", "samples" = interface "o.AOsamples" ) shader "Blinn" "mib_illum_blinn" ( "ambience" = interface "p.Ambience", "ambient" = interface "p.Ambient", "diffuse" = "Occlusion", "specular" = interface "p.Specular", "roughness" = interface "p.Roughness", "ior" = interface "p.Spec Ior", "mode" = interface "l.Mode", "lights" = interface "l.Lights" ) shader "Reflex" "Metal" ( "Surface Material" = "Blinn", "Reflectivity" = interface "r.Reflectivity", "Reflect Color" = interface "r.Reflect Color", "Blur Reflection" = interface "r.Blur Reflection", "Spread" = interface "r.Spread", "Samples" = interface "r.Samples" ) root = "Reflex" apply texture, light, material, shadow, photon gui "gui_3D1_Blinn_AO" { control "Global" "Global" ( "category" "Illumination", "uiName" "3D1 Blinn AO", "addApply" "illum" ) control "p" "struct" ("uiName" "Parâmetros básicos") { control "Ambience" "color" ("uiName" "Ambientação", "value" 0.0 0.0 0.0) control "Ambient" "color" ("uiName" "Ambiente", "value" 0.0 0.0 0.0) control "Bright" "color" ("uiName" "Cor difusa", "value" 1.0 1.0 1.0) control "Specular" "color" ("uiName" "Cor especular", "value" 1.0 1.0 1.0) control "Roughness" "scalar" ("uiName" "Rugosidade", "value" 0.2) control "Spec Ior" "scalar" ("uiName" "IOR especular", "value" 20) } control "r" "struct" ("uiName" "Reflexão") { control "Reflectivity" "float" ("uiName" "Nível de reflexão", "value" 0.5, "range" 0.0 1.0) control "Reflect Color" "color" ("uiName" "Cor do reflexo", "value" 0.3 0.3 0.3) control "Blur Reflection" "boolean" ("uiName" "Reflexão borrada", "value" 0) control "Spread" "float" ("uiName" "Nível de borrado", "value" 4.0, "range" 0.0 90.0) control "Samples" "integer" ("uiName" "Qualidade", "value" 0, "range" 1 100) } control "o" "struct" ("uiName" "Oclusão Ambiente AO") { control "Dark" "color" ("uiName" "Cor de oclusão", "value" 0.0 0.0 0.0) control "AOspread" "scalar" ("uiName" "Dispersão", "value" 0.75) control "Max_distance" "scalar" ("uiName" "Distância máxima", "units" "world", "value" 0.0) control "AOsamples" "integer" ("uiName" "Qualidade", "value" 16, "range" 0 512) } control "l" "struct" ("uiName" "Luzes") { control "Mode" "integer" ("uiName" "Modo das luzes", "value" 0) control "Lights" "array light" ("uiName" "Luzes") } } end declare

Faça o login para poder comentar

Informações da Comunidade

Total de mensagens publicadas pelos membros da comunidade: 717363.

Total de membros registrados: 143157

Últimos membros registrados: Niotrox7 , Diegovechin, MedicGLPKapseln466, MedicGLPCapsules45, Marimgons, breezoes, EDILSON_Lucas, thiagodsf.

Usuário(s) on-line na última hora: 602

Legenda: Administrador, Especial, Moderador, Parceiro .

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