From aa191c7ac1ddc544f815ea7b0ba24681766db77d Mon Sep 17 00:00:00 2001 From: Weizhen Huang Date: Fri, 11 Nov 2022 17:41:29 +0100 Subject: Cleanup: renaming a few confusing variables --- intern/cycles/kernel/light/area.h | 81 ++++++++++++++++++--------------- intern/cycles/kernel/light/background.h | 26 +++++------ intern/cycles/kernel/light/spot.h | 17 ++++--- intern/cycles/kernel/types.h | 6 +-- intern/cycles/scene/light.cpp | 42 ++++++++--------- 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; -- cgit v1.2.3