Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
SavitarDev

Problema con un Shader (es simple)

Recommended Posts

Hola, se que en este grupo la mayoria no programa en Shaders, pero bueno a ver si un alma que si programe en shaders lo pueda ver y ayudarme. No encuentro el error mas que me dice que todas las salidas del sombreador pero eso no lo entiendo aca el codigo:

 

Shader "Unlit/ShaderPracticles"
{
	Properties
	{
		_ColorPrimario("color",Color) = (1,1,1,1)
		_ColorEmission("Color",Color) = (1,1,1,1)
		_EmissionIntensity("value",Range(0,1)) = 0.0
		_DiffuseIntesity("Value",Range(0,5)) = 0.0
		_MainText("Texture",2D) = "white" {}
	}
	SubShader
	{
		Tags { "LightMode"="ForwardBase" }

		LOD 100

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
		
			#include "UnityCG.cginc"
			
			fixed4 _ColorPrimario;
			fixed4 _ColorEmission;
			fixed4 _LightColor0;
			half _EmissionIntensity;
			half _DiffuseIntesity;
			sampler2D _MainText;
			fixed4 _MainText_ST;
			
			struct v2f
			{
				float4 vertex : SV_POSITION ;
				float2 uv : TEXCOORD0;
				float4 color : COLOR;
			
			};

			
			v2f vert ( appdata_base v)
			{
				v2f o;
				fixed3 normals = normalize(mul(v.normal,(fixed3x3)unity_WorldToObject));
				fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
				half NdotL = max(0.0,dot(normals,lightDir));
				fixed4 diff = NdotL * _ColorPrimario * _LightColor0;
				o.color = diff;
				o.uv = TRANSFORM_TEX(v.texcoord,_MainText);
				return o;

			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				fixed3 c = _ColorEmission.rgb * _EmissionIntensity;
				i.color.rgb = c;

				return i.color;
			}
			ENDCG
		}
	}
}

Y mi error es: Output variable vert contains a system-interpreted value (SV_POSITION) which must be written in every execution path of the shader.  Unconditional initialization may help. at line 41 (on d3d11).

 

Nunca entendí este error, aunque si he pasado horas tratando de arreglarlo. Disculpen nuevamente se que acá la mayoria programa es en c#. Pero el desespero abunda en mi jajajaja.

 

Ah, no ya lo solucione, disculpen. Para quienes tengan este problema en verdad es de muy novatos jajajaja (como yo al parecer). Hay que enviar las coordenadas de salidas a las del clip pos osea:

v2f vert( appdata_base v) 
			{
				v2f o;
				fixed3 normals = normalize(mul(v.normal,(fixed3x3)unity_WorldToObject));
				fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
				half NdotL = max(0.0,dot(normals,lightDir));
				fixed4 diff = NdotL * _ColorPrimario * _LightColor0;
				o.vertex = UnityObjectToClipPos(v.vertex); <- Miren, hay que hacer esto
				o.color = diff;
				o.uv = TRANSFORM_TEX(v.texcoord,_MainText);
				return o;

			}

 

Edited by SavitarDev

Share this post


Link to post
Share on other sites

ok, no lo he testeado pero creo que es porque no añades la posicion a "v2f o" 

has creado v2f con tres variables:

vertex, uv, y color.

y en tu shader pones:

o.color = diff;
				o.uv = TRANSFORM_TEX(v.texcoord,_MainText);
				return o;

pero en ningun momento asignas la posicion (vertex)

antes del "return o", pon:

 

 o.vertex = UnityObjectToClipPos(v.vertex);

 

 

v.vertex es por:

vert ( appdata_base v)

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...