3D model of Štrbské Pleso


Categories: Tutorials

Tagged with: | | | | |

Terrain, vegetation, public spaces:


  1. We import the drawing geometry in the correct scale into the Rhino file. Documents ( in this case contours with an assigned height value ) in digital form can be obtained for a fee from the Geodetic and Cartographic Institute Bratislava ( https://www.geoportal.sk/sk/geoportal.html ). The proposed surfaces are drawn in 2D in AutoCad.
  2. Using the Geometry Pipeline component, we assign individual layers to the curves, in case the number of curves in a layer changes during the design, so that they are automatically assigned to the script..


3. We first raise the contour lines to the correct altitude – check using the panel – the z coordinate must correspond to the real altitudes in the project

4. We will create a mesh as the entire terrain formed by contour lines.

5. The terrain that we want to display is smaller than the range of contours – therefore we will create a bounding frame of the project and from it a surface ( Boundary Surfaces ), which we will divide into points ( Divide Surface ) – we will then project them onto the original mesh from the contours ( MeshRay ) – then we will create terrain from it (Surface From Points ) It is more convenient to create a surface and not a mesh if we want to bake and export the terrain, because the mesh is displayed as a surface of triangles, while the surface is a nicer.

6. But if we want to color this terrain according to the altitude of the terrain, it is necessary to create a mesh from it, decompose it ( Deconstruct Mesh ) – we will get Vertices ( points ) that have a z – coordinate that should determine the color at the given height.

7. We use Deconstruct Point to get these z-coordinates, then use the Remapp number component to change the z-coordinate interval to 0-1. We assign the Gradient we need to this interval. In this case, it was a gradient from green to gray as an indication of vegetation – greenery x rock.

8. In the last step, we create the terrain using Construct Mesh, where we use the mesh from point 4, while connecting the Gradient from point 5 to the Color input.


Similar to creating a bounded terrain, we will create a Boundary Surface, which we will divide into points

2. We will then transfer the points to the terrain using the Project Point component and create a new Mesh from them

3. In the case of public spaces ( roads, squares… ), we must first create the correct Mesh by cutting sections from the Mesh of the outer border of the public spaces using the Solid Difference component. ( sometimes it is also necessary to use the Flip component so that the correct parts of the surface are cut out.) Then we proceed in the same way as in points 1 and 2.

4. Use Move to raise the elements a little above the terrain so that the surfaces do not overlap and the difference in color can be clearly seen. We will add color using Custom Preview and Color Picker.


1.We will use the bounding rectangle that determines the size of the section on the terrain as an area for generating random points using Populate 2D. With the Pop2D component, it takes longer for the program to populate all those points because it tries to maintain uniform spacing between the points. To speed up the program, point generation via Evaluate surface – points with random x and y coordinates could be used. Although this solution is much faster, in the end it is not so visually nice…

2. The “vegetation boundary” layer determines where the vegetation is and where it is not (e.g. on the road or ski slope) – we will create an area from it and use the Dispatch component to select the points from point 1 that are on this area and which are not. The points that lie on it are the points where the vegetation will be placed.

3. Similar to the previous cases, we transfer the points to the terrain using MeshRay.

4. According to the altitude, we want to determine whether it will be conifers or dwarf pine, so we will divide the points on the terrain according to their z-coordinate.

5. Points with a z-coordinate smaller than 1420 m will be trees and points with a coordinate greater than 1500 m will be dwarf pine. Points with coordinates between 1420 and 1500 inclusive (Includes component) will be mixed.

6. Due to the fact that the points were generated using Populate 2D ( or points with random x and y coordinates ), their distribution is random, and therefore, in the case of mixed vegetation (trees + dwarf pine ), it is sufficient to divide the list of points ( List Length ) in half and assign one half to trees and the other to dwarf pines.

7. We will create the trees schematically as cones so that each tree has a different diameter and height. As a basic height, we enter 38m and a diameter of 10m.

8. The height and diameter will change randomly (Random) according to the number from the interval 0.65-1.4 (Domain) by which the basic dimensions of the cone are multiplied. The number of random multiplications must equal the number of trees, ensuring that each tree is different. ( List Length ). However, this game with size could also be solved using the Scale component in the z direction (height) and evenly in the x and y directions (width).

9. We will create the drawf pines schematically as balls (Mesh Sphere) with a base radius of 10m.

10. The size of the pines will change according to the altitude, so again we will divide the points that are the center of these balls into coordinates, where the value of the z coordinate is important.

11. We find out the z-coordinate interval using the Bounds component and use the Remap Numbers component, where we set the desired interval (from 1 to approx. 0.45) using the T (Target Domain) input and the Graph Mapper component. The basic radius of the ball will be multiplied by the numbers from this interval – so the pines will decrease with higher altitude.

12. Finally, we add the “tree” and “dwarf pine” color using the Custom Preview and Color Picker.

This project was made in Rhino6: