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
0
Question by dan_wipf · Feb 26, 2019 at 06:57 PM · c#raycastvector3beziercalculations

Raycast Down with Approximation Search

I've got an approximation search and would like to ad from the BezierCurve Point the Point on the Ground. => but for correct Result the Point on the Ground must be calculated every Time on the approximation search (due to correct distances)


Approximation Search Code:


 float step =     0.1f;
 float t =         step;
 float lastT =     new float();
 
 
 float distance = 5;

 /* Bezier.GetPoint(Vector3_A,Vector3_B,Vector3_C,Vector3_D,t) is a Vector3 Equation for a Point on the Bezier Curve */

 while (t >= 0 && t <= 1f)
 {
 
     while (t < 1f && Vector3.Distance(Bezier.GetPoint(Vector3_A,Vector3_B,Vector3_C,Vector3_D,t), last_spawn) < distance){
         t += step;}
     step /= 100;
     while (t > lastT && Vector3.Distance(Bezier.GetPoint(Vector3_A,Vector3_B,Vector3_C,Vector3_D,t), last_spawn) > distance){
         t -= step;}
     step /= 100;
     if (t > 1f || t < lastT){
         break;}
     if(step < 0.000001f){
         myList.Add(Bezier.GetPoint(Vector3_A,Vector3_B,Vector3_C,Vector3_D,t));
         lastT = t;
         step = 0.1f;
         
     }
 }

(Pseudo Code)


Now because the BezierLine is never really aligned with the Surface (Terrain) I need to get the Point on the Ground. If I now Add following Vector3.RaycastDown_Position(); to the Bezier.GetPoint(a,b,c,d,t); Method => Bezier.GetPoint(a,b,c,d,t).RaycastDown_Position(); the Editor will freeze and get's Laggy!


Raycast Down Code

 public static Vector3 RaycastDown_Position(this Vector3 t){
     RaycastHit hit;
     if(Physics.Raycast(t + (Vector3.up * 20),Vector3.down,out hit,Mathf.Infinity)){
         t.y = hit.point.y;
         }
     return t;
 }


Question:

What would be a better Approach to avoid Laggy Editor, or even Freezes?


if I add the RaycastDown Method after the approximation search, it'l cause inaccurate Result at the distance between the Calculated Points! thanks @Bunny83 for any suggestion =)

Comment
Add comment · Show 8
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 TreyH · Feb 26, 2019 at 08:01 PM 0
Share

Little hard to tell what's going on, but seeing that many while loops dependent on Vector3.Distance seems like a recipe for performance issues.

See if using magnitude squared changes anything:

 float sqrDistance = distance * distance;
 
 while (t >= 0 && t <= 1f)
 {
     while (t < 1f && (Bezier.GetPoint(Vector3_A, Vector3_B, Vector3_C, Vector3_D, t), last_spawn).sqr$$anonymous$$agnitude < sqrDistance)
     {
         t += step;
     }
     step /= 100;
 
     while (t > lastT && (Bezier.GetPoint(Vector3_A, Vector3_B, Vector3_C, Vector3_D, t), last_spawn).sqr$$anonymous$$agnitude < sqrDistance)
     {
         t -= step;
     }
     step /= 100;
 
     // ...
 }
avatar image dan_wipf TreyH · Feb 26, 2019 at 08:24 PM 0
Share

well performance wise the code works fine => this question is a result out of [my previous][1] one.


i think the heavy part lies on the getpoint equation from the bezier, but it’s the only one which is a valid solution right now.


so getpoint.y = raycast down kills the performance, as mentioned above without the raycast all is fine [1]: https://answers.unity.com/questions/1599711/subdivide-bezier-curves.html

avatar image TreyH dan_wipf · Feb 26, 2019 at 08:31 PM 0
Share

I mean, have you done any measurements to see how many raycasts are used during that block? It's hard to tell what the endgame looks like here.


Is it possible to draw a picture of what your current situation is and what you'd like the outcome to be?

Show more comments
avatar image CybexGS · Mar 14, 2019 at 07:24 PM 0
Share

I'm currently working on a Bezier based path-mesh building system and might be able to help. $$anonymous$$y only problem at this point is that i do not understand what you're trying to get out of this exactly.

A few questions:

  1. What points on the terrain are you looking for?

  2. Which conditions have to be met to get the correct point on the bezier curve?

  3. Regarding performance: how does your Bezier.GetPoint() method look like? In there lies a big difference in performance, done correctly it will safe aprox. 65% of calculation time (hint: if you're using lerps in there then you will have problems with performance).

  4. Am I correct in my assumption that your problem is an uneven spacing between the posts of the fence?

  5. Is dynamic mesh generation off the table?

avatar image dan_wipf CybexGS · Mar 14, 2019 at 08:12 PM 0
Share

well lets have a chat a lt discord if you’re fancy, i made some big steps forward


https://discord.gg/uRCdEc8

avatar image dan_wipf dan_wipf · Mar 14, 2019 at 10:07 PM 0
Share
  1. i’m looking for points i calculate inside a subdivision of the whole conected bezier splines.


1. the only condition is that the distance between the posts are the same as the palings, which gonna be spawned after calculation of the points.


  1. i use de casteljau’s get point method

    //GetPoint equation: public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { t = $$anonymous$$athf.Clamp01(t); float One$$anonymous$$inusT = 1f - t; return One$$anonymous$$inusT One$$anonymous$$inusT One$$anonymous$$inusT p0 + 3f One$$anonymous$$inusT One$$anonymous$$inusT t p1 + 3f One$$anonymous$$inusT t t p2 + t t t p3; }


  1. yes you are right. i had problems with that


  1. no it isnt, working right now on that, and proper pivot adjustment for premade props

Show more comments

1 Reply

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

Answer by dan_wipf · Mar 14, 2019 at 09:20 PM

I did now some research about getting / placing objects on Terrain, with alot of Calls for height!


Raycast Down method

This Method is good to use on single objects, and returns aswell the normal’s for Rotation, align objects on Ground. Performance wise, it’s not recomended for alot of calls like 10000 and more => raycastcommand can be fazter, but still bot recomended.


2D float[ , ] GetHeights Method

Search a 2D array with y and x worldposition for a height. Can be used with the job’s system => but generally slow => just refresh the 2Darray when Terrain has changed, or performance is beyond good and evil.


SampleHeight / Current in use, Best Solution

i use this now, it’s realy fast to get the height on a Vector3 Position, even with 50000 and more calls. just need to be sure that the calls are not every frame, only on change of the bezier or other major changes, which affect the position and the current height

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

607 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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 Cars not working 1 Answer

How to get the distance between two objects in feet/meter? 1 Answer

Moving a 3D object with 2D swipes 2 Answers

Smooth Movement on Geometry Collission? 0 Answers

Raycast from an objects co-ordinates 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