Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by bhayward_incrowd · Jul 25, 2016 at 04:05 PM · shadermaterialeffectintersectionintersect

Intersection Shader intersects with Intersection Shader!

Hi everyone,

I would like to write a shader which can be applied to two objects. Where the two objects intersect, an unlit red area should be drawn. How can I do this please?

I already have the shader below, but it doesn't seem to work if you have two objects with the same shader applied:

 //Highlights intersections with other objects
  
 Shader "Custom/IntersectionHighlights"
 {
     Properties
     {
         _RegularColor("Main Color", Color) = (1, 1, 1, .5) //Color when not intersecting
         _HighlightColor("Highlight Color", Color) = (1, 1, 1, .5) //Color when intersecting
         _HighlightThresholdMax("Highlight Threshold Max", Float) = 1 //Max difference for intersections
     }
     SubShader
     {
         Tags { "Queue" = "Transparent" "RenderType"="Transparent"  }
  
         Pass
         {
             Blend SrcAlpha OneMinusSrcAlpha
             ZWrite Off
             Cull Off
  
             CGPROGRAM
             #pragma target 3.0
             #pragma vertex vert
             #pragma fragment frag
             #include "UnityCG.cginc"
  
             uniform sampler2D _CameraDepthTexture; //Depth Texture
             uniform float4 _RegularColor;
             uniform float4 _HighlightColor;
             uniform float _HighlightThresholdMax;
  
             struct v2f
             {
                 float4 pos : SV_POSITION;
                 float4 projPos : TEXCOORD1; //Screen position of pos
             };
  
             v2f vert(appdata_base v)
             {
                 v2f o;
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                 o.projPos = ComputeScreenPos(o.pos);
  
                 return o;
             }
  
             half4 frag(v2f i) : COLOR
             {
                 float4 finalColor = _RegularColor;
  
                 //Get the distance to the camera from the depth buffer for this point
                 float sceneZ = LinearEyeDepth (tex2Dproj(_CameraDepthTexture,
                                                          UNITY_PROJ_COORD(i.projPos)).r);
  
                 //Actual distance to the camera
                 float partZ = i.projPos.z;
  
                 //If the two are similar, then there is an object intersecting with our object
                 float diff = (abs(sceneZ - partZ)) /
                     _HighlightThresholdMax;
  
                 if(diff <= 1)
                 {
                     finalColor = lerp(_HighlightColor,
                                       _RegularColor,
                                       float4(diff, diff, diff, diff));
                 }
  
                 half4 c;
                 c.r = finalColor.r;
                 c.g = finalColor.g;
                 c.b = finalColor.b;
                 c.a = finalColor.a;
  
                 return c;
             }
  
             ENDCG
         }
     }
     FallBack "VertexLit"
 }
Comment
Add comment · Show 1
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 Namey5 · Jul 25, 2016 at 09:28 PM 0
Share

This doesn't work because objects with ZWrite off (i.e. semitransparent objects) do not write to the depth buffer.

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

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

Related Questions

Shader For Welding Simulation? (With References) 0 Answers

LWRP - Proper way to set up LWRP Standard and Simple lighting shaders? 0 Answers

Is there a shader I could use to always render a material over another material? 0 Answers

How to change a child's shader to another shader? 1 Answer

Anyone know how to change the size of a point with a vertex 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