• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by TheDevGuy · Jan 13, 2016 at 09:33 PM · unity 5shadercolorprojectorattribute

Add Color to Projection Shader

So basically i have a working shader that uses the textures color and projects that in a projector. I actually want to add a color attribute so that i can further customize the projection texture.

Here is the projection shader:

 Shader "Projector/Transparent Lit/Targeting Reticle" {
    Properties {
       _Color ("Main Color", Color) = (1,1,1,1)
       _ShadowTex ("Projected Image", 2D) = "white" {}
    }
    SubShader {
       Pass {      
          Blend One One 
             // add color of _ShadowTex to the color in the framebuffer 
          ZWrite Off // don't change depths
          Offset -1, -1 // avoid depth fighting
 
          CGPROGRAM
  
          #pragma vertex vert  
          #pragma fragment frag 
  
          // User-specified properties
          uniform sampler2D _ShadowTex; 
  
          // Projector-specific uniforms
          uniform float4x4 _Projector; // transformation matrix 
             // from object space to projector space 
  
           struct vertexInput {
             float4 vertex : POSITION;
             float3 normal : NORMAL;
          };
          struct vertexOutput {
             float4 pos : SV_POSITION;
             float4 posProj : TEXCOORD0;
                // position in projector space
          };
  
          vertexOutput vert(vertexInput input) 
          {
             vertexOutput output;
  
             output.posProj = mul(_Projector, input.vertex);
             output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
             return output;
          }
  
  
          float4 frag(vertexOutput input) : COLOR
          {
             if (input.posProj.w > 0.0) // in front of projector?
             {
                return tex2D(_ShadowTex , 
                   input.posProj.xy / input.posProj.w); 
                // alternatively: return tex2Dproj(  
                //    _ShadowTex, input.posProj);
             }
             else // behind projector
             {
                return float4(0.0, 0.0, 0.0, 0.0);
             }
          }
  
          ENDCG
       }
    }  
    // The definition of a fallback shader should be commented out 
    // during development:
    // Fallback "Projector/Light"
 }
Comment

People who like this

0 Show 0
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
Best Answer

Answer by TheDevGuy · Jan 14, 2016 at 05:30 PM

This is the code for a working shader that allows you to tint the original image.

Make sure you have an image with a BLACK backdrop and WHITE graphic and set the texture type to COOKIE/SPOTLIGHT/ALPHA FROM GRAYSCALE.

 Shader "Projector/AdditiveTint" {
     Properties {
         _Color ("Tint Color", Color) = (1,1,1,1)
         _Attenuation ("Falloff", Range(0.0, 1.0)) = 1.0
         _ShadowTex ("Cookie", 2D) = "gray" {}
     }
     Subshader {
         Tags {"Queue"="Transparent"}
         Pass {
             ZWrite Off
             ColorMask RGB
             Blend SrcAlpha One // Additive blending
             Offset -1, -1
 
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #include "UnityCG.cginc"
             
             struct v2f {
                 float4 uvShadow : TEXCOORD0;
                 float4 pos : SV_POSITION;
             };
             
             float4x4 _Projector;
             float4x4 _ProjectorClip;
             
             v2f vert (float4 vertex : POSITION)
             {
                 v2f o;
                 o.pos = mul (UNITY_MATRIX_MVP, vertex);
                 o.uvShadow = mul (_Projector, vertex);
                 return o;
             }
             
             sampler2D _ShadowTex;
             fixed4 _Color;
             float _Attenuation;
             
             fixed4 frag (v2f i) : SV_Target
             {
                 // Apply alpha mask
                 fixed4 texCookie = tex2Dproj (_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
                 fixed4 outColor = _Color * texCookie.a;
                 // Attenuation
                 float depth = i.uvShadow.z; // [-1 (near), 1 (far)]
                 return outColor * clamp(1.0 - abs(depth) + _Attenuation, 0.0, 1.0);
             }
             ENDCG
         }
     }
 }
Comment
ivanmotta
Aseemy

People who like this

2 Show 0 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

49 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to make a part of a texture on an object seamlessly change to another texture? 0 Answers

Problem Changin Standard shader Alpha Channel 0 Answers

Material doesn't have a color property '_Color' 4 Answers

How to edit this shader to use diffuse lighting (2D) 0 Answers

Can someone add a Main Color attribute to this shader? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges