Description

A C++ implementation of A Practical Microcylinder Appearance Model for Cloth Rendering with path tracing. I implemented the following features:

Thread Parameterization

Each thread is represented as a microcylinder with a tangent distribution. Cloths are made by choosing two threads comprising the following attributes:

  • : Cylinder reflection normal
  • : Colored albedo coefficient
  • : Isoptropic scattering coefficient
  • : Surface reflectance gaussian width
  • : Volume scattering gaussian width
  • : Area coverage ratio
  • Tangent offsets and lengths ‍

Curve Radiance Integral

Cloth fibers are represented as microcylinders. Unlike the standard surface radiance integral, the curve radiance integral accounts for light scattered around teh circumference of the microcylinder.

Bidirectional Scattering Distribution Function (BSDF)

The BSDF is split into a surface scattering function

and a volume scattering function

Together, these functions compose the BSDF:

Masking

The overall shadowing and masking term introduced by grazing angles and self-masking is

Shading Model

The total outgoing radiance of a minimal patch is the weighted average of the outgoing radiance of two constituent threads:

Putting it all together, each thread’s radiance is computed by averaging the curve radiance integral with masking under its tangent distribution:

Results

I tested my implementation on a custome scene made in Blender. All rendered images are done at 1028spp with a resolution of 1080 by 1080. Listed in the original paper, these cloths are , Polyester Satin Charmeuse, and back side of Polyester Satin Charmeuse.

Linen Plain Fabric

Linen Plain Fabric

Polyester Satin Charmeuse

Polyester Satin Charmeuse

Polyester Satin Charmeuse Back

Polyester Satin Charmeuse Back