diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 11 | ||||
-rw-r--r-- | intern/cycles/blender/blender_curves.cpp | 10 | ||||
-rw-r--r-- | intern/cycles/device/device_opencl.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_bvh.h | 39 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 3 | ||||
-rw-r--r-- | intern/cycles/render/curves.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/curves.h | 1 |
7 files changed, 21 insertions, 49 deletions
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 8f81e93f7c8..83483cbcae9 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -1172,13 +1172,12 @@ class CyclesRender_PT_CurveRendering(CyclesButtonsPanel, Panel): layout.prop(ccscene, "primitive", text="Primitive") layout.prop(ccscene, "shape", text="Shape") - if ccscene.primitive == 'TRIANGLES': - if ccscene.shape == 'THICK': - layout.prop(ccscene, "resolution", text="Resolution") - elif ccscene.primitive == 'LINE_SEGMENTS': - layout.prop(ccscene, "cull_backfacing", text="Cull back-faces") - elif ccscene.primitive in {'CURVE_SEGMENTS', 'CURVE_RIBBONS'}: + if (ccscene.primitive in {'CURVE_SEGMENTS', 'LINE_SEGMENTS'} and ccscene.shape == 'RIBBONS') == False: layout.prop(ccscene, "cull_backfacing", text="Cull back-faces") + + if ccscene.primitive == 'TRIANGLES' and ccscene.shape == 'THICK': + layout.prop(ccscene, "resolution", text="Resolution") + elif ccscene.primitive == 'CURVE_SEGMENTS': layout.prop(ccscene, "subdivisions", text="Curve subdivisions") row = layout.row() diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp index c47f410a742..7e8eb3aa374 100644 --- a/intern/cycles/blender/blender_curves.cpp +++ b/intern/cycles/blender/blender_curves.cpp @@ -701,25 +701,23 @@ void BlenderSync::sync_curve_settings() curve_system_manager->triangle_method = CURVE_CAMERA_TRIANGLES; curve_system_manager->resolution = 1; } - if(curve_system_manager->primitive == CURVE_TRIANGLES && curve_system_manager->curve_shape == CURVE_THICK) { + else if(curve_system_manager->primitive == CURVE_TRIANGLES && curve_system_manager->curve_shape == CURVE_THICK) { /* camera facing planes */ curve_system_manager->triangle_method = CURVE_TESSELATED_TRIANGLES; } - if(curve_system_manager->primitive == CURVE_LINE_SEGMENTS && curve_system_manager->curve_shape == CURVE_RIBBON) { + else if(curve_system_manager->primitive == CURVE_LINE_SEGMENTS && curve_system_manager->curve_shape == CURVE_RIBBON) { /* tangent shading */ curve_system_manager->line_method = CURVE_UNCORRECTED; curve_system_manager->use_encasing = true; curve_system_manager->use_backfacing = false; - curve_system_manager->use_tangent_normal = true; curve_system_manager->use_tangent_normal_geometry = true; } - if(curve_system_manager->primitive == CURVE_LINE_SEGMENTS && curve_system_manager->curve_shape == CURVE_THICK) { + else if(curve_system_manager->primitive == CURVE_LINE_SEGMENTS && curve_system_manager->curve_shape == CURVE_THICK) { curve_system_manager->line_method = CURVE_ACCURATE; curve_system_manager->use_encasing = false; - curve_system_manager->use_tangent_normal = false; curve_system_manager->use_tangent_normal_geometry = false; } - if(curve_system_manager->primitive == CURVE_SEGMENTS && curve_system_manager->curve_shape == CURVE_RIBBON) { + else if(curve_system_manager->primitive == CURVE_SEGMENTS && curve_system_manager->curve_shape == CURVE_RIBBON) { curve_system_manager->primitive = CURVE_RIBBONS; curve_system_manager->use_backfacing = false; } diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp index 3a88b68b292..9117b70d749 100644 --- a/intern/cycles/device/device_opencl.cpp +++ b/intern/cycles/device/device_opencl.cpp @@ -931,7 +931,7 @@ public: size_t global_size[2] = {global_size_round_up(local_size[0], w), global_size_round_up(local_size[1], h)}; /* run kernel */ - ciErr = clEnqueueNDRangeKernel(cqCommandQueue, kernel, 2, NULL, global_size, local_size, 0, NULL, NULL); + ciErr = clEnqueueNDRangeKernel(cqCommandQueue, kernel, 2, NULL, global_size, NULL, 0, NULL, NULL); opencl_assert(ciErr); opencl_assert(clFlush(cqCommandQueue)); } diff --git a/intern/cycles/kernel/kernel_bvh.h b/intern/cycles/kernel/kernel_bvh.h index dc31e72b896..c1595f64e0d 100644 --- a/intern/cycles/kernel/kernel_bvh.h +++ b/intern/cycles/kernel/kernel_bvh.h @@ -406,17 +406,12 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect coverage = (min(d1 / mw_extension, 1.0f) + min(-d0 / mw_extension, 1.0f)) * 0.5f; } - if (p_curr.x * p_curr.x + p_curr.y * p_curr.y >= r_ext * r_ext || p_curr.z <= epsilon) { - tree++; - level = tree & -tree; - continue; - } - /* compare z distances */ - if (isect->t < p_curr.z) { + if (p_curr.x * p_curr.x + p_curr.y * p_curr.y >= r_ext * r_ext || p_curr.z <= epsilon || isect->t < p_curr.z) { tree++; level = tree & -tree; continue; } + t = p_curr.z; } else { @@ -453,7 +448,6 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect float rootd = sqrtf(td); float correction = ((-tb - rootd)/(2*cyla)); t = tcentre + correction; - float w = (zcentre + (tg.z * correction))/l; float3 dp_st = (3 * curve_coef[3] * i_st + 2 * curve_coef[2]) * i_st + curve_coef[1]; if (dot(tg, dp_st)< 0) @@ -462,11 +456,9 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect if (dot(tg, dp_en) < 0) dp_en *= -1; - if(flags & CURVE_KN_BACKFACING && (dot(dp_st, -p_st) + t * dp_st.z < 0 || dot(dp_en, p_en) - t * dp_en.z < 0 || isect->t < t || t <= 0.0f)) { correction = ((-tb + rootd)/(2*cyla)); t = tcentre + correction; - w = (zcentre + (tg.z * correction))/l; } if (dot(dp_st, -p_st) + t * dp_st.z < 0 || dot(dp_en, p_en) - t * dp_en.z < 0 || isect->t < t || t <= 0.0f) { @@ -475,6 +467,7 @@ ccl_device_inline bool bvh_cardinal_curve_intersect(KernelGlobals *kg, Intersect continue; } + float w = (zcentre + (tg.z * correction))/l; w = clamp((float)w, 0.0f, 1.0f); /* compute u on the curve segment */ u = i_st * (1 - w) + i_en * w; @@ -1099,7 +1092,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con float4 P1 = kernel_tex_fetch(__curve_keys, k0); float4 P2 = kernel_tex_fetch(__curve_keys, k1); float l = 1.0f; - float3 tg = normalize_len(float4_to_float3(P2 - P1),&l); + float3 tg = normalize_len(float4_to_float3(P2 - P1), &l); float r1 = P1.w; float r2 = P2.w; float gd = ((r2 - r1)/l); @@ -1119,17 +1112,17 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con p[2] = float4_to_float3(P2); p[3] = float4_to_float3(P3); - tg = normalize(curvetangent(isect->u,p[0],p[1],p[2],p[3])); - float3 p_curr = curvepoint(isect->u,p[0],p[1],p[2],p[3]); - #ifdef __UV__ sd->u = isect->u; sd->v = 0.0f; #endif + + tg = normalize(curvetangent(isect->u, p[0], p[1], p[2], p[3])); if(kernel_data.curve.curveflags & CURVE_KN_RIBBONS) - sd->Ng = normalize(-(D - tg * (dot(tg,D)))); + sd->Ng = normalize(-(D - tg * (dot(tg, D)))); else { + float3 p_curr = curvepoint(isect->u, p[0], p[1], p[2], p[3]); sd->Ng = normalize(P - p_curr); sd->Ng = sd->Ng - gd * tg; sd->Ng = normalize(sd->Ng); @@ -1145,7 +1138,7 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con #endif if (flag & CURVE_KN_TRUETANGENTGNORMAL) { - sd->Ng = -(D - tg * dot(tg,D)); + sd->Ng = -(D - tg * dot(tg, D)); sd->Ng = normalize(sd->Ng); } else { @@ -1157,24 +1150,12 @@ ccl_device_inline float3 bvh_curve_refine(KernelGlobals *kg, ShaderData *sd, con } sd->N = sd->Ng; - - if (flag & CURVE_KN_TANGENTGNORMAL && !(flag & CURVE_KN_TRUETANGENTGNORMAL)) { - sd->N = -(D - tg * dot(tg,D)); - sd->N = normalize(sd->N); - } - if (!(flag & CURVE_KN_TANGENTGNORMAL) && flag & CURVE_KN_TRUETANGENTGNORMAL) { - sd->N = (dif - tg * sd->u * l) / (P1.w + sd->u * l * gd); - if (gd != 0.0f) { - sd->N = sd->N - gd * tg ; - sd->N = normalize(sd->N); - } - } } #ifdef __DPDU__ /* dPdu/dPdv */ sd->dPdu = tg; - sd->dPdv = cross(tg,sd->Ng); + sd->dPdv = cross(tg, sd->Ng); #endif /*add fading parameter for minimum pixel width with transparency bsdf*/ diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index fb63ebb2e7a..9b1893e8baa 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -792,8 +792,7 @@ typedef enum CurveFlag { CURVE_KN_ACCURATE = 8, /* use accurate intersections test? */ CURVE_KN_INTERSECTCORRECTION = 16, /* correct for width after determing closest midpoint? */ CURVE_KN_TRUETANGENTGNORMAL = 32, /* use tangent normal for geometry? */ - CURVE_KN_TANGENTGNORMAL = 64, /* use tangent normal for shader? */ - CURVE_KN_RIBBONS = 128, /* use flat curve ribbons */ + CURVE_KN_RIBBONS = 64, /* use flat curve ribbons */ } CurveFlag; typedef struct KernelCurves { diff --git a/intern/cycles/render/curves.cpp b/intern/cycles/render/curves.cpp index 4e7f598751e..574ad4f6ca0 100644 --- a/intern/cycles/render/curves.cpp +++ b/intern/cycles/render/curves.cpp @@ -92,7 +92,6 @@ CurveSystemManager::CurveSystemManager() use_curves = true; use_encasing = true; use_backfacing = false; - use_tangent_normal = false; use_tangent_normal_geometry = false; need_update = true; @@ -127,8 +126,6 @@ void CurveSystemManager::device_update(Device *device, DeviceScene *dscene, Scen else if(line_method == CURVE_CORRECTED) kcurve->curveflags |= CURVE_KN_INTERSECTCORRECTION; - if(use_tangent_normal) - kcurve->curveflags |= CURVE_KN_TANGENTGNORMAL; if(use_tangent_normal_geometry) kcurve->curveflags |= CURVE_KN_TRUETANGENTGNORMAL; if(use_backfacing) @@ -158,7 +155,6 @@ bool CurveSystemManager::modified(const CurveSystemManager& CurveSystemManager) line_method == CurveSystemManager.line_method && primitive == CurveSystemManager.primitive && use_encasing == CurveSystemManager.use_encasing && - use_tangent_normal == CurveSystemManager.use_tangent_normal && use_tangent_normal_geometry == CurveSystemManager.use_tangent_normal_geometry && encasing_ratio == CurveSystemManager.encasing_ratio && minimum_width == CurveSystemManager.minimum_width && diff --git a/intern/cycles/render/curves.h b/intern/cycles/render/curves.h index 0759d495561..8020a93e77e 100644 --- a/intern/cycles/render/curves.h +++ b/intern/cycles/render/curves.h @@ -97,7 +97,6 @@ public: bool use_curves; bool use_encasing; bool use_backfacing; - bool use_tangent_normal; bool use_tangent_normal_geometry; bool need_update; |