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 fawnha · Jan 07, 2013 at 06:05 AM · alphablendingchannel

Separate color/alpha blending problem

I am trying to create a shader which alpha blends a solid color over some rendered geometry in a second pass. I do this to highlight the object in the world as can be seen in games like Return To Castle Wolfenstein. I plan to do this by storing the blend factor in the src alpha channel in the second pass and use this as a blend factor when blending with the geometry rendered in the first pass. My shader code is as follows:

Shader "Custom/Color" { Properties { _Color ("Main Color", Color) = (1,0.5,0.5,1) _MainTex("Base (RGB)", 2D) = "white" {} _Cutoff("Alpha cutoff", Range(0, 1)) = 0.5 } SubShader { Tags { "Queue" = "AlphaTest" "RenderType" = "TransparentCutout" }

     //Cull front

     CGPROGRAM
     #pragma surface surf Ramp alphatest:_Cutoff vertex:vert
         float4 _Color;

     sampler2D _MainTex;

     // Set by script:
     // Shader.SetGlobalTexture("_Ramp", MY_TOON_RAMP)
     sampler2D _Ramp;

     struct Input
     {
         float2 uv_MainTex;
         float3 worldNormal;
     };

     void vert(inout appdata_full v, out Input o)
     {
         //v.normal = v.normal * -1;
     }

     half4 LightingRamp(SurfaceOutput s, half3 lightDir, half atten)
     {
         half NdotL = dot(s.Normal, lightDir);
         half diff =  NdotL * 0.5 + 0.5;
         half3 ramp = tex2D(_Ramp, float2(diff)).rgb;
         half4 c;
         c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2);
         c.a = s.Alpha;
         return c;
     }

     void surf (Input IN, inout SurfaceOutput o)
     {
         half4 c = tex2D(_MainTex, IN.uv_MainTex);
         o.Albedo = c.rgb;
         o.Alpha = c.a;
     }
     ENDCG
     
     //Cull front
     Blend SrcAlpha OneMinusSrcAlpha, Zero One
     Pass{
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #include "UnityCG.cginc"
             float4 _Color;
             sampler2D _MainTex;
             float _factor;
             struct v2f {
                float4 pos : SV_POSITION;
                float3 color : COLOR0;
                float2 uv : TEXCOORD0;
             };
             
             float4 _MainTex_ST;
             
             v2f vert (appdata_base v)
             {
                v2f o;
                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                o.color = _Color;
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
             }
             
             half4 frag (v2f i) : COLOR
             {
                 half4 texcol = tex2D(_MainTex, i.uv);
                //return (texcol*2) * _Color;
                float4 color = _Color;
                color.a = texcol.a;
                return color;
             }
             ENDCG
     }
 } 
 FallBack "Diffuse"

}

The important line is:

Blend SrcAlpha OneMinusSrcAlpha, Zero One. Here I intend to use the alpha channel of the prerendered object which has the cookie cutter code so I still get the cookie cutter effect (via the seperate alpha channel blend Zero One) but this has no effect. The separate alpha channel blend is ignored. I would expect that if I set this to Zero Zero nothing would be rendered but it is still rendered and the alpha channel blend is performed using the color channel blend factors. How do I perform separate alpha channel blending?

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

0 Replies

· Add your reply
  • Sort: 

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

Blending terrain textures inside the same alpha map via code 0 Answers

alpha mapping on 3D objects 1 Answer

RenderTexture Painting - color blending issues 1 Answer

Transparent brush overlap 'dotting' effect problem 1 Answer

alpha maps as a separate file... 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