Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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
1
Question by DigitalDesignDude · May 05, 2020 at 04:45 AM · shaderbillboarddecalztest

Render Billboard Sprite on top of 3D Objects?

I'm creating a multiplayer split-screen retro fps game and am trying to make it so whenever a player shoots a wall, a billboarding shot-debris sprite instantiates at the point of impact.

Just like in the original doom game. (see below gif)

alt text

The problem is my current billboard shader doesn't render the debris sprite fully on top of the 3D wall objects at certain angles. It can be cut off as you can see in the below gif.

alt text

Adding ZTest Always to my shader does solve the overlap issue, but unfortunately, it makes it so the sprite can be seen through walls by other players in the game.

Not sure if adding Offset -1, -1 would help as I don't think it works with billboard shaders.

And I would like to avoid adding an actual offset from the wall since other players may see a gap between the sprite and the wall.

Any help is much appreciated. I'm just getting started with learning how to customize shaders. Here's the billboard shader code I'm using as well.

 Shader "Custom/Billboard"
 {
     Properties
     {
        _MainTex("Texture Image", 2D) = "white" {}
        _ScaleX("Scale X", Float) = 1.0
        _ScaleY("Scale Y", Float) = 1.0
     }
     SubShader
     {
         Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
         ZWrite Off
         Blend SrcAlpha OneMinusSrcAlpha
 
         Pass
         {
             CGPROGRAM
 
             #pragma vertex vert  
             #pragma fragment frag
 
             // User-specified uniforms            
             uniform sampler2D _MainTex;
             uniform float _ScaleX;
             uniform float _ScaleY;
 
             struct vertexInput
             {
                 float4 vertex : POSITION;
                 float4 tex : TEXCOORD0;
             };
             struct vertexOutput
             {
                 float4 pos : SV_POSITION;
                 float4 tex : TEXCOORD0;
             };
 
             vertexOutput vert(vertexInput input)
             {
                 vertexOutput output;
 
                 output.pos = mul(UNITY_MATRIX_P,
                 mul(UNITY_MATRIX_MV, float4(0.0, 0.0, 0.0, 1.0))
                 + float4(input.vertex.x, input.vertex.y, 0.0, 0.0)
                 * float4(_ScaleX, _ScaleY, 1.0, 1.0));
 
                 output.tex = input.tex;
 
                 return output;
             }
 
             float4 frag(vertexOutput input) : COLOR
             {
                 return tex2D(_MainTex, float2(input.tex.xy));
             }
 
             ENDCG
         }
     }
 }

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 DigitalDesignDude · May 06, 2020 at 03:06 AM

I think I found a solution for preventing the clipping while working properly for multiple player cameras.


I just used the default Ztest value with just enough offset that the sprite will render on top of 3d objects but not been seen through them.


 ZTest LEqual 
 Offset 0, -1000000  


This is a gif showing the shader working with a wall block placed in between two players.


alt text


In my case, I needed around -1000000 units of offset. I just played around with the offset until I found an amount that worked.


The only downside is the offset isn't consistent on every device I tested. My Android TV requires far less of an offset than my PC.


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

265 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 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 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 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

ShaderGraph Y-Axis Billboard 0 Answers

How to draw texture over a single face of 3D mesh? 1 Answer

Opaque ("overwrite") Projector Shader for Decal Projection 1 Answer

Billboard shader lock roll(z) rotation 0 Answers

Stencils and zTest be buggin 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