Como usar e programar shaders no unity?
2 participantes
Página 1 de 1
Como usar e programar shaders no unity?
Bom, eu resolvi começar a aprender a programar Shaders via script, com a linguagem ShaderLab, uma adaptação da unity para programar shaders, baseadas em Cg, HLSL e GLSL, eu estudei o basico e entendi algumas coisas, porém toda vez que crio um material para esse shader ele fica totalmente rosa e toda vez que eu seto ou altero qualquer Propriedade, seja _Color ou _Smoothness e etc. ele não atualiza no material.
Enfim, estou quase desistindo de aprender esse treco, se alguem ja sabe ou consegue me ajudar, eu Agradeço muito e se conseguisse me indicar algum tutorial me ajudaria muito.
Enfim, estou quase desistindo de aprender esse treco, se alguem ja sabe ou consegue me ajudar, eu Agradeço muito e se conseguisse me indicar algum tutorial me ajudaria muito.
- Código:
Shader "Unlit/ShaderTut"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Como usar e programar shaders no unity?
Eu ja sei um pouco sobre shader graph, ja estou focando em shader graph a mais ou menos 1 mes e acho uma ferramenta incrivel, porém acho que por script seria mais facil de editar e compreender mais esses sistemas de shaders e materiais. Ja dei umas olhadas de tutoriais, porém nao tem nenhum portugues e vi alguns canais gringos que me ajudaram a entenderf o basico, principalmente o tutorial do Unity Manual. Voce que ja tem um conhecimento sobre shaders, voce poderia me tirar uma duvida? A uma diferença entre shader por escritos (ShaderLab) e Shader Graph? Em relação a graficos ou outro aspecto? Obrigado pela resposta
Vou deixar uma demonstração de quando coloco uma nova propriedade, a cor nao atualiza:
Pelo que eu aprendi a cor que eu coloquei segue o padrão RGBA e (10% Vermelho, 80% Verde, 60% Azul, 100% Alpha)
e ela aparece perfeitamente, porém se eu alterar esse valor novamente a cor nao munda, continua a primaria.
Simplesmente continua o mesmo verde, porém era para ser um vermelho rosado. Ele só atualiza se eu criar um outro material. Tem como resolver isso?
Vou deixar uma demonstração de quando coloco uma nova propriedade, a cor nao atualiza:
Pelo que eu aprendi a cor que eu coloquei segue o padrão RGBA e (10% Vermelho, 80% Verde, 60% Azul, 100% Alpha)
- Código:
Shader "Unlit/ShaderTut"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (0.1, 0.8, 0.6, 1)
}
e ela aparece perfeitamente, porém se eu alterar esse valor novamente a cor nao munda, continua a primaria.
- Código:
Shader "Unlit/ShaderTut"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (0.9, 0.1, 0.3, 1)
}
Simplesmente continua o mesmo verde, porém era para ser um vermelho rosado. Ele só atualiza se eu criar um outro material. Tem como resolver isso?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Como usar e programar shaders no unity?
Então, você só tá declarando as propriedades, mas não declarou o que vai pro shader em si.
Declarar uma propriedade não diz ao shader como aquela cor/imagem vai ser usada, você precisa fazer isso no vertex ou fragment shader.
Em cima do Vertex shader, você vai ver que tem duas variáveis declaradas _MainTex e _MainTex_ST, uma delas tem o mesmo nome da propriedade, é assim que você tem que declarar a variável que vai ser usada no shader, com o nome idêntico à propriedade.
no seu caso fica assim:
_Color é declarado como fixed4, nome idêntico à propriedade;
_Color precisa ser multiplicado pela cor da textura no Fragment Shader, pra contribuir com a cor final;
Declarar uma propriedade não diz ao shader como aquela cor/imagem vai ser usada, você precisa fazer isso no vertex ou fragment shader.
Em cima do Vertex shader, você vai ver que tem duas variáveis declaradas _MainTex e _MainTex_ST, uma delas tem o mesmo nome da propriedade, é assim que você tem que declarar a variável que vai ser usada no shader, com o nome idêntico à propriedade.
no seu caso fica assim:
_Color é declarado como fixed4, nome idêntico à propriedade;
_Color precisa ser multiplicado pela cor da textura no Fragment Shader, pra contribuir com a cor final;
- Código:
Shader "Unlit/ShaderTut"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
_Color("Color", Color) = (0.1, 0.8, 0.6, 1)
}
SubShader
{
Tags { "RenderType" = "Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv) * _Color;
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Como usar e programar shaders no unity?
Muito obrigado!
Vou dar mais uma estuda em relação a ess fixed4, float4 e esses v2f, pois nao faço a minima ideia pra que servem, eu sei colocar as propriedades, porem ainda nao sei como usalas, obrigado por me ajudar.
Vou dar mais uma estuda em relação a ess fixed4, float4 e esses v2f, pois nao faço a minima ideia pra que servem, eu sei colocar as propriedades, porem ainda nao sei como usalas, obrigado por me ajudar.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» Como muda o shaders da unity
» Como Programar em C# no unity 5 do inicio
» COMO USAR AS ANIMAÇOES E QUAIS SCRITS ? UNITY 5
» Como programar um sistema para fazer o Player puxar um objetos no Unity
» Como usar o Unity Monetization 3.0.1?
» Como Programar em C# no unity 5 do inicio
» COMO USAR AS ANIMAÇOES E QUAIS SCRITS ? UNITY 5
» Como programar um sistema para fazer o Player puxar um objetos no Unity
» Como usar o Unity Monetization 3.0.1?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos