Jump to content
Unity Insider Forum
Sign in to follow this  
Antragon

Sprite Shader- Color Tint

Recommended Posts

Moin moin,

Ich brauche einen Shader für Sprites, welcher Schatten erzeugen und "empfangen" kann. Nach ein wenig Internet-Recherche habe ich einen Shader gefunden, der genau das macht- Allerdings kann ich mit diesem Shader nicht mehr die Sprites einfärben (siehe Bild).Beispiel.thumb.png.a01caae5299953f7c179e803f4eb067d.png

 

Könnte mir jemand den folgenden Shader-Code so anpassen, dass das mit der Farbe funktioniert?

Shader "Sprites/Beat/Diffuse-Shadow"
{
    Properties
    {
        [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
        _Color ("Tint", Color) = (1,1,1,1)
        _Cutoff ("Shadow alpha cutoff", Range(0,1)) = 0.5
    }
 
    SubShader
    {
        Tags
        {
            "Queue"="AlphaTest"
            "IgnoreProjector"="True"
            "RenderType"="TransparentCutout"
            "PreviewType"="Plane"
            "CanUseSpriteAtlas"="True"
        }
 
        LOD 200
        Cull Off
        Lighting On
        ZWrite Off
 
        CGPROGRAM
        #pragma surface surf Lambert addshadow alphatest:_Cutoff
 
        sampler2D _MainTex;
        fixed4 _Color;
 
        struct Input
        {
            float2 uv_MainTex;
        };
 
        void surf (Input IN, inout SurfaceOutput o)
        {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
 
    Fallback "Legacy Shaders/Transparent/Cutout/VertexLit"
}

 

PS: Ich habe mich versucht, in das Thema Shader reinzuarbeiten, konnte bisher aber noch bei keinem Tutorial den Code nachvollziehen. :wacko:

Share this post


Link to post
Share on other sites

So, nun hab ich aber was gut :)

Hier der Shader (ich habe noch ein paar Zeilen aus dem Original Sprite Shader eingefügt für's PixelSnap und Flipping):

Shader "Sprites/Beat/Diffuse-Shadow"
{
	Properties
	{
		[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
	    _Color("Tint", Color) = (1,1,1,1)
		[MaterialToggle] PixelSnap("Pixel snap", Float) = 0
		[HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
		[HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
		_Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.5
	}

		SubShader
	{
		Tags
	{
		"Queue" = "AlphaTest"
		"IgnoreProjector" = "True"
		"RenderType" = "TransparentCutout"
		"PreviewType" = "Plane"
		"CanUseSpriteAtlas" = "True"
	}

		LOD 200
		Cull Off
		Lighting On
		ZWrite Off

		CGPROGRAM
#pragma surface surf Lambert vertex:vert addshadow alphatest:_Cutoff
#pragma multi_compile _ PIXELSNAP_ON
#include "UnitySprites.cginc"

	struct Input
	{
		float2 uv_MainTex;
		fixed4 color;
	};

		void vert(inout appdata_full v, out Input o)
		{
			v.vertex.xy *= _Flip.xy;

#if defined(PIXELSNAP_ON)
			v.vertex = UnityPixelSnap(v.vertex);
#endif 

			UNITY_INITIALIZE_OUTPUT(Input, o);
			o.color = v.color * _Color * _RendererColor;
		}

	void surf(Input IN, inout SurfaceOutput o)
	{
		fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * IN.color;
		o.Albedo = c.rgb;
		o.Alpha = c.a;
	}
	ENDCG
	}

		Fallback "Legacy Shaders/Transparent/Cutout/VertexLit"
}


Dieses Skript ist auch noch notwendig, damit der Sprite Renderer auch Schatten weiterleitet:

using UnityEngine;
using UnityEngine.Rendering;

public class ControlSpriteRenderer : MonoBehaviour {

    private Renderer render;

	// Use this for initialization
	void Start () {
        render = GetComponent<Renderer>();
        render.receiveShadows = true;
        render.shadowCastingMode = ShadowCastingMode.On;
    }
	
}

Der Schattenwurf scheint aber nur für's Directional-Light zu funktionieren. Bei einem Spot-Light scheinen keine Schatten zu entstehen ...

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×