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 /
avatar image
1
Question by Kik24 · Mar 29, 2016 at 03:20 PM · cubemapreflectionsdepth-buffer

How to generate Cubemap with color and depth values?

I am looking for the best way to generate a Cubemap with color + depth values in Unity 5.3.

I already have a shader that writes color in the RGB channels and Depth in the alpha channel, but how do I use-it for a CubeMap?

Possible solutions I see:

A) Use a reflection probe + the replacement shader mentioned above...but is it possible at all? I couldn't find any information about how to configure the camera used by the reflection probe so that it uses a replacement shader.

B) Without reflection Probe: use a secondary camera and call Camera.GenerateCubemap, having first called Camera.SetReplacementShader with the shader mentioned above.

Or maybe there's a better approach? Any help / comment / feedback will be appreciated, thanks! :)

Comment
Add comment · Show 3
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 aliamir · Sep 07, 2017 at 08:55 PM 0
Share

Did you manage to solve this by any chance? I'm also facing this issue. I attempted to use a replacement shader, however camera's depth capture doesn't seem to capture all six faces of the cube.

avatar image Kik24 aliamir · Sep 08, 2017 at 06:54 AM 0
Share

Yes Alamir, see my answer below

avatar image aliamir Kik24 · Sep 11, 2017 at 09:25 PM 0
Share

Thank you!

1 Reply

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

Answer by Kik24 · Sep 08, 2017 at 06:56 AM

Yes Alamir, apparently there's no way to use a replacement shader with a reflection probe, but the B) variant is working for me.

I am generating the depth values myself in the fragment shader, so I don't use the camera's depth buffer at all, like this:

 CGPROGRAM
         #pragma surface surf Standard fullforwardshadows nolightmap vertex:vert keepalpha
         #pragma target 3.0
 
         sampler2D     _MainTex;
         half         _Glossiness;
         half         _Metallic;
         fixed4         _Color;
 
         struct Input 
         {
             float2 uv_MainTex;
             float4 screenPos;                // Position in screen-space
         };

             void vert(inout appdata_base v, out Input o)
             {
                     UNITY_INITIALIZE_OUTPUT(Input, o);
             }
             void surf (Input IN, inout SurfaceOutputStandard o) 
             {
                 fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
                 o.Albedo = c.rgb;
                 o.Metallic = _Metallic;
                 o.Smoothness = _Glossiness;
     
                 // Calculate depth and store it into the alpha-channel
                 // => Use built-in function to convert to Linear [0; 1] range
                 //-----------------------------------------------------------------------
                 float fragmentDepth = Linear01Depth((0.5 * IN.screenPos.z / IN.screenPos.w) + 0.5);
                 o.Alpha             = fragmentDepth;
             }
 
 #ENDCG

NOTE: it's very important to specify keepalpha for the surface shader, otherwise the alpha value, which should contain the depth, will be overwritten and set to 1.

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Control cubemap reflection amount from metallic and smoothness properties 0 Answers

Render Depthbuffer to Cubemap 0 Answers

Realtime Cubemap Reflections are Oversized. 0 Answers

How do I get GameObjects to use a certain cubemap? 0 Answers

Cube map refection stays the same when car moves 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