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:
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/blender/addon/ui.py11
-rw-r--r--intern/cycles/blender/blender_curves.cpp10
-rw-r--r--intern/cycles/device/device_opencl.cpp2
-rw-r--r--intern/cycles/kernel/kernel_bvh.h39
-rw-r--r--intern/cycles/kernel/kernel_types.h3
-rw-r--r--intern/cycles/render/curves.cpp4
-rw-r--r--intern/cycles/render/curves.h1
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;