Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Unity 2022.2 is now available as the latest Tech release.
    Dismiss Notice
  3. We are making some changes to the DOTS forums.
    Dismiss Notice
  4. Have a look at our Games Focus blog post series which will show what Unity is doing for all game developers – now, next year, and in the future.
    Dismiss Notice

Feedback The usability of the Terrain Tools is most horrible

Discussion in 'World Building' started by Rowlan, Apr 23, 2022.

  1. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    3,153
    I realized from talks on discord that nobody, really nobody is using the Terrain Tools, especially not the masks. The tools are pretty much awesome, yet suffer from a developer vs user dilemma. It's like nobody checked their usability.

    So I just tried to use the height mask. Something as simple as masking height on the terrain. And I have absolutely no idea how to achieve what I want. I'd like to have the middle of this terrain textured, just as simple use case. This is the UI:

    terrain.jpg

    Most of all: The exploration and testing of those masks is very tedious. You need to change a parameter and then you have to paint to see the result. Repeat this process over and over. It would make much more sense to have an option to have the effect applied on the entire terrain whenever you change something. For one because one would use it mostly this way. For the other it'd be definitely better for learning how those masks work.

    Now I'm trying to paint snow on the mountain.

    First parameter strength isn't obvious. Not at all. Because when it's 1, the mask is applied:

    strength1.jpg

    When it's 0 the entire mountain is white:

    strength0.jpg

    This doesn't make any sense. None at all. I do understand that opacity of the brush comes into play now. But why do I have to think inverse when all I want is have my painting only being performed at a certain height?

    Conclusion: The mask should have a relation to the opacity.

    Next is the heightmap range. No idea what those values are and why they are 0 to 1. And why I could even go higher. From trial & error I figured that's the relative terrain height. So if I want only the bottom of the mountain covered in snow in my case I'd have to go from 0 to 0.01. Why do I have to mess with relative numbers? This definitely should be sliders in relation to the total terrain height. Maybe in addition show the number. But the user shouldn't have to mess with something at the n-th decimal.

    And the remap curve is a chapter on its own. It doesn't make sense for me. I guess I have to think the horizontal curve as vertical. Basically painting would start at 10% from the bottom of the terrain up to approximately 90%. Just using the default here when you add that mask.

    And that's only 1 of those masks.

    My personal conclusion: The Terrain Tools are super fast and awesome and you can achieve a lot with them. But the usability is most horrible. No advertising Blog post would help here. They'd need a complete overhaul with the UI. Not the functionality. Just the UI.

    The terrain tools in the way they are now are for developers, not for artists.

    And what's also problematic is that the terrain tools are locked for developers. Only internal classes, no API, so one can't even make use of their functionality in a custom editor, unfortunately.
     
    Last edited: Apr 23, 2022
  2. BunnyViking

    BunnyViking

    Joined:
    Nov 28, 2019
    Posts:
    12
    I agree completely. The UI of the terrain tools is awful while the tools themselves are quite good and very useful. All the swapping between items in a drop down box and the awful brush radius selection (moving between doing a small detail correction around a building to smoothing out a whole hill is frustrating with the resolution covered in this one tiny slider... definitely needs some modifier keys for fine tuning)

    Basically even the tools in the worst version of MS paint are more usable than the tools in the terrain tools, which makes their features hard to use, and the features are great.

    ps. Height being 0-1 is ok, it really is a relative value based on the height resolution you're using for your terrain. It would be lovely if the system did the maths and put in accurate numbers though.
     
    useraccount1 likes this.
  3. Gokcan

    Gokcan

    Joined:
    Aug 15, 2013
    Posts:
    287
  4. StaggartCreations

    StaggartCreations

    Joined:
    Feb 18, 2015
    Posts:
    1,904
    That's world building Valhalla :D

    I'm still very excited about the upcoming "Environment system" first shown at Unite 2019, which supposedly features a stack based and completely non-destructive workflow. I can't stress enough how vital that is.

    Tough, besides a handful of confirmations that it's still being worked on over the years, it was completely absent in the 2022 roadmap. :(
     
    EagleG likes this.
  5. MechaWolf99

    MechaWolf99

    Joined:
    Aug 22, 2017
    Posts:
    236
    If you didn't see, in 2021 they had a SGGRAPH talk about the technical side of a new terrain rendering system.
    So progress is being made! I kind of feel like we might see something for it in 2023, but we will see I guess.

    On the topic of terrain tools, I agree they could use a good UI/UX pass as some of them are no the most intuitive right now.
     
  6. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    3,153
  7. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    3,153
    In case anyone wants this fixed:

    Change

    Code (CSharp):
    1. public override string GetDesc()
    to

    Code (CSharp):
    1. public override string GetDescription()
    2.  
    and

    Code (CSharp):
    1. TerrainPaintUtilityEditor.BrushPreview
    to

    Code (CSharp):
    1. TerrainBrushPreviewMode
    and

    Code (CSharp):
    1. UnityEngine.TerrainTools.TerrainPaintUtility.BuiltinPaintMaterialPasses
    to

    Code (CSharp):
    1. UnityEngine.TerrainTools.TerrainBuiltinPaintMaterialPasses
    About this I'm not sure, it's read-only:

    Code (CSharp):
    1.         // Prepare the FilterContext
    2.         filterContext.brushPos = brushPos;
    3.         filterContext.brushSize = m_BrushSize;
    4.         filterContext.brushRotation = m_BrushRotation;
    a quick hack would be this:

    Code (CSharp):
    1.         FilterContext filterContext = new FilterContext(FilterUtility.defaultFormat, brushPos, m_BrushSize, m_BrushRotation);
    2.  
    But I guess there's a better solution.
     
    carl010010, shikhrr, EagleG and 2 others like this.
  8. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    3,153
    Why I'm posting the above: Creating a global terrain texturizer could be fairly simple, in case anyone finds the time to code it:

    * create a new custom terrain tool with the example from above
    * provide an arraylist with the available layers in a stackable / reorderable way, Unity has built-in mechanisms for that
    * add BeginChangeCheck ... EndChangeCheck in the inspector and paint all layers whenever something in the inspector changes
    * paint the entire terrain, ignore the brush
     
    PutridEx likes this.
  9. Querke

    Querke

    Joined:
    Feb 21, 2013
    Posts:
    49
    First of all, I love your assets.
    Second of all, there is an asset called Atlas which has non destructive (dont quote me on that) layer based workflow with stamps, haven't had the chance to try it yet. But it sure looks good. (link: https://assetstore.unity.com/packages/tools/terrain/atlas-terrain-editor-207568 ).

    Third. I completely agree with the comments on the usability of terrain tools mask filters. The main issue is the use of a animation curve for the masks. Lets take the slope mask as an example, instead of having a slider that goes from 0-90 degrees with a min-max setting, you have to go into the animation curve window and try to map a value between 0-1... And the animation curve is the single most frustrating thing to work with when you want to make small adjustments quickly. I made a topic on this years ago, they thanked me for my feedback, but I really doubt they will do anything about it. Much like everything in unity, the UX is sub optimal. It's like, if the devs who made the unity tools is happy with the math in their code and it does what its supposed to do. Then they ship it. no testing for UX at all.
     
  10. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    3,153
    The problem is it's bound to the inspector. And the inspector with its single flat panel is just not good enough for using terrain related sculpting. Unity should switch to different layouts for that. Like e. g. Blender does for modeling, sculpting, etc
     
    useraccount1 and Gokcan like this.
  11. PixelDough

    PixelDough

    Joined:
    Apr 27, 2018
    Posts:
    23
    Could make the argument that Unity as a whole could really benefit from a proper layout switching system like Blender. When you start working with a whole lot more tools and editor windows, it gets really cluttered and so much time is spent reorganizing panels and switching between windows. The current Layout system in Unity just doesn't accomplish the same result because it deletes any changes you made to the previous layout, and doesn't work on a per-project basis.

    And yeah, I agree with all the sentiments above about the poor usability of the UI for terrain. The new terrain tools are really cool but it takes forever to use them simply because you have to spend so much time fiddling with a botched inspector that doesn't give you much of any help explaining what anything means on a practical level
     
    wyattt_ likes this.