dichromatic_render — SPECULAR reflectance op

• Data kinds: normalmap → rgbimage

• Call: import fullseye as fs; fs.ledger.dichromatic_render(normals, albedo_rgb=(0.8, 0.55, 0.35), light=(0.3, 0.2, 1.0), illuminant_rgb=(1.0, 1.0, 1.0), view=(0.0, 0.0, 1.0), specular=0.25, model='blinn_phong', shininess=32.0, roughness=0.3, f0=0.04, ambient=0.0) (implementation को सीधे call करना हो तो import specularity; specularity.dichromatic_render(normals, albedo_rgb=(0.8, 0.55, 0.35), light=(0.3, 0.2, 1.0), illuminant_rgb=(1.0, 1.0, 1.0), view=(0.0, 0.0, 1.0), specular=0.25, model='blinn_phong', shininess=32.0, roughness=0.3, f0=0.04, ambient=0.0), registry से लेना हो तो opsspecular.get("dichromatic_render"))

उपयोग

forward dichromatic model: एक ज्ञात highlight render करता है ताकि separation की उससे जाँच की जा सके। → (H, W, 3)।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

I = albedo_rgb * max(n.l, 0) + specular * lobe(n) * illuminant_unit, the body term coming straight from photometric.render_lambertian (called, not re-implemented, so the two modules cannot drift apart in convention) and the interface term carrying the illuminant colour, which is what makes the image obey the dichromatic model exactly.

*albedo_rgb* may be a single (3,) colour — the single-material case that specular_diffuse_split handles without help — or an (H, W, 3) map, which is the textured case that needs body_rgb passed to the split.

*model* selects the lobe: "blinn_phong" (*shininess*) or "microfacet" (*roughness*, *f0*). Both are available on purpose: the separation operators must be blind to the lobe shape, and swapping the model is how that is tested rather than asserted.

This is a shading model, not light transport. No interreflection, no cast shadow, no subsurface term, no occlusion between pixels — the same

boundary visiondesign draws. Its purpose is a synthetic image whose decomposition is known exactly.

Raises ValueError: geometry problems as in brdf_blinn_phong; *albedo_rgb* is neither (3,) nor (H, W, 3); *specular* or *ambient* is negative, non-finite, a string or a bool; *model* is not in BRDF_MODELS.

उपयोग की विस्तृत guide

• specular_photometric family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• specular_photometric — py -3.11 examples/specular_photometric.py

वे अगले ops जिनसे type जुड़ता है (rgbimage को input के रूप में लेते हैं)

specular_diffuse_split · specular_coefficient_map · specular_free_transform · illuminant_from_dichromatic_planes

इसी category के (reflectance)

brdf_blinn_phong · brdf_microfacet


*Provenance: specularity.py — SPECULAR operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.