Search Unity

Using Unity Terrain with DOTS workflow

Discussion in 'Entity Component System' started by desertGhost_, Oct 3, 2019.

  1. desertGhost_

    desertGhost_

    Joined:
    Apr 12, 2018
    Posts:
    260
    Hi,

    I am trying to use Unity Terrain with the Unity Physics package.

    Currently I am generating a mesh from a given terrain and using that mesh as the custom mesh in the physics shape authoring component. I am using the terrain gameobject for the rendered representation. This works fine, but the work flow is less than ideal (we have to generate a new mesh each time the terrain is altered). I also have some concerns about collision accuracy relative to the visualized terrain in some parts of the terrain.

    Is there a more direct way to use Unity Terrains with Unity Physics?

    I noticed that there is a TerrainCollider in the Unity.Physics package, but I don't see any authoring components to use with it. I don't mind writing my own authoring component if necessary.

    Thanks.
     
  2. Joachim_Ante

    Joachim_Ante

    Unity Technologies

    Joined:
    Mar 16, 2005
    Posts:
    5,203
    Terrain & Physics is currently not supported. We are working on a dedicated dots terrain engine that will fill the hole.
     
  3. daschatten

    daschatten

    Joined:
    Jul 16, 2015
    Posts:
    208
    You can easily create a terrain collider from a terrain. Just write your own authoring component or a system that creates it. At least i haven't found an issue yet :)
     
  4. optimise

    optimise

    Joined:
    Jan 22, 2014
    Posts:
    2,128
    I hope dedicated dots terrain engine able to add/remove specific feature completely so at runtime it can give best performance for mobile device.
     
    Neiist likes this.
  5. Joachim_Ante

    Joachim_Ante

    Unity Technologies

    Joined:
    Mar 16, 2005
    Posts:
    5,203
    Awesome. Thats a totally reasonable usage for the low level API's in physics in the interim until we have a dedicated dots terrain system.
     
    pal_trefall likes this.
  6. daschatten

    daschatten

    Joined:
    Jul 16, 2015
    Posts:
    208
    Here is my terrain collider authoring component for physics >= 0.2.1:

    Code (CSharp):
    1. public class PhysicsTerrain : MonoBehaviour, IConvertGameObjectToEntity
    2.     {
    3.         [SerializeField] PhysicsCategoryTags belongsTo;
    4.         [SerializeField] PhysicsCategoryTags collidesWith;
    5.         [SerializeField] int groupIndex;
    6.      
    7.         public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    8.         {
    9.             var terrain = GetComponent<Terrain>();
    10.  
    11.             if (terrain == null)
    12.             {
    13.                 Debug.LogError("No terrain found!");
    14.                 return;
    15.             }
    16.  
    17.             CollisionFilter collisionFilter = new CollisionFilter
    18.             {
    19.                 BelongsTo = belongsTo.Value,
    20.                 CollidesWith = collidesWith.Value,
    21.                 GroupIndex = groupIndex
    22.             };
    23.          
    24.             dstManager.AddComponentData(entity,
    25.                 MapHelper.CreateTerrainCollider(terrain.terrainData, collisionFilter));
    26.         }
    27.     }
    And the CreateTerrainCollider method:

    Code (CSharp):
    1. public static PhysicsCollider CreateTerrainCollider(TerrainData terrainData, CollisionFilter filter)
    2.         {
    3.             var physicsCollider = new PhysicsCollider();
    4.             var size = new int2(terrainData.heightmapWidth, terrainData.heightmapHeight);
    5.             var scale = terrainData.heightmapScale;
    6.  
    7.             var colliderHeights = new NativeArray<float>(terrainData.heightmapWidth * terrainData.heightmapHeight,
    8.                 Allocator.TempJob);
    9.  
    10.             var terrainHeights = terrainData.GetHeights(0, 0, terrainData.heightmapWidth,
    11.                 terrainData.heightmapHeight);
    12.  
    13.          
    14.             for (int j = 0; j < size.y; j++)
    15.             for (int i = 0; i < size.x; i++)
    16.             {
    17.                 var h = terrainHeights[i, j];
    18.                 colliderHeights[j + i * size.x] = h;
    19.             }
    20.  
    21.             physicsCollider.Value = TerrainCollider.Create(colliderHeights, size, scale,
    22.                 TerrainCollider.CollisionMethod.Triangles, filter);
    23.  
    24.             colliderHeights.Dispose();
    25.  
    26.             return physicsCollider;
    27.         }
    UPDATE: I reworked the for loops and array indizes for terrainHeights and colliderHeights. Seems to be more correct now :)
     
    Last edited: Oct 17, 2019
    ZBIANGZ, Neiist, Ryiah and 25 others like this.
  7. MaverickROM

    MaverickROM

    Joined:
    Mar 19, 2019
    Posts:
    11
    @daschatten , great work here. Question: has anyone modified this to create colliders for trees also?
    @Joachim_Ante , is there any word regarding the dedicate DOTS terrain system?
     
    lclemens likes this.
  8. daschatten

    daschatten

    Joined:
    Jul 16, 2015
    Posts:
    208
    You can use the default conversion for all colliders except terrain.
     
    MaverickROM likes this.
  9. Satyros

    Satyros

    Joined:
    Feb 8, 2015
    Posts:
    6
    Thank you! Works well, but collisions with other entities fail to happen.
    Is that because the collider needs to be convex? And how would you go about doing that in ECS?

    Edit: I was just being an idiot with the "collisions fail to happen" part. Was using the wrong collision masks. Still i would like to hear how one could turn this into a convex collider, as I'm in the process of learning DOTS! :)
    Thanks alot for the code!
     
    Last edited: May 31, 2020
  10. Arnold_2013

    Arnold_2013

    Joined:
    Nov 24, 2013
    Posts:
    284
    Thank you, this is awesome.

    The only thing I bumped into was Objects don't collide when then terrain is exactly flat in a region, and they fall through it. (I am using Unity 2020.1.1f1, havok physics 0.3.1-preview, Entities 0.14.0-preview.18, with havok physics enabled).

    Just in case i forget and need it later :) or if someone else has the same issue.

    I added a very small random range to each height point in your code:

    Code (CSharp):
    1. var randomExtra = UnityEngine.Random.Range(0.00001f, 0.0001f); // NOTE: Added to original code to prevent flat terrain colliders not working
    2.  
    3. colliderHeights[j + i * size.x] = h + randomExtra;
     
  11. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    84
    I saw people strungling in this question in Unity Physics threads because they think the need to use physics shape component and co..
    So for poeple who dont want to do any mistake in setup of Unity Physics terrain collision :

    https://drive.google.com/drive/folders/1xMqXOHUlsNorgt_Opymeaj4AmTUiODAu?usp=sharing

    Just add the two scripts to your project and setup the terrain like on the screenshot include with the two scripts. (Don't forget to create a dedicated terrain physics tag to be clean)
     
    Neiist, steveeHavok, Jackaljk and 4 others like this.
  12. Lukas_Kastern

    Lukas_Kastern

    Joined:
    Aug 31, 2018
    Posts:
    97
  13. Lionious

    Lionious

    Joined:
    Apr 19, 2013
    Posts:
    51
    nice! , would like to hear release date for the dots terrain engine. is it planned for 2020.2 or 2021? when do u think is coming out.?
     
  14. Kaegun

    Kaegun

    Joined:
    May 4, 2018
    Posts:
    15
    You are a legend!
     
  15. Opeth001

    Opeth001

    Joined:
    Jan 28, 2017
    Posts:
    1,112
    Hello everyone,
    this thread is amazing! ^_^

    how do you guys renderer the terrain ?
     
  16. desertGhost_

    desertGhost_

    Joined:
    Apr 12, 2018
    Posts:
    260
    I render the terrain in monobehaviour land.
     
    Lukas_Kastern and Opeth001 like this.
  17. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,768
    You can also use DrawMeshInstantiated/Indirect methods.
     
    Last edited: Nov 1, 2020
  18. Opeth001

    Opeth001

    Joined:
    Jan 28, 2017
    Posts:
    1,112
    Sry but I didn't get it xD ,
    How do you render a terrain with DrawMeshInstantiated methods ?
     
  19. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,768
    You probably are aware of that link, since you corrected my misspelling :p
    https://docs.unity3d.com/ScriptReference/Graphics.DrawMeshInstanced.html

    For example in Update,
    Code (CSharp):
    1. Graphics.DrawMeshInstanced ( myMesh, 0, material, matrices, elementsBatchCount, propertyBlock, UnityEngine.Rendering.ShadowCastingMode.On, true, cameraLayer, camera ) ;
    Code (CSharp):
    1. matrices = localToWorld.Value ;
    2. elementsBatchCount = 1 ;
    3. // Use, if you don't need pass shader properties
    4. MaterialPropertyBlock propertyBlock = new MaterialPropertyBlock() ;
    5. // afer this parameter, other are optiional.
     
    Neiist and Opeth001 like this.
  20. Opeth001

    Opeth001

    Joined:
    Jan 28, 2017
    Posts:
    1,112
    Yes I'm aware about DrawMeshInstanced i used it for my custom Hybrid Renderer, but i dont understand how you get a mesh and material from a terrain.
     
  21. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,768
    I thought you got mesh already, since you need pass heights to the terrain, during creation.
    For example here
    https://github.com/Unity-Technologi...ests/CollisionResponse/CreateSimpleTerrain.cs

    Code (CSharp):
    1. NativeArray<float> heights = new NativeArray<float>(size.x * size.y * UnsafeUtility.SizeOf<float>(), Allocator.Temp);
    2.         {
    3.             heights[0] = 0;
    4.             heights[1] = 0;
    5.             heights[2] = 0;
    6.             heights[3] = 0;
    7.         }
    8.  
    9.         var collider = Unity.Physics.TerrainCollider.Create(heights, size, scale, Unity.Physics.TerrainCollider.CollisionMethod.VertexSamples);
    In fact, you would need construct mesh from heights, if I gather this right.
     
    Opeth001 likes this.
  22. Opeth001

    Opeth001

    Joined:
    Jan 28, 2017
    Posts:
    1,112
    and how to extract the Materials reference from the Terrain ?
     
  23. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,768
    I would need to look at te samples to confirm. Sorry I am out of PC reach atm.
    There is sample with generated terrains, using heights and terrain rendering.
    But do they not have simply shared component on entity with mesh ahd texture?
     
    Opeth001 likes this.
  24. Opeth001

    Opeth001

    Joined:
    Jan 28, 2017
    Posts:
    1,112
    I can’t see a way to extract the textures :p
     
  25. Antypodish

    Antypodish

    Joined:
    Apr 29, 2014
    Posts:
    10,768
    Did you try following?

    Keep in mind, I named the terrain entity, using EntityManager.SetName at creation time.

    upload_2020-11-1_22-19-25.png

    Code (CSharp):
    1. RenderMesh render = ... get component from terrain entity
    2. UnityEngine.Texture texture = render.material.GetTexture ( 0 ) ;
     
  26. kite3h

    kite3h

    Joined:
    Aug 27, 2012
    Posts:
    193
    One of the things that should be implemented at low level is Grass and Terrain Physics.
    And that form can only be the form of Horizon Zero Dawn.
    This is because the amount of data is too large to be stored as component data.
    Therefore, you have to choose the method of creating component data when using it.
     
  27. hauwing

    hauwing

    Joined:
    Dec 13, 2017
    Posts:
    69
    hi, I tried to convert a normal terrain into an ECS entity using the above script but the collision behaviour is extremely weird, as you can see in the video, the ball is even stopped by something at the start and I had to drag the ball to roll it down, and there are some weird collisions encountered by the ball as it rolls down the hill. I am using CollisionMethod.VertexSamples. From the Physic Debug Display (draw collider and edge) there is no unexpected collision shape. Any help? thanks.

     
  28. Arnold_2013

    Arnold_2013

    Joined:
    Nov 24, 2013
    Posts:
    284
    I am using Unity.Physics.TerrainCollider.CollisionMethod.Triangles, and this works for me.
    A common issues i run into [and fix by trail and error] is having the X and Z of the terrain flipped between the normal terrain and the dots terrain collider. (this mirrors the effect over the diagonal of the terrain).
    I spawn a lot of spheres everywhere to see if anything makes sense.
     
  29. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    If you can replicate this you should submit a bug report.
     
    Neiist likes this.
  30. Arnold_2013

    Arnold_2013

    Joined:
    Nov 24, 2013
    Posts:
    284
    Terrain is not supported => it cant be a bug. from this thread:

    I am happy with the terrain physics 'workaround' that is given in the current threat, for me it works with triangles. Just out of curiosity i switched to VertexSamples and this gave different but still oke results (not like in the video).
     
  31. hauwing

    hauwing

    Joined:
    Dec 13, 2017
    Posts:
    69

    Hello, do you mean you simply convert a standard terrain into new DOTS physics either using triangles or VertexSamples with the script provided in this thread, when you roll a ball from a slope and it will just roll smoothly without the weird behaviour I had in my video? I'd like to see whether it is my workflow or the conversion script that cause the issue. Do you mind sharing that specific script here again? Thanks.
     
  32. Arnold_2013

    Arnold_2013

    Joined:
    Nov 24, 2013
    Posts:
    284
    Sure, most of it should be identical to the code above.

    Attach this to a terrain and it should work.*
    * I have the terrain convertion on "Convert and Insert", so the physics will be in DOTS, but the visuals are in normal unity.
    * I have the terrain belong to "0:static layer", and the collides with "multiple values". GroupIndex = 0.
    * the terrain also still has a 'normal' terrain collider, otherwise the unity terrain editing tools don't work.
    * unity 2020.2.3, entities 0.17, Physics 0.6.0 pre-3
    * Havok Physics



    Code (CSharp):
    1. #pragma warning disable CS0649
    2. using Unity.Collections;
    3. using Unity.Entities;
    4. using Unity.Mathematics;
    5. using Unity.Physics;
    6. using Unity.Physics.Authoring;
    7. using UnityEngine;
    8.  
    9. public class DotsTerrainColliderComponent : MonoBehaviour, IConvertGameObjectToEntity
    10. {
    11.     [SerializeField] PhysicsCategoryTags belongsTo;
    12.     [SerializeField] PhysicsCategoryTags collidesWith;
    13.  
    14.  
    15.     [SerializeField] int groupIndex;
    16.  
    17.     public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    18.     {
    19.         var terrain = GetComponent<Terrain>();
    20.  
    21.         if (terrain == null)
    22.         {
    23.             Debug.LogError("No terrain found!");
    24.             return;
    25.         }
    26.  
    27.         CollisionFilter collisionFilter = new CollisionFilter
    28.         {
    29.             BelongsTo = belongsTo.Value,
    30.             CollidesWith = collidesWith.Value,
    31.             GroupIndex = groupIndex
    32.         };
    33.  
    34.         dstManager.AddComponentData(entity,
    35.             TerrainMapHelper.CreateTerrainCollider(terrain.terrainData, collisionFilter));
    36.     }
    37. }
    38.  
    39. // Note: Resolution was originally split into Width and Height
    40. public static class TerrainMapHelper
    41. {
    42.  
    43.     public static PhysicsCollider CreateTerrainCollider(TerrainData terrainData, CollisionFilter filter)
    44.     {
    45.         var physicsCollider = new PhysicsCollider();
    46.         var size = new int2(terrainData.heightmapResolution, terrainData.heightmapResolution);
    47.         var scale = terrainData.heightmapScale;
    48.  
    49.         var colliderHeights = new NativeArray<float>(terrainData.heightmapResolution * terrainData.heightmapResolution,
    50.             Allocator.TempJob);
    51.  
    52.         var terrainHeights = terrainData.GetHeights(0, 0, terrainData.heightmapResolution,
    53.             terrainData.heightmapResolution);
    54.  
    55.         #region SameHeight fall through bug work around
    56.         // NOTE: Solves an issue with perfectly flat terrain failing to collide with objects.
    57.         var heightmapScale = terrainData.size.z;        
    58.         var smallestOffset = 0.01f; // 1 cm offset, works with 2048 resolution terrain
    59.         var heightmapValuePerMeterInWorldSpace = 0.5f / heightmapScale;
    60.         var inHeightMapUnits = smallestOffset * heightmapValuePerMeterInWorldSpace;
    61.  
    62.         for (int j = 0; j < size.y; j++)
    63.             for (int i = 0; i < size.x; i++)
    64.             {            
    65.                 var h = terrainHeights[i, j];
    66.  
    67.                 var checkerboard = (i + j) % 2;
    68.  
    69.                 colliderHeights[j + i * size.x] = h + inHeightMapUnits * checkerboard; // Note : assumes terrain neighboars are never 1 cm difference from eachother
    70.                              
    71.             }
    72.  
    73.         // Note: Heightmap is between 0 and 0.5f (https://forum.unity.com/threads/terraindata-heightmaptexture-float-value-range.672421/)
    74.  
    75.         #endregion
    76.  
    77.         physicsCollider.Value = Unity.Physics.TerrainCollider.Create(colliderHeights, size, scale,
    78.             Unity.Physics.TerrainCollider.CollisionMethod.Triangles, filter);
    79.  
    80.      
    81.      
    82.  
    83.         colliderHeights.Dispose();
    84.  
    85.         return physicsCollider;
    86.     }
    87. }
     
    Haneferd and Endlesser like this.
  33. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    He is talking about direct conversion of terrain. The low level API is being developed / bug fixed.


    From this it looks like scale.y does not like to be 0.0
    Code (CSharp):
    1.         // NOTE: Solves an issue with perfectly flat terrain failing to collide with objects.
    2.         var heightmapScale = terrainData.size.z;        
     
    Last edited: Apr 11, 2021
  34. snacktime

    snacktime

    Joined:
    Apr 15, 2013
    Posts:
    3,356
    A good start would be just open up their instancing api. It's an industry standard approach and a public api for it would be very straight forward. You would have to deal with supplying height/splats/normals, but that's usually what you would want. The whole point of lower level is you want the control over the higher level stuff.

    That would also actually mesh well with what their shaders look like. Which is basically they serve to access the core data and beyond that they don't do much. Nobody making real games uses the built in shaders directly, they all use third parties that hook into the what Unity has but offer far more.

    Our terrain uses custom rendering that is pretty much identical to Unity's instanced rendering. It's basically two api calls. One to get the initial vertex/indice buffers you call once. Per frame another call with camera matrices and it hands you quad tree nodes that index into the buffers. That's pretty much it. It's a simpler flow then rendering stuff with HR.
     
  35. Endlesser

    Endlesser

    Joined:
    Nov 11, 2015
    Posts:
    89
    @daschatten Do you mean extracting tree data out of terrain and code them into DOTS physics colliders? mind share a bit more details or codes?:)
     
  36. Sunstrace

    Sunstrace

    Joined:
    Dec 15, 2019
    Posts:
    40
    maybe another way is turn the whole terrain to mesh and use the mesh collider.
     
  37. Lukas_Kastern

    Lukas_Kastern

    Joined:
    Aug 31, 2018
    Posts:
    97
    This also supports tree colliders
     
  38. hauwing

    hauwing

    Joined:
    Dec 13, 2017
    Posts:
    69
    I believe up to this moment, converting a terrain into a mesh and use the mesh collider is the only way to get accurate collision. I tried using the method from the Unity-DOTS-Discord, Arnold_2013 has also been very kind to share the code, but still, there are fall through here and there...I gave up and used a mesh collider instead.
     
  39. Endlesser

    Endlesser

    Joined:
    Nov 11, 2015
    Posts:
    89
    Yes, it's what I am looking for.

    And there're some malfunctions when pulling in and tuning with DotsTerrainCollider.cs & DotsTerrainConversionSystem.cs, if i may

    1. The `PhysicsCollider` is not always in the root of a prototype prefab, it might added to its children(ex. LODGroup),
    and getting an entity's children at the same frame of its creation seems impossible(correct me if not).
    Code (CSharp):
    1.             if (!conversionSystem.DstEntityManager.HasComponent<PhysicsCollider>(prefabs[tree.prototypeIndex]))
    2.                 continue;
    3.  
    4.             var collider =
    5.                 conversionSystem.DstEntityManager.GetComponentData<PhysicsCollider>(prefabs[tree.prototypeIndex]);
    2. The CompundCollider.ColliderBlobInstance using looks very good, but combined with prototype prefab children's scale and rotation, the outcome colliders are inexplicable and never get it right since.

    To fix 1, I separate and put GetPrimaryEntity in Monobehaviour converting stage, and use a normal system instead of conversion system(to make sure next frame its children are accessible)

    To fix 2, use mesh physics colliders and collisions are setting accurate , although is not so performent.

    There's also an improvement here, since most physics colliders creation are burst compatible, you might want to put some codes under it.
    upload_2021-5-26_14-21-52.png

    So far these alteration works for me and nothing weird occur.

    And thank you Lukas.
     
  40. MNNoxMortem

    MNNoxMortem

    Joined:
    Sep 11, 2016
    Posts:
    723
    This is great. Thank you!
     
  41. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    Yes, that is possible and it sounds like that's what hauwing had to do, but as DesertGhost said in the initial thread post, that workflow is less than ideal. It's why I came here... because it would be nice to use the terrain tools without having to export a mesh every time I make a tiny change.

    Any news on the DOTS terrain engine??
     
  42. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    I'm using the DOTS terrain collider conversion script from this thread.

    Unfortunately, when I use CollisionMethod.VertexSamples it messed up my pathfinding - the agents go crazy and half the time they can't get to where they need to go. When I use CollisionMethod.Triangles, more often than not, my bullets collide with the ground before they hit their target. When I manually converted my terrain to a mesh I didn't have either of those problems, but it was a really lame workflow having to export and import a mesh every time I wanted to make a tiny change to the terrain.

    I'm having trouble figuring out why both collision methods are behaving poorly. So I thought I'd try adding the PhysicsDebugDisplay script to an object in the scene and see if I can visualize why everything is going wonky. Well that script seems pretty cool and useful, but unfortunately it doesn't display the outline for the terrain collider (it works for all the other colliders though). When I check the "Draw Colliders" checkbox it sorta shows something but it's all glitchy and I'm not exactly sure what I'm seeing. It makes a bunch of gray squares that look like this:

    upload_2021-7-23_19-35-28.png

    I'm hoping maybe someone knows a way to either visualize the terrain collider, or even better, maybe someone knows how to create a terrain collider from a unity terrain that works properly. Or... best of all... maybe the DOTS terrain engine is finally out???
     
  43. Thermos

    Thermos

    Joined:
    Feb 23, 2015
    Posts:
    148
    @lclemens

    Duplicate your terrain object, remove terrain component but keep the terrain collider component.
    Add DOTSTerrainCollider.
    Assign terrain collider to it.
    Move this terrain object into subscene.
    Done.

    Whenever you modify your terrain, hit reimport button of the subscene to regenerate terrain colliders.
     

    Attached Files:

    mikaelK likes this.
  44. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    That is the same method that everyone in this thread has been messing with ( @daschatten , @Lukas_Kastern , @Arnold_2013 ). Like your class, they're all based on the Unity.Physics.TerrainCollider.Create() function, which has a lot of problems like the ones myself and others have described in this thread.
     
  45. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    Is there anywhere we can go to see the current status of this dots terrain engine?
     
  46. Deleted User

    Deleted User

    Guest

    Any update about DOTS terrain engine?! It has been almost two years now (is the team not working on it now?!)
     
  47. TerraUnity

    TerraUnity

    Joined:
    Aug 3, 2012
    Posts:
    1,249
  48. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
  49. TerraUnity

    TerraUnity

    Joined:
    Aug 3, 2012
    Posts:
    1,249
    Yeah, I was thinking maybe it's on the same page of a DOTS terrain engine @Joachim_Ante was mentioning, even though nothing is mentioned about DOTS there!
     
  50. lclemens

    lclemens

    Joined:
    Feb 15, 2020
    Posts:
    760
    Is this supported in 0.50?