differt.em.DirectivePattern

differt.em.DirectivePattern#

class DirectivePattern(alpha_r=1.0)[source]#

Bases: AbstractScatteringPattern

A directive diffuse scattering pattern, with a lobe centered on the specular direction.

Following Degli-Esposti’s directive model [7] (as also used by Sionna RT’s DirectivePattern), the scattered power is concentrated around the specular reflection direction \(\hat{k}_{sp}\) (the mirror image of \(\hat{k}_i\) about \(\hat{n}\)), with alpha_r controlling how narrow the lobe is: alpha_r \(= 1\) gives a broad lobe (similar in shape to, but distinct from, LambertianPattern, since it is centered on \(\hat{k}_{sp}\) rather than \(\hat{n}\)), while a large alpha_r concentrates almost all power near the specular direction, approaching a purely specular reflection.

See \(F_\alpha\) below for the lobe formula and its normalization caveat.

\[F_\alpha(\hat{k}_s, \hat{a}) = \frac{\alpha + 1}{4 \pi} \left(\frac{1 + \hat{a} \cdot \hat{k}_s}{2}\right)^\alpha,\]

where \(\hat{a}\) is the lobe’s axis (here, the specular direction \(\hat{k}_{sp}\)). Unlike LambertianPattern, \(F_\alpha\) has no closed-form normalization over just the hemisphere around an arbitrary surface normal (as opposed to around \(\hat{a}\) itself), so the constant \((\alpha + 1) / (4\pi)\) instead normalizes the integral of \(F_\alpha\) over the full sphere centered on \(\hat{a}\) to 1. Provided \(\hat{a}\) lies well inside the physical hemisphere and \(\alpha\) is not too small, only a small fraction of the lobe falls below the horizon, so the hemispherical integral remains close to (but, unlike the Lambertian pattern, not exactly) 1; expect visibly more energy than the Lambertian pattern for a small \(\alpha\) or a near-grazing \(\hat{a}\).

Attributes

alpha_r

The lobe width parameter \(\alpha_R \geq 1\); larger values give a narrower lobe.

Methods

Detailed documentation

alpha_r: Float[ArrayLike, ""] = 1.0#

The lobe width parameter \(\alpha_R \geq 1\); larger values give a narrower lobe.