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 jfjordanfarr · Jul 03, 2015 at 07:40 AM · shadersalphacgshader writingrender texture

Shader Help? Need an Alpha Test, then a "set pixel" sort of command

Hello hello!

Recently I've been trying to set up a shader (or shaders) for simple 2D fluids that can do two things, in order:

  1. Run an alpha test on a texture input (from a render texture).

  2. Set any pixel which does not get cut in the alpha test to an EXACT UNIFORM color and alpha value, then output that texture to be applied on a plane (plane must be able to have semi-transparency when rendered with a normal camera).

No lighting, no bump, no sneaky vertex operations, just plain old pixel output. This doesn't seem too tricky, but I've had astonishing difficulty with it! I've tested lots and lots of alpha testing code that is floating around in Unity forums here and there (especially this one http://wiki.unity3d.com/index.php/VegetationTwoPass), but to no avail. Generally the output is either black with full alpha, or a severely darkened color of choice, again with full alpha.

I'm also no shader programmer myself, so my main troubles here may even relate to simple syntax.

Can anybody point me in the direction of a shader, or help me write a shader, which performs this seemingly simple functionality? Cgprogram surface shaders are prefered, but I'd be okay doing vertex and fragment operations if need be. At the end of the day, it's just gotta work.

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 jfjordanfarr · Jul 22, 2015 at 12:44 AM

Solved!

Here's the shader code itself:

     Shader "Custom/JordanAlphaTest" {
         Properties {
         _Color ("Main Color", Color) = (.5, .5, .5, .5)
             _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {}
             _Cutoff ("Base Alpha cutoff", Range (0,1)) = .5
         }
      
      
         SubShader {
      
         Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
        
          Blend SrcAlpha OneMinusSrcAlpha
        
         Pass
         {
             CGPROGRAM
                 #pragma vertex vert
                 #pragma fragment frag
              
                 #include "UnityCG.cginc"
              
                 sampler2D _MainTex;
                 fixed _Cutoff;
                 fixed4 _Color;
              
                 struct v2f
                 {
                     float4  pos : SV_POSITION;
                     float2  uv : TEXCOORD0;
                 };
      
                 v2f vert (appdata_base v)
                 {
                     v2f o;
                     o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                     o.uv = v.texcoord.xy;
                     return o;
                 }
      
                 float4 frag(v2f i) : COLOR
                 {
                     float4 c = tex2D(_MainTex, i.uv);
                     clip(c.a - _Cutoff);
                     c.rgb = _Color.rgb;
                     c.a = _Color.a;
                     return c;
                 }
             ENDCG
         }
      
     }
     }
 

This shader was applied to a stretched quad which follows the main camera around. MainTex is a Render Texture. I also had to separately apply a sorting layer and order in layer to the quad (just in an attached script) to get this to not cover up 2D objects in the scene. Lastly, applying a blur camera effect to the Render Texture camera greatly improved the fluid look.

Comment
Add comment · 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.

Follow this Question

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

Related Questions

Triplanar shaders that use the position and rotation of the attached object (or local Triplanar shaders) 0 Answers

Depth mask with alpha / adding alpha to frag grabpass shader 0 Answers

How can i add a alpha value to this shader? 1 Answer

Dissolve Shader Problem 1 Answer

Obtaining relative speed of vertex in a 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