Skip to main content

Gem Star

OCCT category icon with a stylized logo representation

Create a gem-like star decoration by lofting a star-shaped wire profile to a single point, then mirroring it to form a complete solid. This technique produces a faceted ornament with clean geometric edges perfect for 3D printing.

Bitbybit Platform

Gem star decoration

rete logoRete
Script Source (rete)
{
"id": "rete-v2-json",
"nodes": {
"5e57eae1657aea31": {
"id": "5e57eae1657aea31",
"name": "bitbybit.occt.shapes.wire.createStarWire",
"customName": "star wire",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
],
"numRays": 7,
"outerRadius": 2,
"innerRadius": 1,
"offsetOuterEdges": 0,
"half": false
},
"inputs": {
"numRays": {
"connections": [
{
"node": "ec4ccdd7a4e0fffd",
"output": "result",
"data": {}
}
]
},
"innerRadius": {
"connections": [
{
"node": "50d75ef638874b78",
"output": "result",
"data": {}
}
]
},
"outerRadius": {
"connections": [
{
"node": "0e256ecfcb272290",
"output": "result",
"data": {}
}
]
}
},
"position": [
303.8359375,
257.4296875
]
},
"2863fd8e5468e5c2": {
"id": "2863fd8e5468e5c2",
"name": "bitbybit.occt.operations.loftAdvanced",
"customName": "loft advanced",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"makeSolid": false,
"closed": false,
"periodic": false,
"straight": false,
"nrPeriodicSections": 10,
"useSmoothing": false,
"maxUDegree": 3,
"tolerance": 1e-7,
"parType": "approxCentripetal"
},
"inputs": {
"startVertex": {
"connections": [
{
"node": "10f4d392e548741d",
"output": "result",
"data": {}
}
]
},
"shapes": {
"connections": [
{
"node": "ef6935d712da501e",
"output": "list",
"data": {}
}
]
}
},
"position": [
1067.7734375,
258.98046875
]
},
"10f4d392e548741d": {
"id": "10f4d392e548741d",
"name": "bitbybit.point.pointXYZ",
"customName": "point xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 1,
"z": 0
},
"inputs": {
"y": {
"connections": [
{
"node": "7cf863f12527021d",
"output": "result",
"data": {}
}
]
}
},
"position": [
341.390625,
836.90234375
]
},
"ef6935d712da501e": {
"id": "ef6935d712da501e",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "5e57eae1657aea31",
"output": "result",
"data": {}
}
]
}
},
"position": [
682.6916365702044,
295.8792190122451
]
},
"df3f4fdf5f57a985": {
"id": "df3f4fdf5f57a985",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 1,
"z": 0
},
"inputs": {},
"position": [
1073.6113448640426,
969.3075670949257
]
},
"4a4e86156bf19c27": {
"id": "4a4e86156bf19c27",
"name": "bitbybit.occt.transforms.mirrorAlongNormal",
"customName": "mirror along normal",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"origin": [
0,
0,
0
],
"normal": [
0,
0,
1
]
},
"inputs": {
"shape": {
"connections": [
{
"node": "2863fd8e5468e5c2",
"output": "result",
"data": {}
}
]
},
"normal": {
"connections": [
{
"node": "df3f4fdf5f57a985",
"output": "result",
"data": {}
}
]
}
},
"position": [
1591.38575693654,
515.3982413387316
]
},
"7cf863f12527021d": {
"id": "7cf863f12527021d",
"name": "bitbybit.math.numberSlider",
"customName": "height",
"data": {
"options": {
"min": 0.3,
"max": 2,
"step": 0.1,
"width": 350,
"updateOnDrag": false
},
"number": 0.7
},
"inputs": {},
"position": [
-865.9706756696274,
904.9092012843769
]
},
"ec4ccdd7a4e0fffd": {
"id": "ec4ccdd7a4e0fffd",
"name": "bitbybit.math.numberSlider",
"customName": "rays",
"data": {
"options": {
"min": 3,
"max": 10,
"step": 1,
"width": 350,
"updateOnDrag": false
},
"number": 5
},
"inputs": {},
"position": [
-863.9657349173299,
150.89827431051816
]
},
"0e256ecfcb272290": {
"id": "0e256ecfcb272290",
"name": "bitbybit.math.numberSlider",
"customName": "radius",
"data": {
"options": {
"min": 0.5,
"max": 10,
"step": 1,
"width": 350,
"updateOnDrag": false
},
"number": 4.5
},
"inputs": {},
"position": [
-864.0098749123165,
343.3710281531416
]
},
"50d75ef638874b78": {
"id": "50d75ef638874b78",
"name": "bitbybit.math.divide",
"customName": "divide",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 1,
"second": 3
},
"inputs": {
"first": {
"connections": [
{
"node": "0e256ecfcb272290",
"output": "result",
"data": {}
}
]
},
"second": {
"connections": [
{
"node": "4a454ee80f751d90",
"output": "result",
"data": {}
}
]
}
},
"position": [
-274.89306340515157,
482.9178748932348
]
},
"7e41bd1c9b56e1a3": {
"id": "7e41bd1c9b56e1a3",
"name": "bitbybit.occt.shapes.shell.sewFaces",
"customName": "sew faces",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"tolerance": 1e-7
},
"inputs": {
"shapes": {
"connections": [
{
"node": "138540da63234c1f",
"output": "list",
"data": {}
}
]
}
},
"position": [
2416.651211257443,
258.95334004279306
]
},
"138540da63234c1f": {
"id": "138540da63234c1f",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "2863fd8e5468e5c2",
"output": "result",
"data": {}
},
{
"node": "4a4e86156bf19c27",
"output": "result",
"data": {}
}
]
}
},
"position": [
2013.1502071524446,
302.743712041642
]
},
"407fc16fa203ac34": {
"id": "407fc16fa203ac34",
"name": "bitbybit.occt.shapes.solid.fromClosedShell",
"customName": "from closed shell",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"shape": {
"connections": [
{
"node": "7e41bd1c9b56e1a3",
"output": "result",
"data": {}
}
]
}
},
"position": [
2805.8384443346117,
256.9268367860743
]
},
"e008b38e87affffe": {
"id": "e008b38e87affffe",
"name": "bitbybit.draw.drawAnyAsync",
"customName": "draw any async",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"entity": {
"connections": [
{
"node": "407fc16fa203ac34",
"output": "result",
"data": {}
}
]
},
"options": {
"connections": [
{
"node": "ff2600d7008d41b9",
"output": "result",
"data": {}
}
]
}
},
"position": [
3404.2469368733186,
456.35190509974706
]
},
"ff2600d7008d41b9": {
"id": "ff2600d7008d41b9",
"name": "bitbybit.draw.optionsOcctShapeMaterial",
"customName": "options occt shape material",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"precision": 0.01,
"drawEdges": true,
"edgeColour": "#ffffff",
"edgeWidth": 2
},
"inputs": {
"faceMaterial": {
"connections": [
{
"node": "761190716585036e",
"output": "result",
"data": {}
}
]
}
},
"position": [
2919.5846046215524,
751.7293976155988
]
},
"761190716585036e": {
"id": "761190716585036e",
"name": "bitbybit.babylon.material.pbrMetallicRoughness.create",
"customName": "pbr metallic roughness",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"name": "Custom Material",
"baseColor": "#4dffb2",
"emissiveColor": "#000000",
"metallic": 0.8,
"roughness": 0.3,
"alpha": 1,
"backFaceCulling": false,
"zOffset": 2
},
"inputs": {},
"position": [
2507.003296169671,
794.6144429355872
]
},
"403e0edb628a37d0": {
"id": "403e0edb628a37d0",
"name": "bitbybit.babylon.scene.enableSkybox",
"customName": "enable skybox",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"skybox": "city",
"size": 1000,
"blur": 0.1,
"environmentIntensity": 0.7,
"hideSkybox": true
},
"inputs": {},
"position": [
359.13009888578586,
1334.7705653906194
]
},
"c0cc8a34ea594210": {
"id": "c0cc8a34ea594210",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "e008b38e87affffe",
"output": "result",
"data": {}
}
]
}
},
"position": [
3786.373818412958,
494.14064175565136
]
},
"56126f3d0e3841b1": {
"id": "56126f3d0e3841b1",
"name": "bitbybit.advanced.navigation.zoomOn",
"customName": "zoom on",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"meshes": [],
"includeChildren": true,
"animationSpeed": 0.8,
"offset": -0.3,
"doNotUpdateMaxZ": true
},
"inputs": {
"meshes": {
"connections": [
{
"node": "c0cc8a34ea594210",
"output": "list",
"data": {}
}
]
}
},
"position": [
4179.995583299783,
463.1824591469443
]
},
"4a454ee80f751d90": {
"id": "4a454ee80f751d90",
"name": "bitbybit.math.numberSlider",
"customName": "inner radius",
"data": {
"options": {
"min": 1.5,
"max": 4,
"step": 0.1,
"width": 350,
"updateOnDrag": false
},
"number": 3.2
},
"inputs": {},
"position": [
-858.2630928403424,
590.7627222238717
]
}
}
}

How It Works

This tutorial demonstrates the classic technique of creating a double-sided gem or jewel shape. We start with a star-shaped wire at the base and loft it upward to converge at a single point, forming a pyramid-like top half. The lofting operation creates smooth triangular faces that connect each edge of the star to the apex point, giving the ornament its characteristic faceted appearance.

To complete the gem, we mirror the top half along the horizontal plane to create an identical bottom half. These two halves are then sewn together into a closed shell and converted into a solid 3D object. The result is a symmetrical star gem with sharp faceted edges that catch light beautifully when rendered with metallic materials.

Algorithm Steps

1. Define parameters:
- Number of star rays
- Outer radius and inner radius
- Height of the apex point

2. Create star wire:
- Generate star-shaped polygon at origin
- Star lies flat on XZ plane

3. Loft to apex point:
- Start from star wire base
- Connect all edges to single point at height
- Creates pyramid/cone-like top half

4. Mirror geometry:
- Reflect top half along Y=0 plane
- Creates matching bottom half

5. Sew surfaces:
- Join top and bottom halves at star perimeter
- Forms closed watertight shell

6. Convert to solid:
- Transform closed shell into solid body
- Ready for 3D printing or further operations

7. Render with metallic material and edge highlighting

Adjust the number of rays, radius ratio, and height to create stars ranging from delicate ornaments to bold geometric decorations.