From 716d8436f0649fd2a55acc0b3738f1d359c9c597 Mon Sep 17 00:00:00 2001 From: Aaron Carlisle Date: Mon, 31 Jan 2022 12:56:40 -0500 Subject: Fix: Unutilized curve mapping in vector shader node This could result in a shading errors is some cases such as undo. Follow up to rB1405787142d1f87f18631114167675ed145f6d75 --- source/blender/nodes/shader/nodes/node_shader_curves.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/nodes/shader/nodes/node_shader_curves.cc b/source/blender/nodes/shader/nodes/node_shader_curves.cc index 9ca9192e821..6570ffcac83 100644 --- a/source/blender/nodes/shader/nodes/node_shader_curves.cc +++ b/source/blender/nodes/shader/nodes/node_shader_curves.cc @@ -49,6 +49,7 @@ static int gpu_shader_curve_vec(GPUMaterial *mat, CurveMapping *cumap = (CurveMapping *)node->storage; + BKE_curvemapping_init(cumap); BKE_curvemapping_table_RGBA(cumap, &array, &size); GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer); -- cgit v1.2.3 From 5fabbedb046d7f27421f607e01b25eee8a6af9f3 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 28 Jan 2022 14:16:06 +0100 Subject: Fix Cycles assert in light sampling There is no object transform on lights. --- intern/cycles/kernel/geom/shader_data.h | 52 ++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/intern/cycles/kernel/geom/shader_data.h b/intern/cycles/kernel/geom/shader_data.h index 2027190fdd2..fdf914d85e0 100644 --- a/intern/cycles/kernel/geom/shader_data.h +++ b/intern/cycles/kernel/geom/shader_data.h @@ -190,40 +190,46 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals kg, #ifdef __OBJECT_MOTION__ shader_setup_object_transforms(kg, sd, time); #endif - } - else if (lamp != LAMP_NONE) { - sd->lamp = lamp; - } - /* transform into world space */ - if (object_space) { - object_position_transform_auto(kg, sd, &sd->P); - object_normal_transform_auto(kg, sd, &sd->Ng); - sd->N = sd->Ng; - object_dir_transform_auto(kg, sd, &sd->I); - } + /* transform into world space */ + if (object_space) { + object_position_transform_auto(kg, sd, &sd->P); + object_normal_transform_auto(kg, sd, &sd->Ng); + sd->N = sd->Ng; + object_dir_transform_auto(kg, sd, &sd->I); + } - if (sd->type == PRIMITIVE_TRIANGLE) { - /* smooth normal */ - if (sd->shader & SHADER_SMOOTH_NORMAL) { - sd->N = triangle_smooth_normal(kg, Ng, sd->prim, sd->u, sd->v); + if (sd->type == PRIMITIVE_TRIANGLE) { + /* smooth normal */ + if (sd->shader & SHADER_SMOOTH_NORMAL) { + sd->N = triangle_smooth_normal(kg, Ng, sd->prim, sd->u, sd->v); - if (!(sd->object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { - object_normal_transform_auto(kg, sd, &sd->N); + if (!(sd->object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { + object_normal_transform_auto(kg, sd, &sd->N); + } } - } - /* dPdu/dPdv */ + /* dPdu/dPdv */ #ifdef __DPDU__ - triangle_dPdudv(kg, sd->prim, &sd->dPdu, &sd->dPdv); + triangle_dPdudv(kg, sd->prim, &sd->dPdu, &sd->dPdv); - if (!(sd->object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { - object_dir_transform_auto(kg, sd, &sd->dPdu); - object_dir_transform_auto(kg, sd, &sd->dPdv); + if (!(sd->object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { + object_dir_transform_auto(kg, sd, &sd->dPdu); + object_dir_transform_auto(kg, sd, &sd->dPdv); + } +#endif } + else { +#ifdef __DPDU__ + sd->dPdu = zero_float3(); + sd->dPdv = zero_float3(); #endif + } } else { + if (lamp != LAMP_NONE) { + sd->lamp = lamp; + } #ifdef __DPDU__ sd->dPdu = zero_float3(); sd->dPdv = zero_float3(); -- cgit v1.2.3 From c8c9965df272835f0099260580ed8813fc8baf0d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 31 Jan 2022 20:56:54 +0100 Subject: Fix crash with non-closed meshes in recent bugfix for texture margin Ref T95249, D13935 --- source/blender/render/intern/texture_margin.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/render/intern/texture_margin.cc b/source/blender/render/intern/texture_margin.cc index bb4b82645f0..5a9d9db5367 100644 --- a/source/blender/render/intern/texture_margin.cc +++ b/source/blender/render/intern/texture_margin.cc @@ -349,13 +349,17 @@ class TextureMarginMap { * But it seems fast enough for now and that would add a lot of complexity. */ for (int i = 0; i < totloop; i++) { int otherloop = loop_adjacency_map_[i + loopstart]; + + if (otherloop < 0) { + continue; + } + uint32_t poly = loop_to_poly_map_[otherloop]; if (lookup_pixel(x, y, poly, &destx, &desty, &foundpoly, &found_dist)) { if (mindist < 0.f || found_dist < mindist) { mindist = found_dist; *r_other_poly = foundpoly; - ; *r_destx = destx; *r_desty = desty; *r_start_poly = poly; -- cgit v1.2.3