21 const float a = 2.0f * rand.
x - 1.0f;
22 const float b = 2.0f * rand.
y - 1.0f;
24 if (a == 0.0f &&
b == 0.0f) {
78 *wo = rand.
x *
T + rand.
y *
B + costheta *
N;
122 const float one_minus_cos_angle,
127 if (one_minus_cos_angle > 0) {
154 *
cos_theta = 1.0f - r2 * one_minus_cos_angle;
157 xy *=
safe_sqrtf(one_minus_cos_angle * (2.0f - one_minus_cos_angle * r2));
176 const float z = 1.0f - 2.0f * rand.
x;
190 const float corner =
floorf(u * corners);
191 u = u * corners - corner;
203 rotation += corner * 2.0f *
angle;
205 const float cr =
cosf(rotation);
206 const float sr =
sinf(rotation);
217 const int cut_off = INT_MAX)
220 pmf = (n == cut_off) ?
powf(1.0f - r, n) : r *
powf(1.0f - r, n);
228 return -
logf(1.0f - rand) / lambda;
239 const float attenuation = 1.0f -
expf(lambda * (t.
min - t.
max));
MINLINE float safe_sqrtf(float a)
MINLINE float safe_divide(float a, float b)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
ATTR_WARN_UNUSED_RESULT const BMVert * v
ccl_device_inline float cos_theta(const float3 w)
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
ccl_device_inline float2 polar_to_cartesian(const float r, const float phi)
#define ccl_device_inline
#define CCL_NAMESPACE_END
VecBase< float, D > normalize(VecOp< float, D >) RET
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
constexpr T clamp(T, U, U) RET
ccl_device_inline float sin_from_cos(const float c)
ccl_device_inline float one_minus_cos(const float angle)
CCL_NAMESPACE_BEGIN ccl_device_inline float2 zero_float2()
ccl_device_inline float len_squared(const float2 a)
ccl_device_inline float2 safe_normalize(const float2 a)
ccl_device_inline float precise_angle(const float3 a, const float3 b)
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline float pdf_uniform_cone(const float3 N, const float3 D, const float angle)
ccl_device_inline float sample_exponential_distribution(const float rand, const float lambda)
ccl_device_inline void sample_uniform_hemisphere(const float3 N, const float2 rand, ccl_private float3 *wo, ccl_private float *pdf)
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
ccl_device_inline void sample_cos_hemisphere(const float3 N, const float2 rand_in, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device float3 sample_uniform_sphere(const float2 rand)
ccl_device void make_orthonormals_tangent(const float3 N, const float3 T, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline int sample_geometric_distribution(const float rand, const float r, ccl_private float &pmf, const int cut_off=INT_MAX)
ccl_device_inline float3 sample_uniform_cone(const float3 N, const float one_minus_cos_angle, const float2 rand, ccl_private float *cos_theta, ccl_private float *pdf)
ccl_device_inline float pdf_cos_hemisphere(const float3 N, const float3 D)
ccl_device_inline Spectrum pdf_exponential_distribution(const float x, const Spectrum lambda, const Interval< float > t)
ccl_device void make_orthonormals_safe_tangent(const float3 N, const float3 T, ccl_private float3 *a, ccl_private float3 *b)
ccl_device float2 regular_polygon_sample(const float corners, float rotation, const float2 rand)