Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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
0
Question by SP0KK0 · Jan 07, 2013 at 07:52 PM · shaderadditivetint

Adding tint color variable to shader

hey

I'm a bit confused on shaders and programming them. I've looked at some other questions like this on unity Q&A but I still didn't totally understand what to do.

I'm trying to add a tint colour variable to the shader Particles/Additive (soft) but don't know how to do this. I have the source code here:

 Shader "Particles/Additive (Soft)" {
 Properties {
     _MainTex ("Particle Texture", 2D) = "white" {}
     _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
 }
 
 Category {
     Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
     Blend One OneMinusSrcColor
     ColorMask RGB
     Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
     BindChannels {
         Bind "Color", color
         Bind "Vertex", vertex
         Bind "TexCoord", texcoord
     }
 
     // ---- Fragment program cards
     SubShader {
         Pass {
         
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma fragmentoption ARB_precision_hint_fastest
             #pragma multi_compile_particles
 
             #include "UnityCG.cginc"
 
             sampler2D _MainTex;
             fixed4 _TintColor;
             
             struct appdata_t {
                 float4 vertex : POSITION;
                 fixed4 color : COLOR;
                 float2 texcoord : TEXCOORD0;
             };
 
             struct v2f {
                 float4 vertex : POSITION;
                 fixed4 color : COLOR;
                 float2 texcoord : TEXCOORD0;
                 #ifdef SOFTPARTICLES_ON
                 float4 projPos : TEXCOORD1;
                 #endif
             };
 
             float4 _MainTex_ST;
             
             v2f vert (appdata_t v)
             {
                 v2f o;
                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                 #ifdef SOFTPARTICLES_ON
                 o.projPos = ComputeScreenPos (o.vertex);
                 COMPUTE_EYEDEPTH(o.projPos.z);
                 #endif
                 o.color = v.color;
                 o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
                 return o;
             }
 
             sampler2D _CameraDepthTexture;
             float _InvFade;
             
             fixed4 frag (v2f i) : COLOR
             {
                 #ifdef SOFTPARTICLES_ON
                 float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
                 float partZ = i.projPos.z;
                 float fade = saturate (_InvFade * (sceneZ-partZ));
                 i.color.a *= fade;
                 #endif
                 
                 half4 prev = i.color * tex2D(_MainTex, i.texcoord);
                 prev.rgb *= prev.a;
                 return prev;
             }
             ENDCG 
         }
     }     
 
     // ---- Dual texture cards
     SubShader {
         Pass {
             SetTexture [_MainTex] {
                 combine texture * primary
             }
             SetTexture [_MainTex] {
                 combine previous * previous alpha, previous
             }
         }
     }
     
     // ---- Single texture cards (does not do particle colors)
     SubShader {
         Pass {
             SetTexture [_MainTex] {
                 combine texture * texture alpha, texture
             }
         }
     }
 }
 }

So I'm trying to add a tint colour variable to that. I'm not sure if its a large or small job to add it to this shader. Thanks for all replies in advance.

EDIT:

Thanks for your reply cgcookie, your upcoming shader vids look good too, unfortunately the code your gave me produced these errors: see pic

alt text

picture1.png (297.8 kB)
Comment
Add comment
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
0

Answer by cgcookie · Jan 07, 2013 at 08:30 PM

Hi, we will be covering how to do this soon in our new series: http://forum.unity3d.com/threads/165056-Noob-to-Pro-Shader-writing-in-Unity-4

To answer your question now: You need to have a color property for the tinting, a definition to get that property to the CG section, and a multiplier to do the actual tinting.

Not a lot of work actually ;)

Here is your ammended code:

 Shader "Particles/Additive (Soft)" {
 Properties {
     _MainTex ("Particle Texture", 2D) = "white" {}
     _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
     _TintColor("Color Tint", Color) = (1,1,1,1)
 }
 
 Category {
     Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
     Blend One OneMinusSrcColor
     ColorMask RGB
     Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
     BindChannels {
        Bind "Color", color
        Bind "Vertex", vertex
        Bind "TexCoord", texcoord
     }
 
     // ---- Fragment program cards
     SubShader {
        Pass {
 
          CGPROGRAM
          #pragma vertex vert
          #pragma fragment frag
          #pragma fragmentoption ARB_precision_hint_fastest
          #pragma multi_compile_particles
 
          #include "UnityCG.cginc"
 
          sampler2D _MainTex;
          fixed4 _TintColor;
 
          struct appdata_t {
           float4 vertex : POSITION;
           fixed4 color : COLOR;
           float2 texcoord : TEXCOORD0;
          };
 
          struct v2f {
           float4 vertex : POSITION;
           fixed4 color : COLOR;
           float2 texcoord : TEXCOORD0;
           #ifdef SOFTPARTICLES_ON
           float4 projPos : TEXCOORD1;
           #endif
          };
 
          float4 _MainTex_ST;
 
          v2f vert (appdata_t v)
          {
           v2f o;
           o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
           #ifdef SOFTPARTICLES_ON
           o.projPos = ComputeScreenPos (o.vertex);
           COMPUTE_EYEDEPTH(o.projPos.z);
           #endif
           o.color = v.color;
           o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
           return o;
          }
 
          sampler2D _CameraDepthTexture;
          float _InvFade;
 
          fixed4 frag (v2f i) : COLOR
          {
           #ifdef SOFTPARTICLES_ON
           float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
           float partZ = i.projPos.z;
           float fade = saturate (_InvFade * (sceneZ-partZ));
           i.color.a *= fade;
           #endif
 
           half4 prev = i.color _ColorTint * tex2D(_MainTex, i.texcoord);
           prev.rgb *= prev.a;
           return prev;
          }
          ENDCG 
        }
     }  
 
     // ---- Dual texture cards
     SubShader {
        Pass {
          SetTexture [_MainTex] {
           combine texture * primary
          }
          SetTexture [_MainTex] {
           combine previous * previous alpha, previous
          }
        }
     }
 
     // ---- Single texture cards (does not do particle colors)
     SubShader {
        Pass {
          SetTexture [_MainTex] {
           combine texture * texture alpha, texture
          }
        }
     }
 }
 }
Comment
Add comment · Show 1 · 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
avatar image SP0KK0 · Jan 07, 2013 at 09:22 PM 0
Share

I found out what the problem was, on line 76 it should be;

half4 prev = i.color _TintColor tex2D(_$$anonymous$$ainTex, i.texcoord);

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.

Follow this Question

Answers Answers and Comments

8 People are following this question.

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

Related Questions

Tint the visible parts of an Additive texture 0 Answers

Tint an Additive shader 1 Answer

shader mobile / particles / additive with black & white texture turns out red 1 Answer

Shader: Masked Tint with Transparency 0 Answers

How to make additive-shaded particles appear behind sprites? 2 Answers


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