• 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 badescuga9 · Jan 29, 2013 at 01:46 PM · shadershaderlab

optimising shaderlab code and using properties variable

i've written a shader using shaderlab, that has a solid color on top of a texture and as the alpha for the solid color gets lower, the color and the texture blend together, leaving only the texture when alpha is 0. Here is the code:

  Shader "Custom/colorToOpaqueShader" {
         Properties {
             _MainTex ("main texture", 2D) = "white" {}
             _Color ("Color",Color) = (1,1,0,1)
             _ColorOpacity("Color Opacity",Float) = 1
                 }
         
         SubShader {
             
             
             Pass 
             {
             SetTexture[_MainTex]
             }
             
             Pass
             {
                 Blend SrcAlpha OneMinusSrcAlpha
                 Material 
                 {
                    Diffuse (1,1,1,.2)
                  }
              Lighting On
             }
             
             Pass
             {
             Blend SrcAlpha OneMinusSrcAlpha
           Material {
                    Diffuse [_Color]
                }
               Lighting On
               
             }
             
     
         } 
         
     }

First pass sets the texture, second pass adds a diffuse to the texture and the third pass sets out the color on top.

First question:

i would like to be able to control the color opacity using only a variable, not setting the entire color.

i.e. in the third pass i would like to have something like this:

 Diffuse(_Color.r,_Color.g,_Color.b,_ColorOpacity)

But 1) i can't get _Color.r using this sintax and 2) Although i have _ColorOpacity declared in properties, it doesn't seem to be usable (can't be recognized by unity)

Second question:

I haven't ever written a shader until today and was wondering how can i optimise this code.. 3 passes shoulds like a lot for such a small effect, i'm sure it could have been written in 1.

Third question:

How can i declare iterators in Shaderlab? i would like to have a int file that grows every frame, and have the opacity set something like

 Diffuse (.2,.2,.2, (i%40)/40)

I know i can set a variable from scripts, but i would like this functionality to be incorporated directly in a shader.

Note: If it is at your disposal, including a CG code example of this functionality would be great. I would like to start learning both shaderlab and cg to have a better grasp of the concepts

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 Julien-Lynge · Jan 30, 2013 at 03:18 AM

Sorry, you have way too many questions for a single question. Please post them individually.

I'll try to answer what questions I can:

First, you can set the alpha separately with texture combiners. See this page:

http://docs.unity3d.com/Documentation/Components/SL-SetTexture.html

and look for Separate Alpha & Color computation.

/////////////////////////////////////////////////////////

If you're interested in learning Cg, here are some resources:

http://en.wikibooks.org/wiki/Cg_Programming/Unity

http://www.gamedev.net/topic/600658-best-place-to-start-shader-programming/

If you want to learn more about ShaderLab (the code you posted), this is a great set of tutorials:

http://www.burgzergarcade.com/unity-ios-shaderlab

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.

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

10 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

Related Questions

How to move vertices up/down randomly in shader. 1 Answer

Can anyone help me with reflective shader with fall off property? 0 Answers

Shader not working properly in Deferred render mode 0 Answers

Logical BlendOp not working 0 Answers

Shader which supports vertex colors and pixel lights? 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