Reflexos girando de acordo com a saturação da cor
2 participantes
Página 1 de 1
Reflexos girando de acordo com a saturação da cor
Olá a todos tudo bem?
Estou desenvolvendo um game de carro, como sou bastante atencioso com alguns detalhes resolvi criar um shader pro material do carro, assim me dando mais liberdade para fazer ajustes
Porém, ele está com um problema que não sei o porque acontece. Os reflexos (todos eles, incluindo os Reflection Probe) estão girando quando a saturação da cor principal é alterada e eu não sei o porque.
Saturação Max (Aumentei o valor metálico da pintura para melhor visualização dos reflexos)
Saturação Mínima (Branco)
Estou desenvolvendo um game de carro, como sou bastante atencioso com alguns detalhes resolvi criar um shader pro material do carro, assim me dando mais liberdade para fazer ajustes
Porém, ele está com um problema que não sei o porque acontece. Os reflexos (todos eles, incluindo os Reflection Probe) estão girando quando a saturação da cor principal é alterada e eu não sei o porque.
- Código:
Shader "Veículos/CarPaint" {
Properties {
_Color ("Pintura", Color) = (1,1,1,1)
_MainTex ("Textura (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
_Raindrops("Gotas de Chuva", 2D) = "white" {}
_RainNoise("Gotas de Chuva2", 2D) = "white" {}
_RainScale("Profundidade das Gotas", Range(-1,1)) = 0
_Dust("Poeira", 2D) = "white" {}
_Dust2("Terra", 2D) = "white" {}
_DustColor ("DustColor", Color) = (1,1,1,1)
_DustAlpha ("Sujeira", Range(0,1)) = 1
}
CGINCLUDE
//@TODO: should this be pulled into a shader_feature, to be able to turn it off?
#define _GLOSSYENV 1
#define UNITY_SETUP_BRDF_INPUT SpecularSetup
ENDCG
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma target 3.0
#include "UnityPBSLighting.cginc"
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
sampler2D _Dust;
sampler2D _Dust2;
sampler2D _RainNoise;
sampler2D _Raindrops;
struct Input {
float2 uv_MainTex;
float2 uv_Dust;
float2 uv_Dust2;
float2 uv_RainNoise;
float2 uv_Raindrops;
};
half _Glossiness;
half _Metallic;
half _DustAlpha;
half _RainScale;
fixed4 _Color;
fixed4 _DustColor;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
//Dust
fixed4 t = tex2D (_Dust, IN.uv_Dust) * _DustColor;
fixed4 d = tex2D (_Dust2, IN.uv_Dust2) * (_DustColor);
// Albedo comes from a texture tinted by color
fixed4 e = tex2D (_Dust, IN.uv_Dust);
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = (c.rgb * (1 - (e.rgb) * (_DustAlpha)) + t.rgb * _DustAlpha);
//Rain
fixed4 n = tex2D (_Raindrops, IN.uv_Raindrops);
fixed4 m = tex2D (_RainNoise, IN.uv_RainNoise);
o.Normal = c.rgb + ((n.rgb - (m.rgb)) * _RainScale);
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic -((_DustAlpha * ((d.rgb * 10) * (t.rgb * 10)) * _DustAlpha) - (n.rgb * (_RainScale * 10)));
o.Smoothness = _Glossiness -((_DustAlpha * ((d.rgb * 10) * (t.rgb * 10)) * _DustAlpha) - (n.rgb * (_RainScale * 10)));
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Saturação Max (Aumentei o valor metálico da pintura para melhor visualização dos reflexos)
Saturação Mínima (Branco)
Re: Reflexos girando de acordo com a saturação da cor
Achei uma solução "tabajara" pro problema.AnderGames escreveu:Olá a todos tudo bem?
Estou desenvolvendo um game de carro, como sou bastante atencioso com alguns detalhes resolvi criar um shader pro material do carro, assim me dando mais liberdade para fazer ajustes
Porém, ele está com um problema que não sei o porque acontece. Os reflexos (todos eles, incluindo os Reflection Probe) estão girando quando a saturação da cor principal é alterada e eu não sei o porque.(O script está misturado português com inglês porque eu comecei fazendo ele vendo o tutorial da Unity (Unity Europe), depois fui mudando algumas coisas até conseguir um resultado)
- Código:
Shader "Veículos/CarPaint" {
Properties {
_Color ("Pintura", Color) = (1,1,1,1)
_MainTex ("Textura (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
_Raindrops("Gotas de Chuva", 2D) = "white" {}
_RainNoise("Gotas de Chuva2", 2D) = "white" {}
_RainScale("Profundidade das Gotas", Range(-1,1)) = 0
_Dust("Poeira", 2D) = "white" {}
_Dust2("Terra", 2D) = "white" {}
_DustColor ("DustColor", Color) = (1,1,1,1)
_DustAlpha ("Sujeira", Range(0,1)) = 1
}
CGINCLUDE
//@TODO: should this be pulled into a shader_feature, to be able to turn it off?
#define _GLOSSYENV 1
#define UNITY_SETUP_BRDF_INPUT SpecularSetup
ENDCG
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma target 3.0
#include "UnityPBSLighting.cginc"
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
sampler2D _Dust;
sampler2D _Dust2;
sampler2D _RainNoise;
sampler2D _Raindrops;
struct Input {
float2 uv_MainTex;
float2 uv_Dust;
float2 uv_Dust2;
float2 uv_RainNoise;
float2 uv_Raindrops;
};
half _Glossiness;
half _Metallic;
half _DustAlpha;
half _RainScale;
fixed4 _Color;
fixed4 _DustColor;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
//Dust
fixed4 t = tex2D (_Dust, IN.uv_Dust) * _DustColor;
fixed4 d = tex2D (_Dust2, IN.uv_Dust2) * (_DustColor);
// Albedo comes from a texture tinted by color
fixed4 e = tex2D (_Dust, IN.uv_Dust);
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = (c.rgb * (1 - (e.rgb) * (_DustAlpha)) + t.rgb * _DustAlpha);
//Rain
fixed4 n = tex2D (_Raindrops, IN.uv_Raindrops);
fixed4 m = tex2D (_RainNoise, IN.uv_RainNoise);
o.Normal = c.rgb + ((n.rgb - (m.rgb)) * _RainScale);
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic -((_DustAlpha * ((d.rgb * 10) * (t.rgb * 10)) * _DustAlpha) - (n.rgb * (_RainScale * 10)));
o.Smoothness = _Glossiness -((_DustAlpha * ((d.rgb * 10) * (t.rgb * 10)) * _DustAlpha) - (n.rgb * (_RainScale * 10)));
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Saturação Max (Aumentei o valor metálico da pintura para melhor visualização dos reflexos)
Saturação Mínima (Branco)
Os reflexos estavam girando de acordo com a cor, por causa do normal map do material que estava sendo multiplicado pela sua cor, O que eu fiz, foi basicamente criar uma propriedade da cor e e fazer com que o shader multiplique por essa
Código antigo
- Código:
//Rain
fixed4 n = tex2D (_Raindrops, IN.uv_Raindrops);
fixed4 m = tex2D (_RainNoise, IN.uv_RainNoise);
o.Normal = c.rgb + ((n.rgb - (m.rgb)) * _RainScale);
Código novo:
- Código:
//Rain
fixed4 n = tex2D (_Raindrops, IN.uv_Raindrops);
fixed4 m = tex2D (_RainNoise, IN.uv_RainNoise);
o.Normal = _RainColor + ((n.rgb - (m.rgb))) * _RainScale;
Vou disponibilizar o shader completo em outro tópico!
Re: Reflexos girando de acordo com a saturação da cor
Aconselho fortemente utilizar o shader 'Standard' com o Metallic, Smoothness e reflection probe, ou um FallBack simples (de fato, você utilizou o Diffuse).
Para lataria de carros eu geralmente utilizo Shader Standard, apenas com cor, smoothness em 0.92 e metallic em 0.25. Funciona na maioria das plataformas e fica legalzinho.
Para lataria de carros eu geralmente utilizo Shader Standard, apenas com cor, smoothness em 0.92 e metallic em 0.25. Funciona na maioria das plataformas e fica legalzinho.
Re: Reflexos girando de acordo com a saturação da cor
Sim, eu criei esse shader por cima do standart, porém adicionei novos efeitos de textura, como gotas de chuva na lataria e sujeiras no carro, que são coisas que além de adicionar as cores da textura, afetam a forma como a luz será refletida pelo objeto naquela determinada área.
Fazer as gotas de chuva, foi relativamente fácil, um normalmap com uma máscara diferente da textura utilizada pra gerar o efeito, quando o deslocamento da máscara é alterado, causa um falsa sensação de várias gotas caindo no no carro.
Agora eu quebrei um pouco a cabeça pra fazer o efeito de lama do veículo, porque além de ter q adicionar um textura por cima da cor, sem que a coloração da textura seja alterada com a cor do carro, também tive que pensar em como fazer apenas as as partes onde estava sujo ficar meio fosca, e a parte onde não havia sujeira, continuar refletindo. Mas felizmente, consegui! Vou dar uma organizada no shader e disponibiliza-lo gratuitamente aqui.
Fazer as gotas de chuva, foi relativamente fácil, um normalmap com uma máscara diferente da textura utilizada pra gerar o efeito, quando o deslocamento da máscara é alterado, causa um falsa sensação de várias gotas caindo no no carro.
Agora eu quebrei um pouco a cabeça pra fazer o efeito de lama do veículo, porque além de ter q adicionar um textura por cima da cor, sem que a coloração da textura seja alterada com a cor do carro, também tive que pensar em como fazer apenas as as partes onde estava sujo ficar meio fosca, e a parte onde não havia sujeira, continuar refletindo. Mas felizmente, consegui! Vou dar uma organizada no shader e disponibiliza-lo gratuitamente aqui.
Tópicos semelhantes
» Objetos girando em órbita de outro
» Meu objeto me atravessa quando esta girando.
» como fazer o baked das luzes sem perder a qualidade e os reflexos?
» Player girando e animação não executa
» Volante girando errado [AJUDA]
» Meu objeto me atravessa quando esta girando.
» como fazer o baked das luzes sem perder a qualidade e os reflexos?
» Player girando e animação não executa
» Volante girando errado [AJUDA]
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos