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

Reply via email to