Here is a proposal for a powerful mechanism which I think will allow is to do neat dynamic things without having to add lots of special case code, scripts or data to the client.
Everyone who works with graphics should be familiar with the concept of tiles images or textures where the same image is repeated in order to cover an area large than the original image.
The concept of tiled models aims to do something similar, but by rendering multiple instances of a 3D model adjacent to each other to represent a larger entity. There are a few example cases to which this could be applied, both existing and new.
The first, already fairly familar example is the jetty currently included in the default map, just down the hill from the pig sty. Multiple instances of a similar model to that currently used could be rendered adjacent to each other to form a larger jetty. Allowing this to be specified as a single entity would reduce the network and memory cost of these multiple instances, and reduce any problems with vertical alignment due to variation of the terrain.
The second example might be a long wall or fence which could be made up of multiple instances of the same model. Here it might be more desirable to adjust the height of each instance to the terrain, requiring a more expressive specification.
The third example, which is my main inspiration for the mechanism is to allow the fast efficient representation and rendering of scaffolding used to create large constructions. Scaffolding could be represented as a cuboid shaped model representing a section of scaffolding which could be then rendered many times adjacently in three dimensions allowing arbitrary cuboid shapes of scaffolding to be represented with the minimum of ugly scaling issues.
Existing clients already have mechanisms to scale models to the size of a bounding region specified by the server. This proposal would extend this behavior to include the possibility of scaling the model so that it will fit multiple times into the bounding box, and then rendering it multiple times within the box.
As a starting point for discussion, I describe below some entities in JSON which specify object tiling using a property called “tile”, which gives three integer values, being the number of instances required in each of the three dimensions.
A jetty represented by a model 3m x 3m x 1m high. The jetty is 9m long, and requires three tiled instances of the model to render correctly.
“parents”: [ “jetty” ],
“bbox”: [ 9, 3, 1 ],
“tile”: [ 3, 1, 1 ]
A block of scaffolding 5m x 10m x 5m high, represented by a 1m cube model.
“parents”: [ “scaffold” ],
“bbox”: [ 5, 10, 5 ],
“tile”: [ 5, 10, 5 ]
Comments and extended proposals please. If we get to a rough base spec quickly, I can implement some test entities on the server, and we can get testing. Refining the spec can come later, in keeping with fast and loose development methodology.