Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeizhen Huang <itsnotrj@gmail.com>2022-11-11 19:41:29 +0300
committerWeizhen Huang <itsnotrj@gmail.com>2022-11-11 19:41:29 +0300
commitaa191c7ac1ddc544f815ea7b0ba24681766db77d (patch)
treeab2046fd0517a1df1aa71d0dd67595d8ab943bc2
parentdad3574a8c0b673efa9d7f7c890d9562e3f6a267 (diff)
Cleanup: renaming a few confusing variables
-rw-r--r--intern/cycles/kernel/light/area.h81
-rw-r--r--intern/cycles/kernel/light/background.h26
-rw-r--r--intern/cycles/kernel/light/spot.h17
-rw-r--r--intern/cycles/kernel/types.h6
-rw-r--r--intern/cycles/scene/light.cpp42
5 files changed, 91 insertions, 81 deletions
diff --git a/intern/cycles/kernel/light/area.h b/intern/cycles/kernel/light/area.h
index 2e863cf81c2..7d6f2a5bef9 100644
--- a/intern/cycles/kernel/light/area.h
+++ b/intern/cycles/kernel/light/area.h
@@ -15,18 +15,18 @@ CCL_NAMESPACE_BEGIN
* NOTE: light_p is modified when sample_coord is true. */
ccl_device_inline float area_light_rect_sample(float3 P,
ccl_private float3 *light_p,
- float3 axisu,
- float3 axisv,
+ float3 extentu,
+ float3 extentv,
float randu,
float randv,
bool sample_coord)
{
/* In our name system we're using P for the center, which is o in the paper. */
- float3 corner = *light_p - axisu * 0.5f - axisv * 0.5f;
- float axisu_len, axisv_len;
+ float3 corner = *light_p - extentu * 0.5f - extentv * 0.5f;
+ float extentu_len, extentv_len;
/* Compute local reference system R. */
- float3 x = normalize_len(axisu, &axisu_len);
- float3 y = normalize_len(axisv, &axisv_len);
+ float3 x = normalize_len(extentu, &extentu_len);
+ float3 y = normalize_len(extentv, &extentv_len);
float3 z = cross(x, y);
/* Compute rectangle coords in local reference system. */
float3 dir = corner - P;
@@ -38,8 +38,8 @@ ccl_device_inline float area_light_rect_sample(float3 P,
}
float x0 = dot(dir, x);
float y0 = dot(dir, y);
- float x1 = x0 + axisu_len;
- float y1 = y0 + axisv_len;
+ float x1 = x0 + extentu_len;
+ float y1 = y0 + extentv_len;
/* Compute internal angles (gamma_i). */
float4 diff = make_float4(x0, y1, x1, y0) - make_float4(x1, y0, x0, y1);
float4 nz = make_float4(y0, x1, y1, x0) * diff;
@@ -106,8 +106,8 @@ ccl_device float area_light_spread_attenuation(const float3 D,
ccl_device bool area_light_spread_clamp_area_light(const float3 P,
const float3 lightNg,
ccl_private float3 *lightP,
- ccl_private float3 *axisu,
- ccl_private float3 *axisv,
+ ccl_private float3 *extentu,
+ ccl_private float3 *extentv,
const float tan_spread)
{
/* Closest point in area light plane and distance to that plane. */
@@ -120,8 +120,8 @@ ccl_device bool area_light_spread_clamp_area_light(const float3 P,
/* TODO: would be faster to store as normalized vector + length, also in area_light_rect_sample.
*/
float len_u, len_v;
- const float3 u = normalize_len(*axisu, &len_u);
- const float3 v = normalize_len(*axisv, &len_v);
+ const float3 u = normalize_len(*extentu, &len_u);
+ const float3 v = normalize_len(*extentv, &len_v);
/* Local uv coordinates of closest point. */
const float closest_u = dot(u, closest_P - *lightP);
@@ -147,8 +147,8 @@ ccl_device bool area_light_spread_clamp_area_light(const float3 P,
const float new_len_v = max_v - min_v;
*lightP = *lightP + new_center_u * u + new_center_v * v;
- *axisu = u * new_len_u;
- *axisv = v * new_len_v;
+ *extentu = u * new_len_u;
+ *extentv = v * new_len_v;
return true;
}
@@ -164,8 +164,10 @@ ccl_device_inline bool area_light_sample(const ccl_global KernelLight *klight,
{
ls->P = make_float3(klight->co[0], klight->co[1], klight->co[2]);
- float3 axisu = make_float3(klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- float3 axisv = make_float3(klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
float3 Ng = make_float3(klight->area.dir[0], klight->area.dir[1], klight->area.dir[2]);
float invarea = fabsf(klight->area.invarea);
bool is_round = (klight->area.invarea < 0.0f);
@@ -179,29 +181,30 @@ ccl_device_inline bool area_light_sample(const ccl_global KernelLight *klight,
float3 inplane;
if (is_round || in_volume_segment) {
- inplane = ellipse_sample(axisu * 0.5f, axisv * 0.5f, randu, randv);
+ inplane = ellipse_sample(extentu * 0.5f, extentv * 0.5f, randu, randv);
ls->P += inplane;
ls->pdf = invarea;
}
else {
inplane = ls->P;
- float3 sample_axisu = axisu;
- float3 sample_axisv = axisv;
+ float3 sample_extentu = extentu;
+ float3 sample_extentv = extentv;
if (!in_volume_segment && klight->area.tan_spread > 0.0f) {
if (!area_light_spread_clamp_area_light(
- P, Ng, &ls->P, &sample_axisu, &sample_axisv, klight->area.tan_spread)) {
+ P, Ng, &ls->P, &sample_extentu, &sample_extentv, klight->area.tan_spread)) {
return false;
}
}
- ls->pdf = area_light_rect_sample(P, &ls->P, sample_axisu, sample_axisv, randu, randv, true);
+ ls->pdf = area_light_rect_sample(
+ P, &ls->P, sample_extentu, sample_extentv, randu, randv, true);
inplane = ls->P - inplane;
}
- const float light_u = dot(inplane, axisu) * (1.0f / dot(axisu, axisu));
- const float light_v = dot(inplane, axisv) * (1.0f / dot(axisv, axisv));
+ const float light_u = dot(inplane, extentu) * (1.0f / dot(extentu, extentu));
+ const float light_v = dot(inplane, extentv) * (1.0f / dot(extentv, extentv));
/* NOTE: Return barycentric coordinates in the same notation as Embree and OptiX. */
ls->u = light_v + 0.5f;
@@ -253,10 +256,10 @@ ccl_device_inline bool area_light_intersect(const ccl_global KernelLight *klight
return false;
}
- const float3 axisu = make_float3(
- klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- const float3 axisv = make_float3(
- klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ const float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ const float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
const float3 Ng = make_float3(klight->area.dir[0], klight->area.dir[1], klight->area.dir[2]);
/* One sided. */
@@ -268,7 +271,7 @@ ccl_device_inline bool area_light_intersect(const ccl_global KernelLight *klight
float3 P;
return ray_quad_intersect(
- ray->P, ray->D, ray->tmin, ray->tmax, light_P, axisu, axisv, Ng, &P, t, u, v, is_round);
+ ray->P, ray->D, ray->tmin, ray->tmax, light_P, extentu, extentv, Ng, &P, t, u, v, is_round);
}
ccl_device_inline bool area_light_sample_from_intersection(
@@ -282,8 +285,10 @@ ccl_device_inline bool area_light_sample_from_intersection(
/* area light */
float invarea = fabsf(klight->area.invarea);
- float3 axisu = make_float3(klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- float3 axisv = make_float3(klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
float3 Ng = make_float3(klight->area.dir[0], klight->area.dir[1], klight->area.dir[2]);
float3 light_P = make_float3(klight->co[0], klight->co[1], klight->co[2]);
@@ -297,17 +302,17 @@ ccl_device_inline bool area_light_sample_from_intersection(
ls->pdf = invarea * lamp_light_pdf(Ng, -ray_D, ls->t);
}
else {
- float3 sample_axisu = axisu;
- float3 sample_axisv = axisv;
+ float3 sample_extentu = extentu;
+ float3 sample_extentv = extentv;
if (klight->area.tan_spread > 0.0f) {
if (!area_light_spread_clamp_area_light(
- ray_P, Ng, &light_P, &sample_axisu, &sample_axisv, klight->area.tan_spread)) {
+ ray_P, Ng, &light_P, &sample_extentu, &sample_extentv, klight->area.tan_spread)) {
return false;
}
}
- ls->pdf = area_light_rect_sample(ray_P, &light_P, sample_axisu, sample_axisv, 0, 0, false);
+ ls->pdf = area_light_rect_sample(ray_P, &light_P, sample_extentu, sample_extentv, 0, 0, false);
}
ls->eval_fac = 0.25f * invarea;
@@ -329,8 +334,10 @@ ccl_device_inline float area_light_tree_weight(const ccl_global KernelLight *kli
{
float3 light_P = make_float3(klight->co[0], klight->co[1], klight->co[2]);
- float3 axisu = make_float3(klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- float3 axisv = make_float3(klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
float3 Ng = make_float3(klight->area.dir[0], klight->area.dir[1], klight->area.dir[2]);
bool is_round = (klight->area.invarea < 0.0f);
@@ -341,7 +348,7 @@ ccl_device_inline float area_light_tree_weight(const ccl_global KernelLight *kli
if (!is_round) {
if (klight->area.tan_spread > 0.0f) {
if (!area_light_spread_clamp_area_light(
- P, Ng, &light_P, &axisu, &axisv, klight->area.tan_spread)) {
+ P, Ng, &light_P, &extentu, &extentv, klight->area.tan_spread)) {
return 0.0f;
}
}
diff --git a/intern/cycles/kernel/light/background.h b/intern/cycles/kernel/light/background.h
index 0cf88f63551..9bb6d105340 100644
--- a/intern/cycles/kernel/light/background.h
+++ b/intern/cycles/kernel/light/background.h
@@ -166,10 +166,10 @@ ccl_device_inline float background_portal_pdf(
int portal = kernel_data.background.portal_offset + p;
const ccl_global KernelLight *klight = &kernel_data_fetch(lights, portal);
- float3 axisu = make_float3(
- klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- float3 axisv = make_float3(
- klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
bool is_round = (klight->area.invarea < 0.0f);
if (!ray_quad_intersect(P,
@@ -177,8 +177,8 @@ ccl_device_inline float background_portal_pdf(
1e-4f,
FLT_MAX,
lightpos,
- axisu,
- axisv,
+ extentu,
+ extentv,
dir,
NULL,
NULL,
@@ -193,7 +193,7 @@ ccl_device_inline float background_portal_pdf(
portal_pdf += fabsf(klight->area.invarea) * lamp_light_pdf(dir, -D, t);
}
else {
- portal_pdf += area_light_rect_sample(P, &lightpos, axisu, axisv, 0.0f, 0.0f, false);
+ portal_pdf += area_light_rect_sample(P, &lightpos, extentu, extentv, 0.0f, 0.0f, false);
}
}
@@ -242,21 +242,21 @@ ccl_device float3 background_portal_sample(KernelGlobals kg,
/* p is the portal to be sampled. */
int portal = kernel_data.background.portal_offset + p;
const ccl_global KernelLight *klight = &kernel_data_fetch(lights, portal);
- float3 axisu = make_float3(
- klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
- float3 axisv = make_float3(
- klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
+ float3 extentu = make_float3(
+ klight->area.extentu[0], klight->area.extentu[1], klight->area.extentu[2]);
+ float3 extentv = make_float3(
+ klight->area.extentv[0], klight->area.extentv[1], klight->area.extentv[2]);
bool is_round = (klight->area.invarea < 0.0f);
float3 D;
if (is_round) {
- lightpos += ellipse_sample(axisu * 0.5f, axisv * 0.5f, randu, randv);
+ lightpos += ellipse_sample(extentu * 0.5f, extentv * 0.5f, randu, randv);
float t;
D = normalize_len(lightpos - P, &t);
*pdf = fabsf(klight->area.invarea) * lamp_light_pdf(dir, -D, t);
}
else {
- *pdf = area_light_rect_sample(P, &lightpos, axisu, axisv, randu, randv, true);
+ *pdf = area_light_rect_sample(P, &lightpos, extentu, extentv, randu, randv, true);
D = normalize(lightpos - P);
}
diff --git a/intern/cycles/kernel/light/spot.h b/intern/cycles/kernel/light/spot.h
index 0fb9f2a97ee..8f1eff7c8b9 100644
--- a/intern/cycles/kernel/light/spot.h
+++ b/intern/cycles/kernel/light/spot.h
@@ -7,15 +7,18 @@
CCL_NAMESPACE_BEGIN
-ccl_device float spot_light_attenuation(float3 dir, float spot_angle, float spot_smooth, float3 N)
+ccl_device float spot_light_attenuation(float3 dir,
+ float cos_half_spot_angle,
+ float spot_smooth,
+ float3 N)
{
float attenuation = dot(dir, N);
- if (attenuation <= spot_angle) {
+ if (attenuation <= cos_half_spot_angle) {
attenuation = 0.0f;
}
else {
- float t = attenuation - spot_angle;
+ float t = attenuation - cos_half_spot_angle;
if (t < spot_smooth && spot_smooth != 0.0f)
attenuation *= smoothstepf(t / spot_smooth);
@@ -56,7 +59,7 @@ ccl_device_inline bool spot_light_sample(const ccl_global KernelLight *klight,
/* spot light attenuation */
ls->eval_fac *= spot_light_attenuation(
- dir, klight->spot.spot_angle, klight->spot.spot_smooth, -ls->D);
+ dir, klight->spot.cos_half_spot_angle, klight->spot.spot_smooth, -ls->D);
if (!in_volume_segment && ls->eval_fac == 0.0f) {
return false;
}
@@ -87,7 +90,7 @@ ccl_device_forceinline void spot_light_update_position(const ccl_global KernelLi
/* spot light attenuation */
float3 dir = make_float3(klight->spot.dir[0], klight->spot.dir[1], klight->spot.dir[2]);
ls->eval_fac *= spot_light_attenuation(
- dir, klight->spot.spot_angle, klight->spot.spot_smooth, ls->Ng);
+ dir, klight->spot.cos_half_spot_angle, klight->spot.spot_smooth, ls->Ng);
}
ccl_device_inline bool spot_light_intersect(const ccl_global KernelLight *klight,
@@ -131,7 +134,7 @@ ccl_device_inline bool spot_light_sample_from_intersection(
/* spot light attenuation */
ls->eval_fac *= spot_light_attenuation(
- dir, klight->spot.spot_angle, klight->spot.spot_smooth, -ls->D);
+ dir, klight->spot.cos_half_spot_angle, klight->spot.spot_smooth, -ls->D);
if (ls->eval_fac == 0.0f) {
return false;
@@ -159,7 +162,7 @@ ccl_device_inline float spot_light_tree_weight(const ccl_global KernelLight *kli
const float3 light_P = make_float3(klight->co[0], klight->co[1], klight->co[2]);
const float radius = klight->spot.radius;
- const float cos_theta = klight->spot.spot_angle;
+ const float cos_theta = klight->spot.cos_half_spot_angle;
const float theta = fast_acosf(cos_theta);
const float3 light_dir = make_float3(
klight->spot.dir[0], klight->spot.dir[1], klight->spot.dir[2]);
diff --git a/intern/cycles/kernel/types.h b/intern/cycles/kernel/types.h
index c7162b19ab6..01628cd97fe 100644
--- a/intern/cycles/kernel/types.h
+++ b/intern/cycles/kernel/types.h
@@ -1275,7 +1275,7 @@ static_assert_align(KernelCurveSegment, 8);
typedef struct KernelSpotLight {
float radius;
float invarea;
- float spot_angle;
+ float cos_half_spot_angle;
float spot_smooth;
float dir[3];
float pad;
@@ -1284,9 +1284,9 @@ typedef struct KernelSpotLight {
/* PointLight is SpotLight with only radius and invarea being used. */
typedef struct KernelAreaLight {
- float axisu[3];
+ float extentu[3];
float invarea;
- float axisv[3];
+ float extentv[3];
float tan_spread;
float dir[3];
float normalize_spread;
diff --git a/intern/cycles/scene/light.cpp b/intern/cycles/scene/light.cpp
index 49a8e19c95a..f5e68e479c6 100644
--- a/intern/cycles/scene/light.cpp
+++ b/intern/cycles/scene/light.cpp
@@ -1058,9 +1058,9 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
}
}
else if (light->light_type == LIGHT_AREA) {
- float3 axisu = light->axisu * (light->sizeu * light->size);
- float3 axisv = light->axisv * (light->sizev * light->size);
- float area = len(axisu) * len(axisv);
+ float3 extentu = light->axisu * (light->sizeu * light->size);
+ float3 extentv = light->axisv * (light->sizev * light->size);
+ float area = len(extentu) * len(extentv);
if (light->round) {
area *= -M_PI_4_F;
}
@@ -1085,12 +1085,12 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
klights[light_index].co[1] = co.y;
klights[light_index].co[2] = co.z;
- klights[light_index].area.axisu[0] = axisu.x;
- klights[light_index].area.axisu[1] = axisu.y;
- klights[light_index].area.axisu[2] = axisu.z;
- klights[light_index].area.axisv[0] = axisv.x;
- klights[light_index].area.axisv[1] = axisv.y;
- klights[light_index].area.axisv[2] = axisv.z;
+ klights[light_index].area.extentu[0] = extentu.x;
+ klights[light_index].area.extentu[1] = extentu.y;
+ klights[light_index].area.extentu[2] = extentu.z;
+ klights[light_index].area.extentv[0] = extentv.x;
+ klights[light_index].area.extentv[1] = extentv.y;
+ klights[light_index].area.extentv[2] = extentv.z;
klights[light_index].area.invarea = invarea;
klights[light_index].area.dir[0] = dir.x;
klights[light_index].area.dir[1] = dir.y;
@@ -1103,8 +1103,8 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
float radius = light->size;
float invarea = (radius > 0.0f) ? 1.0f / (M_PI_F * radius * radius) : 1.0f;
- float spot_angle = cosf(light->spot_angle * 0.5f);
- float spot_smooth = (1.0f - spot_angle) * light->spot_smooth;
+ float cos_half_spot_angle = cosf(light->spot_angle * 0.5f);
+ float spot_smooth = (1.0f - cos_half_spot_angle) * light->spot_smooth;
float3 dir = light->dir;
dir = safe_normalize(dir);
@@ -1118,7 +1118,7 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
klights[light_index].spot.radius = radius;
klights[light_index].spot.invarea = invarea;
- klights[light_index].spot.spot_angle = spot_angle;
+ klights[light_index].spot.cos_half_spot_angle = cos_half_spot_angle;
klights[light_index].spot.spot_smooth = spot_smooth;
klights[light_index].spot.dir[0] = dir.x;
klights[light_index].spot.dir[1] = dir.y;
@@ -1154,9 +1154,9 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
assert(light->light_type == LIGHT_AREA);
float3 co = light->co;
- float3 axisu = light->axisu * (light->sizeu * light->size);
- float3 axisv = light->axisv * (light->sizev * light->size);
- float area = len(axisu) * len(axisv);
+ float3 extentu = light->axisu * (light->sizeu * light->size);
+ float3 extentv = light->axisv * (light->sizev * light->size);
+ float area = len(extentu) * len(extentv);
if (light->round) {
area *= -M_PI_4_F;
}
@@ -1169,12 +1169,12 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc
klights[light_index].co[1] = co.y;
klights[light_index].co[2] = co.z;
- klights[light_index].area.axisu[0] = axisu.x;
- klights[light_index].area.axisu[1] = axisu.y;
- klights[light_index].area.axisu[2] = axisu.z;
- klights[light_index].area.axisv[0] = axisv.x;
- klights[light_index].area.axisv[1] = axisv.y;
- klights[light_index].area.axisv[2] = axisv.z;
+ klights[light_index].area.extentu[0] = extentu.x;
+ klights[light_index].area.extentu[1] = extentu.y;
+ klights[light_index].area.extentu[2] = extentu.z;
+ klights[light_index].area.extentv[0] = extentv.x;
+ klights[light_index].area.extentv[1] = extentv.y;
+ klights[light_index].area.extentv[2] = extentv.z;
klights[light_index].area.invarea = invarea;
klights[light_index].area.dir[0] = dir.x;
klights[light_index].area.dir[1] = dir.y;