Photon Engine 2.0.0-beta
A physically based renderer.
Loading...
Searching...
No Matches
ph::AnisoTrowbridgeReitz Class Reference

#include <AnisoTrowbridgeReitz.h>

Inheritance diagram for ph::AnisoTrowbridgeReitz:
ph::TrowbridgeReitz ph::ShapeInvariantMicrofacet ph::Microfacet

Public Member Functions

 AnisoTrowbridgeReitz (real alphaU, real alphaV, EMaskingShadowing maskingShadowingType)
 
std::array< real, 2 > getAlphas (const SurfaceHit &X) const override
 
real lambda (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H, const math::Vector3R &unitDir, const std::array< real, 2 > &alphas) const override
 The \( \Lambda \left( a \right) \) function that appears in the masking-shadowing term. For isotropic distributions, the variable \( a \) is normally calculated as \( a = \frac{1}{\alpha \tan \left( \theta \right)} \), where \( \frac{1}{\tan \left( \theta \right)} \) is the slope of the unit direction unitDir (with respect to the macrosurface normal N. For anisotropic distributions, see the implementation of AnisoTrowbridgeReitz as an example for calculating \( a \) from the parameters.
 
real distribution (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H) const override
 Distribution of the microfacet normal. The \( D \) term. Also commonly knwon as the NDF (normal distribution function). This term is defined in the half-angle/microfacet space (the angle between N and H) unless otherwise noted.
 
void sampleH (const SurfaceHit &X, const math::Vector3R &N, const std::array< real, 2 > &sample, math::Vector3R *out_H) const override
 Generate a microfacet normal H for the distribution. This samples all possible H vectors for the distribution.
 
- Public Member Functions inherited from ph::TrowbridgeReitz
 TrowbridgeReitz (EMaskingShadowing maskingShadowingType)
 
void sampleVisibleH (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &V, const std::array< real, 2 > &sample, math::Vector3R *out_H) const override
 Same as sampleH(), but tries to take geometry term into consideration. This samples only potentially visible H vectors for the distribution. If unable to fully or partly incorporate visibility information from the geometry term, this method will fallback to sampleH().
 
lta::PDF pdfSampleVisibleH (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H, const math::Vector3R &V) const override
 
- Public Member Functions inherited from ph::ShapeInvariantMicrofacet
 ShapeInvariantMicrofacet (EMaskingShadowing maskingShadowingType)
 
real geometry (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H, const math::Vector3R &L, const math::Vector3R &V) const override
 Masking and shadowing due to nearby microfacets. The \( G \) term.
 
lta::PDF pdfSampleH (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H) const override
 
- Public Member Functions inherited from ph::Microfacet
virtual ~Microfacet ()=default
 

Additional Inherited Members

- Protected Member Functions inherited from ph::ShapeInvariantMicrofacet
real smithG1 (real lambdaValue) const
 
real empiricalPhiCorrelation (const SurfaceHit &X, const math::Vector3R &L, const math::Vector3R &V) const
 
real projectedDistribution (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H) const
 
real visibleDistribution (const SurfaceHit &X, const math::Vector3R &N, const math::Vector3R &H, const math::Vector3R &V) const
 
- Static Protected Member Functions inherited from ph::Microfacet
static bool isSidednessAgreed (real NoD, real HoD)
 
static bool isSidednessAgreed (real NoL, real NoV, real HoL, real HoV)
 
- Protected Attributes inherited from ph::ShapeInvariantMicrofacet
EMaskingShadowing m_maskingShadowingType
 

Detailed Description

See the original paper by Trowbridge et al. [16]. The course note [2] provides an in-depth description for practical applications.

Constructor & Destructor Documentation

◆ AnisoTrowbridgeReitz()

ph::AnisoTrowbridgeReitz::AnisoTrowbridgeReitz ( real alphaU,
real alphaV,
EMaskingShadowing maskingShadowingType )

Member Function Documentation

◆ distribution()

real ph::AnisoTrowbridgeReitz::distribution ( const SurfaceHit & X,
const math::Vector3R & N,
const math::Vector3R & H ) const
overridevirtual

Distribution of the microfacet normal. The \( D \) term. Also commonly knwon as the NDF (normal distribution function). This term is defined in the half-angle/microfacet space (the angle between N and H) unless otherwise noted.

Parameters
HThe microfacet normal.
Remarks
Do not treat this term as the probability density of microfacet normal over solid angle.

Implements ph::TrowbridgeReitz.

◆ getAlphas()

std::array< real, 2 > ph::AnisoTrowbridgeReitz::getAlphas ( const SurfaceHit & X) const
inlineoverridevirtual
Returns
\( \left( \alpha_u, \alpha_v \right) \) in the U and V directions of the macrosirface parametrization. Guaranteed to have \( \alpha_u = \alpha_v \) for an isotropic distribution.

Implements ph::TrowbridgeReitz.

◆ lambda()

real ph::AnisoTrowbridgeReitz::lambda ( const SurfaceHit & X,
const math::Vector3R & N,
const math::Vector3R & H,
const math::Vector3R & unitDir,
const std::array< real, 2 > & alphas ) const
overridevirtual

The \( \Lambda \left( a \right) \) function that appears in the masking-shadowing term. For isotropic distributions, the variable \( a \) is normally calculated as \( a = \frac{1}{\alpha \tan \left( \theta \right)} \), where \( \frac{1}{\tan \left( \theta \right)} \) is the slope of the unit direction unitDir (with respect to the macrosurface normal N. For anisotropic distributions, see the implementation of AnisoTrowbridgeReitz as an example for calculating \( a \) from the parameters.

Note
This method does not handle sidedness agreement.

Implements ph::TrowbridgeReitz.

◆ sampleH()

void ph::AnisoTrowbridgeReitz::sampleH ( const SurfaceHit & X,
const math::Vector3R & N,
const std::array< real, 2 > & sample,
math::Vector3R * out_H ) const
overridevirtual

Generate a microfacet normal H for the distribution. This samples all possible H vectors for the distribution.

Parameters
out_HThe generated microfacet normal.
Remarks
Use pdfSampleH() for the probability density of sampling the generated H. distribution() is not a probability density of microfacet normal.

Implements ph::TrowbridgeReitz.


The documentation for this class was generated from the following files: