anari-cycles
July 13, 2026 · View on GitHub
An ANARI device implementing the
Cycles production path tracer from Blender.
This lets any ANARI-based application render with Cycles — physically based
light transport, the Principled BSDF, motion blur, volumes, denoising, and
CPU/GPU (CUDA/OptiX) backends — through the standard, renderer-agnostic ANARI
API. The Cycles sources are vendored as a subproject; the device builds as a
regular ANARI library (libanari_library_cycles) loadable via
ANARI_LIBRARY=cycles.
See BUILDING.md for build instructions (including GPU kernels, denoising, OpenSubdiv, and OpenVDB/NanoVDB options).
Implemented KHR extensions
Beyond the ANARI 1.0 core objects, the device declares the following official
KHR extensions (some as trimmed local variants that advertise the official
name but omit registry parameters not yet implemented — see
device/cycles_device.json):
Camera
KHR_CAMERA_PERSPECTIVE,KHR_CAMERA_ORTHOGRAPHIC,KHR_CAMERA_OMNIDIRECTIONALKHR_CAMERA_DEPTH_OF_FIELD,KHR_CAMERA_SHUTTER,KHR_CAMERA_ROLLING_SHUTTERKHR_CAMERA_STEREO,KHR_CAMERA_MOTION_TRANSFORMATION
Geometry
KHR_GEOMETRY_TRIANGLE,KHR_GEOMETRY_QUAD,KHR_GEOMETRY_SPHEREKHR_GEOMETRY_CYLINDER,KHR_GEOMETRY_CONE,KHR_GEOMETRY_CURVEKHR_GEOMETRY_ISOSURFACEKHR_GEOMETRY_TRIANGLE_MOTION_DEFORMATION,KHR_GEOMETRY_QUAD_MOTION_DEFORMATION
Instance
KHR_INSTANCE_TRANSFORM,KHR_INSTANCE_TRANSFORM_ARRAYKHR_INSTANCE_MOTION_TRANSFORM,KHR_INSTANCE_MOTION_SCALE_ROTATION_TRANSLATION
Light
KHR_LIGHT_DIRECTIONAL,KHR_LIGHT_POINT,KHR_LIGHT_SPOTKHR_LIGHT_QUAD,KHR_LIGHT_RING,KHR_LIGHT_HDRIKHR_AREA_LIGHTS
Material
KHR_MATERIAL_MATTE,KHR_MATERIAL_PHYSICALLY_BASED
Sampler
KHR_SAMPLER_IMAGE1D,KHR_SAMPLER_IMAGE2DKHR_SAMPLER_PRIMITIVE,KHR_SAMPLER_TRANSFORM
Volume / spatial field
KHR_VOLUME_TRANSFER_FUNCTION1DKHR_SPATIAL_FIELD_STRUCTURED_REGULAR,KHR_SPATIAL_FIELD_STRUCTURED_REGULAR_CUBICKHR_SPATIAL_FIELD_NANOVDB
Renderer
KHR_RENDERER_AMBIENT_LIGHT,KHR_RENDERER_BACKGROUND_COLOR,KHR_RENDERER_BACKGROUND_IMAGEKHR_RENDERER_DENOISE
Frame / device
KHR_FRAME_ACCUMULATION,KHR_FRAME_COMPLETION_CALLBACKKHR_FRAME_CHANNEL_ALBEDO,KHR_FRAME_CHANNEL_NORMALKHR_FRAME_CHANNEL_PRIMITIVE_ID,KHR_FRAME_CHANNEL_INSTANCE_ID,KHR_FRAME_CHANNEL_OBJECT_IDKHR_DEVICE_SYNCHRONIZATION,KHR_ARRAY1D_REGION
Notably absent: KHR_SAMPLER_IMAGE3D (Cycles has no dense 3D image textures;
creating an image3D sampler warns and yields an invalid object) and
KHR_SPATIAL_FIELD_UNSTRUCTURED (no Cycles analogue).
Vendor extensions (CYCLES_*)
These expose Cycles capabilities that have no KHR equivalent, or extend a KHR
extension where the standard stops short of what Cycles can do. Introspection
definitions live in device/json/cycles_ext_*.json.
Renderer
-
CYCLES_RENDERER_SAMPLING_CONTROLS— Fine-grained path-tracing controls on the renderer: per-type bounce limits, direct/indirect sample clamping (firefly suppression), light tree and caustics toggles, glossy filtering, fast-GI approximation, adaptive sampling, film exposure, and pixel filter selection. The ANARI core renderer only definespixelSamples/ambientColor-level knobs; production tuning of a path tracer needs the rest, and the parameter set is inherently Cycles-specific (defaults match the Cycles socket defaults). -
CYCLES_RENDERER_INTERACTIVE_SCALING— Device-side emulation of the Cycles viewport resolution divider: after a camera/scene change, the first frame renders at reduced resolution (fixed or automatic divider targeting a frame time) and is upscaled, then accumulation restarts at full resolution. Gives ~9–40× faster camera-move frames during interaction. No KHR extension covers progressive-resolution preview rendering. -
CYCLES_RENDERER_DENOISE_START— AdenoiseStartrenderer parameter (mirroring VisRTX): with denoising enabled,channel.colorshows the raw accumulation until the accumulated sample count reaches the threshold, then switches to the denoised result. ExtendsKHR_RENDERER_DENOISE, which only offers an on/off toggle — early denoised frames can look smeary, and the KHR extension provides no way to delay the denoiser's visible effect.
Lights and light transport
-
CYCLES_LIGHT_SKY— Askylight subtype backed by Cycles' Nishita multiple-scattering procedural sky (sun direction/size/intensity, altitude, air/dust/ozone density). It drives the scene background like an HDRI light. Overlaps in spirit withKHR_LIGHT_HDRI, but that extension requires a captured environment image; there is no KHR extension for a parametric physical sky model. -
CYCLES_LIGHT_LINKING— Named light/shadow link sets: a light can be restricted to illuminate (or cast shadows on) only surfaces that opt into its set, following Blender's light-linking semantics. Pure artistic-control feature with no KHR counterpart. -
CYCLES_LIGHTGROUPS— AlightGroupname on lights and surfaces plus per-group frame channels (channel.lightgroup.<name>) that decompose the beauty image into per-group lighting contributions for downstream compositing. No KHR extension defines light AOVs.
Surfaces and geometry
-
CYCLES_SURFACE_COMPOSITING— Per-surface ray-visibility flags (camera/diffuse/glossy/transmission/shadow/volume scatter), holdout objects, and shadow catchers whose caught shadows composite into the color channel's alpha. The ANARI core only has a booleanvisible; per-ray-type visibility and catcher/holdout workflows are compositing features KHR does not cover. -
CYCLES_GEOMETRY_SUBDIVISION— Catmull-Clark or linear subdivision on triangle/quad geometry with adaptive object-space dicing and edge creases, using Cycles' OpenSubdiv path. KHR geometry extensions describe only fixed, pre-tessellated primitives; render-time subdivision has no KHR equivalent.
Materials and shading
-
CYCLES_MATERIAL_SUBSURFACE— Random-walk subsurface scattering parameters (subsurfaceweight, per-channel radius, scale, IOR, anisotropy) on thephysicallyBasedmaterial. ExtendsKHR_MATERIAL_PHYSICALLY_BASED, which defines no subsurface parameters at all. -
CYCLES_MATERIAL_EMISSIVE_STRENGTH— AnemissiveStrengthscalar multiplier onphysicallyBased, mirroring glTF'sKHR_materials_emissive_strength. ExtendsKHR_MATERIAL_PHYSICALLY_BASED, whoseemissiveis a [0,1] color — the scale factor allows emitted radiance beyond that range. -
CYCLES_MATERIAL_TOON— Atoonmaterial subtype exposing Cycles' Toon BSDF (diffuse/glossy component, size, smooth) for non-photorealistic rendering. KHR only definesmatteandphysicallyBased; a stylized BSDF cannot be expressed through either. -
CYCLES_MATERIAL_HAIR— Ahairmaterial subtype exposing Cycles' Principled Hair BSDF (Huang/Chiang models, melanin-based coloring, roughness controls); pairs withKHR_GEOMETRY_CURVEstrands. Hair fiber scattering is physically distinct from a surface BSDF and has no KHR material. -
CYCLES_MATERIAL_OSL— Anoslmaterial subtype accepting Open Shading Language source (compiled at commit time) or precompiled.osobytecode, with shader inputs settable as ANARI parameters. Arbitrary programmable shading is far beyond any KHR material. Requires a build withWITH_CYCLES_OSL=ON; otherwise the material warns and is invalid.
Volumes
CYCLES_VOLUME_PRINCIPLED— Aprincipledvolume subtype driving Cycles' Principled Volume node: density from a spatial field, scattering albedo, anisotropy, absorption, emission, and blackbody fire (with an optional temperature field). Overlaps withKHR_VOLUME_TRANSFER_FUNCTION1Din that both render spatial fields, but the KHR volume is a colormapped/scientific-visualization model; this one is a physically based smoke/fire shading model that a transfer function cannot express.
Frame and device
-
CYCLES_FRAME_CHANNELS— Additional render passes as frame channels:position,roughness,mist(with renderer mist controls), 2Dmotionvectors, per-pixelsampleCount,shadowCatcher, andshadowCatcherMatte. Extends theKHR_FRAME_CHANNEL_*family, which stops at albedo/normal/ids — these are the extra AOVs compositors expect from a production renderer. -
CYCLES_DEVICE_SELECTION— Device parameterscomputeDevice(auto/cpu/cuda/optix/hip/metal/oneapi) andcomputeDeviceIndexto pick the Cycles compute backend, plus read-only properties listing available backends and reporting the one in use. ANARI has no standard way to select a backend within a device implementation.