diff options
author | Thomas Dinges <blender@dingto.org> | 2012-12-29 05:57:32 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2012-12-29 05:57:32 +0400 |
commit | 6b05c887d3395e6377a24e0fdac6500a61d594c7 (patch) | |
tree | e1fd7e876120a316959a601b7648ced97cb7b4be /intern/cycles/kernel/osl/osl_services.cpp | |
parent | 4a427d8e0dad2e252fedf55c5941d5877e139b09 (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.cpp | 28 |
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; } |