3D space path finding { Octree, Boid, A* }

[Long story alert]
and sorry about the English, not a native English speaker.

here is the background story.
I had implement the following things in my 3D space path finding project, which started 3 months ago.

  • Octree data structure to store the obstacle information

  • dynamic mean { Grow, Shrink, Merge, Split } depended on the obstacle collide box shape.

  • Obstacle with adjust it’s update time between 0.2s ~ 10s, depend on the position change frequency, and report to Octree without using physical collision checking.

  • Flight agent with

  • Boid + Flocking and steering behavior

  • Use physical engine for travel between space, instead of setting the transform.position(teleport),

  • therefore the agent might affected by rigidbody collision at runtime.

  • Lazy Theta Star

  • from : http://aigamedev.com/open/tutorial/lazy-theta-star/

  • also created a async operation with Thread Ninja : http://u3d.as/6Q2 , but this not working since the octree node will destroy and re-created in different size (lose object reference)

Problems:
Major issue was how to optimize things on 3D space path finding itself.

for now the A* search algorithm can not be async, because those node can be destroy and recreate at runtime…(even I implement the async method but facing the memory issue on Solution C)
see if anyone can give me the idea to solve or workaround this.

Solution A)
Static octree, not allow to dynamic update obstacle, but then A* allow to search in async mode,
but (Question!) how to solve the run-time obstacle avoidance ?

Solution B)
Dynamic octree, A* MUST finished the search in 1 cycle remain unchange, therefore to reduce A* search & cloud path finding, I can implement the HPA* style, put Lazy Theta Star in high-level node search and implement flow field on low-level, but is that really work ?

Solution C)
Dynamic octree, but dump all nodes in memory until finish the searching…(fucking crazy for the data structure like this.)

Solution D) partial dynamic octree, merge & split node need to queue up and locked based on path finding request or time …etc, or allow develop to define the area that require to update at run-time

are you planning on selling this in the Asset Store?

Sorry, I don’t think I can continue developing on this one,
I was trying to use Physics to move those agents (which is wrong, so wrong).
to calculate some movement in pure physics was rocket science.

at first I was planning to open-source the project and try to co-op with others,
however not much response :frowning:

since my daily work & side project are not require to use those tech.
therefore I design to abandon this project and move on, may be some day I can re-open it.

If you open-source it I’d be interested in taking a look at the source and pushing back to you any tweaks I made.

That is assuming I’d be allowed to take whatever I did into games I work on (which are not open-source).

Sure, I always happy to sharing things, if you understand coding you can use it.

about the license I’ll consider using GPLv3, which mean you can use it in your project or product for free.

however, there is one big problem here, the project is based on my math library, and I just made a deep refactor on that library… including the namespace :eyes:.

so right now, I’m sure the script won’t work if you just import into your project.
a bulk of error related to API not found.
so… may be I’ll try to fix those problem on this weekend.

FYI : the library(s) mention above :
Core : https://bitbucket.org/canistk/unity3d-fly-agent/
Library : https://bitbucket.org/canistk/kit/

Develop log on Youtube :
https://www.youtube.com/playlist?list=PLqWdGhE5Md0JN27ojdfqyjgAM0I6dlD5N

GPL requires that I make my commercial products follow GPL as well. Which is fine if I was just writing libraries, but I have to be able to sell my games in the end.

I’m more of a MIT or BSD license person myself. Which is what my framework uses:

ar, You are right, I misunderstand GPL will force everything in GPL as well.
thanks for advice.

should I use 3-clause BSD ?!

That’s up to you.

If you want a permissive license, the 3-clause BSD would do just fine.

As I stated before, I use the MIT license, it seems to be fairly popular:

In the end though, both pretty much do the same thing.

project clean up and ported to new library.

source : canistk / Unity3D Fly Agent / wiki / Home — Bitbucket

3 Likes

Says I do not have access to the wiki when I click the link.

1 Like

same here. Would love to give some input if I can get access :slight_smile:

ar… silly me, I set a wiki to private :stuck_out_tongue:
it should fixed now.

FYI, head to “Source” page to clone or download…

1 Like