This page requires a reasonably modern HTML5 browser
with both Javascript and WebGL enabled.
If this message is not soon replaced by an interactive 3D model,
then it is likely that your browser does not support this web app.
Check your JavaScript Console
for specific error messages.
: |
: |
: |
: |
|
|
Canopy Parameters |
: |
: |
: |
: |
: |
: |
: |
Branching Parameters |
: |
: |
: |
: |
: |
: |
: |
: |
: |
Trunk Parameters |
: |
: |
: |
: |
: |
: |
: |
: |
: |
Trunk Color:
|
|
Shape Generator: |
Surface Generator: |
Polyhedra Type: |
: |
: |
: |
: |
: |
: |
|
: |
: |
Geodesic Segmentation: |
: |
|
|
|
: |
: |
: |
: |
|
: |
: |
: |
Trunk Color:
|
|
Projection (Shortcut keys: 1 to 6) |
||
|
||
|
|
This affects only the display of dimensions within the interface, all dimensions are stored in millimetres.
Displays dimension lines along the outer bounding extents of the tree. |
|
|
This aim of this app is to generate reasonably configurable low-polygon parametric trees for use with BIM and building performance analysis. To be used effectively in any detailed analysis, tree geometry needs to be as simple and light-weight as possible, but still sufficiently configurable to reasonably represent the size, shape and shading effects of existing or future trees on a site. Also, the leaf canopy needs to be able to vary its colour and opacity across the year to properly represent the dynamic seasonal effects of deciduous trees that shed and then regrow their leaves annually.
Unfortunately there are very few tools available that can viably model or describe these dynamic seasonal shading effects, which in turn means that most building analysis software either ignore it or provide only limited means to deal with it. Thus, the hope is that having tools that make modelling and describing it relatively simple and straightforward may motivate more analysis tools to better support the dynamic shading effects of vegetation.
The app can generate both simple abstract geometric representations as well as much more realistic trees that use mapped textures to model the foliage (thanks to proctree.js - see Credits). Each procedural generator requires a fair number of controls for the various parameters that govern the results, so simple experimentation is the only real way to gain an understanding of what each one does. However, it is probably worth explaining some apsects of the geometric representation.
There are a number of ways you can generate natural-looking geometric canopy shapes. One is to use some standard polyhedon and subdivide their surfaces into triangular leaves. Another is to distribute random, semi-random and ordered points over a sphere and then connect those points into facets to form a surface. Alternatively, you can also use various spatial algorithms to calculate values in the cells of a 3D volumetric data grid and then generate the canopy as an iso-surface.
The most obvious way to create a surface from random points in space is to simply join them all together with triangles, which is exactly what the Delaunay Triangulation method does. Another way is to generate Voronoi Cells by joining the centers of each adjacent triangle to create more complex polygonal facets. A further method is to generate a Convex Hull from the points, which is essentially just wrapping them in a stretchy fabric such that only the outer-most points define the shape. On the other hand, an iso-surface shows the bounding volume for a given threshold within a spatially varying value.
I started out looking only at abstract geometric representations of tree geometry, but then discovered Paul Brunt's excellent proctree.js code, which generates much more realistic tree trunks and uses texture mapping for foliage. After implementing and exploring that for a while, and adding radial branching as well as forking and my own textures, I now think that there are applications for both styles of tree.
There are other tree generators out there, but they tend to focus more on realistic visualisation, texturing and rendering. There are not many tools that I could find for generating simple abstract geometry-only trees, other than more generic mesh editors which you can bend to that purpose. Also, I wanted to be able to deeply integrate parametric trees directly in my BIM tools as being able to accurately model site conditions goes a long way towards making an analysis model believable.
Thus, I really needed to write my own in order to strike the right balance between something that looks convincingly like a tree but is still simple to model and manipulate, and that matches the visual style of my building model editor.
The following are some of this app's more interesting features:
You can interactively adjust the 3D view of the model using a mouse, pen or stylus, or by touch on a tablet or phone. You can also use the items in the 3D View Settings popup.
NOTE: You can use the Shift and Ctrl/Meta keys to adjust the increment of each scroll event or key press.
The Shift and Ctrl/Meta keys are used pretty extensively to modify interactive data entry. This applies to all increment buttons, scroll wheel motion, slider controls and input elements.
NOTE: You can use the scroll wheel to edit a data value when hovering over any slider, numeric input or even table rows that indicate their editibility.
This page uses the following frameworks/components:
Bootstrap v3.3.2
Copyright © 2011-2015 Twitter, Inc. - github.com/twbs,
http://getbootstrap.com/
(LICENSE)
Bootstrap-popover-x v1.4.0
Copyright © 2014, Kartik Visweswaran, Krajee.com,
https://github.com/kartik-v/bootstrap-popover-x
(LICENSE)
Isosurface Polygonizer v1.0.0
Copyright © 2013 Mikola Lysenko - github.com/mikolalysenko,
https://github.com/mikolalysenko/isosurface
(LICENSE)
jQuery v1.11.2
Copyright © jQuery Foundation and other contributors,
https://jquery.com/
(LICENSE)
JSON Editor
Copyright © 2015 Jos de Jong - github.com/josdejong
https://github.com/josdejong/jsoneditor
(LICENSE)
JSURL
Copyright © 2011 Bruno Jouhier - github.com/Sage
https://github.com/Sage/jsurl
(LICENSE)
KnockoutJS v3.2.0
Copyright © Steven Sanderson and the Knockout.js team,
http://knockoutjs.com/
(LICENSE)
Knockstrap v1.2.0
Copyright © 2013 Artem Stepanyuk - github.com/faulknercs,
http://faulknercs.github.io/Knockstrap
(LICENSE)
Leaflet Maps API v1.4.0
Copyright © Cloudmade, Vladimir Agafonkin - github.com/Leaflet,
https://leafletjs.com/
(LICENSE)
Mapbox Delaunator v4.0.1
Copyright © Mapbox - github.com/mapbox,
https://mapbox.github.io/delaunator
(LICENSE)
OpenStreetMap Map Data
Copyright © OpenStreetMap contributors - openstreetmap.org,
https://www.openstreetmap.org/about
(LICENSE)
proctree.js
Copyright © 2012, Paul Brunt - github.com/supereggbert,
https://github.com/supereggbert/proctree.js
(LICENSE)
SnackbarJS
Copyright © 2014 Federico Zivolo - github.com/FezVrasta
http://fezvrasta.github.io/snackbarjs
(LICENSE)