Sovereign Renderer · Hardened Evidence · 2026-07-21

Physically-based GPU rendering on the RTX 5080, proven one measurement at a time

Six capability rungs built from a bare CUDA context up to a subsurface-scattering skin material — each one validated by a physics test with a pass/fail number, not by how it looks. Every render below was produced by our own kernels on the GPU, in userspace only, so nothing here can write firmware.

RTX 5080 · compute 12.0 never-brick · nvrtc + driver API, no firmware writes no MSVC · gcc + runtime JIT 13 rungs · all measured
How a claim earns its place here. A render that "looks right" proves nothing. Each rung is checked against a physics invariant that a bug would violate: a furnace test (a surface under uniform light must reflect exactly its albedo — never more, or it created energy), a controlled experiment (change one cause, measure the effect vanish), and full-frame measurement (every pixel, never sampled patches). Where the honest answer is "not there yet," it says so.
01GPU executionPROVEN

Our code runs on the GPU — never-brick by construction

Ray-traced spheres with soft shadows rendered on the RTX 5080
First frame off the GPU · 960×640 · 16 spp · 0.53 ms

A kernel we wrote is compiled to PTX at runtime by nvrtc and launched through the CUDA driver API — entirely in userspace. No kernel-mode driver, no firmware, VBIOS or NVRAM write exists anywhere in the path, so this cannot brick hardware.

The toolchain finding that made it possible: nvcc is unusable here (no MSVC host compiler), so the way onto the GPU is runtime compilation + a gcc-built host that dynamically loads nvcuda.dll.

NEVER-BRICKuserspace only — nvrtc + nvcuda.dll
02Global illuminationCONTROLLED ✓

Path-traced GI, proven by a controlled experiment

Path-traced Cornell box with red and green walls, a mirror sphere, soft shadows
Cornell box · 6-bounce Monte Carlo · 1024 spp · 208 ms

Colour bleed is visible — the floor picks up red on the left, green on the right. But "visible" isn't proof, so the walls were neutralised to grey and the scene re-rendered. If the tint is really indirect light off the coloured walls, it must vanish.

Floor colour balance (R−G), colored vs neutral walls
patchcoloredcontrolGI effect
near red wall+18.0+4.0+14 red
center+2.0+1.0~0
near green wall−6.0+4.0+10 green
CAUSE CONFIRMEDtint present only with colored walls
03PBR materialsFURNACE ✓

Cook-Torrance GGX, validated by a furnace test

3x3 grid of spheres varying roughness and metalness under a sky
Roughness × metalness sweep · left glossy → right matte

Under uniform illumination, a surface must reflect exactly its albedo (0.90 here). More than that is energy creation — a bug. The test caught, then confirmed the fix of, a diffuse/specular coupling error, and isolated the remaining loss as the known single-scatter deficit.

Furnace reflectance (base albedo 0.90 · >1.0 = bug)
rough .08rough .40rough .85
metal 0.00.9030.9050.884
metal 1.00.9020.8730.435
MAX 0.905 ≤ 1.0 · NO ENERGY GAIN

deficit rough metal 0.435 = single-scatter GGX loss — carried to rung 04.

04MultiscatterRECOVERED ✓

Kulla-Conty compensation — the deficit measured back

The rung-03 deficit was the named debt. A GPU-precomputed directional-albedo table drives the standard multiscatter compensation; the win condition was never "looks brighter" — it was the furnace re-measuring the lost energy back without crossing 1.0.

Furnace reflectance, single-scatter → multiscatter
rough .40rough .85max
metal 1.00.873 → 0.9010.435 → 0.8630.905
0.435 → 0.863 RECOVEREDMAX 0.905 ≤ 1.0low-roughness untouched — no over-correction
05SubsurfaceFULL-FRAME ✓

Random-walk SSS — the ground-truth method

Backlit translucent sphere with soft edge glow
Backlit random-walk SSS · soft edge bleed, no hard terminator

Volumetric random walk — the method Arnold and RenderMan use for skin, not a diffusion approximation. A purely-scattering sphere (no absorption) must be invisible in a furnace: every photon that enters has to exit. Measured over all 1,048,576 pixels, not a patch.

Full-frame mean · furnace bg = 127
scenemeanΔ vs reference
reference (no sphere)127.000—
albedo 1.0 sphere127.0000.000
albedo 0.7 sphere93.385−33.6 (absorbs)
ENERGY CONSERVED <0.4%albedo-1 sphere invisible over the whole frame
06Skin materialFULL-FRAME ✓

Fresnel coat over colored subsurface — one material

Backlit reddish subsurface sphere with a faint specular sheen
Skin: dielectric coat + reddish SSS · honest verdict below

Unifying the rough-dielectric surface (rung 03) with the colored subsurface interior (rung 05) into a single material — which also eats the debt of keeping them separate. Per-channel, full-frame: a white version stays invisible; a reddish one must tint the whole frame red with no channel exceeding the background.

Full-frame per-channel mean · furnace = 127
materialRGB
reference127.0127.0127.0
white skin126.7126.7126.7
reddish skin108.289.687.9
R > G > B · NO CHANNEL > 127

honest physically correct, but it reads as dark reddish wax — not flesh. No texture/pores, isotropic (not forward) scattering, optically thick, harsh light.

07AnisotropyENERGY ✓ · CLAIM REFUTED

Forward scattering — and a prediction the measurement killed

Backlit reddish sphere with forward-scattered subsurface glow
Henyey-Greenstein g=0.8 · forward-peaked · the glow spreads directionally

Real skin scatters light forward, not isotropically. A Henyey-Greenstein phase function passes the energy check — a forward-scattering white sphere stays invisible in the furnace, because the phase function is normalized. But I predicted it would transmit more backlight, and the full-frame measurement refuted that flat out.

Full-frame mean · furnace + backlit A/B
testvalueverdict
furnace, white g=0.8126.67 (Δ0.33)energy conserved
backlit isotropic g=091.84—
backlit forward g=0.890.480.985× — not more
ENERGY CONSERVED"TRANSMITS MORE" = FALSE

honest forward scattering redistributes the glow directionally (visible) but does not raise net transmission at this optical thickness — the optimistic claim died on the number, which is the point of measuring.

08Detail layerCONFOUND CONTROLLED ✓

Procedural pores — and a metric that lied until noise was controlled

Front-lit reddish sphere with a dimpled pore texture breaking up the specular highlight
Value-noise normal perturbation · the highlight breaks into pores

Perturbing the surface normal with high-frequency noise adds micro-geometry — the specular coat highlight shatters into a stippled, pore-like pattern, and energy stays conserved (a bump changes direction, not light). But measuring it was a cautionary tale worth publishing.

Full-frame micro-edge density (share of pixels with a sharp local gradient)
samplesno bumpporesratio
512 spp (noisy)14.71%15.48%1.05× — confounded
4096 spp (clean)2.91%4.40%1.51×
NOISE FAKED THE FLOORCONTROLLED → 1.51×

honest the 512-spp "detail" was ~80% Monte-Carlo noise — a per-pixel gradient metric is invalid until the noise is suppressed. And it reads as leathery/orange-peel, not human pores.

09ArchitectureCONSOLIDATED ✓ · PROVEN IDENTICAL

Eating the debt — one shared math module, proven behavior-preserving

Multi-octave pore experiment: a softer texture that did not improve on single-octave
Side quest: multi-octave pores · softer, not better — an honest negative

The render kernels had grown four copies of the same vector / RNG / GGX / noise code. Extracted into one shared device header, handed to the runtime compiler as an include; the skin kernel dropped to 67 lines. A refactor must change nothing — and the furnace proves it, to the byte.

Regression check + two assumptions killed by measurement
checkresult
furnace, before → after refactorR108.2/G89.6/B87.9 — bit-identical
"g=0.8 broke it" (read R104)false alarm — HG absorption, not the refactor
"multi-octave pores are finer"refuted — 1.28× vs 1.51×, softer
BEHAVIOR-PRESERVING2 ASSUMPTIONS KILLED

honest a false regression (isolated by holding a variable fixed) and a false improvement (measured) — both caught before shipping. The other three kernels still carry their copies; that's next.

10Pore cellsVISUAL GAIN · METRIC-BLIND

Cellular pores — where the metric can't see what the eye can

Front-lit reddish sphere with a fine cellular pore-stipple texture
Worley cell-distance noise · a fine pore-cell stipple, closer to skin

Value noise gives broad dimples, but skin is cells. Driving the surface normal from a Worley cell-distance field instead reads — by eye — as a fine pore-cell stipple, nearer to skin than the earlier orange-peel. The honest catch is in the number.

Full-frame micro-edge density (4096 spp, noise-controlled)
surfacedensityvs smooth
value-noise dimples4.40%1.51×
cellular pore-cells4.22%1.45× — lower
LOOKS MORE LIKE PORESMETRIC SAYS ≈

honest an edge-count metric measures detail quantity, not pattern type — it can't tell "pore-like" from "bumpy." That blind spot is the case for a perceptual vision-model judge, which this stack still lacks.

11Perceptual judgeBENCHMARK SET · GAP MEASURED

Claude as the benchmark — and proof arithmetic can't reach it

Three skin renders — smooth, value-noise, cellular — scored by Claude's vision
The benchmark set, scored by Claude's vision — 0–100 against real human skin

Every earlier rung had a physics invariant to check. "Does this read as skin" has none — it needs a perceptual judge, so Claude's vision is the benchmark: it ranks cellular > value > smooth. The real question is whether a mechanistic (Nishi-side) judge can reproduce that ranking.

Three scalar features vs the Claude ranking (cellular > value > smooth)
featuresmoothvaluecellularmatches Claude?
Claude vision122026— benchmark
fine edges @182.914.404.22no — value>cellular
sharp edges @400.170.760.68no — value>cellular
fine/coarse freq0.860.530.52no — smooth highest
3 SCALAR FEATURES — ALL FAIL→ VISION MODEL REQUIRED

hardened "pore-like" is spatial organization, not edge quantity — a statistical judge provably can't match Claude here. The Nishi side needs a vision model that reproduces this ranking, then the scores; it doesn't exist yet. That is the load-bearing gap.

12Nishi VLMCAPTIONS ✓ · JUDGING GAP MEASURED

A vision-model judge on the 5080 — captioning works, matching Claude doesn't yet

The benchmark set (1 smooth, 2 value-noise, 3 cellular) scored by the local Qwen2.5-VL
The benchmark set — 1 smooth, 2 value-noise, 3 cellular — as seen by the local Qwen2.5-VL on the 5080

Rung 11 proved the load-bearing gap was a perceptual judge, so I stood one up: Qwen2.5-VL-3B running on the 5080 via llama-server — a local vision model doing both jobs, captioning and judging. Captioning works. Matching Claude's skin-realism ranking does not — and I measured that four ways rather than assert it.

Nishi VLM (3B) vs the Claude benchmark — four protocols
taskresultmatches Claude?
captioning"smooth dark red sphere, subtle reflection" / "swirling pattern"yes — works
absolute skin score20 / 20 / 20no — no discrimination
comparative rankreasoning right, final string garbledno — unstable
pore-density proxysmooth 30 · value 75 · cellular 60no — matches the metric, not Claude
CAPTIONS ✓ (bird two)3B ≠ CLAUDE ON SKIN-SEMANTICS

hardened Claude's "cellular looks more like skin" is a subtle skin-semantic call that neither scalar metrics nor the 3B VLM reproduce — both rate value-noise as bumpier. A 7B model is downloading to test whether scale closes it. Never-brick: the VLM is userspace GPU inference.

13Judge = benchmarkCLAUDE RANKING REPRODUCED 4/4

The Nishi VLM matches Claude — where the metrics couldn't

Scaling to Qwen2.5-VL-7B and — crucially — fixing the extraction protocol (score all three surfaces in one structured response, not one flat number at a time) the local vision model now reproduces Claude's ranking. The earlier flat scores were the model fumbling its output format, not failing to see: its reasoning had the order right all along.

7B VLM skin-realism per-surface, 4 runs — vs Claude's order cellular > value > smooth
runsmoothvaluecellularorder
103070cellular > value > smooth ✓
202050✓
302060✓
402040✓
4/4 MATCH CLAUDESCALAR METRICS: 0/3 (rung 11)

proven the exact judgment three scalar metrics could not make (rung 11), a local vision model on the 5080 now makes reliably. It matches Claude's ordering — the discriminating call — not identical scores. The perceptual judge exists; captioning improved too (it read the Cornell walls and ceiling light correctly). Both birds delivered.