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 betaFlux · Sep 05, 2014 at 09:04 PM · shadertexturecoloralpha

Need Help adding Main Color Property to a complicated Shader

Good day!

I have gotten my hands on a great hair shader, the best i've ever seen so far. Now I need to change the main color, but I don't have a clue how this can be done. I googled a lot and tried alot but it seems I'm not capable to get the magic done within this beast of a script.

     Shader "Custom/Hair Soft Edge Surface" {
         Properties {
             _Color ("Main Color", Color) = (1,1,1,1)
 
             _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "black" {}
             _SpecularTex ("Specular (R) Gloss (G) Null (B)", 2D) = "gray" {}
             _BumpMap ("Normal (Normal)", 2D) = "bump" {}
             _AnisoDirection ("Anisotropic Direction (RGB) Anisotropic Mask (A)", 2D) = "bump" {}
             _AnisoOffset ("Anisotropic Highlight Offset", Range(-0.5,0.5)) = -0.2
             _Cutoff ("Alpha Cut-Off Threshold", Range(0,1)) = 0.5
             _Fresnel ("Fresnel Value", Float) = 0.028
         }
      
         SubShader {
 
             Tags { "RenderType" = "TransparentCutout" }
             Cull Off
             CGPROGRAM
                 #pragma surface surf ExplorationSoftHair fullforwardshadows exclude_path:prepass nolightmap nodirlightmap
                 #pragma target 3.0
      
                 struct SurfaceOutputHair {
                     fixed3 Albedo;
                     fixed Alpha;
                     fixed3 AnisoDir;
                     fixed3 Normal;
                     fixed2 Specular;
                     fixed3 Emission;
                 };
      
                 struct Input
                 {
                     float2 uv_MainTex;
                 };
                
                 sampler2D _MainTex, _SpecularTex, _BumpMap, _AnisoDirection;
                 float _Cutoff, _AnisoOffset, _Fresnel;
                    
                 void surf (Input IN, inout SurfaceOutputHair o)
                 {
                     float4 albedo = tex2D(_MainTex, IN.uv_MainTex);
                     clip(albedo.a - _Cutoff);
                    
                     o.Albedo = albedo.rgb;
                     o.Alpha = albedo.a;
                     o.AnisoDir = tex2D(_AnisoDirection, IN.uv_MainTex).rgb * 2 - 1;
                     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
                     o.Specular = tex2D(_SpecularTex, IN.uv_MainTex).rg;
                    
                     // Stop DX11 complaining.
                     o.Emission = fixed3(0.0,0.0,0.0);
                 }
      
                 inline fixed4 LightingExplorationSoftHair (SurfaceOutputHair s, fixed3 lightDir, fixed3 viewDir, fixed atten)
                 {
                     viewDir = normalize(viewDir);
                     lightDir = normalize(lightDir);
                     s.Normal = normalize(s.Normal);
                     float NdotL = dot(s.Normal, lightDir);
                     float3 h = normalize(lightDir + viewDir);
                     float VdotH = dot( viewDir, h );
      
                     float fresnel = pow( 1.0 - VdotH, 5.0 );
                     fresnel += _Fresnel * ( 1.0 - fresnel );
                     float aniso = max(0, sin(radians( (dot(normalize(s.Normal + s.AnisoDir), h) + _AnisoOffset) * 180 ) ));
                     float spec = pow( aniso, s.Specular.g * 128 ) * s.Specular.r * fresnel;
                    
                     fixed4 c;
                     c.rgb = (s.Albedo * saturate(NdotL) * atten * _LightColor0.rgb + (spec * atten * _LightColor0.rgb) ) * 2;
                     c.a = s.Alpha;
                    
                     return c;
                 }
             ENDCG
      
             ZWrite Off
      
             CGPROGRAM
                 #pragma surface surf ExplorationSoftHair fullforwardshadows exclude_path:prepass nolightmap nodirlightmap decal:blend
                 #pragma target 3.0
      
                 struct SurfaceOutputHair {
                     fixed3 Albedo;
                     fixed Alpha;
                     fixed3 AnisoDir;
                     fixed3 Normal;
                     fixed2 Specular;
                     fixed3 Emission;
                 };
      
                 struct Input
                 {
                     float2 uv_MainTex;
                 };
                
                 sampler2D _MainTex, _SpecularTex, _BumpMap, _AnisoDirection;
                 float _Cutoff, _AnisoOffset, _Fresnel;
 
                 void surf (Input IN, inout SurfaceOutputHair o)
                 {
                     float4 albedo = tex2D(_MainTex, IN.uv_MainTex);
                     clip(-(albedo.a - _Cutoff));
                    
                     o.Albedo = albedo.rgb;
                     o.Alpha = albedo.a;
                     o.AnisoDir = tex2D(_AnisoDirection, IN.uv_MainTex).rgb * 2 - 1;
                     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
                     o.Specular = tex2D(_SpecularTex, IN.uv_MainTex).rg;
                    
                     // Stop DX11 complaining.
                     o.Emission = fixed3(0.0,0.0,0.0);
                 }
      
                 inline fixed4 LightingExplorationSoftHair (SurfaceOutputHair s, fixed3 lightDir, fixed3 viewDir, fixed atten)
                 {
                     viewDir = normalize(viewDir);
                     lightDir = normalize(lightDir);
                     s.Normal = normalize(s.Normal);
                     float NdotL = dot(s.Normal, lightDir);
                     float3 h = normalize(lightDir + viewDir);
                     float VdotH = dot( viewDir, h );
      
                     float fresnel = pow( 1.0 - VdotH, 5.0 );
                     fresnel += _Fresnel * ( 1.0 - fresnel );
                     float aniso = max(0, sin(radians( (dot(normalize(s.Normal + s.AnisoDir), h) + _AnisoOffset) * 180 ) ));
                     float spec = pow( aniso, s.Specular.g * 128 ) * s.Specular.r * fresnel;
                    
                     fixed4 c;
                     c.rgb = (s.Albedo * saturate(NdotL) * atten * _LightColor0.rgb + (spec * atten * _LightColor0.rgb) ) * 2;
                     c.a = s.Alpha;
                    
                     return c;
                 }
 
             ENDCG
         }
         FallBack "Transparent/Cutout/VertexLit"
     }

There is already a variable (Main Color) that should alter the main color in the inspector, but it does nothing at all.

Any advice would be most welcome!

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 RafalDorsz · Sep 11, 2014 at 11:15 AM

Well,the _Color property is there probably just so the Fallback shader works, because it probably needs it there. What do you want the color to do? If you want it to tint the main texture, you have to add a variable _Color to the shader, something like this, in your variables:

 sampler2D _MainTex, _SpecularTex, _BumpMap, _AnisoDirection;
                 float _Cutoff, _AnisoOffset, _Fresnel;
 uniform float4 _Color;                                      // <<<<--- add this

And then in the surface shader, change

 float4 albedo = tex2D(_MainTex, IN.uv_MainTex);

into:

 float4 albedo = tex2D(_MainTex, IN.uv_MainTex) * _Color;

I didn't have time to figure out exactly what this shader does and where, but this should get you started. Basically add a variable to use the shader property, and then use that variable however you want in the code.

Also, this might help you, if something's not clear: Link!

Hope it helps, good luck

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

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Shader that does per Vert alpha with co 0 Answers

Strange artifacts on Vertex Color Shader 0 Answers

Rewrite simple alphamask fixed function shader to surface or cg shader 2 Answers

Soft edge shader - Issues when objects using same material overlap 0 Answers

Materials are colored differently on rotated objects 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