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:
authorThomas Dinges <blender@dingto.org>2012-12-29 05:57:32 +0400
committerThomas Dinges <blender@dingto.org>2012-12-29 05:57:32 +0400
commit6b05c887d3395e6377a24e0fdac6500a61d594c7 (patch)
treee1fd7e876120a316959a601b7648ced97cb7b4be /intern/cycles/kernel/osl/osl_services.cpp
parent4a427d8e0dad2e252fedf55c5941d5877e139b09 (diff)
Cycles Hair:
* Implemented the Hair Info Node for OSL.
Diffstat (limited to 'intern/cycles/kernel/osl/osl_services.cpp')
-rw-r--r--intern/cycles/kernel/osl/osl_services.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 498d10f385b..64c4d109452 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -74,6 +74,12 @@ ustring OSLRenderServices::u_geom_numpolyvertices("geom:numpolyvertices");
ustring OSLRenderServices::u_geom_trianglevertices("geom:trianglevertices");
ustring OSLRenderServices::u_geom_polyvertices("geom:polyvertices");
ustring OSLRenderServices::u_geom_name("geom:name");
+#ifdef __HAIR__
+ustring OSLRenderServices::u_curve_is_strand("curve:is_strand");
+ustring OSLRenderServices::u_curve_intercept("curve:intercept");
+ustring OSLRenderServices::u_curve_thickness("curve:thickness");
+ustring OSLRenderServices::u_curve_tangent_normal("curve:tangent_normal");
+#endif
ustring OSLRenderServices::u_path_ray_length("path:ray_length");
ustring OSLRenderServices::u_trace("trace");
ustring OSLRenderServices::u_hit("hit");
@@ -593,6 +599,8 @@ bool OSLRenderServices::get_object_standard_attribute(KernelGlobals *kg, ShaderD
float3 f = particle_angular_velocity(kg, particle_id);
return set_attribute_float3(f, type, derivatives, val);
}
+
+ /* Geometry Attributes */
else if (name == u_geom_numpolyvertices) {
return set_attribute_int(3, type, derivatives, val);
}
@@ -612,6 +620,26 @@ bool OSLRenderServices::get_object_standard_attribute(KernelGlobals *kg, ShaderD
ustring object_name = kg->osl->object_names[sd->object];
return set_attribute_string(object_name, type, derivatives, val);
}
+
+#ifdef __HAIR__
+ /* Hair Attributes */
+ else if (name == u_curve_is_strand) {
+ float f = !(sd->curve_seg == ~0);
+ return set_attribute_float(f, type, derivatives, val);
+ }
+ else if (name == u_curve_intercept) {
+ float f = intercept(kg, sd->curve_seg, sd->prim, sd->u);
+ return set_attribute_float(f, type, derivatives, val);
+ }
+ else if (name == u_curve_thickness) {
+ float f = 2 * hair_radius(kg, sd->curve_seg, sd->u);
+ return set_attribute_float(f, type, derivatives, val);
+ }
+ else if (name == u_curve_tangent_normal) {
+ float3 f = hair_tangent_normal(kg, sd);
+ return set_attribute_float3(f, type, derivatives, val);
+ }
+#endif
else
return false;
}