github K3D-tools/K3D-jupyter v3.2.0
3.2.0

4 hours ago

"Sasha" by saber7711 (CC-BY), read with k3d.glb, 32 samples, cinematic_denoise=1.0.

New

  • glTF import - k3d.glb() / k3d.gltf() read glTF 2.0 with numpy alone into a Group of plain K3D objects: node hierarchy as k3d.transform, Y-up to Z-up, textures with KHR_texture_transform, GPU instancing, sparse accessors, Draco (optional DracoPy), emissive / unlit / transmission / ior / volume materials. Imported scenes proxy into cinematic.
  • Mesh material - emissive, normal_map, metalness_roughness_map, occlusion_map (+ uvs2), alpha_mode / alpha_cutoff, RGBA colors, texture_wrap, mipmaps, transmission / ior / thickness / attenuation - all plain Python / numpy traits.
  • cinematic_denoise is Open Image Denoise (oidn-web, WebGPU), guided by albedo and normals on surfaces, colour only inside volumes. It runs once the sample budget is reached, tile by tile with visible progress; 0 is off, 1 denoised, values between mix with the traced image. Without WebGPU the trace is shown as is. The weights (3.5 MB, Apache 2.0) ship next to the bundle and load on first use. On a CT heart against a 2048-sample reference, 16 samples denoised are closer than 128 traced, with no structure added beyond the reference's own noise; fine 1-2 px texture is smoothed at low budgets.

Breaking

  • color multiplies colors, the colormap and texture on meshes, points and vectors; left out, it is white next to another colour source.
  • A Group has no properties of its own: setting one raises (except model_matrix), and plot += [list] raises a TypeError naming a + b.
  • cinematic_denoise is a mix, not a strength in noise sigmas; anything from 1 up is fully denoised.

Fixed

  • Cinematic drew only part of a scene traced after one whose index count matched its triangle count (stale cached index in three-mesh-bvh 0.9.15).
  • With depth of field, the denoiser drew sharp edges into what the lens blurs: its albedo and normal guides now go through the same lens.
  • glTF export writes linear colours.
  • Grid tick labels no longer show on every corner at once.
  • Line controls follow the shader.
  • oidn-web 0.4.0 returns all-NaN when its source tile does not fit the image; worked around by padding.

Docs and examples

  • glb / gltf API pages, a "glTF in and out" guide, examples/gltf_import.ipynb; a gallery ring from our own CC-BY conversion of "Sasha" by saber7711, the boombox on the glb page.
  • Every cinematic example and thumbnail: 32 samples, cinematic_denoise=1.0.
  • The showcase gallery in a new order.
  • Credits for three-gpu-pathtracer, three-mesh-bvh, Open Image Denoise and oidn-web.
  • Release notes: build from the lockfile; CITATION.cff records 3.1.2.

Internal

  • Renderer.js (2500 lines) split by what it serves: cinematic/present.js, passes/ao.js, passes/depthPeel.js, and Scene.js into grid.js and lighting.js. No change to a single reference image.

Dependencies

New: oidn-web 0.4.0, DracoPy (optional, for Draco-compressed glTF; in the dev and examples extras). Unchanged: three.js 0.186.1, three-mesh-bvh 0.9.15, three-gpu-pathtracer 0.0.24.

Don't miss a new K3D-jupyter release

NewReleases is sending notifications on new releases.