Dicas de como implementar um sistema de colocação de texturas
3 participantes
Página 1 de 1
Dicas de como implementar um sistema de colocação de texturas
Bom dia, gostaria de desenvolver um sistema de colocação de texturas com recursos de rotação e escala, semelhante ao apresentado no sistema de personalização de jogos como Need For Speed. Um vídeo vale mais que mil palavras, gostaria de criar algo semelhante a isso (de ~5:15 até ~5:30):
Ainda me considero iniciante e depois de pesquisar de algumas formas não encontrei nenhum tutorial sobre esse tipo de recurso específico, talvez tenha pesquisado errado. Alguém têm ideias de como fazer isso?
Ainda me considero iniciante e depois de pesquisar de algumas formas não encontrei nenhum tutorial sobre esse tipo de recurso específico, talvez tenha pesquisado errado. Alguém têm ideias de como fazer isso?
Re: Dicas de como implementar um sistema de colocação de texturas
"Aparentemente" isso é um sistema de decal, mas não um comum, uma coisa me chamou a atenção é que você primeiro escolhe o objeto que irá aplicar. Nesse caso, é provável que os desenvolvedores do NFS aplicam a imagem direto no material do objeto e apenas manipulam a posição, rotação e escala via UV. o que pra você iniciante seria bem mais complicado de fazer.
Eu recomendaria usar um sistema simples de decal mesmo.
//--------Edit ------------
Se teu jogo não for mobile, dá pra fazer com o novo HDRP.
Eu recomendaria usar um sistema simples de decal mesmo.
//--------Edit ------------
Se teu jogo não for mobile, dá pra fazer com o novo HDRP.
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
SteveRogers escreveu:"Aparentemente" isso é um sistema de decal, mas não um comum, uma coisa me chamou a atenção é que você primeiro escolhe o objeto que irá aplicar. Nesse caso, é provável que os desenvolvedores do NFS aplicam a imagem direto no material do objeto e apenas manipulam a posição, rotação e escala via UV. o que pra você iniciante seria bem mais complicado de fazer.
Eu recomendaria usar um sistema simples de decal mesmo.
Primeiro obrigado pela resposta, porque já postei isso no fórum da Unity e ninguém respondeu nada.
Minha intenção é criar um sistema de customização para uniformes, acredito que a colocação de decalques estáticos já seria um começo, porém em algum momento eu necessitaria de recursos mais avançados, principalmente de escala e movimento da textura selecionada. Eu acho esse sistema deles é conceitualmente parecido com o do Photoshop, aonde as imagens ou texturas selecionadas são organizadas em camadas, o vídeo que eu coloquei acabou não mostrando isso bem, mas senão me engano a primeira vez que as funções de transformações de vinis apareceram na série foram no Need For Speed Carbon, de 2006. Esse vídeo mostra melhor:
Me considero iniciante porque acredito que desenvolvimento de jogos é um dos trabalhos mais difíceis e multidisciplinares que existem, mas já sei de algumas coisas. Costumava modelar estádios para Fifa de PC, fazendo com que eu já tenha alguma noção sobre texturização e criação de UV's, atualmente estou trabalhando em um protótipo de um jogo de futebol na Unity para melhorar minha programação. Ainda preciso pesquisar mais sobre materiais e principalmente sobre shaders, porque do primeiro sei pouco e do segundo nada...
Re: Dicas de como implementar um sistema de colocação de texturas
Olha, pro seu caso específico talvez seja uma boa tentar implementar um material com mais uma camada de textura, e manipular as UVs da camada do decal. Pois como é um objeto mais simples, você pode deixar a UV continua, quase sem cortes (seams).
Eu não recomendei esse modo primeiro pois dependendo da complexidade do modelo, manter as UVs com a mesma densidade de texels e sem deformações é bem difícil, mas se teus uniformes forem roupas como estou pensando, isso não seria um problema, tornando esse esquema mais viável que o de decals.
Qual é a plataforma que você pretende lançar teu jogo?
Eu não recomendei esse modo primeiro pois dependendo da complexidade do modelo, manter as UVs com a mesma densidade de texels e sem deformações é bem difícil, mas se teus uniformes forem roupas como estou pensando, isso não seria um problema, tornando esse esquema mais viável que o de decals.
Qual é a plataforma que você pretende lançar teu jogo?
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
Fiz isso há algum tempo atrás, acho que assim que saiu o ShaderGraph.
Eu usava um UV separado pra aplicação das texturas e a textura principal do carro era uma máscara separando as partes por cores.
No shader, eu fazia um overlay da textura/cor nas coordenadas UV da cor da "máscara". Assim eu podia diferenciar as partes do carro.
Pra skinned meshes no caso de personagens, a coisa pode ser um pouco diferente, não tentei ainda. Mas vi alguns assets que duplicam a parte da malha onde a textura vai ser aplicada pra realizar o processo.
Edit:
Eu usava um UV separado pra aplicação das texturas e a textura principal do carro era uma máscara separando as partes por cores.
No shader, eu fazia um overlay da textura/cor nas coordenadas UV da cor da "máscara". Assim eu podia diferenciar as partes do carro.
Pra skinned meshes no caso de personagens, a coisa pode ser um pouco diferente, não tentei ainda. Mas vi alguns assets que duplicam a parte da malha onde a textura vai ser aplicada pra realizar o processo.
Edit:
Re: Dicas de como implementar um sistema de colocação de texturas
SteveRogers escreveu:Olha, pro seu caso específico talvez seja uma boa tentar implementar um material com mais uma camada de textura, e manipular as UVs da camada do decal. Pois como é um objeto mais simples, você pode deixar a UV continua, quase sem cortes (seams).
Eu não recomendei esse modo primeiro pois dependendo da complexidade do modelo, manter as UVs com a mesma densidade de texels e sem deformações é bem difícil, mas se teus uniformes forem roupas como estou pensando, isso não seria um problema, tornando esse esquema mais viável que o de decals.
Qual é a plataforma que você pretende lançar teu jogo?
Vou dar uma pesquisada sobre materiais com múltiplas texturas, porque na época dos estádios eu não mexia muito com materiais e quando mexia a coisa era bem segmentada, tipo uma textura para um material.
Este é o modelo de protótipo que eu fiz para a camisa:
Se um dia eu for capaz de finalizar o que eu tenho em mente, seria lançado para PC, inicialmente pelo menos. Mas infelizmente minhas pretensões não estão tão altas assim.
Re: Dicas de como implementar um sistema de colocação de texturas
Eu deixaria os cortes assim, parecidos com o de uma camisa de verdade, pra facilitar na hora de aplicar essa segunda camada de textura.
UVs
UVs
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
artplayer escreveu:Fiz isso há algum tempo atrás, acho que assim que saiu o ShaderGraph.
Eu usava um UV separado pra aplicação das texturas e a textura principal do carro era uma máscara separando as partes por cores.
No shader, eu fazia um overlay da textura/cor nas coordenadas UV da cor da "máscara". Assim eu podia diferenciar as partes do carro.
Pra skinned meshes no caso de personagens, a coisa pode ser um pouco diferente, não tentei ainda. Mas vi alguns assets que duplicam a parte da malha onde a textura vai ser aplicada pra realizar o processo.
Edit:
Eu também pensei em usar um UV secundário para colocação dos patrocínios (no meu caso) por cima da camisa, mas não achei como isso poderia implementar isso dentro da Unity. Já sobre o shader eu não sei, preciso ver alguns vídeos e tutoriais a respeito porque não sei praticamente nada do assunto.
Sobre a manipulação da textura selecionada em tempo de execução, a coisa mais próxima de uma resposta que eu achei foi o método SetTextureOffset(), que pelo eu entendi é usado para mover a textura pela mesh. Já para rotacionar ou escalonar eu também não achei muita coisa...
Agradeço pela resposta.
Re: Dicas de como implementar um sistema de colocação de texturas
Fiz esse shader pra ti, crie um material com base nele.
Pra funcionar, você precisa de duas UVs, UV0 recebe a textura principal e a UV1 recebe o decal.
Dentro do inspector você consegue alterar o tiling e o offset, eu inclui um novo campo para a rotação.
é importante que o decal tenha o fundo transparente, seja do tipo clamp ao invés de repeat e exista sempre uma borda de transparência em volta dos pixels com alpha = 1, do contrário, acontece isso da imagem abaixo, essa linha acontece pois um pixel com cor tocou na borda da imagem.
segue o shader
Uniforme
Pra funcionar, você precisa de duas UVs, UV0 recebe a textura principal e a UV1 recebe o decal.
Dentro do inspector você consegue alterar o tiling e o offset, eu inclui um novo campo para a rotação.
é importante que o decal tenha o fundo transparente, seja do tipo clamp ao invés de repeat e exista sempre uma borda de transparência em volta dos pixels com alpha = 1, do contrário, acontece isso da imagem abaixo, essa linha acontece pois um pixel com cor tocou na borda da imagem.
segue o shader
Uniforme
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
Eu baseei os cortes laterais nessa referência de posicionamento que alguém usava para fazer uniformes para o PES:SteveRogers escreveu:Eu deixaria os cortes assim, parecidos com o de uma camisa de verdade, pra facilitar na hora de aplicar essa segunda camada de textura.
....
Se possível, eu gostaria de fazer um sistema que possibilite movimentar a textura pela parte frontal, traseira e superior das mangas e ombros. Como o corte do modelo acima é unificado, eu imagino que isso seria possível. Porém se o UV da camisa for cortado de forma separada, não sei se seria possível.
Re: Dicas de como implementar um sistema de colocação de texturas
esse aí pode ser o esquema da UV0 (uv principal).
pra UV1 (uv decal) você faz como eu falei, pois se usar da forma como mostrou, o decal fica certo na frente, mas se mover para as costas, ele fica de cabeça para baixo.
pra UV1 (uv decal) você faz como eu falei, pois se usar da forma como mostrou, o decal fica certo na frente, mas se mover para as costas, ele fica de cabeça para baixo.
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
E pelo visto, o shader que fiz vai te dar uma base pra começar, mas você vai ter que ir mais além pra deixar certinho tipo o PES, provavelmente vai ter que implementar o que o Artplayer falou sobre mascaras de cor das texturas, senão você vai ficar com muito drawcall pra apenas um objeto.
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
Nossa, muito obrigado. Vou baixar ele e começar a fazer experimentações. Eu volto a postar em caso de dúvidas, talvez até poste o resultado do protótipo se ficar legal.SteveRogers escreveu:Fiz esse shader pra ti, crie um material com base nele.
Pra funcionar, você precisa de duas UVs, UV0 recebe a textura principal e a UV1 recebe o decal.
Dentro do inspector você consegue alterar o tiling e o offset, eu inclui um novo campo para a rotação.
é importante que o decal tenha o fundo transparente, seja do tipo clamp ao invés de repeat e exista sempre uma borda de transparência em volta dos pixels com alpha = 1, do contrário, acontece isso da imagem abaixo, essa linha acontece pois um pixel com cor tocou na borda da imagem.
...
Uma última dúvida, para adicionar mais de uma textura de decalque, um terceiro UV precisaria ser adicionado no shader e assim por diante ou teria um jeito mais eficiente de fazer isso?
Valeu novamente, esse fórum é bem receptivo, não esperava tanta atenção.
Re: Dicas de como implementar um sistema de colocação de texturas
Ok, entendi sobre os UV's.
Já é um ótimo começo eu acho, vou ver o que que eu consigo com isso. Minha ideia é fazer com que o jogador edite e salve os uniformes, então a versão final do uniforme poderia ter apenas 1 textura resultante do processo de edição, caso isso seja possível, enfim, vou ter que começar a testar e ver aonde eu chego.
Acho que mais tarde vou criar outro post sobre uma dúvida referente a colisões.
Boa tarde.
Já é um ótimo começo eu acho, vou ver o que que eu consigo com isso. Minha ideia é fazer com que o jogador edite e salve os uniformes, então a versão final do uniforme poderia ter apenas 1 textura resultante do processo de edição, caso isso seja possível, enfim, vou ter que começar a testar e ver aonde eu chego.
Acho que mais tarde vou criar outro post sobre uma dúvida referente a colisões.
Boa tarde.
Re: Dicas de como implementar um sistema de colocação de texturas
Se não me engano, existe um limite de 4UVs, então logo esse esquema se tornaria falho.
Uma forma que eu faria, seria separando em modo de edição e o modo de jogo (textura que iria pro jogo de fato). No modo de edição, sempre que eu adicionasse um decal, eu combinaria todos os decals até o momento em uma única textura, e manteria versões dela pro caso do player dar um Ctrl+Z kkk, ao final da edição, todos os decals seriam combinados em uma unica textura de decal, que seria aplicado sobre a textura principal.
Dessa forma teria apenas um drawcall, duas texturas e pouparia bastante dor de cabeça com UVs.
Uma forma que eu faria, seria separando em modo de edição e o modo de jogo (textura que iria pro jogo de fato). No modo de edição, sempre que eu adicionasse um decal, eu combinaria todos os decals até o momento em uma única textura, e manteria versões dela pro caso do player dar um Ctrl+Z kkk, ao final da edição, todos os decals seriam combinados em uma unica textura de decal, que seria aplicado sobre a textura principal.
Dessa forma teria apenas um drawcall, duas texturas e pouparia bastante dor de cabeça com UVs.
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
Esse é meu progresso por enquanto (graças ao shader do @SteveRogers):
Estou tentando achar um jeito de aplicar o decalque na textura base agora.
Estou tentando achar um jeito de aplicar o decalque na textura base agora.
Re: Dicas de como implementar um sistema de colocação de texturas
Eu te dei duas ideias via PM sobre como aplicar o decal na textura base.
Pro caso de outras pessoas acharem esse tópico com a mesma dúvida, segue a maneira mais fácil de conseguir combinar.
Você precisa de uma versão do mesmo shader só que insensível a luz, Unlit.
Aplique esse material num plano, certifique-se de que o mesmo esteja com o transform zerado.
Adicione uma câmera, reset o transform dela, e rotacione 90 graus no eixo x, fazendo com que ela fique virada para o plane.
Crie uma RenderTexture, defina a resolução igual à resolução da sua textura base, nesse caso, o tecido.
Jogue sua renderTexture no campo correspondente da sua câmera ortográfica.
Por padrão, a visão ficará exatamente do tamanho do plane, se você clicar na sua RenderTexture, verá que ela renderizou as duas texturas combinadas.
Seu trabalho agora é pegar essa Render texture e converter para uma Texture2D para usar normalmente no jogo. :D
Lembre-se de usar layers para impedir que a câmera principal veja esse plane.
Fazendo tudo certinho, você terá um resultado semelhante a esse:
Aproveitei pra corrigir um bug na rotação do decal, antes ele não tinha um pivô definido pra rotacionar, agora ele utiliza o meio da própria textura como eixo de rotação. Tudo deve funcionar corretamente.
Lembrando que, por serem shaders distintos, você terá que atualizar no shader unlit, todas as modificações que o player fizer no material do uniforme.
Link do shader unlit (para usar no plane):
https://drive.google.com/open?id=1LB3YB1Kbp0DOTkJRDZcECds4r0vzjFBL
Shader do shader Lit (para usar no modo de edição do uniforme)
https://drive.google.com/open?id=196FpC0zvnEtn4-JDMSCmVSB0XPioP6dl
Pro caso de outras pessoas acharem esse tópico com a mesma dúvida, segue a maneira mais fácil de conseguir combinar.
Você precisa de uma versão do mesmo shader só que insensível a luz, Unlit.
Aplique esse material num plano, certifique-se de que o mesmo esteja com o transform zerado.
Adicione uma câmera, reset o transform dela, e rotacione 90 graus no eixo x, fazendo com que ela fique virada para o plane.
Crie uma RenderTexture, defina a resolução igual à resolução da sua textura base, nesse caso, o tecido.
Jogue sua renderTexture no campo correspondente da sua câmera ortográfica.
Por padrão, a visão ficará exatamente do tamanho do plane, se você clicar na sua RenderTexture, verá que ela renderizou as duas texturas combinadas.
Seu trabalho agora é pegar essa Render texture e converter para uma Texture2D para usar normalmente no jogo. :D
Lembre-se de usar layers para impedir que a câmera principal veja esse plane.
Fazendo tudo certinho, você terá um resultado semelhante a esse:
Aproveitei pra corrigir um bug na rotação do decal, antes ele não tinha um pivô definido pra rotacionar, agora ele utiliza o meio da própria textura como eixo de rotação. Tudo deve funcionar corretamente.
Lembrando que, por serem shaders distintos, você terá que atualizar no shader unlit, todas as modificações que o player fizer no material do uniforme.
Link do shader unlit (para usar no plane):
https://drive.google.com/open?id=1LB3YB1Kbp0DOTkJRDZcECds4r0vzjFBL
Shader do shader Lit (para usar no modo de edição do uniforme)
https://drive.google.com/open?id=196FpC0zvnEtn4-JDMSCmVSB0XPioP6dl
SteveRogers- Instrutor
- PONTOS : 2672
REPUTAÇÃO : 156
Respeito as regras :
Re: Dicas de como implementar um sistema de colocação de texturas
Então, depois de alguns meses quebrando a cabeça e com uma ajuda imprescindível do @SteveRogers, consegui finalizar um protótipo funcional com o que eu queria. O sistema serve para criação de templates de uniformes de futebol, é possível colocar decalques em qualquer peça do uniforme, bem como girar, escalonar e espelhar os decalques. Os templates podem ser salvos, carregados e deletados. O sistema e os menus escalam bem, ou seja, estão preparados para N marcas cada uma com N templates cada. O vídeo abaixo mostra o meu progresso até agora:
Pode não parecer muito, mas considerando que tudo em cena foi feito por mim, até que estou satisfeito por enquanto, pelo menos melhorei minha programação no processo. Agora, vou me voltar a parte principal de qualquer jogo, o gameplay. Fica aqui novamente o meu agradecimento ao @SteveRogers pela força e ao @artplayer pela sugestão.
Pode não parecer muito, mas considerando que tudo em cena foi feito por mim, até que estou satisfeito por enquanto, pelo menos melhorei minha programação no processo. Agora, vou me voltar a parte principal de qualquer jogo, o gameplay. Fica aqui novamente o meu agradecimento ao @SteveRogers pela força e ao @artplayer pela sugestão.
Tópicos semelhantes
» Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
» Como implementar Gyroscope no FPSController ?
» Ajuda/dicas sistema de tiro gunbound/ddtank
» [Duvida] como implementar limite vector2
» Unity Admob GDPR (como implementar ?)
» Como implementar Gyroscope no FPSController ?
» Ajuda/dicas sistema de tiro gunbound/ddtank
» [Duvida] como implementar limite vector2
» Unity Admob GDPR (como implementar ?)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos