Search Unity

MapMagic 2 - infinite procedural land generator

Discussion in 'Assets and Asset Store' started by Wright, Apr 24, 2020.

  1. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    Glad you could sort that out! But you are right, integration videos are devoted to MM1, so they are already outdated despite they are rather fresh. Going to update them after Splines.
     
    Sovogal likes this.
  2. RefactorDev

    RefactorDev

    Joined:
    Jul 10, 2018
    Posts:
    21
  3. Murble

    Murble

    Joined:
    Aug 7, 2019
    Posts:
    14
    So I am trying to get a script that waits until MM2 is done generating all terrain near the spawn before spawning the player in. How can I check that there are no more chunks being generated?
     
  4. MarsAttax

    MarsAttax

    Joined:
    Nov 22, 2014
    Posts:
    17
    Hi!

    A couple of questions:
    What is the best approach for injecting functionality in between of terrain generation and object placement?
    In this case I want to edit the terrain with other code that is not part of MM2. After that I want to get back to MM and place objects etc.
    I'd assume writing a custom node would be best approach or is there some other better way? I've also thought about using Import node but exporting the (edited) terrain height map runtime can be quite slow I think.
    Continuing on this topic, how can I write a custom node without touching existing codebase? I don't want to recode it everytime a new MM update is available.

    Additionally, how can I export spline control points (or data like that) generated by MM so that I can use them elsewhere in the game logic?

    I'm also interested if there is any API documentation available. The documentation about nodes and how they work is very good.

    Thank you!
     
    Last edited: May 20, 2020
  5. RefactorDev

    RefactorDev

    Joined:
    Jul 10, 2018
    Posts:
    21
  6. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    MapMagic 2.0.4 is available at the Asset Store. It brings:
    - High DPI UI fix
    - Tile blink fix both in playmode and editor
    - Error on changing tile size fix
    - All fields were changed to delayed fields. Generating only when Enter pressed
    - CTS and MicroSplat Outputs error fix when asset not assigned

    All of the modules should be updated together with the core version.

    For Unity 2020 Beta users - turn on the Experimental Features in Window - MapMagic - Settings to see the new-style right-click menu.

    You can subscribe to static Action<TerrainTile, TileData, StopToken> TerrainTile.OnTileApplied to determine if some specific tile has been generated and applied, or to Action<MapMagicObject> TerrainTile.OnAllComplete that is called when all of the tiles are done.

    If you want to change the generated result, and then pass if for further generate then you definitely need to use the custom generator. It is possible, and could be made without changing MM code, but I'll append the documentation with the instructions on how to do that a bit later. A custom output node is possible as well.

    Could you please try updating MM to 2.0.4? It should not have such an issue.
     
    mmaclaurin, Murble and valarnur like this.
  7. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Random MM2 things...

    - I'd love to be able to make nodes wider. Particularly with portals, as the name often gets clipped and I can't read it all, even when zoomed in.
    - When working in the editor, it flashes the "draft" terrain on every change, even if that change is quick. Unfortunately this makes it very hard to compare "before" and "after" for subtle changes. it would be good to be able to turn that off so that the draft mode wouldn't show when editing
    - If you're using Microsplat with a few modules, it won't work unless you click "apply component," and the errors you get aren't helpful. it would be good to catch this case and provide more helpful output
    - Vegetation Studio Pro setup was also like this - tons of errors until I had it perfect. Many of these were on the VSP side, but anything you could do on the MM2 side would be nice, like detecting there was no vegetation package assigned, etc.
    - As someone else mentioned, I'd like to be able to zoom in closer so I can read everything clearly like file names, etc.
     
    Nunez-Torrijos likes this.
  8. RefactorDev

    RefactorDev

    Joined:
    Jul 10, 2018
    Posts:
    21
    That was taken on the updated version
    upload_2020-5-21_12-43-31.png
    With these settings I'm trying to achieve draft mode in editor but main mode in runtime aka playmode
     
  9. GamePowerNetwork

    GamePowerNetwork

    Joined:
    Sep 23, 2012
    Posts:
    257
    Hi @Wright Not sure if you know this already.. but the link in the MM2 asset store page points to the old MM1 forum post.
     
  10. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    Hello @Wright,
    any updates on the issues I reported? Especially biomes not working with objects and the function node errors? Both are pretty big showstoppers for us - we can't use biomes and fiddling around with our function graphs breaks the whole graph and requires restore to previous version of the graph, so we're kinda stuck with our level design.
    Thanks!
     
  11. taylank

    taylank

    Joined:
    Nov 3, 2012
    Posts:
    182
    @Wright I don't know if this is related to the memory issues I emailed you about, but I noticed in your code some implementations of IApplyData do not check if the tex field already references a Texture2D object before assigning a new texture instance to it.

    In case of a refresh due to a resolution change, if tex is not null, the Texture2D object it's pointing to will not get destroyed

    Code (CSharp):
    1.  
    2. // in case of a refresh due to a resolution change, if tex is not null, the Texture2D object it's pointing to will not get destroyed
    3. if (tex==null || tex.width!=resolution || tex.height!=resolution || tex.format!=textureFormat)
    4.                     {                      
    5.                         tex = new Texture2D(resolution, resolution, textureFormat, false, true);
    6.                         tex.wrapMode = TextureWrapMode.Mirror; //to avoid border seams
    7.                         //tex.hideFlags = HideFlags.DontSave;
    8.                         //tex.filterMode = FilterMode.Point;
    9.  
    10.                         matPropSerializer.SetTexture(textureNames[i], tex);
    11.                     }
     
    Last edited: May 21, 2020
  12. Murble

    Murble

    Joined:
    Aug 7, 2019
    Posts:
    14
    I noticed a problem where if you enter and exit playmode rapidly before the tiles are done generating, it will soon break the graph. I am doing this to the Desert dunes graph that comes as one of the examples.
    It went from looking like:

    To like:

    Which the main difference is the previews, which isn't bad since it still generates the terrain looking as it should. But, I do have it waiting on the onAllComplete, and noticed when this happens, the tiles never complete loading.
    I only assume this happens if you spam playmode on/off since that is when it happened to me.
    Whenever it happens, the only way i can make the onAllComplete action work is if I set the main and draft tile ranges both to 1. Specifically to 1 too, if I have either not be 1, it will never trigger the onAllComplete and all tiles will never finish loading.

    So if you want to try and replicate this, make the main range to 1 and the draft range to 2. Then, just spam the play button on and off until the preview images start to mess up. You should also see the loading icons above the tiles in scene view stay there forever. Also, try subscribing something to the TerrainTile.onAllComplete to see if it works. I also have my terrain resolutions to be 513 for the main and 65 for the drafts, that seems to effect it as well, where if it's not those it will not finish loading.

    Also, I am using the 2.0.4 version with all modules installed and updated to 2.0.4.
     
  13. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Hey @Wright I've got an MM2 + Vegetation Studio Pro demo video for you. Also shows Microsplat (plus Crest and Aura 2 for good measure.) Until you get the official version :)
     
  14. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    I can make the nodes width adjustable in the graph settings. Or I can just make portals wider. What's the best?

    Sure, it could be turned off in MapMagic object -> Tile Settings -> uncheck Use Draft Terrain in Editor.

    Yes, you've got to enable "Apply Component" when using some more advanced MicroSplaty features. I'll think about catching MicroSplat Output errors and adding some extra information to them.

    I can bring out the maximum and minimum zoom to the graph settings as well, however I'm not sure it could help since with the zoom of 1 all font sizes are equal to the standard text in Unity interface. Could it be that you are using system fonts too small for your resolution?

    I can see your use case and could reproduce this issue. Going to fix it for the next version.

    Unfortunately biomes with objects is the one I can't reproduce. Could you look check the comment on IdeaInformer.

    The issue with multiple function outputs could be related with the similar outputs names. If they are called differently no issue occurs. You've got to remove the function node and create it again if you already got this issue. I'll try to prevent using similar output names for function somehow.

    No, was not aware of this. Fixing. Thanks!

    Thanks for letting me know!

    I guess the issue is in not firing an event if there are draft tiles with non-generated main level. Technically they are not generated, but the thing is that they should not be generated for now. Oddly enough it worked when you started the playmode for the first time.

    Cool! I guess it might be extra useful to those who are going to use VSPro and MS with MM! Thanks!
     
  15. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    It actually happened when having different output names - and happened only when some node values were exposed in the function. Seemed like something didn't clear up properly.

    Edit: I stand corrected - the problem is, if you create two new outputs, they are both called "Output", so it would probably be a good idea to add a number after the name to prevent this from happening and also prevent the user from creating multiple Exits with the same name.
     
    Last edited: May 25, 2020
  16. mick129

    mick129

    Joined:
    Jun 19, 2013
    Posts:
    228
    Hello,
    Quick question about Biome, is it possible to place the biome in a procedural world using a RGB map?
    Red = 1st biome
    Blue = 2nd biome
    etc...

    Thank you!
     
  17. Imakhiil

    Imakhiil

    Joined:
    Oct 11, 2013
    Posts:
    96
  18. Imakhiil

    Imakhiil

    Joined:
    Oct 11, 2013
    Posts:
    96
    On a related note -- Is it possible to add some kind of callbacks/events to monobehaviors to fire when terrain tiles are loaded/unloaded?
     
  19. dajnooo

    dajnooo

    Joined:
    Feb 22, 2019
    Posts:
    12
    Does MM2 support infinite terrains with vegetation studio?
     
    mmaclaurin likes this.
  20. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Yes, it works quite well. I posted a (quick) video that shows it in action.
     
  21. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Hello @Wright, two questions for you.

    1. Recent update commits fields on enter, which is good when the operation is slow, but it should also commit on "tab" as you move from field to field. Otherwise you have to reach for the mouse after hitting enter since it defocuses the field. in something like "Adjust" where I'm doing scale + rotation random range (four fields) this adds four extra mouse grabs when I used to just tab through them.

    2. Density with a mask is very hard to predict. Sometimes 10,000 gives me good coverage, but just now distributing bushes I had to crank to 600,000 and it's still a little sparse. Should I be using VSP Maps instead of Objects in this case?

    What is your general guidance for when to use VSP Maps vs. VSP Objects?

    Thanks for keeping it awesome!!
     
  22. Daniel-Talis

    Daniel-Talis

    Joined:
    Dec 10, 2011
    Posts:
    425
    I think it would be a good idea to go through the MM videos and label all of the MM1 videos as such. People can still refer back to them but it will reduce confusion for newbies.
     
  23. dajnooo

    dajnooo

    Joined:
    Feb 22, 2019
    Posts:
    12
    From what I can see in the video you're not using a persistent vegetation storage, so I'm not sure how you even got it working with Map Magic. Without a storage I get an error "ArgumentNullException: Value cannot be null.".

    What are your terrain bounds in vegetation studio? Are you using automatic bounds calculation or doing it manually? When I use automatic calculation I get trees but they are all placed incorrectly, some are floating in the air and all of them are far away from the camera. When I move closer they disappear. If I disable automatic bounds calculation then I get trees only inside the vegetation studio terrain bounds, so then world size is limited.

    With MM1 I used the VS placement rules and my own script that adds vegetation studio and sets the bounds for each terrain tile. For that I had to disable terrain pooling otherwise the vegetation placement got messed up. I cant see any option for disabling terrain pooling in MM2. However I would prefer to place trees with the Map Magic spawner and not Vegetation Studio.
     
  24. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Hiya, the video is pretty quick but it is using persistent storage. I took my direction from an earlier video that Wright did for MM1 + VSP where he a) set up a persistent storage b) turn off automatic bounds calculation c) set automatic bounds really large (0 200 0 | 3500, 200, 3500 for the two rows respectively) - those are the settings I'm using

    Actually @Wright I mean to ask - is that 3500x3500 bounds around the camera, or will I run out of vegetation eventually?
     
    PutridEx likes this.
  25. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    Yep, I'm inclined to the same.

    Yes, you can create one texture with four biomes (RGB and alpha). However you will still need four Mask Assets - each will read the proper channel from the texture.

    Yes, I'm going to make a sample node with the documentation on how to create it after I'll finish splines.

    You can use `public static Action<TerrainTile, TileData, StopToken> TerrainTile.OnTileApplied` to know when the tile has been generated and applied. There is no callback for unloading the tile, but in most cases it happens when the tile moved to the new position and started generate, so `public static Action<TerrainTile, TileData> TerrainTile.OnBeforeTileStart` might work.

    I'm afraid this is the way Unity's delayed filed work. Not sure that I can do something about it, but at least I'll try.

    600K is really a lot, and it's definitely better use maps instead. It's even more than total number of pixels in a 512-sized map (262K). As I see it it's better to use maps when you don't need a control of every individual tree or bush.

    Thanks, I hope I can keep it up!

    Maybe. But instead all of the MM2 videos are marked as MM2 ones and grouped in one playlist. I can't say that MM1 videos are outdated as long as MM1 itself doesn't, so I can't tag them [outdated]. Probably I'll just add number '1' in their names.

    I'm afraid these bounds are world-related, so you can't create really infinite land with them. However setting them to 10000*10000 will allow to create the world big enough - bigger than RDR2 map or nearly same size as GTA5.
     
  26. RefactorDev

    RefactorDev

    Joined:
    Jul 10, 2018
    Posts:
    21
    Any idea when next update is? Or is it possible to push a quick-patch for the issue I talked about?
     
  27. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    I'm going to submit the new version this week (probably weekend), but it will take some time for Unity to review it. I'll publish a patch if the fix if it's possible.
     
  28. Daniel-Talis

    Daniel-Talis

    Joined:
    Dec 10, 2011
    Posts:
    425
    I'm trying to create 'inland lakes' on an infinite terrain. Am using Aqua lite. How would I go about achieving this? I tried using the water plane as an object but with a scatter of 1 but it doesn't show up. Any ideas?
     
  29. dajnooo

    dajnooo

    Joined:
    Feb 22, 2019
    Posts:
    12
    @Wright What is the Map Magic 2 equivalent of OnApplyCompleted and OnGenerateCompleted events that we used in Map Magic 1? I tried searching for them but I couldn't find them. Also is is possible to turn off terrain pooling in MM2?
     
  30. camta005

    camta005

    Joined:
    Dec 16, 2016
    Posts:
    320
    Aquas Lite now uses world space for the surface of the water which means you can have the water plane follow the x, z co-ordinates of the player and the surface of the water will still look correct when the player moves. This way the player can always be in the middle of the water plane which works well with infinite terrain.
     
    Daniel-Talis likes this.
  31. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    You can subscribe to static `Action<TerrainTile, TileData, StopToken> TerrainTile.OnTileApplied` to determine if some specific tile has been generated and applied, or to `Action<MapMagicObject> TerrainTile.OnAllComplete` that is called when all of the tiles are done.

    Terrain pooling is required to avoid hiccups on placing object on terrain. When new tile is created one of the old one is removed at the same frame. Each tile might have thousands of objects, and removing them all on changing tile coordinate and then instantiating again would be a waste of resources. Is there any problem with tile pool?

    That's the way I did it in MM1: I've scattered objects in the lowermost positions (bottom Curve), offset them up a bit (Adjust) and created plane objects (Objs Out). I've also lowered the terrain on lake positions as well (Blob - Blend with Subtract) to ensure plane will be lower then the shore level.
    ScatterLakes.jpg
     
    mmaclaurin and Daniel-Talis like this.
  32. Daniel-Talis

    Daniel-Talis

    Joined:
    Dec 10, 2011
    Posts:
    425
    Thanks Denis..
     
  33. RefactorDev

    RefactorDev

    Joined:
    Jul 10, 2018
    Posts:
    21
    Maybe it'd be nice to open up a Discord chat, if you need my help setting it up you contact me at lissenskyllian@gmail.com or Refactor#0001
     
  34. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    There actually is one:
    https://discord.gg/4sFBFj

    But Denis doesn't come there often, it's better to contact him here or via email.
     
  35. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Hello @Wright, it looks like prefab scale is being ignored on the root node when scattering objects. I'm checking the "regard Prefab Scale" box on the Object Output node so I think it's a bug. I have a large non-uniform scale (20 30 20) on the root node of my prefab and it doesn't show up scaled in the scene.

    Also, English note: "respect prefab scale" is probably closer to what you want here. You could also call it "use prefab scale."

    On the issue of active world size with Vegetation Studio Pro - I'm designing my world as infinite procedural, so having any bounds breaks my approach. It's okay for now, I'm a long way from shipping, but I'm wondering what the best long-term approach would be using VSP with truly infinite worlds. Perhaps a bit of API work between you and Lennart?
     
  36. ajith_sreenivasan

    ajith_sreenivasan

    Joined:
    Aug 29, 2018
    Posts:
    7
    Hi @Wright how do I convert terrain to mesh
     
  37. SammmZ

    SammmZ

    Joined:
    Aug 13, 2014
    Posts:
    174
    Why do people always generate a one day invites that expires in 24h? :( It would be much more convenient to have an endless invite for those who didn’t check forums every hour
     
  38. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    Because some people have no idea that's a thing and It's off by default. There you go: https://discord.gg/7bQRaWU
     
  39. SammmZ

    SammmZ

    Joined:
    Aug 13, 2014
    Posts:
    174
    ha-ha, great! thanks a lot :D
     
  40. Daniel-Talis

    Daniel-Talis

    Joined:
    Dec 10, 2011
    Posts:
    425
    Highly recommend checking this martian landscape movie out..

     
    kuru61 likes this.
  41. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    Looks astonishing! Thanks for sharing the link!


    Yep. I don't get it either. Why don't they make standard links default?

    Got it, thanks!

    Probably there is a way to move the VS bounds with script? MapMagic can generate VS data regardless of the bounds, so I guess moving them when the player comes to the edge might be a solution.

    You can export terrain as a RAW map, and then displace a plane in a software you need a mesh to be made for. I've ran over some terrain to mesh converters at the Asset Store, however don't remember the asset names.
     
  42. Acatist

    Acatist

    Joined:
    Jun 7, 2016
    Posts:
    45
    Hi mate, try to use your MapMagic again, I did the updates, everything ok. But absolutely nothing works man. I don't know what you do but I already have many months since when I bought you MM, also MM2, but it gets worse and worse.

    I explain to you. I am working on a fairly large project (I cannot send it to you since it weighs more than 60G. I just installed your MM2 and nothing works: Tiles (Pin, Unpin, etc) do not work at all, Locks object does not work at least the circles.The editor does not show the colors of the modules on Mac, Come on, practically nothing works to make it usable.

    The only extra info I can give you is that I use a lot of resources, such as: Matematic, Jobs, Burst, DOTS, Addressables, etc. etc. Can you tell me how this is solved !? Have you checked the conflicts that can occur when working together with other resources !?

    The system does not show any errors, simply your MM2 is without the important functions so that it can be worked with. I need a solution, if it exists.
     
  43. adriankml

    adriankml

    Joined:
    Apr 11, 2020
    Posts:
    8
    Hi, I seem to have problems seeing the textures when I run a build, it looks like this:
    terrain.png

    In the editor, the terrain looks fine both in scene view and game view. Any ideas why this is happening? I did a clean reimport of MM2 and I'm just using the sample graph.

    I found this in the log if it helps:
    Code (CSharp):
    1. WARNING: Shader Unsupported: 'Hidden/PostProcessing/FinalPass' - Pass '' has no vertex shader
    2. WARNING: Shader Unsupported: 'Hidden/PostProcessing/FinalPass' - Pass '' has no vertex shader
    3. WARNING: Shader Unsupported: 'Hidden/PostProcessing/Uber' - Pass '' has no vertex shader
    4. WARNING: Shader Unsupported: 'Hidden/PostProcessing/Uber' - Pass '' has no vertex shader
    5.  
    6. Unloading 6 Unused Serialized files (Serialized files now loaded: 0)
    7. WARNING: Shader Unsupported: 'Hidden/Nature/Terrain/Utilities' - All passes removed
    8. WARNING: Shader Did you use #pragma only_renderers and omit this platform?
    9. ERROR: Shader Shader is not supported on this GPU (none of subshaders/fallbacks are suitable)WARNING: Shader Unsupported: 'Hidden/Nature/Terrain/Utilities' - Setting to default shader.
     
    Last edited: Jun 4, 2020
  44. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    If you're enabling the terrains in runtime, the shader might get stripped by Unity. Open Project Settings > Graphics and try to put the default Terrain Shader to the "Always included shaders" list.
     
  45. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    Right. Or you can leave one tile pinned so that Unity will know the terrain shader is used.

    Could you please make sure that the Gizmos checkbutton is enabled in a scene view? The thing is that tile frame and lock circle are the gizmos, same as colliders, camera frustum, light icons, etc. Sometimes you might want to hide it all to see how the terrain looks without editor-only elements.
    Resetting the layout might help too.
     
  46. adriankml

    adriankml

    Joined:
    Apr 11, 2020
    Posts:
    8
    Thanks for the reply, do you know which shaders I have to include specifically? I tried the standard one but it doesn't work. It actually works if i select keep all for shader instancing variants which I'm guessing disables shader stripping? I don't know if that's a good idea though but I can't seem to find which shaders need to be added.

    Does this work if the terrain seed is being generated at runtime? MM2 looks amazing btw!

    The other thing is if I build to WebGL the terrain straight up won't get generated with this error:
    upload_2020-6-5_15-27-17.png
     
  47. Refeas

    Refeas

    Joined:
    Nov 8, 2016
    Posts:
    192
    I remember on built in renderer I just included the default Nature/Terrain shader, but that didn't work for me on URP (which I'm currently using). I also generate the terrains only in runtime, but I have one tile pinned and enabled, as Denis suggested, which fixes the stripping issue.
     
  48. Wright

    Wright

    Joined:
    Feb 26, 2013
    Posts:
    2,278
    It should be Nature/Terrain/Standard. It could not be assigned by drag and drop from your project, so you'll have to click the object picker circle and select it from the list.
    For URP or HDRP it should be a shader from the corresponding package.

    Try this file: Serializer.cs (MapMagic/Tools).
     
  49. adriankml

    adriankml

    Joined:
    Apr 11, 2020
    Posts:
    8
    Doesn't seem to work with the Nature/Terrain/Standard shader even being on the built-in renderer but pinning the tile works fine so I will go with that.

    Thanks, that fixed the error and the pinned tile is visible but the generated terrains seem to be a flat plane:
    terrain2.png
     
  50. mmaclaurin

    mmaclaurin

    Joined:
    Dec 18, 2016
    Posts:
    244
    Hola Mr. @Wright

    Still having a great time with MM2, and have a few feedback / beta items on splines:
    - What does the output node do? Nothing I could tell
    - Can't "purge" when deleting the output node - if you elect to clear output, the delete will fail

    - Having a very hard time trying to get a road to follow the terrain height. My world is largely islands, and the roads really want to create bridges across deep water. "Floor" doesn't seem to have any effect, either the object floor or the splines floor. Pathfinding comes closes but still creates bridges where I'd prefer the road go underwater

    - What does "align" do?

    - Would like to be able to mask splines - i.e. "do not cross this area; if you can't get around it give up on that arc." Might only make sense within pathfinding node.

    - Also interesting to "cull" splines after the fact: "if anything crossed this, remove that link" Note that cull would keep subsequent nodes from finding an alternate path, it would just give up. Probably wouldn't use this for my approach as it would give up even if two objects could be connected via pathfinding

    For my short-term needs, a "min height" on pathfinding would do the trick. Same rules as max height would be fine, I think.