Commit: 5de70a0ceab6582dc121bfa58dc11f60744ff7a7
Author: Lukas Tönne
Date: Thu Aug 14 14:01:55 2014 +0200
Branches: hair_system
https://developer.blender.org/rB5de70a0ceab6582dc121bfa58dc11f60744ff7a7
Use the new hair thickness render settings in Cycles.
===================================================================
M intern/cycles/blender/blender_curves.cpp
M source/blender/blenkernel/BKE_hair.h
M source/blender/blenkernel/intern/hair.c
M source/blender/makesrna/intern/rna_hair.c
===================================================================
diff --git a/intern/cycles/blender/blender_curves.cpp
b/intern/cycles/blender/blender_curves.cpp
index 21fafaa..cdb8d81 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -682,10 +682,11 @@ static void ExportParticleCurveSegmentsMotion(Scene
*scene, Mesh *mesh, Particle
static void ExportHairCurveSegments(Scene *scene, Mesh *mesh, BL::HairSystem
b_hsys)
{
- /* XXX TODO put these into render parameters */
- float shape = 0.0f;
- float root_radius = 0.01f;
- float tip_radius = 0.01f;
+ BL::HairRenderSettings b_render(b_hsys.params().render());
+ float shape = b_render.shape();
+ float root_width = b_render.root_width() * b_render.radius_scale();
+ float tip_width = b_render.tip_width() * b_render.radius_scale();
+ bool closetip = b_render.use_closetip();
int num_keys = 0;
int num_curves = 0;
@@ -714,10 +715,8 @@ static void ExportHairCurveSegments(Scene *scene, Mesh
*mesh, BL::HairSystem b_h
int num_curve_keys = 0;
for (; b_step_iter.valid(); b_step_iter.next()) {
- float time = 0.0f; // XXX
-
- bool closetip = true; // XXX
- float radius = shaperadius(shape, root_radius,
tip_radius, time);
+ float param = b_step_iter.parameter();
+ float radius = shaperadius(shape, root_width,
tip_width, param);
if (closetip && b_step_iter.index() ==
b_step_iter.totsteps() - 1)
radius = 0.0f;
@@ -726,7 +725,7 @@ static void ExportHairCurveSegments(Scene *scene, Mesh
*mesh, BL::HairSystem b_h
mesh->add_curve_key(make_float3(co[0], co[1], co[2]),
radius);
if(attr_intercept)
- attr_intercept->add(time);
+ attr_intercept->add(param);
++num_curve_keys;
}
@@ -748,10 +747,11 @@ static void ExportHairCurveSegments(Scene *scene, Mesh
*mesh, BL::HairSystem b_h
static void ExportHairCurveSegmentsMotion(Scene *scene, Mesh *mesh,
BL::HairSystem b_hsys, int time_index)
{
- /* XXX TODO put these into render parameters */
- float shape = 0.0f;
- float root_radius = 0.01f;
- float tip_radius = 0.01f;
+ BL::HairRenderSettings b_render(b_hsys.params().render());
+ float shape = b_render.shape();
+ float root_width = b_render.root_width() * b_render.radius_scale();
+ float tip_width = b_render.tip_width() * b_render.radius_scale();
+ bool closetip = b_render.use_closetip();
/* find attribute */
Attribute *attr_mP =
mesh->curve_attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
@@ -779,10 +779,8 @@ static void ExportHairCurveSegmentsMotion(Scene *scene,
Mesh *mesh, BL::HairSyst
for (; b_step_iter.valid(); b_step_iter.next()) {
if(i < mesh->curve_keys.size()) {
- float time = 0.0f; // XXX
-
- bool closetip = true; // XXX
- float radius = shaperadius(shape, root_radius,
tip_radius, time);
+ float param = b_step_iter.parameter();
+ float radius = shaperadius(shape, root_width,
tip_width, param);
if (closetip && b_step_iter.index() ==
b_step_iter.totsteps() - 1)
radius = 0.0f;
diff --git a/source/blender/blenkernel/BKE_hair.h
b/source/blender/blenkernel/BKE_hair.h
index 71f8712..c462ee5 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -97,5 +97,6 @@ bool BKE_hair_render_iter_valid_step(struct
HairRenderIterator *iter);
void BKE_hair_render_iter_next_hair(struct HairRenderIterator *iter);
void BKE_hair_render_iter_next_step(struct HairRenderIterator *iter);
void BKE_hair_render_iter_get(struct HairRenderIterator *iter, float co[3],
float *radius);
+float BKE_hair_render_iter_param(struct HairRenderIterator *iter);
#endif
diff --git a/source/blender/blenkernel/intern/hair.c
b/source/blender/blenkernel/intern/hair.c
index 44568bd..8425417 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -479,3 +479,8 @@ void BKE_hair_render_iter_get(HairRenderIterator *iter,
float r_co[3], float *r_
if (r_co) copy_v3_v3(r_co, co);
if (r_radius) *r_radius = radius;
}
+
+float BKE_hair_render_iter_param(HairRenderIterator *iter)
+{
+ return iter->totsteps > 1 ? (float)iter->step /
(float)(iter->totsteps-1) : 0.0f;
+}
diff --git a/source/blender/makesrna/intern/rna_hair.c
b/source/blender/makesrna/intern/rna_hair.c
index 1b97ee4..16a3916 100644
--- a/source/blender/makesrna/intern/rna_hair.c
+++ b/source/blender/makesrna/intern/rna_hair.c
@@ -160,6 +160,11 @@ static void
rna_HairRenderStepIterator_eval(HairRenderIterator *iter, float co[3
BKE_hair_render_iter_get(iter, co, radius);
}
+static float rna_HairRenderStepIterator_parameter(HairRenderIterator *iter)
+{
+ return BKE_hair_render_iter_param(iter);
+}
+
#else
static void rna_def_hair_params(BlenderRNA *brna)
@@ -430,6 +435,11 @@ static void rna_def_hair_render_step_iterator(BlenderRNA
*brna)
RNA_def_function_output(func, parm);
parm = RNA_def_float(func, "radius", 0.0f, -FLT_MAX, FLT_MAX, "Radius",
"Thickness of the hair wisp", -FLT_MAX, FLT_MAX);
RNA_def_function_output(func, parm);
+
+ func = RNA_def_function(srna, "parameter",
"rna_HairRenderStepIterator_parameter");
+ RNA_def_function_ui_description(func, "Parameter along the hair curve");
+ parm = RNA_def_float(func, "result", 0.0f, 0.0f, 1.0f, "Result", "",
0.0f, 1.0f);
+ RNA_def_function_return(func, parm);
}
void RNA_def_hair(BlenderRNA *brna)
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs