Digital facets.
Forever enduring,
fully on‑chain.
Gemstones are deeply embedded in human history, and shine with an ageless beauty. They are revered as metaphors for purity and permanence, coveted and admired across generations. We exchange them in solemn vows and cherish them as fragments of immortality that stand in contrast to the temporary nature of our lives.
“Genuine” features two distinct on-chain artworks: a glTF model of a gem and a vector SVG image that describes its traits. Both pieces are generated on-chain upon request, without any external dependencies beyond the Ethereum Virtual Machine.
As long as the EVM exists, these works will endure as shimmering tokens of our culture & experience.
4,096 total supply
0 gems available
The goal of this project is to bridge the ancient appeal of gemstones with the nascent technology of the Ethereum blockchain. This collection pushes the boundaries of on-chain art to create something that feels distinctly tangible in digital space.
I’m also driven by a desire to test the limits of Solidity contract development, as there is something profound about highly optimized, self-sufficient expressions that exist wholly on the EVM and avoid reliance on externally hosted assets.
This technical foundation supports a deeper conceptual vision: to capture the timeless allure of faceted geometry, and to reflect the role of precious stones as inherent stores of value in a digital context.
Step 1
In the rough
My initial exploration began with a read-through of the glTF 2.0 Specification. After getting an understanding of the basics, I started writing glTF files by hand, leveraging the fact that glTF files are JSON documents, which are human-readable and straightforward to author manually.
After discovering that OpenSea uses Google Model Viewer to handle the display of glTF data, I wrote a small web application to display the results of my experimentation. This allowed for the rapid iteration of ideas and verification of rendering without requiring any contract to be deployed to a testnet.
Phase 2
Cutting teeth
After gaining some confidence in my ability to generate and display glTF data, I began experimenting with physically-based rendering (PBR) materials. The metallic-roughness PBR material is the only material directly supported by the glTF standard. But after experimenting with various parameters I wasn't fully satisfied with the appearance of the gems.
More digging revealed a wealth of glTF Extensions, many of which are supported by three.js – the underlying rendering engine that powers Google Model Viewer. babylon.js is another popular renderer that also supports many glTF extensions.
Implementing a subset of these extensions drastically improved the fidelity of the gem materials and brought them in line with my vision for the collection.
Once I had settled on some promising material design, my focus shifted to creating harmonious and well-proportioned gem shapes. My inspiration was a mix of classic geometry, table top role playing, and gamer culture.
Translating the vertices to 3D space definitely took time, but seeing the early results was incredibly motivating.
Phase 3
Shine in the sky
As I continued to model and examine various gem shapes, I repeatedly encountered a frustrating issue: quads. Many of the shapes I envisioned naturally included non-triangular faces.
To save space and keep the contract bytecode small, I used mesh quantization, describing vertex positions with 1-byte integers per axis instead of the default 4-byte floating-point values. This limited the values to whole numbers ranging from -128 to +127. Unfortunately, a side-effect of this quantization was that visually-distracting “seams” could appear in the model without very careful attention and design.
To eliminate this issue, I had to rework all of my gem designs from the ground up. Problematic quads were everywhere! Their vertex positions were “close enough” to planar when snapped to integer locations but needed to be perfect to avoid artifacts. So instead of constructing gem shapes in three-dimensional space and then truncating their vertices to the nearest integer positions, I had to reimagine their construction as being edge- or face-based.
I created very short unit-like vectors to dictate the directions of edges in the model, which could then be combined in integer multiples so that non-triangular surfaces could still be described without rounding errors. It was a very careful and arduous process to rework each shape, but I believe the pleasing visual results were worth the effort.
Phase 4
Solidly polished
With both the geometry and materials finalized, I began implementing the logic in Solidity. Despite being a more experienced Solidity/Yul developer since completing the PURE JPEG project, porting the generative logic to Solidity was still fraught with challenges.
Compressing the gem shapes, material properties, traits, pseudorandom behaviors, and SVG output into a single contract required immense effort. I packed everything imaginable into byte arrays to ensure the highest possible compression and to avoid exceeding the EVM stack depth limits.
In one case, I resorted to using one byte as a bitfield to control several parameters related to axis reflections to save space. Every byte counted, so it was a seemingly endless battle to drop the contract bytecode size below the EIP-170 limit of 0x6000 (24,576 bytes). Even with compiler optimizer settings focused entirely on reducing contract size, the Genuine contract weighs in at 99.9% of the allowable bytecode size.
Q: Is the NFT on-chain?
A: Yes – the NFT metadata, glTF model, and SVG image are all generatively produced by the contract with no external dependencies.
Q: Can the gems be rendered outside of the EVM?
A: Yes! glTF stands for Graphics Library Transmission Format and is a widely supported, interoperable format designed to be the “JPEG of 3D”. It is a straightforward process to pipe the glTF output of a Genuine gem model directly into web browsers, game engines, 3D rendering pipelines, and so on.
Q: Why can gems look slightly different on OpenSea?
A: The careful observer may notice that some gems do not look 100% identical when comparing this site to OpenSea. The reason is that gems with the “Magic” trait make use of a very recent glTF extension called KHR_materials_dispersion. Both three.js and babylon.js support this extension, but the latest version of Google Model Viewer defaults to an older release of three.js that did not support it. The next release of Google Model Viewer will include it, and OpenSea will correctly show it thereafter. This site simply overrides the three.js library underlying Google Model Viewer in order to render the dispersion effect as it will eventually be seen everywhere.
Genuine is a body of work that blends timeless beauty with digital permanence.
A total of 2¹² tokens are available to celebrate the conclusion of my 7-month journey, forming a collection of self-sufficient and enduring digital gems.
View collection