Rendre — path-traced product rendering in the browser
starting the render engine…
rendre
r00000-280 ↻
⏺ session
⊘ section view — drag the plane slider to scrub
→ environment light
rendre✕
Rendre is a path-traced product renderer that runs entirely in your browser. Import a model, drop a material, swap the studio, and save a clean image — no account, no upload, offline once installed. It's the renderer you open before you can afford the expensive ones. Every render is yours: no watermark, nothing tracked — put it straight in a portfolio or a submission.
New here?
How to use it
Keys & clicks — ⌘Z / ⌘⇧Z undo & redo (one history across modeling and rendering) · Delete removes the selected part · right-click anything for its menu · double-click a part to edit its material · hold Shift while rotating to snap 45°. That's the whole keyboard; everything else is mouse or touch.
Import a model — ⤓ Import…, or drag a file onto the viewport: OBJ · STL · glTF/GLB · Rhino 3DM · 3MF (baked render meshes) · USDZ (ASCII). It lands auto-scaled, centered on the studio floor and framed. Rendre greets you with a default object to start; a model heavier than your GPU's triangle limit is declined with a note to decimate and re-export — or, with Lighten heavy imports on, it's decimated to fit so it still loads — so the room never chokes. Rule of thumb: aim for under ~600k triangles for snappy work (a strong GPU handles several million; the decline note tells you your exact ceiling) — triangles are what count, not file size, but roughly a 10–20 MB GLB or 30–50 MB OBJ usually lands in range. A heavy import then orbits as a light proxy while your renders use the full-res mesh automatically (⇄ Proxy·Full switches the viewport — ). Turn on Add to scene (don't replace) to append the next import beside what's already on the stage instead of starting fresh. Re-importing a file with the SAME name asks whether to Update (replaces matching parts, keeps your materials) or Append instead.
Camera — drag empty space to orbit; scroll or pinch to zoom. The two round buttons at the top-right are a Blender-style nav widget: drag the magnifier to zoom (a tap zooms in a step) and drag the hand to pan the view across the scene. The Camera tiles (Front · ¾ · Side · Top · Hero) frame the model from a preset angle; ⊡ Frame recenters on your model. Wide · Fit · Tight sets how much of the frame the model fills — keeping your angle, changing the crop (Tight for a hero product shot).
Drop a material — open the materials drawer (right edge): hundreds of PBR materials in categories (metals · plastics · glass · paint · rubber · ceramic · marble · illuminated…). Drag a swatch onto a part, or select a part and click a swatch; double-click a swatch to apply + edit it. Search by name (“glass”, “gold”, “carbon”).
Edit a material — the editor tab (right edge, below materials), or right-click / double-click a part. Tune Color, Metal, Rough, Glass (transmission) + IOR, Coat, Sheen, Aniso (brushed/spun-metal streak — 0 is a round highlight, higher smears it into a directional one; the streak is fixed in world space, not the part's own rotation, so turning the part doesn't turn the streak with it), SSS (subsurface — light wraps past the shadow edge instead of stopping sharp: skin, wax, plush fabric, a thin plastic held to a light) and Glow. On a transmissive (Glass) material, Fire splits white light into color as it refracts — a diamond's sparkle — and Dispersion (Abbe) next to it drives the SAME effect from the real optical-industry Abbe number instead of Fire's own made-up units (lower Abbe = more fire; set it above 0 and it overrides Fire). Isolated refraction (pavé), also transmissive-only: turn it on for a pavé stone so its own light path passes straight through a DIFFERENT gem that also has it on, instead of refracting/reflecting off it — a dense cluster of stones set close together reads as clean individual gems instead of one muddied blur. No visible effect on a lone stone. Edits make a session copy; the library stays untouched.
MARMO marble — pick any Marmo material (20 Italian marbles) and the editor gains a stone panel: choose the structure (veined · clouded · breccia · speckled · uniform), the vein and clast colors, vein scale & contrast, warp, redox, clast size & roundness, speckle, hue and seed. It is computed by world position (triplanar) — no UVs, and it survives any scale. ⤓ Seed from a photo samples a marble photo into the params (ground & vein color, scale, warp) — no AI, no upload; an approximation that argues with the photo, never a texture of it. A starting point; the sliders take over.
Phantom (ghost) — the editor's Phantom toggle turns a material into a non-refracting, facing-driven translucent shell: nearly transparent facing the camera, solid at the silhouette — the exploded-view “ghost” poster look, without glass's bend or tint (the interior renders true, undistorted). Tune Front opacity, Edge opacity and Edge falloff to dial how much of the interior shows through and how sharply the rim holds the form. The outliner's one-tap ◐ Ghost flips it on the part's current material instantly — model, tap Ghost on the shell, render. A ready-made Ghost swatch (bone-warm tint) lives in the materials drawer too.
Light it — the environment drawer swaps the studio (33 HDRIs) to relight; Rotation / Height / Intensity dials aim it. Drag any .hdr (or a jpg/png) onto the viewport to use your own. Teach the light: switch the backdrop to environment to see the studio that's lighting your model — then drag Rotation and watch the highlights crawl across the gloss. That's why the render looks how it does; image-based lighting stops being magic once you can see it. (Or keep a clean infinity backdrop with surround.) The same drawer's Background image loads a photo backdrop — a doorway, a porfido fan, a slab of marble — and the Render dialog composites the product onto it.
Light Rig + AfterImage — open the environment drawer and expand Light Rig + AfterImage at the top: real lights placed around the model, not just the studio's own ambient glow. Six presets do the placing for you — Three-Point, High Key, Sweep, Rim, Dramatic, Sunset — each one drops a whole rig at once and dims the studio so the lights have room to read. + Add light adds one of your own; drag it into place with Azimuth / Elevation / Distance / Size. Then the trick: pick each light's color and intensity — even after the render has already started, or finished — and it recomposites instantly, no re-render, because every light's contribution was kept separate from the start. Placement is the one thing that DOES re-render (you moved a real light); color and brightness never do. Clear removes the whole rig and gives the studio its brightness back. A LIGHTS folder also sits in the Parts tree (left edge) once a rig exists — click it to grab the whole rig with the gumball and move every light together, keeping its arrangement, or click one Light row inside it to grab just that one. If the gumball doesn't show up, the light is simply off-frame at your current angle (a real light rig often sits outside the shot, same as a photo studio's softbox) — zoom out or ⊡ Frame to bring it into view.
Breakup — each light in the rig has its own Breakup disclosure: throw a patterned shadow in front of it, like a gobo or cookie on a real fixture. Six shapes — Blinds, Foliage, Caustics, Window, Clouds, Iris — with Scale, Rotation, Contrast, Softness to fit it to the light, and a Seed (with 🎲 Re-roll) so no two lights land on the exact same pattern. In ▦ Film, once at least one light has Breakup on, an Animate Breakup switch appears — turn it on and the pattern drifts, spins, or scrolls across the clip via that light's own Speed sliders (Drift U/V, Spin); off, it stays frozen at whichever phase you left it.
Audio-reactive lights — drop an audio file at the top of the Lights drawer and Rendre analyzes it once into an amplitude envelope; any light's Audio-reactive disclosure then modulates that light's intensity to the track wherever time-driven playback already runs (▦ Film render, or a live Turntable). Baked, not live — the same moment in the track always produces the same intensity, so it composites correctly into an offline render.
HDRI Editor — double-click any studio in the environment drawer to open it: your model on the left, lit live; the dome itself on the right. Add strobes — extra bright spots baked right into the environment image, not separate lights — and aim each with Azimuth / Elevation / Size; ↺ Reset reverts the whole dome to its real recipe (or an empty one, for your own photo). Closing keeps your changes; they travel with the scene like any other edit. ⬇ Export EXR saves the dome as a real .exr file that opens in Nuke, Houdini, Blender and the rest — and carries the exact strobe recipe inside it, so ⬆ Import EXR brings every strobe back editable, not just the pixels.
AfterImage Retouch — any still you render with the Light Rig active quietly carries its own per-light data along in the saved PNG (AfterImage in renders, Preferences — On by default since it's separate from and much lighter than Recipe in renders below, which carries the whole scene; switch it off there if you want a smaller file). Drag that PNG back onto the viewport later — no model needs to be loaded — and a dedicated retouch view opens: just the image and a slim panel with each light's on/off, color and intensity, still free and instant. ⬇ Resave writes a new PNG that's still remixable next time; ⇄ Swap image… loads a different AfterImage PNG into the same view; ← Back to Rendre closes it. If a PNG was saved with both AfterImage data and a full Recipe in renders scene, you're asked which one you want — a quick light remix, or the whole scene reopened, ready to re-render. Turn on AfterImage: environment layer (Preferences, Off by default — it doubles this render's time) and the retouch view also gets an Environment on/off + intensity control, so you can isolate just the Light Rig's own contribution against a black background, or dial the studio's ambient fill back in — works even with no lights at all, for an environment-only remix.
Move things — select a part and the gumball appears: colored arrows move along an axis, rings turn, cubes scale that axis, the white center drags freely on screen, the amber cube scales uniformly. Drag a handle and the part moves — it previews as a bounding box while you drag (so it stays fast even on heavy models), a live readout at the top of the screen shows exactly how far/how much as you go, and the mesh updates when you let go. Double-click any handle to type an exact amount: degrees on a ring, a percent on a scale cube (100 = no change, 200 = double, 50 = half, a negative percent mirrors that axis), or a nudge on an arrow (1 = a small step, 100 = a big one). Right-click → Rotate 90° / Rotate by… for exact turns too.
Right-click anything — a part (Edit material · Copy/Paste material · Link/Unlink material · Drop to floor · Frame this · Isolate · Hide · Duplicate · Delete), the floor, empty space (Frame all · Import · Environment · Materials), or a material swatch (Apply to selected). Delete / Backspace removes the selected part.
Link materials — right-click a part → Link material, then right-click another → Link to copied part: from then on, editing either part's material — color, roughness, a marble structure, anything in the editor — updates both at once, a linked 🔗 mark shows in Parts. Paste material is the one-time version (copies a look once, no ongoing sync); Link is for keeping a set of parts matched as you keep tuning — a whole flatware set, every screw on a product. Unlink material frees a part to edit on its own again.
Measure — click two points on the model for the real distance between them, in mm; the HUD also shows the whole model's mm bounding box the moment you turn it on. A view aid only — never rendered, never saved into the model.
✎ Markup — draw arrows, freehand pen marks, and text labels over the render for a design crit — pick a tool and color, drag to draw. Screen-space only: it never touches the model, and ⬇ Save composites the marks onto a real offline render (never a live-canvas grab).
⊘ Section (Preferences, off by default) — slice the model with a plane to see inside it: foam, lattice, shell walls. Pick the axis, flip which half is kept, and scrub the Slice slider. A view aid only — weight and export stay the whole, unsliced model.
Animation — render a video — ⌖ Shots is the quick path: pick a ready-made camera move (orbit, dolly-zoom, boom, hero float…), scrub it live in the viewport — Weight sets how the move feels: light arrives quick like an earring, heavy accelerates slowly and settles late like a cast-iron pan, same path, different mass — then Render… hands it to Film to pick size, samples and aspect — nothing starts automatically, you render it there when you're ready. ▦ Film is the custom path: ◆ Capture a keyframe as you change the camera, lighting, depth of field, or a material, capture again, and Film morphs between your keys at whatever aspect you need (16:9, 9:16, 1:1, 4:5). Once you have keys, ◂ / ▸ step through them (each jump moves the camera/materials/lighting to exactly what that key captured), ✕ Delete removes only the one you're viewing, and ✕ Clear all wipes every key. ▶ Preview steps through the whole timeline in the viewport first; 🎬 Render video (.mp4) saves a QuickTime-ready file that plays in every browser, with a live per-frame progress bar and time estimate. On a browser without WebCodecs (an older Safari, Firefox before 130) it automatically falls back to a .webm instead of just failing — same content, same camera moves, but its timing follows however long the render actually took rather than being locked to your chosen frame rate.
IMotion — import a baked animation — drag in an Alembic (.abc) file (a physics sim, cloth, or soft-body bake from Houdini, Blender, or Maya) the same way you'd drop in a model: it's a clip, an ingredient, not a new animation-authoring surface — Rendre already has its own keyframe animator and Film for motion made INSIDE the app. A ⏱ badge appears on the part's row in Parts; click it for retime controls — Fit (Once holds at both ends, Loop wraps, Stretch spans the whole shot), Range, Speed, Offset — plus a live scrubber that previews any point in the bake instantly, no keyframes and no render needed. It plays back automatically with any Shot or Film render at whatever settings you've dialed in — there's no separate on/off switch. A multi-object bake lands as one group, every part riding the SAME clock: change Fit or Speed on any one member and the whole group follows. The source file itself is never embedded in a saved scene, only its settings — reopening a scene whose clip can't be found shows a dimmed ⏱! badge naming what's missing; click it to relink the same (or a replacement) file, and your Fit/Range/Speed/Offset come back exactly as you left them.
Batch — queue up renders and walk away — the batch drawer (right edge) queues stills and films to render later: + Add still / + Add film in the drawer itself, or the + Batch button next to Render…/Film's own render button, adding whatever's currently set up. Adding an item opens the drawer automatically and brings it to the front. A queued item stays editable right up until it starts — W, H and samples, right in the row. A Time budget caps the whole queue's total render time, scaling samples down first, then resolution if needed, always honoring what you actually asked for. ▶ Start batch works the list in order; ⏸ Pause holds between items, keeping whatever's mid-render safe. A floating HUD at the bottom of the screen shows which item is rendering and how far along it is, even with the drawer closed — always something to watch, even during an offline render. ⬇ Download all bundles every finished render into one .zip.
Compare A / B — ⇆ Compare A / B captures the look now, lets you change one thing (a material, a studio) with the camera held still, captures again, then wipes between the two with a draggable seam. The crit question made visible: “is the brushed or the polished finish stronger here?”
Decal / logo — ⤓ Decal / logo projects an image (a logo, a label, a number) onto the selected part, facing the camera. It's a real projection onto the 3D surface — it wraps the form, computed in the path trace — not a flat sticker on the screen. Planar (default) sits it on the camera-facing side, like a sticker; Cylindrical wraps it all the way around the part's vertical axis, like a label on a bottle or a can. ⊙ Click a point to place moves the decal's center exactly where you click, instead of always sitting on the part's middle. Move the view + ⟳ Reproject to aim it; Size and Opacity to fit.
Paint — 🖌 Paint… brushes a color directly onto the surface: pick a Color, Size, and Hardness, then drag on the model. No UVs — it paints at mesh density, on top of whatever material the part is wearing. Orbit pauses while painting; click ✓ Done painting to orbit normally. ✕ Clear paint removes it. It's a session feature today — it doesn't yet survive a save/share round-trip or a fresh import.
Quality & image — the Quality pills (Draft · Studio · Final) set how clean the render is; Exposure brightens or pulls highlights back; Depth of field (Aperture + Focus) adds a shallow-focus blur — or hit ⊙ Click to focus and click the spot on the model you want sharp; the focal plane snaps right there. The image converges live as you watch — the viewport is the render. Uncheck Denoise preview to watch the raw path-trace resolve — the sand and fireflies settling into the image; the grain is the honest signal of an unconverged frame, not a flaw to hide. The readout by the controls says how converged the frame is — resolving → settling → clean → converged — an honest sample count, not a fake 100%, so you decide when it's good enough to save.
Lens look — the Advanced / Lens disclosure (collapsed by default, below Depth of field) adds two finishing touches that live on the FINISHED image only, never the render itself: Bloom softly blooms bright highlights and emitters, Chromatic aberration adds a faint lens color-fringe at the frame edges. Both redraw instantly as you drag — converge to a clean, high-sample image first, then dial the look live, with zero re-render.
Render & export — ⬇ Render… saves a clean PNG up to 4K (with a time estimate before you commit). While a still or video render is actually running, the side panels and drawers dim and pause; the render dialog and the viewport stay live and front-and-center the whole time. Changed your mind mid-render? ■ Stop & save appears next to the progress bar — it saves exactly what's accumulated so far (an honest sample count, not the target you asked for), it doesn't just throw the render away. The ⊞ Export & save… button gathers the file exports behind one door: ⬇ Save scene… writes the whole setup to one re-editable .rendre file, 🔗 Copy share link puts the whole render — model, materials, camera, lighting — inside a URL (no upload, no account, no backend); paste it anywhere and opening it rebuilds the exact scene, ready to spin — the fastest way to bring a live render to a crit without anyone downloading anything, and ⬆ To Rhino / Blender… hands the scene off as a GLB — named parts at real scale, every material in Cycles’ PBR vocabulary, plus the camera and the lighting setup as a cited reference. In the Render dialog, ⬇ Per-part mattes saves a ZIP of the beauty plus a transparent cutout of each part — stack them in Photoshop / Affinity / Figma to recolor or adjust parts on their own layers (the hand-off for finishing in a 2D editor, not another 3D app). ▦ Contact sheet renders your model under six studios (or six finishes) into one labeled grid PNG — the crit artifact: which reads best? For composites: Transparent background cuts the product out, a Background image (loaded from the environment drawer — it's a backdrop choice) drops it onto your own image, and Shadow-catcher floor adds a grounding shadow so it sits down on the plate — this works even with Transparent background OFF, darkening the real floor in place, not just for cutouts (reads cleanest with a light studio floor — tune Shadow strength; Shadow accuracy → Accurate renders the floor a second time with the model hidden and compares the two, so an unevenly-lit floor doesn’t read as haze — and, on a glossy floor, a real reflection of the model survives into the cutout too, not just the shadow — costs roughly double the render time, worth it for a hero shot).
⬇ Manifest (weight + watertight) — in the Render dialog, pick a real material and download an honest manifest: triangle count, exact mm bounding box, volume, a per-part watertight (closed 2-manifold) check that names any unclosed part with its open-edge count, and the weight at that material's real density. The economics inside the file, not just the picture.
The render can carry its own recipe (sometimes called a “magic PNG”) — turn on Recipe in renders (Preferences) and every saved ⬇ Render… PNG embeds the scene that made it (model, materials, camera, lighting, exposure) right inside the image file — no upload, no account. Drag a Rendre render back onto the viewport and it rebuilds that exact scene. Hand in the image and the reproducible setup as one thing — this is the answer to “my class only accepts one file upload to the LMS”: one PNG, and your professor can drag it right back in and see the whole build, materials and all. Off by default — a render you hand out or post publicly won't silently carry your whole scene setup unless you choose to include it. (A very heavy imported mesh is left out of the image either way — save the .rendre for those — but the look still travels.)
A movie can carry its own keyed recipe too (experimental) — turn on Recipe in movies (Preferences) and every 🎬 Render video — from Film, Shots, or a queued Batch item — embeds the keyed scene (camera, materials, lighting, your ◆ keys) inside the exported .mp4/.webm. Drag that movie back onto the viewport and it rebuilds the animation, keys and all, ready to re-render — a movie carries the recipe as text only, never an instant remix like the PNG's heavier buffer mode. Off by default: messaging and social apps re-encode video on upload far more aggressively than they do images, which strips the embedded data (the movie still plays fine either way) — share the original file if you want it to stay re-openable.
Start over — ⟲ Clear (bottom-right) empties the stage; ↺ Reset everything (in Preferences) returns to the original starting model and clears every setting (it asks first).
Skins — Preferences (the ⚙ by the wordmark) re-tints the interface: Azure (baby blue, the default), Bloom (pink), Ember, Viridian, Graphite and Achromatic (neutral gray). Idle auto-rotate lives there too.
Advanced dispersion (Preferences, off by default) — on a glass or gem material with Fire or Dispersion (Abbe) set above 0, this swaps the basic red/green/blue approximation of its fire for a continuous rainbow: every sample draws one true wavelength across the visible spectrum instead of picking one of 3 fixed colors. Real, physically-derived color, not a filter — and a genuinely noisier render than basic mode, so it's a quality/cost dial you turn on when you want it, same as bounce count or aperture.
Bananas Mode (Preferences, experimental) — lifts the safety caps that keep a render finite by default: samples up to 1,000,000 (a numeric field replaces the preset pills) and bounces up to 64. For experiments, not deadlines — a heavy setting can run for hours, or reset a weak GPU (it recovers on its own if it does). Resolution and import size stay capped either way, and it's never remembered between sessions, so nobody inherits a bananas render by accident. A 🍌 tag stays visible the whole time it's on.
Trace over a photo (Preferences → Reference image) — loads a photo to ghost faintly over the stage, so you can eyeball a real object's proportions against it while you frame or position an import: Opacity and Size dial it in, Clear removes it. It's a tracing aid only — never weighed, never exported, never saved into the scene file.
Live preview auto-stop (Preferences, off by default) — caps the live viewport's own accumulation at a chosen sample count, so it stops burning GPU (and battery) once the image already looks clean instead of grinding on toward the natural 4096-sample ceiling forever. Never touches a real ⬇ Render — that always runs whatever sample count you asked for there, regardless of this cap.
Ray visualization (Preferences, teaching, off by default) — click anywhere on the model and it draws that pixel's actual bounce path through the scene: real hit points and surface normals straight from the BVH, with a simplified mirror-bounce direction at each hit, ending where the ray leaves toward the environment's light. A diagram of how a ray finds its way through a scene, not a literal replay of one random path-trace sample.
System benchmark (Preferences) — renders a fixed test object (the “Rendre Twist”) at a fixed resolution and sample count and times it: a rough, comparable read on how fast THIS computer renders, on THIS build. Takes about 10-20 seconds.
Bounce-count override (Preferences, off by default) — surfaces the raw 1/2/4/8 light-bounce picker in Core Controls, a technical dial mainly useful on glass-heavy scenes. Off by default because Quality (Draft/Studio/Final) already sets a sensible bounce count for most work — this is for when you want to hand-tune it yourself.
Film: interpolate part properties (Preferences, on by default) — between two ▦ Film keyframes, a part's color/roughness/metalness and position blend smoothly instead of jump-cutting at the next key; geometry only blends when both keys share the same mesh topology (a mismatched part falls back to holding). Turn it off to go back to the old hold-until-the-next-key behavior. Camera/exposure/DOF/environment always blend regardless of this setting; which studio or material a part is wearing always holds — a part can't be “43% gold.”
How it renders
Rendre is a real path tracer, running on your GPU through WebGPU. Every pixel fires rays that bounce around the scene gathering light from the studio environment and the materials — the way light actually behaves — so reflections, soft shadows, glass refraction and color bleed are physically simulated, not faked. The image starts noisy and refines as it accumulates samples; that live, converging preview is the final render. The display transform is AgX, for filmic highlights. It needs WebGPU (Safari 26+ on Mac, or a current Chrome / Edge) and a real GPU.
Credits & license
Made by Phil Renato and Claude (Anthropic), 2026 — part of ILCA, one app among the rest of renato.design. Rendre's own marketing page — the two-editions overview, feature tour and comparison table — lives at renato.design/rendre. Non-commercial research software — your models and renders are yours (see LICENSE, DISCLAIMER & NOTICES alongside the app). Installable on iPad — Add to Home Screen for a fullscreen app that works offline.
The science inside is the published literature: path tracing after Kajiya (1986); the GGX microfacet model (Walter et al., 2007) with Smith masking, Schlick's Fresnel approximation and exact dielectric Fresnel; environment importance sampling after Pharr, Jakob & Humphreys (PBRT); BVH construction after Wald (2007); orthonormal bases after Duff et al. (2017); O'Neill's PCG hash; and Troy Sobotka's AgX display transform (polynomial fit after Benjamin Wrensch). The procedural MARMO marble is computed triplanar from value-noise and a Voronoi partition — after Georgy Voronoi (1908) and Steven Worley's cellular texture (1996) — with hue rotation via Rodrigues' formula. The WGSL / JS implementations are Rendre's own — see NOTICES for details. Hear the fuller history at Classicery's Canon: Kajiya's rendering equation (track 13) and Cook, Porter & Carpenter's distributed ray tracing (track 11) — the same physically-based thin-lens DOF this engine implements.
Studio environments: 33 in the drawer = 28 synthesized originals + 5 photographic sets from Poly Haven (CC0), plus the built-in default (also synthesized) — per-file provenance in NOTICES. Built with three.js + rhino3dm. A provisional, early-stage renderer — expect rough edges.
Full LICENSE / DISCLAIMER / NOTICES text — embedded here so it travels with this one file, even if renato.design ever disappears
LICENSE.txt
RENDRE (web edition) — LICENSE
===========================================================
Copyright (c) 2026 Phil Renato. All rights reserved.
NON-COMMERCIAL RESEARCH SOFTWARE. Rendre is published as a
research artifact — an investigation into browser-native,
offline path-traced product rendering — not as a commercial
product. It is made available for use, study, and teaching
at renato.design free of charge, without accounts, telemetry,
or payment of any kind.
WHAT YOU MAY DO
- Use Rendre in the browser for any purpose, including in
your own commercial design work: the renders, scenes, and
exports YOU make with Rendre are YOURS, entirely.
- Study it. The source is one readable HTML file by design.
WHAT THIS LICENSE DOES NOT GRANT
- Redistribution, rehosting, mirroring, or resale of the
application or its bundled material/environment libraries,
in whole or in part, outside renato.design.
- Use of the Rendre name to imply endorsement.
THIRD-PARTY COMPONENTS + ASSET PROVENANCE
- See NOTICES.txt for the full third-party license texts
(three.js MIT, rhino3dm MIT, IBM Plex Mono OFL), algorithm
attributions (AgX display transform et al.), and the
provenance statement for the material + environment
libraries.
LINEAGE. Rendre (web edition) is forked from the WebGPU
render room inside glisten, which is itself a sibling of the
native Rendre desktop renderer (a Blender app-template fork).
Same family, same render-view parity discipline.
NO WARRANTY — see DISCLAIMER.txt. Provided AS IS; no fitness
for any purpose is promised; estimates are estimates.
DISCLAIMER.txt
RENDRE (web edition) — DISCLAIMER
===========================================================
Rendre is NON-COMMERCIAL RESEARCH SOFTWARE — a research
artifact published for study and teaching, not a commercial
product. It is provided AS IS, without warranty of any kind,
express or implied. Use it at your own risk.
WHAT RENDRE IS. A path-traced product renderer that runs
entirely in your browser: import a model, drop a material,
swap the studio environment, render a clean image. No
account, no upload, no cloud — your model never leaves your
machine. Offline-capable once installed.
RENDERS ARE PREVISUALIZATION. Path-traced renders are a
faithful physical simulation of the bundled materials and
environments, but they are previsualization — not
color-managed proofs. The display transform is AgX; final
print/production color decisions need a managed pipeline.
IMPORT. Rendre imports OBJ, STL, glTF/GLB, and Rhino .3dm
(baked render meshes only — render or shade your model once
in Rhino before exporting). Large models are decimated/capped to stay
interactive; very high-poly CAD may need decimating first.
Source materials do not travel with an imported mesh — dress
the parts from Rendre's own material library.
EXPORTS. Image renders are saved as PNG. Scene hand-off to
Rhino / Blender is a GLB carrying named parts at real scale,
PBR materials in Cycles' vocabulary, the camera, and the
lighting setup as a cited reference.
BROWSER REQUIREMENTS. Rendre needs WebGPU — Safari 26+ on
Mac, or a current Chrome / Edge — and a real GPU. Older
iPhones and Safari versions that lack WebGPU cannot run the
path tracer.
The view drifts slowly after a few seconds without input — touch, drag, or scroll to stop it.
Tooltips
Default render aspect
The aspect every render starts from — Render, Film and Shots all open to this. A safe box previews the frame in the viewport always — not just while a render dialog is open — so you always see what you'll get.
Live preview auto-stop
Stop the viewport at 512 samples
Good laptop-battery hygiene: 512 is past “settling” for most materials — check the live samples readout’s own honesty word. The full 4096 ceiling is for saved renders; nobody needs it just to look at the model.
Ray visualization (teaching)
Turn this on, then click anywhere on the model in the viewport — the ray traces from the camera through that exact pixel, bouncing (mirror-reflecting) off each surface it hits, drawn as a yellow line with a dot at each bounce, until it finally leaves the scene — that last blue leg, tagged "→ environment light", is the ray reaching the light (Rendre's lighting comes from the environment image, not a discrete light object).
System benchmark
Your scorenot yet benchmarked
Score = (a reference time) ÷ (your time), so a bigger number means a faster machine. Only meaningfully comparable to someone else's score from the SAME build (the version is included when you copy it) — a later Rendre update could make everything faster and no longer match an old score fairly.
Bounce-count override
Advanced dispersion (slower)
Film: interpolate part properties
Recipe in renders
AfterImage in renders
AfterImage: environment layer (slower)
Recipe in movies (experimental)
Bananas Mode (experimental)
A 🍌 BANANAS tag stays visible near the sample readout the whole time this is on, so you can always see you turned it on. Past ~8 million samples a float32 accumulator stops counting — 1,000,000 stays comfortably under that wall.
View
Section (cut-away view)
Off by default to keep the toolbar tight — turn this on to reveal ⊘ Section in the VIEW group (slice the model with a plane to see inside it: foam, lattice, shell walls).
Advanced tools
Shell (hollow)
Bend
Twist
Generative builders — Grow · Terrain · MetaText
Animator (keyframes)
Demo · record a 60-second reel
With this on, ▶ Demos runs faster and saves a fixed 60-second video of the 3D (a sizzle reel — panels/cursor are overlays, not in the file). Off, the demo plays on screen at a watchable pace (one pass under 3 min).
Off by default to keep the workspace clean — turn these on to reveal their controls (global bottom-bar + per-part inspector, the Grow/Terrain/MetaText builders, and the ◆ Keyframe animator).
Reference image
Trace over a photo
Opacity35%
Size70%
Remove the reference
Load a photo to ghost over the stage — compare a real object's proportions against it. It's a tracing aid only: never weighed, never exported, never saved into the scene file.
Reset
Reset everything
Form
▸
Forms
◉ hides a form · double-click a name to rename · ⌘/⇧-click to multi-select · right-click for copy / paste / delete
Select a form — tap it in the scene or the list above — to edit it here. New here? Click a shape in the top toolbar to begin, or press ? for Help.
Operation
Color
Smoothness0.40
Shell0.00
Open face
Bend0
Twist0
Bend/Twist axis
whole body
1.00
0 mm
straight
none
Update the model?✕
A model with this name is already on the stage. Update swaps in the new geometry part-by-part, keeping whatever materials/visibility you've already tuned. Append adds this as new geometry beside what's already there instead.
Turntable✕
Duration — one full 360° turn · 10s
Frame rate
Camera
Animate the model through your ◆ keys
Spins 360° around your model — the panels aren't in the video.
Export ABC — animation✕
Mesh samples (24 fps)
Mesh quality
—
IMotion — imported motion✕
Scrub — preview the bake, right here, no render needed · frame 1 / 1
Fit
Range — trim to samples 1–1 of 1
Speed — multiplies the clip's own native rate · 1.0×
Offset — seconds into the shot before it starts · 0.0s
plays back automatically with any Shot or Film render, at whatever Fit/Speed/Offset/Range you set here — no separate on/off switch, importing the clip is asking for it to play.
Files✕
Scene
Import a mesh
Detail48³
Rendre on your phone✕
Rendre is a path-traced renderer built for an iPad or a computer. On a phone it runs a focused set: import a model, drop a material from the library, swap the studio, and render a still.
The Film & Shots camera-move tools want more screen — open Rendre on an iPad or computer for the full workflow.
Live preview · approximate
CORE CONTROLS⌃
VIEW
Slice
CAMERA
SCENE
LOOK / ANIMATION
QUALITY / IMAGE
or
DEPTH OF FIELD
Aperture off
Focus center
Exposure 0.0 EV
ADVANCED / LENS
Bloom 0.00
Bloom spread 0.50
Chromatic aberration 0.00
🍌 BANANAS
starting · 0 samples
Guided demos✕
Start this tour?✕
This tour clears the stage first, so every act starts clean. Save your scene before playing it if you want to keep what's on the stage now.
Demo
Batch — item 1/1—
—
A / B compare—
Export & save✕
A finished image comes from ⬇ Render… — PNG up to 4K, plus transparent cutout, backplate, per-part mattes and the contact sheet, all in that dialog. A video comes from ⌖ Shots or ▦ Film under Animate. Bringing it to crit live? Copy a share link — a classmate or the professor opens the exact scene, no download.
Film — animate the render room✕
Keys · 0
Key 1 of 1
Duration — keys spread evenly · s
Frame rate
Animate Breakup
Preview in the viewport
Frame size
Aspect
Samples per frame
◆ Capture a key · change the camera, lighting or a material · ◆ Capture again — Film morphs between your keys. ▶ Preview, then 🎬 Render video for a QuickTime-ready .mp4. (For a ready-made camera move, use ⌖ Shots instead.)
Shots — camera moves✕
Target
Duration · 5s
Distance · ×1.0
Weight — light ↔ heavy · 0.50
Azimuth ° · 0 → 0
Elevation ° · 0 → 0
FOV ° · 0 → 0
Light sweep
Animate Breakup
Scrub the move
Keys · 0
① pick a move above · ② ▶ Preview · ③ 🎬 Render… opens Film to choose settings — you render it there. Distances scale to your model; closing puts the camera back.
Hand off — a GLB for Rhino / Blender✕
What travels: every visible part as a named, welded mesh at real scale (glTF meters — a 20 mm band arrives 0.02 m, true size) · each part's PBR material in Cycles' own vocabulary (color · metallic · roughness · IOR · transmission · clearcoat · sheen · emission) · the camera · the lighting setup as a cited reference — which studio, its rotation / intensity / height, a URL to the actual .hdr, and its license.
What stays behind: the environment image itself (referenced, not embedded — fetch it at the URL inside the file) · the infinite floor (it's analytic, not a mesh) · hidden parts · subsurface amount (no glTF home; the value rides in the file's extras, named) · the scene's editability — this is a mesh handoff for extending the work elsewhere; the re-editable file is ⬇ Save scene.
Open it with Blender (File → Import → glTF 2.0) or Rhino 8 (File → Import). Both read the PBR extensions; what each ignores is listed in the file's extras.caveats.
AfterImage Retouch✕
Remix this render's own lights — color, intensity, on/off — free and instant, no scene involved. Want to move a light or change materials instead? That needs the full scene — drop a PNG saved with Recipe in renders on for that. (⇄ Swap image… below only accepts another AfterImage PNG.)
This render carries two things✕
It has a quick per-light remix AND its whole scene recipe (model, materials, camera, lighting). Which do you want?
EQUIRECTANGULAR
HDRI Edit✕
Left: the model, lit live by this dome. Right: the dome itself. Closing this view keeps your changes — they travel with the scene, same as any other edit.
STROBES
PARTS◂
ENVIRONMENT▸
LIGHT RIG + AFTERIMAGE▸
PRESETS
LIGHTS
Rotation 0°
Height 0.00
Intensity 1.0
Behind the model
Background image
STUDIOS
MATERIALS▸
TINCT PALETTE
×
BATCH▸
0 queued
Time budget
Budget 8h 00m
HoursMinutes
Priority Resolution
—
QUEUE
MATERIAL
▸
—
Color
Metal
Rough
Bump 0.00
Bump scale 1.00
Glass 0.00
IOR
Fire 0.00
Dispersion (Abbe) 0
Tint depth 1.00
Coat 0.00
Coat finish 0.05
Interference 0nm
Film IOR 1.40
Sheen 0.00
Aniso 0.00
Grain axis world-locked
Axis azimuth 0°
Axis elevation 90°
SSS 0.00
Glow 0.0
Front opacity 0.08
Edge opacity 0.70
Edge falloff 3.0
WOVEN · cloth
Warp thread
Weft thread
Pitch 18.0
Depth 0.50
Yarn 0.30
Hue 0.00
Seed 0
GRAIN · wood
Ring / fiber
Scale 2.5
Contrast 0.50
Fiber 0.80
Hue 0.00
Seed 0
GRID · mesh
Cell
Bar color
Pitch 18.0
Thickness 0.50
Hue 0.00
Seed 0
MOTTLE · camo
Tone 2
Tone 3
Scale 2.5
Irregular 0.80
Seed 0
Softness 0.00
MARMO · marble
Stone
Vein
Clast
Vein scale 2.5
Vein contrast 0.40
Warp 0.80
Redox 0.50
Clast scale 3.0
Roundness 0.90
Speckle 0.00
Hue 0.00
Seed 0
DECAL / LOGO
Wrap
Size
Opacity
PAINT
Color
Size
Hardness
edits make a session copy — the library stays untouched · changes are undoable
Render✕
Size
Aspect
Samples
Samples (exact)
Bounces
Transparent background
Shadow-catcher floor
Shadow strength
Shadow accuracy
renders off-screen at full size — a live preview appears once it starts