Elf Dream text

lien vers version française Voir cette page en français lien vers version française

(Permalink)

(Permalink) This page gathers tips and suggestion for virtual plants builders in the Halcyon virtual worlds system, to better meet the needs of users and landscapers (including planter robots). Plants are often overlooked, but they are one of the most important elements of landscapes, and ubiquitous in virtual worlds. So we need a wide variety of good quality plants, and especially with low land impact and proper LOD to remain visible in large landscapes.

For diagonal readers, important points are highlighted like this.

This page was created by Yichard Muni (Richard Trigaux) to help the progress of Halcyon virtual worlds. You are encouraged to save and reproduce it, as long as you retain this attribution. It is in the Wayback Machine dated Nov 27, 2020.

If you have other ideas to share with all the other virtual gardeners, please send a word, so that this document can be enhanced.

Since I lost the credentials of many of the authors of these ideas, any further suggestion will be added anonymously, as the lore of real gardeners.

Prims, sculpties or mesh?

(Permalink) Given their different properties, a vendor should always tell if his build is prims, mesh or sculpties.

Prims will remain, as the most appropriable way to build. But they create an overall squarish look, while quickly escalating in land impact.

Sculpties were a transition system, which allowed better shapes than prims. But they have a large actual land impact, even if counted as 1 per sculptie. Worse, they look bad at a distance, as we cannot control the lowest LOD. Second Life is bound to keep them, but Halcyon can be the occasion of a fresh restart.

Meshes allow for more natural shapes, better control of the far LODs, and much lower land impact. Another good point is that Collada 3D files are not bound to a single virtual worlds system. However creating them need to learn a complex software like Blender. Hopefully simpler software will appear.

 

So it is recommendable to use meshes for all new project.

 

For non-mesh-savvy people, there still are some tips:

☻The simple plant shape formed with three prims at 120° angles is still usable, for small plants, or for forests if we don't look from too close. These prims must be slightly tapered to reduce their actual land impact, but they are still counted each as LI = 1.

☻A better way is to use the simple meshes provided at the end of this document, that anybody can use without learning mesh making. Their land impact (when linked) are much lower, 0,066 for the 3 prims plant, and 0.047 for the other.

☻There also are mesh prims, of much lover land impact, that you can use like prims, save that shape-changing parameters do not work.

centering and placement

(Permalink) Gardeners and landscapers are often annoyed with plants with illogical origin or rotation. So, ideally:

☻ Plants must come with a <0,0,0> rotation. (At a pinch, a planter robot may understand that a non-null rotation must not be changed, for instance a plant with a sunny side)

The origin must be at ground level, and centered in the stalk, trunk, pivot, jar, etc. In plants made from a single mesh, this can be done with a small extra triangle way under, in order to center the trunk mesh at ground level. In plants made from prims or multiple meshes, a properly centered root prim must be provided, or you use prims with a slice from 0.5 to 1.

☻If your plants are mod, check that no prim is near the minimum 0.001m size (x, y or z) (0.01 in SL), because this prevents the user from shrinking the plant beyond that point. Think at dioramas, where plants can be reduced by 10 or more.

☻ With larger and larger landscapes, we need automated planter robots. But they need the criteria above strictly implemented , or they will plant stuff butt above head. And after, you say robots are stupid.

☻ Automated planter robots need to know the overall dimensions of the plants, but they can see only the dimensions of the root prim. With mesh, you can add some small extra triangles for this purpose, and also center the root at ground level. With prims, you can add a flat prim for the shadow.

☻ If your plant is entirely phantom, you can also use for this purpose the LowestLI.dae minimum land impact mesh provided at the end of this page.

Planter robots

(Permalink) A planter robot is a scripted object able to scan a land and rezz plants automatically, in a smart fashion, and thus able to create realistic landscapes without the tedious work of manually placing hundreds of plants. With large and cheap regions, they will become more and more indispensable.

The idea would be to allow a parcel owner to put any plant in the planter's inventory, and let it run alone automatically to create landscapes.

If we consider plants have a life, they may be scripted to grow, blossom and die of their own. The planter robot should be able to know that, and replace them.

A planter robot can detect and rezz objects without problems. But if we want it to modify these objects, they need to be scripted. If we want the scripts to be updated, they must have allocate it a pin number when rezzing. See the function llSetRemoteScriptAccessPin

Phantom or solid

(Permalink) It is annoying to be stuck in a scene because a plant is making an obstacle. The rule here is that, in most cases, a plant must be set globally phantom.

However a hedge, a vase or a big trunk may need to be a solid obstacle. This is the physical shape, and this property can be adjusted prim per prim, in the features tab in the build window:

None: the prim (or mesh) is like phantom.

Convex hull: the prim is solid, but simplified to an entirely convex shape. This saves server load, and can be used for simple shapes: trunks, jars, flower beds, rocks, etc.

Prim: This time, hollows are respected, for instance the physical shape of a branching tree appears as such, not as a blob. But this has the highest server load.

In a general way, the simplest the physical shape, the better. This can be set in the mesh importer, where you can select any of the LODs as the physical shape, which is thus simplified compared to the visible shape.

You can also create a collada file for your physical shape, and import it in the physics thumbnail of the mesh import window.

But the best remains to add an invisible solid prim with a very simple shape, or a very simple invisible mesh.

Perms

(Permalink) Perms are an important point for a buyer to make his decision. They must always be indicated by the vendor.

☻ As a creator, you decide which perms you want. But please consider what follows:

☻ Landscapers like modifiable plants, that they can resize, take parts of them, or change textures and colors. Textures are usually protected from copying when mod, so that if you want to offer them, you must provide them as content of the root prim or in a box with the plant.

☻ It is also desired that we can change parts of the prims, like the flowers colors or the flower textures. For this they must be a separate side (in world) with a separate texture (material in Blender).

☻ There is a Halcyon project of an export perm (of your stuff only).

☻ Mundo Market will also allow the same object to appear in several worlds. If you bought it in one, it should be deliverable in all related worlds. The creator can control in which world it can appear.

 

Have nice texture colors

(Permalink) This is very important. A common problem with plants is that textures are more gray than natural , creating this dark and gray «Second Life style», contrasting with other virtual world system, like There.com, with natural or merry colors.

But especially, providing grayish textures removes choice for the landscaper. Indeed, it is still possible to gray a vivid color, but not to make vivid a grayish color. So that:

☻ Have textures with saturated colors. This way the final user can add gray if he really wants that.

☻ Have plant textures with light colors allows the builder to add an overall tone, darker if needed.

☻ Have contrasted textures, to keep the details even when mixed with a plain color.

☻Use the tip described about alpha textures, which automatically surrounds all shapes with a color of your choice, making foliage more visible.

One texture per prim, or several?

(Permalink) For an user, it is desirable to have separate textures for leaves, flowers, trunk, fruits, etc. instead of a single texture for all. This allows the final user to specifically change the color or the tone of a part, like a flower.

The custom inherited from movies modelers is to totally wrap an object with a single common texture. But they do that with expensive 3D creation tools like 3DSmax, able to rewrap instantly after any modification, while updating the texture. This works well for movies props, which are used only once, and are not constrained by usability, Internet transfer or land impact as in virtual worlds. But there is is no free tool to do that in Second Life, Blender or Halcyon, and manually calculating or modifying this common UV map is a nightmare. So it is much better to use separate textures, one per side, which are much simpler to UV map, much more maintainable, and modifiable for the final user.

Grass covers

(Permalink) These are important items, usually done with a network of vertical mesh faces. The difficulty is to join several seamlessly. There are two solutions:

☻ A blurry border with tapering height. This way, two overlapping objects look like a continuous cover, with a large tolerance on their position.

☻ A neat border. In this case it is harder to get a continuous cover, and this needs several sizes, and smaller sizes to fill the holes.

☻ The best solution seems to blend the two ways, like a quarter of a circle. The radiuses are frank birders, while the curve has its height varying progressively.

☻ Tapering height also compensates for a common problem: many stalks look like a wall with a defined height. Both the stalks and the faces must have different heights. The user can somewhat remedy this by placing each grass prim slightly tilted.

☻ Higher LODs must not disappear with distance, while still having decreasing number of triangles. This needs to UV map the same texture more densely, to compensate for less overlap. Think same number of stalks for each LOD.

☻The highest LOD may be very simple, but it still needs to fully occupy the same volume, in order to the grass cover remain visible whatever the distance. The best seems to use a flat top pyramid, UV mapped with many times the texture, to keep the feeling of partial transparency.

Rocks

(Permalink) A light gray or light beige texture allows for coloring the rocks after the context. Dark textures do not allow for this freedom.

It is better to have geologically exact rocks, and also textures coordinated with angles or layers in the shape. Photos of real rocks give excellent results, if they are homogeneous and if needed oriented after strata. We find some seamless textures like that, and they are relatively easy to be made seamless in a graphic software, without art talent.

Water falls

(Permalink) They are usually done with a texture animated on a mesh. A different UV mapping ratio at bottom will make water fall faster at bottom than at top. A section of a sphere elongated vertically can give about the same result. But with a mesh you can make the center of the stream run faster than the sides. With Several such prims, with some particles for foam, you can make stunning cataracts.

Flexy prims

(Permalink) Flexy prims or flexies are a common way to have plants swaying in the wind. But they have a large land impact. Ideally we should have flexy flat meshes for this purpose, and a better more customisable wind system.

Alpha textures rezzing, alpha bug, Lag.

☻ (Permalink) The alpha bug happens when we see through several prims with alpha transparency textures: only one of the texture appears at random, and often they flicker. There is a relatively simple fix which works for most plants, save intrinsically fuzzy parts like cotton or wheat ears. In the build window, textures tab, near the mini image of the texture, there is a check box called «Alpha Mode». Select «Alpha masking», which opens a value field called «mask cutoff», that in a first approximation you set at 128. Alpha masking replaces progressive transparency by an all or nothing transparency, which is much faster for the viewer to process, thus cutting lag. This also eliminates the alpha bug, giving better results for plants. Depending on the alpha cutoff value, the whole texture is visible, or part of it, or nothing. Since often parts like leaves have a fuzzy border, a high alpha cutoff will eat part of them, or on the contrary a low alpha cutoff will leave a darker edging, which can be desirable to avoid all the leaves to merge in a single green blob. This also allows for smaller textures, as they still appear with neat edges, not pixellated.

☻ Another issue is that, when not fully loaded, alpha textures often appear as an unsightly black square s blocking the landscape. This is because all 100% transparent pixels of a texture are considered black by default. To avoid this, you can add to your texture a 99% transparency layer of an appropriate color, like darker green for foliage.

This trick is especially interesting with Alpha Mode set to Alpha masking, as it automatically creates an edge all around the leaves, which color you can set. Usually it is darker than the leaves, improving visibility.

Land Impact and mesh

(Permalink) Vendors should always tell the land impact of their creation. Sometimes per meter or per square meter.

In worlds where surface is cheap, plants can be thousands in a scene. So great care must be taken to have them with an as low land impact as possible. Here again meshes beat the other solutions by far, but this section also provides help for non-meshers.

Prims: each system prim in an object contributes to 1 to the calculus of the land impact, regardless of their complexity. Still this complexity varies widely: 12 triangles for a tapered box, 108 for the common box, and 1152 for a torus. All count the same against the land impact figure, but it is very advisable to use tapered boxes to lower the actual land impact.

Sculpties: a 16x16 sculpt map has 512 triangles, and a 64x64 sculpt map has 8192 triangles, that is 40 prims. But the land impact is still counted as 1. Thus a forest of big sculpties would be awfully laggy.

Meshes: Today both SL and Halcyon calculate the land impact after the number of triangles in an object, instead of the number of prims. Add to this that, Halcyon using better servers, it allows for a more favorable calculus of the land impact. This is very advantageous for plants, which can be very numerous, but with few triangles each.

☻Of course even a beginner modeler can do better meshes than the old three boxes trees. But even the three boxes beat sculpties by far, especially if you taper them. For this reason:

For the non-meshers, several simple Collada files are provided at the end of this document, with instructions to get them in world. The first contains a 3 120° meshes plant, the second a two faces box and two triangles with two sides. You can use them to create trees or plants, or even more complex foliage, with a LI nearby as low as complex meshes. This is enough in many cases, and anyway better than nothing. These meshes are so light that they can be linked by hundreds before significantly raising land impact. Add to this that, since you imported them, you appear as the creator: you can save them on your drive, sell them, OAR them, with my full licensing provided for Halcyon.

Lowering land impact using the fields
«☑ generate normals» and «crease angle».

(Permalink) Normals are vectors associated to each face of a mesh, to make it look rounded, instead of faceted.

If the mesh you are importing has no normals, the «☑ generate normals» check box allows to create them. But the importer then needs that you set a «crease angle», under which two adjacent faces will look rounded, instead of faceted. For instance, to make a cylinder look round, but still with square ends.

When a low crease angle is selected (or the box is unchecked), the importer creates a lot of supplementary vertices, which are not in your file. Problem, the land impact is calculated after the number of vertices, while it is the number of faces which actually matters. This certainly was a poor design decision, which gives falsely high values of the land impact.

But there is a fix:

Checking «☑ generate normals» and setting «crease angle» to 180° corrects the calculated land impact, while not changing the actual land impact (per triangles) as felt by the viewer. The inconvenience however is that your plant will appear entirely rounded. Up to you to see, but in objects intended to be thousands, the land impact passes first, while the rounding is not so visible than we may think.

☻For this to work, you have to «remove doubles» vertices in Blender before. The importer does not do that.

LOD

(Permalink) LOD stands for Level Of Details. They are different versions of the same object: High LOD, medium LOD, low LOD and lowest LOD, also called LOD1, LOD2, LOD3, LOD4 respectively. The higher LOD is what you upload or build, while the others are simplified. In order to minimize land impact, the viewer shows the high LOD at short distance, and the simplified LODs at a longer distance.

The substitution to lower LODS is what makes object look distorted at some distance, or even to disappear with distance. This is especially bad for sculpties which often disappear beyond some distance. But it is problematic for meshes too, if you blindly rely on the automatically generated LODs when importing a mesh (the four lines in the import window)

Solutions are:

☻ setting LOD factor to 4 works for you, but not for the others, especially newbies. Furthermore, this increases lag in your viewer.

☻ In the import window for meshes, setting proper triangles reduction for each LOD. Best values seem to be:

☺High LOD: this is the number of triangle of your mesh, as you created it

☺medium LOD: set same number as high LOD

☺low LOD: set half or medium LOD

☺lowest LOD: set a third of low LOD.

Check that you are still having at least a gross outline of the object in the lowest LOD, or it will disappear with distance. Also consider that in objects, small but important meshes may disappear before the larger ones. Maybe import them separately.

☻Create your own LOD collada files, and import them separately in each LOD line, using «from file». The difficulty is that all the materials (Blender) or sides (in world) must be in the same order and with the same names, in each LOD file. But Blender messes a lot with material names. In Blender you can set the order of materials with the up and down arrows just right of the materials list. But the best seems to import each prim separately, with its own LOD files.

☻With plants, the best way seems to take pictures of the plant from some distance, and use them for a three boxes simple mesh for the low or lowest LOD. The problem however with this approach is that all the textures (materials in Collada and Blender, sides in world) must be present in all the LODS, and in the same order (see the previous point). This can be done by adding small hidden triangles of the unused materials in each LOD mesh.

Free full perms simple collada files for mesh plants

(Permalink) Here under are provided three collada files featuring simple mesh elements covering most plants needs, allowing for in-world building of quasi-mesh by non-mesh savvy people.

 

☺Select the whole blue text in the boxes under, from the first to the last character. Do not add blank lines.

☺copy-paste it in a text editor (notepad, notepad++, etc.)

☺Be sure to use a genuine text editor, or genuine text format. Some text processors change hyphens or apostrophes in fancy characters, which would not work. As far as I know, Libre Office works.

☺save in text format, with the names indicated and.dae collada file type.

☺upload this file in world as a mesh.

☺In the upload window, in the four LOD lines, it is better replace «generate» with «use LOD above». If you don't your plant will disappear in the distance.

☺Since the system sees you as the creator, you can share, sell, export or OAR your builds made with these files.

☺This content is licensed by © Yichard Muni (Richard Trigaux) as free to use for any purpose in Halcyon worlds. Attribution requested when reasonably possible. Do not modify the author name. Do not claim authorship, do not resell these files.

 

 

 

3BoxesPlant.dae contains a base plant mesh with 3 prims at 120° and a ground plane as root. LI=0.066 in Halcyon

☺Once in world, un-link and re-link the root prim (the ground plane)

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Copyright Yichard Muni (Richard Trigaux) free use for Halcyon worlds</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2020-11-02T13:45:58</created>
<modified>2020-11-02T13:45:58</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.176604 0.64 0 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Material_002-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0 0.64 0.1014868 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Material_003-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.64 0 0.002021337 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Material_001-material" name="Material_001">
<instance_effect url="#Material_001-effect"/>
</material>
<material id="Material_002-material" name="Material_002">
<instance_effect url="#Material_002-effect"/>
</material>
<material id="Material_003-material" name="Material_003">
<instance_effect url="#Material_003-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Cube-mesh" name="Cube">
<mesh>
<source id="Cube-mesh-positions">
<float_array id="Cube-mesh-positions-array" count="24">-0.5 0.01 -1 -0.5 0.01 0 0.5 0.01 -1 0.5 0.01 0 -0.5 -0.01 -1 -0.5 -0.01 0 0.5 -0.01 -1 0.5 -0.01 0</float_array>
<technique_common>
<accessor source="#Cube-mesh-positions-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube-mesh-normals">
<float_array id="Cube-mesh-normals-array" count="6">0 1 0 0 -1 0</float_array>
<technique_common>
<accessor source="#Cube-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube-mesh-map-0">
<float_array id="Cube-mesh-map-0-array" count="16">1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0</float_array>
<technique_common>
<accessor source="#Cube-mesh-map-0-array" count="8" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube-mesh-vertices">
<input semantic="POSITION" source="#Cube-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="1">
<input semantic="VERTEX" source="#Cube-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>6 1 4 7 1 5 5 1 6 4 1 7</p>
</polylist>
<polylist material="Material_002-material" count="1">
<input semantic="VERTEX" source="#Cube-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>0 0 0 1 0 1 3 0 2 2 0 3</p>
</polylist>
</mesh>
</geometry>
<geometry id="Cube_005-mesh" name="Cube.005">
<mesh>
<source id="Cube_005-mesh-positions">
<float_array id="Cube_005-mesh-positions-array" count="24">-0.5 0.01 -1 -0.5 0.01 0 0.5 0.01 -1 0.5 0.01 0 -0.5 -0.01 -1 -0.5 -0.01 0 0.5 -0.1 -1 0.5 -0.01 0</float_array>
<technique_common>
<accessor source="#Cube_005-mesh-positions-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_005-mesh-normals">
<float_array id="Cube_005-mesh-normals-array" count="6">0 1 0 0 -1 0</float_array>
<technique_common>
<accessor source="#Cube_005-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_005-mesh-map-0">
<float_array id="Cube_005-mesh-map-0-array" count="16">1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0</float_array>
<technique_common>
<accessor source="#Cube_005-mesh-map-0-array" count="8" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube_005-mesh-vertices">
<input semantic="POSITION" source="#Cube_005-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="1">
<input semantic="VERTEX" source="#Cube_005-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_005-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube_005-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>6 1 4 7 1 5 5 1 6 4 1 7</p>
</polylist>
<polylist material="Material_002-material" count="1">
<input semantic="VERTEX" source="#Cube_005-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_005-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube_005-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>0 0 0 1 0 1 3 0 2 2 0 3</p>
</polylist>
</mesh>
</geometry>
<geometry id="Cube_006-mesh" name="Cube.006">
<mesh>
<source id="Cube_006-mesh-positions">
<float_array id="Cube_006-mesh-positions-array" count="24">-0.5 0.01 -1 -0.5 0.01 0 0.5 0.01 -1 0.5 0.01 0 -0.5 -0.01 -1 -0.5 -0.01 0 0.5 -0.01 -1 0.5 -0.01 0</float_array>
<technique_common>
<accessor source="#Cube_006-mesh-positions-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_006-mesh-normals">
<float_array id="Cube_006-mesh-normals-array" count="6">0 1 0 0 -1 0</float_array>
<technique_common>
<accessor source="#Cube_006-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_006-mesh-map-0">
<float_array id="Cube_006-mesh-map-0-array" count="16">1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0</float_array>
<technique_common>
<accessor source="#Cube_006-mesh-map-0-array" count="8" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube_006-mesh-vertices">
<input semantic="POSITION" source="#Cube_006-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="1">
<input semantic="VERTEX" source="#Cube_006-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_006-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube_006-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>6 1 4 7 1 5 5 1 6 4 1 7</p>
</polylist>
<polylist material="Material_002-material" count="1">
<input semantic="VERTEX" source="#Cube_006-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_006-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube_006-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>0 0 0 1 0 1 3 0 2 2 0 3</p>
</polylist>
</mesh>
</geometry>
<geometry id="Cube_007-mesh" name="Cube.007">
<mesh>
<source id="Cube_007-mesh-positions">
<float_array id="Cube_007-mesh-positions-array" count="12">-0.5 -0.5 0 -0.5 0.5 0 0.5 -0.5 0 0.5 0.5 0</float_array>
<technique_common>
<accessor source="#Cube_007-mesh-positions-array" count="4" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_007-mesh-normals">
<float_array id="Cube_007-mesh-normals-array" count="3">0 0 1</float_array>
<technique_common>
<accessor source="#Cube_007-mesh-normals-array" count="1" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_007-mesh-map-0">
<float_array id="Cube_007-mesh-map-0-array" count="8">1 1 0 1 0 0 1 0</float_array>
<technique_common>
<accessor source="#Cube_007-mesh-map-0-array" count="4" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube_007-mesh-vertices">
<input semantic="POSITION" source="#Cube_007-mesh-positions"/>
</vertices>
<polylist material="Material_003-material" count="1">
<input semantic="VERTEX" source="#Cube_007-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_007-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cube_007-mesh-map-0" offset="2" set="0"/>
<vcount>4 </vcount>
<p>3 0 0 1 0 1 0 0 2 2 0 3</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="__sides_1" name="__sides_1" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1</matrix>
<instance_geometry url="#Cube-mesh" name="__sides_1">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
<instance_material symbol="Material_002-material" target="#Material_002-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="__sides_2" name="__sides_2" type="NODE">
<matrix sid="transform">0.5 -0.8660254 0 0 0.8660254 0.5 0 0 0 0 1 1 0 0 0 1</matrix>
<instance_geometry url="#Cube_005-mesh" name="__sides_2">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
<instance_material symbol="Material_002-material" target="#Material_002-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="__sides_3" name="__sides_3" type="NODE">
<matrix sid="transform">-0.5 -0.8660254 0 0 0.8660254 -0.5 0 0 0 0 1 1 0 0 0 1</matrix>
<instance_geometry url="#Cube_006-mesh" name="__sides_3">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
<instance_material symbol="Material_002-material" target="#Material_002-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="Root" name="Root" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
<instance_geometry url="#Cube_007-mesh" name="Root">
<bind_material>
<technique_common>
<instance_material symbol="Material_003-material" target="#Material_003-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

 

 

 

Box2sides.dae Contains 1 square prim and two triangular prims with 2 sides only. LI = 0.046 in Halcyon

☺These two triangles show each a different half of the same texture, which allows to bring more variety.

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Copyright Yichard Muni (Richard Trigaux) free use for Halcyon worlds</author>
<authoring_tool>Blender 2.77.0 commit date:2016-04-05, commit time:18:12, hash:abf6f08</authoring_tool>
</contributor>
<created>2019-12-31T08:48:23</created>
<modified>2019-12-31T08:48:23</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Side_1-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.5037576 0.8 0 1</color>
</diffuse>
<specular>
<color sid="specular">0.0625 0.0625 0.0625 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Side_2-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0 0.8 0.2354035 1</color>
</diffuse>
<specular>
<color sid="specular">0.0625 0.0625 0.0625 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Side_1-material" name="Side_1">
<instance_effect url="#Side_1-effect"/>
</material>
<material id="Side_2-material" name="Side_2">
<instance_effect url="#Side_2-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Box_2_sides-mesh" name="Box 2 sides">
<mesh>
<source id="Box_2_sides-mesh-positions">
<float_array id="Box_2_sides-mesh-positions-array" count="24">-0.025 -0.5 -0.5 -0.025 -0.5 0.5 -0.025 0.5 -0.5 -0.025 0.5 0.5 0.025 -0.5 -0.5 0.025 -0.5 0.5 0.025 0.5 -0.5 0.025 0.5 0.5</float_array>
<technique_common>
<accessor source="#Box_2_sides-mesh-positions-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Box_2_sides-mesh-normals">
<float_array id="Box_2_sides-mesh-normals-array" count="6">1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Box_2_sides-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Box_2_sides-mesh-map-0">
<float_array id="Box_2_sides-mesh-map-0-array" count="24">0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 1 1 0</float_array>
<technique_common>
<accessor source="#Box_2_sides-mesh-map-0-array" count="12" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Box_2_sides-mesh-vertices">
<input semantic="POSITION" source="#Box_2_sides-mesh-positions"/>
</vertices>
<polylist material="Side_1-material" count="2">
<input semantic="VERTEX" source="#Box_2_sides-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Box_2_sides-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Box_2_sides-mesh-map-0" offset="2" set="0"/>
<vcount>3 3 </vcount>
<p>5 0 0 6 0 1 7 0 2 5 0 3 4 0 4 6 0 5</p>
</polylist>
<polylist material="Side_2-material" count="2">
<input semantic="VERTEX" source="#Box_2_sides-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Box_2_sides-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Box_2_sides-mesh-map-0" offset="2" set="0"/>
<vcount>3 3 </vcount>
<p>1 1 6 2 1 7 0 1 8 1 1 9 3 1 10 2 1 11</p>
</polylist>
</mesh>
</geometry>
<geometry id="Triangle_2_sides_a-mesh" name="Triangle 2 sides a">
<mesh>
<source id="Triangle_2_sides_a-mesh-positions">
<float_array id="Triangle_2_sides_a-mesh-positions-array" count="18">-0.025 -0.5 -0.5 -0.025 -0.5 0.5 -0.025 0.5 -0.5 0.025 -0.5 -0.5 0.025 -0.5 0.5 0.025 0.5 -0.5</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_a-mesh-positions-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Triangle_2_sides_a-mesh-normals">
<float_array id="Triangle_2_sides_a-mesh-normals-array" count="6">1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_a-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Triangle_2_sides_a-mesh-map-0">
<float_array id="Triangle_2_sides_a-mesh-map-0-array" count="12">0 1 0 0 1 0 0 1 1 0 0 0</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_a-mesh-map-0-array" count="6" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Triangle_2_sides_a-mesh-vertices">
<input semantic="POSITION" source="#Triangle_2_sides_a-mesh-positions"/>
</vertices>
<polylist material="Side_1-material" count="1">
<input semantic="VERTEX" source="#Triangle_2_sides_a-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Triangle_2_sides_a-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Triangle_2_sides_a-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>4 0 0 3 0 1 5 0 2</p>
</polylist>
<polylist material="Side_2-material" count="1">
<input semantic="VERTEX" source="#Triangle_2_sides_a-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Triangle_2_sides_a-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Triangle_2_sides_a-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>1 1 3 2 1 4 0 1 5</p>
</polylist>
</mesh>
</geometry>
<geometry id="Triangle_2_sides_b-mesh" name="Triangle 2 sides b">
<mesh>
<source id="Triangle_2_sides_b-mesh-positions">
<float_array id="Triangle_2_sides_b-mesh-positions-array" count="18">-0.025 -0.5 0.5 -0.025 0.5 -0.5 -0.025 0.5 0.5 0.025 -0.5 0.5 0.025 0.5 -0.5 0.025 0.5 0.5</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_b-mesh-positions-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Triangle_2_sides_b-mesh-normals">
<float_array id="Triangle_2_sides_b-mesh-normals-array" count="6">1 0 0 -1 0 0</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_b-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Triangle_2_sides_b-mesh-map-0">
<float_array id="Triangle_2_sides_b-mesh-map-0-array" count="12">0 1 1 0 1 1 1 0 0 1 1 1</float_array>
<technique_common>
<accessor source="#Triangle_2_sides_b-mesh-map-0-array" count="6" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Triangle_2_sides_b-mesh-vertices">
<input semantic="POSITION" source="#Triangle_2_sides_b-mesh-positions"/>
</vertices>
<polylist material="Side_1-material" count="1">
<input semantic="VERTEX" source="#Triangle_2_sides_b-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Triangle_2_sides_b-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Triangle_2_sides_b-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>3 0 0 4 0 1 5 0 2</p>
</polylist>
<polylist material="Side_2-material" count="1">
<input semantic="VERTEX" source="#Triangle_2_sides_b-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Triangle_2_sides_b-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Triangle_2_sides_b-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>1 1 3 0 1 4 2 1 5</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Box_2_Sides_001" name="Box_2_Sides_001" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
<instance_geometry url="#Box_2_sides-mesh" name="Box_2_Sides_001">
<bind_material>
<technique_common>
<instance_material symbol="Side_1-material" target="#Side_1-material"/>
<instance_material symbol="Side_2-material" target="#Side_2-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="Triangle_2_Sides_a_001" name="Triangle_2_Sides_a_001" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 1.2 0 0 0 1</matrix>
<instance_geometry url="#Triangle_2_sides_a-mesh" name="Triangle_2_Sides_a_001">
<bind_material>
<technique_common>
<instance_material symbol="Side_1-material" target="#Side_1-material"/>
<instance_material symbol="Side_2-material" target="#Side_2-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="Triangle_2_Sides_b_001" name="Triangle_2_Sides_b_001" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 1.4 0 0 0 1</matrix>
<instance_geometry url="#Triangle_2_sides_b-mesh" name="Triangle_2_Sides_b_001">
<bind_material>
<technique_common>
<instance_material symbol="Side_1-material" target="#Side_1-material"/>
<instance_material symbol="Side_2-material" target="#Side_2-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene> </COLLADA>

 

 

 

PhantomRootTellingItsSizeToRobots.dae Contains 1 prim with only two triangles, the lowest possible LI to define a volume. It can be used to add a proper root prim to (phantom) plants and objects, or to mark places. Making it the size of the whole plant gives this information to planter robots. Beware that it is not visible from all angles, even with transparency made visible. LI = 0,014 in Halcyon.

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Copyright Yichard Muni (Richard Trigaux) free use for Halcyon worlds</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2020-11-13T07:41:05</created>
<modified>2020-11-13T07:41:05</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="top-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.001989172 0.8 0 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="bottom-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.4740627 0.1639756 0.06431194 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="top-material" name="top">
<instance_effect url="#top-effect"/>
</material>
<material id="bottom-material" name="bottom">
<instance_effect url="#bottom-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-mesh" name="Plane">
<mesh>
<source id="Plane-mesh-positions">
<float_array id="Plane-mesh-positions-array" count="18">-0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 -0.5 0.5 0 -0.5 0.5 0 0.5</float_array>
<technique_common>
<accessor source="#Plane-mesh-positions-array" count="6" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-mesh-normals">
<float_array id="Plane-mesh-normals-array" count="6">0 0 -1 0 0 1</float_array>
<technique_common>
<accessor source="#Plane-mesh-normals-array" count="2" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-mesh-map-0">
<float_array id="Plane-mesh-map-0-array" count="12">0 0 0.4999995 1 1 6.33224e-7 0.4999995 1 0 0 1 6.33224e-7</float_array>
<technique_common>
<accessor source="#Plane-mesh-map-0-array" count="6" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-mesh-vertices">
<input semantic="POSITION" source="#Plane-mesh-positions"/>
</vertices>
<polylist material="top-material" count="1">
<input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Plane-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>5 1 3 0 1 4 2 1 5</p>
</polylist>
<polylist material="bottom-material" count="1">
<input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Plane-mesh-map-0" offset="2" set="0"/>
<vcount>3 </vcount>
<p>1 0 0 4 0 1 3 0 2</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Plane" name="Plane" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
<instance_geometry url="#Plane-mesh" name="Plane">
<bind_material>
<technique_common>
<instance_material symbol="top-material" target="#top-material"/>
<instance_material symbol="bottom-material" target="#bottom-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

 

 

 

4cones4trees.dae Contains 4 cylindro-conical prims allowing to make trunks and branches. LI=0,209 in Halcyon.

☺Once in world, un-link and re-link the root prim (the bottom of the trunk)

☺If you add the two triangles in Box2sides.dae, you can build realistic treesvous pouvez construire des arbres assez réalistes.

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Copyright Yichard Muni (Richard Trigaux) free use for Halcyon worlds</author>
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f235283</authoring_tool>
</contributor>
<created>2020-11-26T18:24:15</created>
<modified>2020-11-26T18:24:15</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Cylinder_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">1 1 1 1</color>
</diffuse>
<specular>
<color sid="specular">0.015625 0.015625 0.015625 1</color>
</specular>
<shininess>
<float sid="shininess">1</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Cylinder_top_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">1 1 1 1</color>
</diffuse>
<specular>
<color sid="specular">0.015625 0.015625 0.015625 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Cylinder_bottom_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.4118781 0.64 0 1</color>
</diffuse>
<specular>
<color sid="specular">0.125 0.125 0.125 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Cylinder_001-material" name="Cylinder_001">
<instance_effect url="#Cylinder_001-effect"/>
</material>
<material id="Cylinder_top_001-material" name="Cylinder_top_001">
<instance_effect url="#Cylinder_top_001-effect"/>
</material>
<material id="Cylinder_bottom_001-material" name="Cylinder_bottom_001">
<instance_effect url="#Cylinder_bottom_001-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Cylinder8faces-mesh" name="Cylinder8faces">
<mesh>
<source id="Cylinder8faces-mesh-positions">
<float_array id="Cylinder8faces-mesh-positions-array" count="48">-0.08838814 0.08838814 1 0 0.1249999 1 0.08838826 0.08838814 1 0.125 0 1 0.08838844 -0.08838826 1 0 -0.125 1 -0.08838814 -0.08838856 1 -0.125 0 1 -0.0883882 0.08838814 0 0 0.1249999 0 0.0883882 0.08838814 0 0.125 0 0 0.08838838 -0.08838826 0 0 -0.125 0 -0.0883882 -0.08838856 0 -0.125 0 0</float_array>
<technique_common>
<accessor source="#Cylinder8faces-mesh-positions-array" count="16" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cylinder8faces-mesh-normals">
<float_array id="Cylinder8faces-mesh-normals-array" count="24">-0.7071068 -0.7071068 0 0 -1 0 -1 0 0 0.7071068 0.7071068 0 0 1 0 0.7071068 -0.7071068 0 1 0 0 -0.7071068 0.7071068 0</float_array>
<technique_common>
<accessor source="#Cylinder8faces-mesh-normals-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cylinder8faces-mesh-map-0">
<float_array id="Cylinder8faces-mesh-map-0-array" count="64">0.375 1 0.375 0 0.5 0 0.5 1 0.25 1 0.25 0 0.375 0 0.375 1 0.8750001 1 0.8750001 0 1 0 1 1 0.625 1 0.625 0 0.75 0 0.75 1 0.625 1 0.5 1 0.5 0 0.625 0 0.75 1 0.75 0 0.8750001 0 0.8750001 1 0 1 0 0 0.125 0 0.125 1 0.25 0 0.25 1 0.125 1 0.125 0</float_array>
<technique_common>
<accessor source="#Cylinder8faces-mesh-map-0-array" count="32" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cylinder8faces-mesh-vertices">
<input semantic="POSITION" source="#Cylinder8faces-mesh-positions"/>
</vertices>
<polylist material="Cylinder_001-material" count="8">
<input semantic="VERTEX" source="#Cylinder8faces-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cylinder8faces-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cylinder8faces-mesh-map-0" offset="2" set="0"/>
<vcount>4 4 4 4 4 4 4 4 </vcount>
<p>6 0 0 14 0 1 13 1 2 5 1 3 7 2 4 15 2 5 14 0 6 6 0 7 2 3 8 10 3 9 9 4 10 1 4 11 4 5 12 12 5 13 11 6 14 3 6 15 4 5 16 5 1 17 13 1 18 12 5 19 3 6 20 11 6 21 10 3 22 2 3 23 1 4 24 9 4 25 8 7 26 0 7 27 15 2 28 7 2 29 0 7 30 8 7 31</p>
</polylist>
</mesh>
</geometry>
<geometry id="TuncatedCone2-mesh" name="TuncatedCone2">
<mesh>
<source id="TuncatedCone2-mesh-positions">
<float_array id="TuncatedCone2-mesh-positions-array" count="48">-0.04242622 0.04242616 1 0 0.06 1 0.04242628 0.04242616 1 0.06 0 1 0.0424264 -0.04242634 1 0 -0.06 1 -0.04242622 -0.04242646 1 -0.06 0 1 -0.07071059 0.07071048 0 0 0.1 0 0.07071053 0.07071048 0 0.1 0 0 0.07071071 -0.07071059 0 0 -0.1 0 -0.07071059 -0.07071083 0 -0.1 0 0</float_array>
<technique_common>
<accessor source="#TuncatedCone2-mesh-positions-array" count="16" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="TuncatedCone2-mesh-normals">
<float_array id="TuncatedCone2-mesh-normals-array" count="24">-0.7065424 -0.7065424 0.03994917 0 -0.9992018 0.03994971 -0.9992018 0 0.03994971 0.7065424 0.7065424 0.03994917 0 0.9992018 0.03994971 0.7065424 -0.7065424 0.03994917 0.9992018 0 0.03994971 -0.7065424 0.7065424 0.03994917</float_array>
<technique_common>
<accessor source="#TuncatedCone2-mesh-normals-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="TuncatedCone2-mesh-map-0">
<float_array id="TuncatedCone2-mesh-map-0-array" count="64">0.375 1 0.375 0 0.5 0 0.5 1 0.25 1 0.25 0 0.3749998 0 0.375 1 0.8750001 1 0.8750001 0 1 0 1 1 0.625 1 0.625 0 0.75 0 0.75 1 0.625 1 0.5 1 0.5 0 0.625 0 0.75 1 0.75 0 0.8749999 0 0.8750001 1 0 1 0 0 0.125 0 0.125 1 0.25 0 0.25 1 0.125 1 0.125 0</float_array>
<technique_common>
<accessor source="#TuncatedCone2-mesh-map-0-array" count="32" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="TuncatedCone2-mesh-vertices">
<input semantic="POSITION" source="#TuncatedCone2-mesh-positions"/>
</vertices>
<polylist material="Cylinder_001-material" count="8">
<input semantic="VERTEX" source="#TuncatedCone2-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#TuncatedCone2-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#TuncatedCone2-mesh-map-0" offset="2" set="0"/>
<vcount>4 4 4 4 4 4 4 4 </vcount>
<p>6 0 0 14 0 1 13 1 2 5 1 3 7 2 4 15 2 5 14 0 6 6 0 7 2 3 8 10 3 9 9 4 10 1 4 11 4 5 12 12 5 13 11 6 14 3 6 15 4 5 16 5 1 17 13 1 18 12 5 19 3 6 20 11 6 21 10 3 22 2 3 23 1 4 24 9 4 25 8 7 26 0 7 27 15 2 28 7 2 29 0 7 30 8 7 31</p>
</polylist>
</mesh>
</geometry>
<geometry id="Cone1-mesh" name="Cone1">
<mesh>
<source id="Cone1-mesh-positions">
<float_array id="Cone1-mesh-positions-array" count="27">0 0 1 -0.04242628 0.04242616 0 0 0.06 0 0.04242628 0.04242616 0 0.06 0 0 0.04242634 -0.04242634 0 0 -0.06 0 -0.04242628 -0.04242646 0 -0.06 0 0</float_array>
<technique_common>
<accessor source="#Cone1-mesh-positions-array" count="9" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cone1-mesh-normals">
<float_array id="Cone1-mesh-normals-array" count="27">0 9.15555e-5 1 -0.705838 -0.705838 0.05987781 0 -0.9982059 0.05987769 -0.9982059 0 0.05987769 0.705838 0.705838 0.05987781 0 0.9982059 0.05987769 0.705838 -0.705838 0.05987781 0.9982059 0 0.05987769 -0.705838 0.705838 0.05987781</float_array>
<technique_common>
<accessor source="#Cone1-mesh-normals-array" count="9" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cone1-mesh-map-0">
<float_array id="Cone1-mesh-map-0-array" count="48">0.4375 1 0.375 0 0.5 0 0.3125 1 0.25 0 0.375 0 0.9375001 1 0.8750001 0 1 0 0.6875 1 0.625 0 0.75 0 0.5625 1 0.5 0 0.625 0 0.8125 1 0.75 0 0.8750001 0 0.0625 1 0 0 0.125 0 0.25 0 0.1875 1 0.125 0</float_array>
<technique_common>
<accessor source="#Cone1-mesh-map-0-array" count="24" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cone1-mesh-vertices">
<input semantic="POSITION" source="#Cone1-mesh-positions"/>
</vertices>
<polylist material="Cylinder_001-material" count="8">
<input semantic="VERTEX" source="#Cone1-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cone1-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cone1-mesh-map-0" offset="2" set="0"/>
<vcount>3 3 3 3 3 3 3 3 </vcount>
<p>0 0 0 7 1 1 6 2 2 0 0 3 8 3 4 7 1 5 0 0 6 3 4 7 2 5 8 0 0 9 5 6 10 4 7 11 0 0 12 6 2 13 5 6 14 0 0 15 4 7 16 3 4 17 0 0 18 2 5 19 1 8 20 8 3 21 0 0 22 1 8 23</p>
</polylist>
</mesh>
</geometry>
<geometry id="Cone2-mesh" name="Cone2">
<mesh>
<source id="Cone2-mesh-positions">
<float_array id="Cone2-mesh-positions-array" count="27">0 0 1 -0.04242628 0.04242616 0 0 0.05999988 0 0.04242628 0.04242616 0 0.05999994 0 0 0.04242634 -0.04242634 0 0 -0.06 0 -0.04242628 -0.04242646 0 -0.06 0 0</float_array>
<technique_common>
<accessor source="#Cone2-mesh-positions-array" count="9" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cone2-mesh-normals">
<float_array id="Cone2-mesh-normals-array" count="27">0 1.22074e-4 1 -0.705838 -0.705838 0.05987781 0 -0.9982059 0.05987769 -0.9982059 0 0.05987769 0.705838 0.705838 0.05987781 0 0.9982059 0.05987769 0.705838 -0.705838 0.05987781 0.9982059 0 0.05987769 -0.705838 0.705838 0.05987781</float_array>
<technique_common>
<accessor source="#Cone2-mesh-normals-array" count="9" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cone2-mesh-map-0">
<float_array id="Cone2-mesh-map-0-array" count="48">0.4375 1 0.375 0 0.5 0 0.3125 1 0.25 0 0.375 0 0.9375001 1 0.8750001 0 1 0 0.6875 1 0.625 0 0.75 0 0.5625 1 0.5 0 0.625 0 0.8125 1 0.75 0 0.8750001 0 0.0625 1 0 0 0.125 0 0.25 0 0.1875 1 0.125 0</float_array>
<technique_common>
<accessor source="#Cone2-mesh-map-0-array" count="24" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cone2-mesh-vertices">
<input semantic="POSITION" source="#Cone2-mesh-positions"/>
</vertices>
<polylist material="Cylinder_001-material" count="8">
<input semantic="VERTEX" source="#Cone2-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cone2-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Cone2-mesh-map-0" offset="2" set="0"/>
<vcount>3 3 3 3 3 3 3 3 </vcount>
<p>0 0 0 7 1 1 6 2 2 0 0 3 8 3 4 7 1 5 0 0 6 3 4 7 2 5 8 0 0 9 5 6 10 4 7 11 0 0 12 6 2 13 5 6 14 0 0 15 4 7 16 3 4 17 0 0 18 2 5 19 1 8 20 8 3 21 0 0 22 1 8 23</p>
</polylist>
</mesh>
</geometry>
<geometry id="TruncatedCone1-mesh" name="TruncatedCone1">
<mesh>
<source id="TruncatedCone1-mesh-positions">
<float_array id="TruncatedCone1-mesh-positions-array" count="48">-0.07071048 0.07071048 1 0 0.0999999 1 0.07071059 0.07071048 1 0.1 0 1 0.07071071 -0.07071059 1 0 -0.1 1 -0.07071048 -0.07071083 1 -0.09999996 0 1 -0.0883882 0.08838814 0 0 0.1249999 0 0.0883882 0.08838814 0 0.125 0 0 0.08838838 -0.08838826 0 0 -0.125 0 -0.0883882 -0.08838856 0 -0.125 0 0</float_array>
<technique_common>
<accessor source="#TruncatedCone1-mesh-positions-array" count="16" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="TruncatedCone1-mesh-normals">
<float_array id="TruncatedCone1-mesh-normals-array" count="24">-0.7068864 -0.7068864 0.02496469 0 -0.9996884 0.02496469 -0.9996884 0 0.02496469 0.7068864 0.7068864 0.02496469 0 0.9996884 0.02496469 0.7068864 -0.7068864 0.02496469 0.9996884 0 0.02496469 -0.7068864 0.7068864 0.02496469</float_array>
<technique_common>
<accessor source="#TruncatedCone1-mesh-normals-array" count="8" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="TruncatedCone1-mesh-map-0">
<float_array id="TruncatedCone1-mesh-map-0-array" count="64">0.375 1 0.375 0 0.5 0 0.5 1 0.25 1 0.25 0 0.375 0 0.375 1 0.8750001 1 0.8750001 0 1 0 1 1 0.625 1 0.625 0 0.75 0 0.75 1 0.625 1 0.5 1 0.5 0 0.625 0 0.75 1 0.75 0 0.8750001 0 0.8750001 1 0 1 0 0 0.125 0 0.125 1 0.25 0 0.25 1 0.125 1 0.125 0</float_array>
<technique_common>
<accessor source="#TruncatedCone1-mesh-map-0-array" count="32" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="TruncatedCone1-mesh-vertices">
<input semantic="POSITION" source="#TruncatedCone1-mesh-positions"/>
</vertices>
<polylist material="Cylinder_001-material" count="8">
<input semantic="VERTEX" source="#TruncatedCone1-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#TruncatedCone1-mesh-normals" offset="1"/>
<input semantic="TEXCOORD" source="#TruncatedCone1-mesh-map-0" offset="2" set="0"/>
<vcount>4 4 4 4 4 4 4 4 </vcount>
<p>6 0 0 14 0 1 13 1 2 5 1 3 7 2 4 15 2 5 14 0 6 6 0 7 2 3 8 10 3 9 9 4 10 1 4 11 4 5 12 12 5 13 11 6 14 3 6 15 4 5 16 5 1 17 13 1 18 12 5 19 3 6 20 11 6 21 10 3 22 2 3 23 1 4 24 9 4 25 8 7 26 0 7 27 15 2 28 7 2 29 0 7 30 8 7 31</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="cylinder" name="cylinder" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
<instance_geometry url="#Cylinder8faces-mesh" name="cylinder">
<bind_material>
<technique_common>
<instance_material symbol="Cylinder_001-material" target="#Cylinder_001-material"/>
<instance_material symbol="Cylinder_top_001-material" target="#Cylinder_top_001-material"/>
<instance_material symbol="Cylinder_bottom_001-material" target="#Cylinder_bottom_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="cylinder_002" name="cylinder_002" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 2 0 0 0 1</matrix>
<instance_geometry url="#TuncatedCone2-mesh" name="cylinder_002">
<bind_material>
<technique_common>
<instance_material symbol="Cylinder_001-material" target="#Cylinder_001-material"/>
<instance_material symbol="Cylinder_top_001-material" target="#Cylinder_top_001-material"/>
<instance_material symbol="Cylinder_bottom_001-material" target="#Cylinder_bottom_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="cylinder_003" name="cylinder_003" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 3 0 0 0 1</matrix>
<instance_geometry url="#Cone1-mesh" name="cylinder_003">
<bind_material>
<technique_common>
<instance_material symbol="Cylinder_001-material" target="#Cylinder_001-material"/>
<instance_material symbol="Cylinder_top_001-material" target="#Cylinder_top_001-material"/>
<instance_material symbol="Cylinder_bottom_001-material" target="#Cylinder_bottom_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="cylinder_004" name="cylinder_004" type="NODE">
<matrix sid="transform">0.7071068 0 0.7071068 0 0 1 0 0 -0.7071068 0 0.7071068 2 0 0 0 1</matrix>
<instance_geometry url="#Cone2-mesh" name="cylinder_004">
<bind_material>
<technique_common>
<instance_material symbol="Cylinder_001-material" target="#Cylinder_001-material"/>
<instance_material symbol="Cylinder_top_001-material" target="#Cylinder_top_001-material"/>
<instance_material symbol="Cylinder_bottom_001-material" target="#Cylinder_bottom_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="cylinder_001" name="cylinder_001" type="NODE">
<matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1</matrix>
<instance_geometry url="#TruncatedCone1-mesh" name="cylinder_001">
<bind_material>
<technique_common>
<instance_material symbol="Cylinder_001-material" target="#Cylinder_001-material"/>
<instance_material symbol="Cylinder_top_001-material" target="#Cylinder_top_001-material"/>
<instance_material symbol="Cylinder_bottom_001-material" target="#Cylinder_bottom_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>