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 pantaryl · May 27, 2015 at 03:23 AM · shaderrenderinggraphicsrendertexturedepth

Complex Depth Shader

Hello all, quick question.

Should it be possible for me to do the following?

  1. Render the depth of the scene out to a RenderTexture, but only if the depth is between two values (one from the shader, the other from the RenderTexture I want to write to).

  2. Then render color, but only where the depth matches the pixel I'm about to draw.

I would think this should be possible. Step one is the one that is giving me trouble... I current have this:

             CGPROGRAM
 
             #pragma vertex vertShadow
             #pragma fragment fragShadow
             
             #pragma target 5.0
 
             #include "UnityCG.cginc"
 
             int    _DepthTexWidth;
             int    _DepthTexHeight;
             float4 _Color;
             sampler2D _TempDepthTex;
               float4 _TempDepthTex_ST;
               
               #ifdef SHADER_API_D3D11
             RWTexture2D<float> CurrentDepthTex : register(u1);
             #endif
             
             struct v2f
             {
                 float4 pos : POSITION;
                 float3 normal : TEXCOORD1;
                 float2 uv : TEXCOORD2;
                 float4 screenPos : WPOS;
             };
 
             struct fout
             {
                 fixed4 color : COLOR;
                 float  depth : DEPTH;
             };
 
             v2f vertShadow(appdata_base v)
             {
                 v2f o;
 
                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);     
                 o.screenPos = ComputeScreenPos(o.pos);
                 o.uv = v.texcoord;
                 o.normal = normalize(v.normal).xyz;
                 TRANSFER_VERTEX_TO_FRAGMENT(o);
 
                 return o; 
             }
 
             fout fragShadow(v2f i)
             {    
                 fout fo;
                 
                 i.screenPos.xy /= i.screenPos.w;
                                 
                 float newDepth     = i.pos.z;        
                 float portalDepth  = UNITY_SAMPLE_DEPTH(tex2D(_TempDepthTex, i.screenPos.xy)).x;
                 
                 float currentDepth = CurrentDepthTex.Load(int3(i.screenPos.xy, 0)).x;
                 
                 if ((portalDepth > newDepth) || (newDepth > currentDepth))
                     discard;
                 
                 CurrentDepthTex[i.screenPos.xy] = float4(newDepth, newDepth, newDepth, 1);
                 
                 fo.depth = newDepth;
                 fo.color = newDepth;
 
                 return fo;                    
             }
 
             ENDCG


Unfortunately what is happening is that I'm getting horrible corruption: Horrible Corruption

While it should look like this: alt text

horriblecorruption.png (19.4 kB)
nocorruption.png (7.8 kB)
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

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

19 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

Related Questions

Multiple RenderTexture and depth buffer 1 Answer

[Unity SRP] How do I clear 3d RW RenderTexture? 1 Answer

PBR Standard Shader not Working Project Wide in Unity 5.3 0 Answers

Render scene depth to a texture 4 Answers

Update all slices of CustomRenderTexture 0 Answers


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