• 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 angi · Dec 14, 2010 at 02:47 PM · shaderreflection

fresnel/rim reflective shader

Hi there!

I've got a simple reflective shader (thanks to skovacs1):

Shader "Example/WorldRefl" {  
    Properties {  
      _MainTex ("Texture", 2D) = "white" {}  
      _Cube ("Cubemap", CUBE) = "" {}  
    }  
    SubShader {  
      Tags { "RenderType" = "Opaque" }  
      CGPROGRAM  
      #pragma surface surf Lambert  
      struct Input {  
          float2 uv_MainTex;  
          float3 worldRefl;  
      };  
      sampler2D _MainTex;  
      samplerCUBE _Cube;  
      void surf (Input IN, inout SurfaceOutput o) {  
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * 0.5;  
          o.Emission = texCUBE (_Cube, IN.worldRefl).rgb;  
      }  
      ENDCG  
    }   
    Fallback "Diffuse"  
}  

Now I need to add a fresnel/rim filter to reduce the strength of reflection on the edges( depending on view direction). Can anyone help?

Thanks!

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

6 Replies

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by angi · Dec 14, 2010 at 04:41 PM

got it!

// FRESNEL CALCS float fcbias = 0.20373;
float facing = saturate(1.0 - max(dot( normalize(IN.viewDir.xyz), normalize(o.Normal)), 0.0));
float refl2Refr = max(fcbias + (1.0-fcbias) * pow(facing, _FresnelPower), 0);

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
avatar image
0

Answer by skovacs1 · Dec 14, 2010 at 03:35 PM

Rim shaders aren't that difficult. For a simple Rim shader, you can look at the example here. All you would need to do is apply your rim function to your reflection if that's all that you want to be affected by the rim. Since you want the rim to soften the reflection on the edges, you would use the inverse (so remove the 1.0 - from the front of the equation in the linked example. This works well for rim alpha as well.

Shader "Example/RimWorldRefl" { Properties { _MainTex ("Texture", 2D) = "white" {} _Cube ("Cubemap", CUBE) = "" {} _RimPower ("Rim Power", Range(0.5,8.0)) = 3.0

 }  
 SubShader {  
   Tags { "RenderType" = "Opaque" }  
   CGPROGRAM  
   #pragma surface surf Lambert  
   struct Input {  
       float2 uv_MainTex;  
       float3 worldRefl;
       float3 viewDir;
   };  
   sampler2D _MainTex;  
   samplerCUBE _Cube;
   float _RimPower;
   void surf (Input IN, inout SurfaceOutput o) {  
       o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * 0.5;
       half rim = saturate(dot (normalize(IN.viewDir), o.Normal));
       o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * pow(rim,_RimPower);
   }  
   ENDCG  
 }   
 Fallback "Diffuse"  

}

Comment
Add comment · Show 2 · 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 angi · Dec 14, 2010 at 03:51 PM 0
Share

thanks, I tried this one. unfortunately it's not what I'm looking for... I think I need a fresnel so that reflections decrease depending on view angle.

avatar image skovacs1 · Dec 14, 2010 at 09:29 PM 0
Share

This will decrease reflections depending on view angle and should do so on the edges as you ask. Perhaps if you'd have been a bit more specific. You don't indicate how far you want it to decrease to or what sort of ramp you want it to use. If you want a different rim equation, you would only need to adjust the one posted, but the answer does what you ask even if you didn't ask for what you wanted.

avatar image
0

Answer by Luismi · Mar 17, 2011 at 11:45 AM

Hi,

artist here :) can you tell me where exactly should I put those lines? Rim Lighting shader works pretty well but I would like to give a little push to the fresnel effect.

Thanks a lot if advance!

cheers!!

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 HolBol · Jun 13, 2012 at 12:18 PM 0
Share

Do not post comments in repsonse to an answer in the answer box. Use the comment box provided!

avatar image
0

Answer by Metzger · Jan 13, 2013 at 01:01 AM

I can't believe this isn't stock. Everything has fresnel in the real world.

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
avatar image
0

Answer by dongiorgi · Dec 20, 2013 at 02:10 PM

here it is

Shader "Gios's Shaders/Defuse Bump frisnel" { Properties{ _MainTex("Diffuse Texture" , 2D) = "white"{} _BumpTex("Normal Map" , 2D) = "bump"{} _RimColor("Rim Color" , Color) = (1,1,1,1) _RimPower("Rim Power" , Range(0.1,10)) = 3

 }
 SubShader {
     Tags {"Rendertype" = "Opaque"}
     CGPROGRAM
     #pragma surface surf Lambert
     
     struct Input{
         float2 uv_MainTex;
         float3 viewDir;
     };
     
     sampler2D _MainTex;
     sampler2D _BumpTex;
     float4 _RimColor;
     float _RimPower;
     
     void surf(Input IN,inout SurfaceOutput o){
         fixed4 tex = tex2D (_MainTex, IN.uv_MainTex);
         o.Albedo = tex.rgb;
         o.Normal =  UnpackNormal (tex2D (_BumpTex, IN.uv_MainTex));
         half rim = 1 - saturate(dot(normalize(IN.viewDir), o.Normal));
         o.Emission = _RimColor.rgb * pow(rim, _RimPower);
     }
     ENDCG
 } 
 Fallback "Diffuse"

}

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
  • 1
  • 2
  • ›

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

2 People are following this question.

avatar image avatar image

Related Questions

Surface Reflection Shader with Shadows 0 Answers

reflective glass shader 3 Answers

Iphone Shader Reflection Map 0 Answers

Reflection shader color issue 0 Answers

Reflective surface/texture bug in build only (works in play mode in editor) 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