Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 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 /
avatar image
0
Question by Dheinamar · Nov 10, 2019 at 09:23 PM · shadercoordinatespivot

Get gameobject pivot in shader

I'm trying to get simple shader for 2D game which would act as a mask, allowing player to see character behind objects. I'm mainly using shader from this question and try to add one additional feature to it. So what I'm struggling with is applying mask only to objects in front of character and not behind it.

I'm using what is most commonly referred to as 3/4 perspective (find example here) and here's the way I find whether I should apply mask to an object or not (you may skip this section if you're familiar with this perspective):

Finding if object is in front or behind of another one is pretty easy: I just need to compare y coordinates of two, and whichever is smaller, that object is closer to camera. Also if some object is placed lower on scene than character but is greater by height, it's centre may be higher than character, so mask would not apply to this object. To avoid this bug I've placed pivots of all objects to bottom centre.

Now the only task I'm left with is getting object's pivot coordinates and compare it to character pivot which I pass to shader as variable. All unity answers, tutorials and forum threads I've found are suggesting that mul(unity_ObjectToWorld, float4(0, 0, 0, 1)) will get me the correct coordinates. But in my case this works only partially and after some coordinates becomes completely broken. Here's code I'm using. Note that for testing purposes I've replaced all the mask code with just setting red channel to 1, to easily see whether code inside if will be applied to object or not. I've also removed all basic shader code for snippet below.

 v2f vert(appdata_t IN)
 {
     v2f OUT;
     OUT.origin =  mul(unity_ObjectToWorld, float4(0, 0, 0, 1));
     return OUT;
 }
 
 sampler2D _MainTex;
 float _FadeBottom;
 
 fixed4 frag(v2f IN) : SV_Target
 {
     fixed4 c = tex2D(_MainTex, IN.texcoord);
 
     if (IN.origin.y < _FadeBottom)
     {
         c.r = 1;
     }
 
     return c;
 }



And here is result of this shader, with character at bottom left of the screen

alt text


Until this point everything seems to work but as we get higher at the scene, we can see as it breaks

alt text
So my final question is: what is a proper way in a shader to get pivot of the object shader is applied to?

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

187 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

Related Questions

How can I get a texture to render in object space? 1 Answer

Dividng clip space by "w" warps the output? 1 Answer

Change Color Based On Pixel X Coordinate in Shader 1 Answer

Get the screen coordinates of an object altered by Fisheye 0 Answers

Can you supply texture co-ordinates for projector cookies? 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