Search Unity

  1. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

terrain vs mesh?

Discussion in 'World Building' started by mellooow9, Apr 15, 2020.

  1. mellooow9

    mellooow9

    Joined:
    Dec 25, 2019
    Posts:
    31
    Is there a difference between using unity's terrain system, vs importing my own mesh to use as terrain with a mesh collider? is one better for performance?
     
    Flamti_01 likes this.
  2. Flavelius

    Flavelius

    Joined:
    Jul 8, 2012
    Posts:
    943
    It's mostly the ease of use through tools. Unity seems to want to catch up with other engines that already have a non-destructive layering system for terrain modifications and although they haven't yet, if they do, the tooling will be much better compared to the amount of custom tools you'd have to write to achieve the same workflow. If you want to build small architectural or non-organic surfaces the tools to support this are probably better in you favorite modeling app.
    One significant difference though is that heightmap based terrains are by nature not able to model overhangs and similar structures. They also tend to introduce artifacts along very steep height edges as their resolution often just naively uses a regular grid. There are ways to generate more clean meshes but the unity terrain doesn't do this. So using meshes you have the option to manually add detail where needed if this is your case. If you intend to modify your terrain at runtime, heightmap based ones are easier.
     
    julez1pro and Fire9Ball like this.
  3. mellooow9

    mellooow9

    Joined:
    Dec 25, 2019
    Posts:
    31
    thanks this helped
     
  4. snacktime

    snacktime

    Joined:
    Apr 15, 2013
    Posts:
    3,356
    Terrain will be far better performance wise due to it being instanced. They basically take a small set of tile meshes and then instance those all over applying the height in the shader. Plus the built in LOD. If you need 3D terrain though you are stuck with meshes.

    Terrain colliders are optimized also, perform better then regular mesh colliders.
     
    BIGTIMEMASTER likes this.
  5. mellooow9

    mellooow9

    Joined:
    Dec 25, 2019
    Posts:
    31
    is the performance with a mesh something i should worry about for a large open world game? is there anything i can do to improve the performance if i use a mesh?
     
  6. djweinbaum

    djweinbaum

    Joined:
    Nov 3, 2013
    Posts:
    533
    Unless Unity's terrain system performance has improved dramatically in the last year, meshes are actually far better for performance. At least this was my conclusion after my research for our large open-world game Eastshade. We used unity terrain for the first two years, then ended up switching to meshes and it was absolutely the right decision. This is mostly because of how many draw calls even a basic blobby Unity terrain creates, due to the way it chunks the pieces. Also the the real-time edge collapsing as you get further away is extremely heavy, much heavier than LODing a large chunk with a simple distance check. Its especially bad when you consider just how many triangles the terrain system uses to give definition, since the topology is even and indiscriminate squares. If the geometry is a regular mesh instead, you can use a good edge collapse optimizer (most 3d packages have one these days) to shave off 75% of the triangles with no visual change, leaving most geometry where its needed. I wrote a big article on foliage optimization, and while most of it is not applicable here, since we're talking about terrain/ground itself, there is a small section on terrain. I'll paste the relevant text:

    Another cool thing about meshes is you can reuse them and arrange them more easily. We have large cliffs in Eastshade that we copied around to make interesting areas quickly. There's also just so many more tools available to make the terrain look good when your authoring regular meshes. So my vote is for meshes :). But every game is different. valley.png
     
  7. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    I also have found meshes to be much faster, but that's for a well researched, tested, and complicated pipeline. The only savings I see using terrain is the actual memory required for the meshes can be noticeable in a very large world, but it's still not much compared to the overall savings with drawcalls.

    edit: Also, according to some experts, LOD's are not always a good thing and there are often better ways to accomplish more optimized results.
     
  8. nico_st_29

    nico_st_29

    Joined:
    Mar 14, 2020
    Posts:
    69
    It would be interesting to have an update on these performance comparisons with URP: from what I understand the performance gained from going from Unity Terrain to a Mesh was due to the reduction in Draw Calls, however the SRP Batcher (used with URP) only slows down when there is a change in shader, not a change in material so maybe the performance gain is now less significant?

    djweinbaum and ron-bohn maybe you have an opinion on this or you might even have tested it?
     
  9. djweinbaum

    djweinbaum

    Joined:
    Nov 3, 2013
    Posts:
    533
    I haven't touched the terrain system in years, so I wouldn't know. But I have to imagine the edge collapsing computations are still pretty expensive. I also needed an order of magnitude more triangles for the same definition, since the terrain system made even quads (instead of a software mesh optimizer which puts edges where you need them). The difference was often huge, like 100k triangles vs 6k triangles, and the mesh still had more definition. Idk if the edge collapser is smarter now.
     
    Last edited: Apr 16, 2021
    borgstation, ron-bohn and nico_st_29 like this.
  10. warthos3399

    warthos3399

    Joined:
    May 11, 2019
    Posts:
    1,693
    We can debate this for years, its what works for "you", test things out. Mesh as far as "look/definition", is great, but is it right for "your" game/workflow?... Ball in your court...
     
    FlightOfOne, ron-bohn and nico_st_29 like this.
  11. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    Just conveying my personal findings. There is an easy way for anybody to see for themselves: Put a mesh with one material in a scene, hit play an open up the stats window. Do the same with a terrain, and you'll see the difference. In some cases "my way" might be over-optimization for say a linear game that uses occlusion culling and such, but if you're building an open world of any significant size, every little thing adds up. Some of the more advanced open world tools such as "World Streamer" use meshes as default, for example.

    It absolutely matters with what kind of pipeline you are using, target device(s) etc. However draw calls are draw calls and if you're on a small or solo team, there's several universal concepts that have applied for quite some time. Terrains can much more convenient for some situations.

    Just a use case example of a world that I'm currently working on...I have about 5x5 sq km of buildings using a single atlas that take less of a performance hike that a 1x1 sq km terrain using a single texture.
     
    Last edited: Apr 17, 2021
    blueivy, warthos3399 and nico_st_29 like this.
  12. nico_st_29

    nico_st_29

    Joined:
    Mar 14, 2020
    Posts:
    69
    Thanks to all of you for the comments. I'll try swapping my Unity terrain for a mesh in Cradle of Chaos tonight.
     
  13. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    Thank you for this information, very helpful. Are you using your own solutions for streaming and vegetations?

    And may I say how beautiful your game is, simply gorgeous! HDRP?
     
    Last edited: Sep 4, 2021
  14. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    I am currently using world streamer and it uses mesh terrains for distant terrains (as LOD). Near terrains are Unity terrains. This is their default setup. However with World Streamer (since it has have nothing to do with terrains -streams scenes) you can do whatever you want.

    I am also considering getting rid of all my Unity terrains and just using Mesh terrains. Once you have fooliage (and other detail) over it, it is hard to tell the difference I think
     
    Last edited: Sep 4, 2021
    ron-bohn and warthos3399 like this.
  15. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    Thanks, guys for the info! This made a HUGE improvement for me. My project is a VR project (URP) so everything beyond 50 or so meters looks like crap anyway so don't really care for distant fidelity. And this is with instance checked and in the editor (it would improve more on a build).

    p.s. You have to add about 10 more fps though, for some reason when I use windows snip, I lose about 10 fps. And ignore the ground detail, I just need to move up the rocks.

    Unity
    unity terrain.PNG


    Mesh
    unity mesh terrain.PNG


    EDIT:
    I did a proper build and I can say I am not going back to Unity Terrain any time soon. I gained good 3-6ms ( and over 6ms in some places! I know, hard to believe for me too). For those who only know fps, this is roughly about 20-40fps.

    Another huge thing I noticed was my loading speeds. They went from about 1.5-2 minutes to <5 seconds.

    I should point out that this approach isn't without pain points and will require you to do additional work. But I think this is well worth it.
     
    Last edited: Sep 7, 2021
  16. djweinbaum

    djweinbaum

    Joined:
    Nov 3, 2013
    Posts:
    533
    For streaming just used the regular built-in LoadAdditiveAsync. For the vegetation, well, I give a pretty good rundown of it in the foliage optimization article I linked to there.

    And thank you! No its just the built-in deferred (Unity 2018). I wrote all custom surface shaders, but used Unity's standard spec and lighting model for the most part.
     
    FlightOfOne likes this.
  17. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    I am currently using word streamer (which uses the Unity's Async loading), but been thinking about making my own. WS is fine but I think I can do something simpler (using the same async method) and I like the total control when it comes to extending and troubleshooting.

    Yeah I have been looking at your DevLog, it is a good mine for those of us who are less experienced. Thank you very much for sharing!
     
  18. warthos3399

    warthos3399

    Joined:
    May 11, 2019
    Posts:
    1,693
    You said "And thank you! No its just the built-in deferred (Unity 2018)", 2018?. My friend you are far behind the times. You should always use a LTS build to begin with. But 2018 is far behind. At least use 2019 LTS version.
     
  19. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    2018 is still under LTS. I am in 2020 LTS and it is far unstable than any other version of Unity I've used. Of course, it has great features but I spend a good chunk of my day staring at progress bars or recovering from crashes. I think 2018 is still the most stable, 2019 was better than 2020 when I used it. I can understand why most of the veterans stick to older LTS versions. Hope things will be better with 2021.
     
  20. warthos3399

    warthos3399

    Joined:
    May 11, 2019
    Posts:
    1,693
    TBH the 2019 LTS is the best out there... hands down, you should try it, very stable, and compliant... Also your crashes could be due to "version conflicts", due to version used... Dont use 2020 and above, Why?, bugs arent worked out yet, to early of a version...
     
    FlightOfOne likes this.
  21. DEEnvironment

    DEEnvironment

    Joined:
    Dec 30, 2018
    Posts:
    437
    2018 LTS is no longer supported (LTS support has ended)
    2019.4+ is perfectly fine for standard pipeline, all new Unity assets are required to be summited in 2019.4 and or higher so any thing lower than this you will soon have trouble to gain support for assets in older versions

    for HDRP or URP I suggest do not to go below anything lower than api 10x (aka 2020.3 or higher) and save yourself a lot of pain!!!

    back on topic (Terrain vs Mesh)
    historically in unity, mesh has always been a bit better in regards to performance over terrain. however terrain can have more detail closeup, you will find many different ways to deal with this such as mixed mesh and terrain culling terrains replacing with lower poly mesh in distance plus many other tricks.. A good terrain shader is also extremely important as a custom terrain shader will outperform unity shaders. any bench marking should indicate number of layers and shader used. in unity terrain shaders (standard/URP) they use one pass for every four layers and (HDRP) will do 8 layers in one pass..
     
  22. djweinbaum

    djweinbaum

    Joined:
    Nov 3, 2013
    Posts:
    533
    We released Eastshade in early 2019. Secondly, I prefer to only upgrade if there is a specific reason, and never during the final leg of a project, or after launch (unless you have a DAMN good reason). Once I pick the engine and version, I tend to just focus on the game and forget about chasing upgrades or what's on the horizon tech-wise. In my experience most successful commercial game developers share that philosophy.
     
    trombonaut, Armegalo, Ony and 2 others like this.
  23. Deleted User

    Deleted User

    Guest

    How is the number of tris same after u convert the terrain to mesh???? Are u using custom LODs for mesh terrain?
     
  24. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    No way! far less than Unity terrain. I mean I guess you can keep the same resolution but at that point might as well use the Unity Terrain with instanced turned on.


    I am not using LODs for my solo scenes but I am considering them for my open-world map.

    If you do need a greater close-up detail you can do a hybrid/LOD setup with both Unity and Mesh terrain. The tile where the player is on can be unity and everything will be mesh.
     
    Last edited: Sep 7, 2021
  25. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    By the way, did you use any special shaders for the terrain like Microsplat?
     
  26. Shadauwa

    Shadauwa

    Joined:
    Jan 12, 2020
    Posts:
    16
    I am hesitating to go with Mesh vs Terrain, I take Gaia 2 for an esaier way to make Terrain, but i am thinking to convert them on Mesh. Applaying LOD on mesh terrain is like whatever object / creatures, right ?
    I just need to slice my terrain in parts for an efficient, LOD ?

    I would like custom terrain for custom small planet, so having the default Terrain that i can note rotate or shape as i want is not for me. :(
     
  27. Deleted User

    Deleted User

    Guest

    Unity Terrain has auto LOD so the tris count should have been lower than the the mesh(which means your unity terrain isn't performing any kind of LODs)..... What I want to say is that unity terrain must not perform this worse.... Your batches seem way too high than normal... Tick GPU instancing on the materials of your trees and lower some terrain settings by reading this https://docs.unity3d.com/2021.2/Documentation/Manual/terrain-OtherSettings.html and use LODs and billboards for the trees and don't use unity's paint details for grass if u are not using 2021.2 and later versions because the latest versions have indirect instancing for grass, also make sure u tick static for trees and terrain,enable static batching in URP and occlusion and frustum culling...try changing everything from double sided to single in terrain settings.....Maybe try using a single huge terrain(I don't know whether multiple terrain or single terrain gives better performance) Also if these steps don't help much try reducing terrain resolution and using custom shader for terrain
    Play around with settings and see which one gives best performance and try keeping batch count low
     
    Last edited by a moderator: Sep 8, 2021
  28. djweinbaum

    djweinbaum

    Joined:
    Nov 3, 2013
    Posts:
    533
    I wrote a custom surface shader. It was a three channel vertex splat with a macro overlay and macro normals.
     
    FlightOfOne likes this.
  29. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    Thanks for the info. I am using Instance Indirect (using VSP) for grass, trees and other details and these are also frustum-culled. These were never my problem -I get very good performance even in VR.

    My comparison above was purely for the terrain. One 1kmx1km area (4 chunks).

    I honestly do not see a reason (not speaking for everyone here, just my project) to go to Unity terrain. I use Terrain to Mesh (asset) and I can hardly tell the difference when converted to Mesh. Btw. 512x512 mesh comes out to 4096 vertices and I have about 4-8 tiles active at any given time. I also have other benefits, like being able to bake lights rather quickly -I have 400 tiles. I also have a feeling the texture resolution is also a factor (lower on mesh).

    Because of this now I can hold steady <11.2 ms or around 90fps (target for VR).

    Anyways, no point in going back and forth as to what is better. As @warthos3399 said, do what works for you, your team, and the project. Not all projects are created equal.
     
    Last edited: Sep 8, 2021
    Deleted User likes this.
  30. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    I haven't done LODs yet, I think I can do without them as I am already streaming my level and getting good performance. But yeah you would convert your terrain with different quality levels if you want to go the traditional way. Just keep a separate mesh for the collider.

    You might want to look into Curved World Asset (not sure if it works on URP though), might work for your need.
     
    Last edited: Sep 8, 2021
  31. Shadauwa

    Shadauwa

    Joined:
    Jan 12, 2020
    Posts:
    16
    Ok i see thanks for sharing.

    I was gone deeply for the Curved World asset, but it is only a "visual" trick (shader), so a player that would go outside your square mesh terrain he will fall, and can not walk arround all.

    I must to make create sphere terrain and apply gravity on it, like Mario Galaxy in some way.
     
  32. FlightOfOne

    FlightOfOne

    Joined:
    Aug 1, 2014
    Posts:
    668
    You could look at how Kerbal Space Program did it.
     
  33. Apposl

    Apposl

    Joined:
    Nov 27, 2017
    Posts:
    50
    I understood very little of this conversation but it was fascinating nonetheless to someone contemplating various terrain options for a flight sim.
     
    blueivy likes this.
  34. Deleted User

    Deleted User

    Guest

    I tried converting my terrain to mesh but my performance got worse!! I am using 5km*5km terrain... My batches went up from 30 to 188 and tris count increased aswell from 15k to 850k even though I am using occlusion culling and same material... Am I doing something wrong?? I had split my terrain into 32*32 (no LODS for now)or should I keep it as single mesh or fewer splits which might reduce draw calls a bit but increase the tris count by alot??? I am trying to test terrain on mobile, after seeing a lot of threads saying that meshes are better for mobile i tried to test it but i don't seem to get any gains from doing that... Is mesh a viable option for vey big worlds??
     
  35. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    That's very large for a single terrain object. If you're making an environment that size or larger, then you need to work with smaller chunks, depending on your target device(s).

    Sounds like you have a lot of shadow casters in real-time lighting and in forward rendering. I could be wrong....it's really helpful to include this kind of info, particularly when it comes to troubleshooting rendering performance. Do you just have one directional light or?

    What are your project settings for graphics, rendering and lighting? unity version? Without that basic info about your rendering/project info, it makes it difficult, if not impossible to answer exactly. That being said, it does sound like a lighting issue with shadow casters, but that's just a guess based on what you said.
     
  36. Deleted User

    Deleted User

    Guest

    I am using URP with lowest settings possible without any shadows
     
  37. Neto_Kokku

    Neto_Kokku

    Joined:
    Feb 15, 2018
    Posts:
    1,751
    Unity's terrain uses progressive LOD, a single massive mesh doesn't, so it hits harder on the GPU due to tons of micropolygons at a distance.

    You might not notice it on a dedicated PC GPU because the savings in CPU time will greatly offset the extra GPU cost, but on lower end GPUs it can become a bottleneck.

    The issue with Unity terrain is that its prehistoric implementation uses a ton of main thread CPU time, even with instancing enabled. Add multiple terrains in the scene and you can easily hit the point where you're losing 5ms+ of precious main thread time on whatever the hell Unity does to prepare the terrain draw calls.
     
    Deleted User likes this.
  38. Deleted User

    Deleted User

    Guest

    My plan is to use a single terrain in whole game
     
  39. Auticus

    Auticus

    Joined:
    Jul 18, 2013
    Posts:
    99
    Fascinating conversation. This is one of the things I have to consider when it comes to Unreal vs Unity.
     
  40. SilverStorm

    SilverStorm

    Joined:
    Aug 25, 2011
    Posts:
    712
    I know it has been a year and there have been a lot of people who have been using Unity Terrain and I was always a proponent of Meshes vs Terrain because I knew Unity Terrain was really badly implemented however there's just so many other work flow advantages of using the Unity Terrain that I have always been cheering for it to be ready.
    However we are in 2023 and there have been a lot of changes and updates and there's even an optional Unity Terrain tools package that adds further functionality to the Terrain System.

    So I am at a point now where I am making an Island and actually want to know if i should do it old school 3D mesh or give the new Unity Terrain in URP a go. I am currently using Unity 2021 LTS and am quite happy with it.
     
  41. cidolfas2015

    cidolfas2015

    Joined:
    Sep 27, 2015
    Posts:
    87
    I spent the last 4 years using meshes, but they got to big. so I am migrating my project to additive scenes and using 1000x1000 terrains to accomplish this. 140 fps is nice.
     
    tmonestudio likes this.
  42. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    Just use the terrain system and then convert them to meshes if you need the optimization. Using optimized assets that share a material (atlased) is going to help more in most cases than terrain.
    Additive terrains, ie loading and unloading scenes at runtime can be a lot more work. Making large optimized worlds is really hard no matter what engine you use. Also, additive terrains is not a replacement for converting meshes to terrains.
     
    tmonestudio likes this.
  43. creat327

    creat327

    Joined:
    Mar 19, 2009
    Posts:
    1,756
    Almost 2024 and I've been reading and listening to Unity since 2014 saying they will release a new terrain system.

    That's 10 years in the making already.

    TLDR; unity terrain performance is HORRIBLE. Create the terrain, paint it, set it up and then convert it to a mesh.

    You will win so many FPS on low-end devices that it's ridiculous. I have no idea how they implemented Unity Terrain but it's a joke considering that a mesh with millions of triangles renders faster than Unity terrain on a mobile phone!
     
    hopeful likes this.
  44. Mackerel_Sky

    Mackerel_Sky

    Joined:
    Jul 24, 2018
    Posts:
    26
    Hey guys, bit of a basic question here but would adding a mesh collider to the mesh negatively impact performance at run time? It would be all well and good to improve your FPS by moving from terrain to mesh, but if you can't walk on the mesh then that would defeat the purpose for many projects.

    There's also the question of trees, which you can add to terrains, but I'm not sure if they would be transferrable to meshes easily, especially if there's a lot of them?
     
    Last edited: Dec 12, 2023
  45. creat327

    creat327

    Joined:
    Mar 19, 2009
    Posts:
    1,756
    Obviously when we move from terrain to mesh, that includes the mesh collider. And with that, it is times of magnitude better performance than the Unity terrain system.

    As for the trees, you have 2 options, you either use a custom tree rendering package (VSP, UNature, and so on) which improves performance drastically compared to Unity Junk Terrain system, or you can let Unity terrain render the trees as you have them but disable "draw terrain" on the terrain settings, since that will be drawn by the terrain mesh.

    Personally, I would avoid using Unity Terrain altogether if you are limited by performance. I would use it only to draw and set it up, then utilize all other tools once done to render. Unity Terrain is now only for terrain editing, not for gameplay.
     
    ron-bohn likes this.
  46. Mackerel_Sky

    Mackerel_Sky

    Joined:
    Jul 24, 2018
    Posts:
    26
    Ok, cool - makes sense! It looks like I will be moving to mesh soon.
     
  47. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    More tips for unity terrain to mesh workflow:

    1) Design terrain(s) in unity
    2) Convert to mesh (need to use a tool or create a script that generates a splamap). This also means using a shader designed specifically to use splatmaps. Both shader and scripts needed to do this have many options available via assets or diy via unity API.
    3) Once your mesh is converted, you might want to to use a low poly version for distant terrains. I generally use meshes up to around 60k for close-up and then use LOD (with minimal levels) or layer culling to only show the detailed mesh up-close.
    4) The low poly version of your terrains can also be optionally used as colliders so there is dual purpose served there.
    5) For trees, a very performant option is use meshes for trees and combine those trees in groups. You should probably do this for areas like treelines at the edge of a meadow and for anything you want the player to see on far vista horizons. As with terrain meshes, the same benefits for layer culling or LOD applies. The only thing different is you're not using a splatmap shader for trees, your are going to want to use an atlas to benefit from mesh combining. There are ways to do this at runtime, but it really depends on your preference of complexity in regards to relying on scripts. Unfortunately, there are not many atlased tree assets available, despite them being extremely useful in these optimisation workflows. It's time consuming to do, but the payoff is tremendous if you do it right. It's not just for mobile.
     
    tmonestudio likes this.
  48. creat327

    creat327

    Joined:
    Mar 19, 2009
    Posts:
    1,756
    What is missing for all terrain to mesh generators is that they don't include holes in the terrain. So I always have to manually reapply them.

    Of course, what would be great is if Unity updates their terrain system to be performant, but after 14 years waiting I guess they are busy with other more important things, like deciding if dark mode is free or PRO
     
    Gravesend likes this.
  49. HonKasumi

    HonKasumi

    Joined:
    Apr 25, 2018
    Posts:
    45
    how would you texture a mesh compared to a terrain? i mean like paint a mesh, there must be a 1 to 1 comparison
     
  50. ron-bohn

    ron-bohn

    Joined:
    Oct 5, 2015
    Posts:
    252
    Good question!

    Splatmaps and custom shaders is one way. I guess you could use gimp or photoshop.

    If you are doing a cartoon artstyle you could use a vertex color painting tool for meshes. Unity's Polybrush is free does this. Hven't used it much myself, but you could give it a try.
    .
    A tri-planer (or more) shader is another way to go about it. For example, if you have 3 textures on your mesh terrain...

    1) grass for flat areas,
    2) dirt for slight inclines, and
    3) rocks for cliff faces.

    You would need to either create/write a multi-plane shader (or use an existing one) that makes flat areas grass texture, 45 degree angle dirt, and 90 degree angle rock (vertical cliff face). That can feel almost like cheating, but can save a TON of time depending on your art style and needs.

    As for painting directly on the mesh, I personally think the default unity terrain system works great for this and then just convert it to mesh as described above. There's a reason why everybody is saying that's the way they do, because it works and has become somewhat standard for this subject.

    That last bit made me chuckle. I wish unity's terrain system would make me breakfast in the morning, but I'm pretty sure it's never gonna happen.

    Comparing a static mesh to a dynamic tool like unity's terrain system is like comparing a rock to a buildozer....they are completely different things especially when you're talking about optimization. One is a tool and the other is quite literally a static object lol. Pretty sure there's been updates in the last 14 years lol but I hear you.