17 float a = 2.0f * rand.
x - 1.0f;
18 float b = 2.0f * rand.
y - 1.0f;
20 if (a == 0.0f &&
b == 0.0f) {
23 else if (a * a >
b *
b) {
25 phi = M_PI_4_F * (
b / a);
72 *wo = rand.
x * T + rand.
y *
B + costheta *
N;
73 *pdf = costheta * M_1_PI_F;
96 *wo =
xy.x * T +
xy.y *
B +
z *
N;
115 const float one_minus_cos_angle,
120 if (one_minus_cos_angle > 0) {
147 *
cos_theta = 1.0f - r2 * one_minus_cos_angle;
150 xy *=
safe_sqrtf(one_minus_cos_angle * (2.0f - one_minus_cos_angle * r2));
152 *pdf = M_1_2PI_F / one_minus_cos_angle;
168 float z = 1.0f - 2.0f * rand.
x;
171 float x = r *
cosf(phi);
172 float y = r *
sinf(phi);
180 float u = rand.
x,
v = rand.
y;
183 float corner =
floorf(u * corners);
184 u = u * corners - corner;
192 float angle =
M_PI_F / corners;
196 rotation += corner * 2.0f *
angle;
198 float cr =
cosf(rotation);
199 float sr =
sinf(rotation);
MINLINE float safe_sqrtf(float a)
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.
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
local_group_size(16, 16) .push_constant(Type b
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define ccl_device_inline
#define CCL_NAMESPACE_END
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 cross(const float2 a, const float2 b)
ccl_device_inline void sample_uniform_hemisphere(const float3 N, const float2 rand, ccl_private float3 *wo, ccl_private float *pdf)
ccl_device float2 regular_polygon_sample(float corners, float rotation, const float2 rand)
CCL_NAMESPACE_BEGIN ccl_device float2 sample_uniform_disk(const float2 rand)
ccl_device_inline void sample_cos_hemisphere(const float3 N, 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 float pdf_uniform_cone(const float3 N, float3 D, float angle)
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 void make_orthonormals_safe_tangent(const float3 N, const float3 T, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline float sin_from_cos(const float c)
ccl_device_inline float precise_angle(float3 a, float3 b)
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline float one_minus_cos(const float angle)