[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53373] trunk/blender: New feature

Stuart Broadfoot gbroadfoot at hotmail.com
Fri Dec 28 15:21:30 CET 2012


Revision: 53373
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53373
Author:   broadstu
Date:     2012-12-28 14:21:30 +0000 (Fri, 28 Dec 2012)
Log Message:
-----------
New feature

Patch [#33445] - Experimental Cycles Hair Rendering (CPU only)

This patch allows hair data to be exported to cycles and introduces a new line segment primitive to render with.

The UI appears under the particle tab and there is a new hair info node available.

It is only available under the experimental feature set and for cpu rendering.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/CMakeLists.txt
    trunk/blender/intern/cycles/blender/addon/properties.py
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/blender/blender_mesh.cpp
    trunk/blender/intern/cycles/blender/blender_object.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/blender/blender_sync.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/intern/cycles/bvh/bvh.cpp
    trunk/blender/intern/cycles/bvh/bvh.h
    trunk/blender/intern/cycles/bvh/bvh_build.cpp
    trunk/blender/intern/cycles/bvh/bvh_build.h
    trunk/blender/intern/cycles/bvh/bvh_params.h
    trunk/blender/intern/cycles/bvh/bvh_sort.cpp
    trunk/blender/intern/cycles/bvh/bvh_split.cpp
    trunk/blender/intern/cycles/kernel/kernel_bvh.h
    trunk/blender/intern/cycles/kernel/kernel_emission.h
    trunk/blender/intern/cycles/kernel/kernel_light.h
    trunk/blender/intern/cycles/kernel/kernel_object.h
    trunk/blender/intern/cycles/kernel/kernel_shader.h
    trunk/blender/intern/cycles/kernel/kernel_textures.h
    trunk/blender/intern/cycles/kernel/kernel_triangle.h
    trunk/blender/intern/cycles/kernel/kernel_types.h
    trunk/blender/intern/cycles/kernel/svm/svm.h
    trunk/blender/intern/cycles/kernel/svm/svm_attribute.h
    trunk/blender/intern/cycles/kernel/svm/svm_geometry.h
    trunk/blender/intern/cycles/kernel/svm/svm_tex_coord.h
    trunk/blender/intern/cycles/kernel/svm/svm_types.h
    trunk/blender/intern/cycles/render/CMakeLists.txt
    trunk/blender/intern/cycles/render/light.cpp
    trunk/blender/intern/cycles/render/mesh.cpp
    trunk/blender/intern/cycles/render/mesh.h
    trunk/blender/intern/cycles/render/nodes.cpp
    trunk/blender/intern/cycles/render/nodes.h
    trunk/blender/intern/cycles/render/object.cpp
    trunk/blender/intern/cycles/render/object.h
    trunk/blender/intern/cycles/render/scene.cpp
    trunk/blender/intern/cycles/render/scene.h
    trunk/blender/intern/cycles/util/util_boundbox.h
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree_types.h
    trunk/blender/source/blender/makesrna/intern/rna_particle.c
    trunk/blender/source/blender/nodes/CMakeLists.txt
    trunk/blender/source/blender/nodes/NOD_shader.h

Added Paths:
-----------
    trunk/blender/intern/cycles/blender/blender_curves.cpp
    trunk/blender/intern/cycles/render/curves.cpp
    trunk/blender/intern/cycles/render/curves.h
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_hair_info.c

Modified: trunk/blender/intern/cycles/blender/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/blender/CMakeLists.txt	2012-12-28 14:19:05 UTC (rev 53372)
+++ trunk/blender/intern/cycles/blender/CMakeLists.txt	2012-12-28 14:21:30 UTC (rev 53373)
@@ -24,6 +24,7 @@
 	blender_mesh.cpp
 	blender_object.cpp
 	blender_particles.cpp
+	blender_curves.cpp
 	blender_python.cpp
 	blender_session.cpp
 	blender_shader.cpp

Modified: trunk/blender/intern/cycles/blender/addon/properties.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/properties.py	2012-12-28 14:19:05 UTC (rev 53372)
+++ trunk/blender/intern/cycles/blender/addon/properties.py	2012-12-28 14:21:30 UTC (rev 53373)
@@ -63,6 +63,38 @@
     ('FISHEYE_EQUISOLID', "Fisheye Equisolid",
                           "Similar to most fisheye modern lens, takes sensor dimensions into consideration"),
     )
+    
+enum_curve_presets = (
+    ('CUSTOM', "Custom", "Set general parameters"),
+    ('TANGENT_SHADING', "Tangent Normal", "Use planar geometry and tangent normals"),
+    ('TRUE_NORMAL', "True Normal", "Use true normals (good for thin strands)"),
+    ('ACCURATE_PRESET', "Accurate", "Use best settings (suitable for glass materials)"),
+    )
+    
+enum_curve_primitives = (
+    ('TRIANGLES', "Triangles", "create triangle geometry around strands"),
+    ('LINE_SEGMENTS', "Line Segments", "use line segment primitives"),
+    ('CURVE_SEGMENTS', "?Curve Segments?", "use curve segment primitives (not implemented)"),
+    )
+        
+enum_triangle_curves = (
+	('CAMERA', "Planes", "create individual triangles forming planes that face camera"),
+    ('RIBBONS', "Ribbons", "create individual triangles forming ribbon"),
+    ('TESSELATED', "Tesselated", "create mesh surrounding each strand"),
+    )
+    
+enum_line_curves = (
+    ('ACCURATE', "Accurate", "always take into consideration strand width for intersections"),
+    ('QT_CORRECTED', "corrected", "ignores width for initial intersection and corrects later"),
+    ('ENDCORRECTED', "correct found", "ignores width for all intersections and only corrects closest"),
+    ('QT_UNCORRECTED', "uncorrected", "calculates intersection without considering width"),
+    )
+    
+enum_curves_interpolation = (
+    ('LINEAR', "Linear interpolation", "uses Linear interpolation between segments"),
+    ('CARDINAL', "Cardinal interpolation", "uses CARDINAL interpolation between segments"),
+    ('BSPLINE', "b-spline interpolation", "uses b-spline interpolation between segments"),
+    )
 
 class CyclesRenderSettings(bpy.types.PropertyGroup):
     @classmethod
@@ -573,7 +605,159 @@
         del bpy.types.Curve.cycles
         del bpy.types.MetaBall.cycles
 
+class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
+    @classmethod
+    def register(cls):
+        bpy.types.Scene.cycles_curves = PointerProperty(
+                name="Cycles Hair Rendering Settings",
+                description="Cycles hair rendering settings",
+                type=cls,
+                )
+        cls.preset = EnumProperty(
+                name="Mode",
+                description="Hair rendering mode",
+                items=enum_curve_presets,
+                default='TRUE_NORMAL',
+                )
+        cls.primitive = EnumProperty(
+                name="Primitive",
+                description="Type of primitive used for hair rendering",
+                items=enum_curve_primitives,
+                default='LINE_SEGMENTS',
+                )
+        cls.triangle_method = EnumProperty(
+                name="Mesh Geometry",
+                description="Method for creating triangle geometry",
+                items=enum_triangle_curves,
+                default='CAMERA',
+                )
+        cls.line_method = EnumProperty(
+                name="Intersection Method",
+                description="Method for line segment intersection",
+                items=enum_line_curves,
+                default='ACCURATE',
+                )
+        cls.interpolation = EnumProperty(
+                name="Interpolation",
+                description="Interpolation method",
+                items=enum_curves_interpolation,
+                default='BSPLINE',
+                )
+        cls.use_backfacing = BoolProperty(
+                name="Check back-faces",
+                description="Tests back-faces of strands",
+                default=False,
+                )
+        cls.use_encasing = BoolProperty(
+                name="Exclude encasing",
+                description="Ignores strands encasing a ray's initial location",
+                default=True,
+                )
+        cls.use_tangent_normal_geometry = BoolProperty(
+                name="Tangent normal geometry",
+                description="Uses the tangent normal for actual normal",
+                default=False,
+                )
+        cls.use_tangent_normal = BoolProperty(
+                name="Tangent normal default",
+                description="Uses the tangent normal for all normals",
+                default=False,
+                )
+        cls.use_tangent_normal_correction = BoolProperty(
+                name="strand slope correction",
+                description="Corrects the tangent normal for the strands slope",
+                default=False,
+                )
+        cls.use_cache = BoolProperty(
+                name="Export Cached data",
+                description="Export cached data with child strands (uses 'draw step' for subdivisions)",
+                default=True,
+                )
+        cls.use_parents = BoolProperty(
+                name="Use parent strands",
+                description="Use parents with children",
+                default=False,
+                )
+        cls.use_smooth = BoolProperty(
+                name="Smooth Strands",
+                description="Use vertex normals",
+                default=True,
+                )
+        cls.use_joined = BoolProperty(
+                name="Join",
+                description="Fills gaps between segments (requires more memory)",
+                default=False,
+                )
+        cls.use_curves = BoolProperty(
+                name="Use Cycles Hair Rendering",
+                description="Activate cycles hair rendering for particle system",
+                default=True,
+                )        
+        cls.segments = IntProperty(
+                name="Segments",
+                description="Number of segments between path keys (Note that this combines with the `draw step' value)",
+                min=1, max=64,
+                default=1,
+                )
+        cls.resolution = IntProperty(
+                name="Resolution",
+                description="Resolution of generated mesh",
+                min=3, max=64,
+                default=3,
+                )
+        cls.normalmix = FloatProperty(
+                name="Normal mix",
+                description="Scale factor for tangent normal removal (zero gives ray normal)",
+                min=0, max=2.0,
+                default=1,
+                )
+        cls.encasing_ratio = FloatProperty(
+                name="Encasing ratio",
+                description="Scale factor for encasing strand width",
+                min=0, max=100.0,
+                default=1.01,
+                )
 
+    @classmethod
+    def unregister(cls):
+        del bpy.types.Scene.cycles_curves
+
+class CyclesCurveSettings(bpy.types.PropertyGroup):
+    @classmethod
+    def register(cls):
+        bpy.types.ParticleSettings.cycles = PointerProperty(
+                name="Cycles Hair Settings",
+                description="Cycles hair settings",
+                type=cls,
+                )
+        cls.root_width = FloatProperty(
+                name="Root Size Multiplier",
+                description="Multiplier of particle size for the strand's width at root",
+                min=0.0, max=1000.0,
+                default=1.0,
+                )
+        cls.tip_width = FloatProperty(
+                name="Tip Size Multiplier",
+                description="Multiplier of particle size for the strand's width at tip",
+                min=0.0, max=1000.0,
+                default=0.0,
+                )
+        cls.shape = FloatProperty(
+                name="Strand Shape",
+                description="Strand shape parameter",
+                min=-1.0, max=1.0,
+                default=0.0,
+                )
+        cls.use_closetip = BoolProperty(
+                name="Close tip",
+                description="Sets tip radius to zero",
+                default=True,
+                )                
+
+    @classmethod
+    def unregister(cls):
+        del bpy.types.ParticleSettings.cycles
+
 def register():
     bpy.utils.register_class(CyclesRenderSettings)
     bpy.utils.register_class(CyclesCameraSettings)
@@ -582,6 +766,8 @@
     bpy.utils.register_class(CyclesWorldSettings)
     bpy.utils.register_class(CyclesVisibilitySettings)
     bpy.utils.register_class(CyclesMeshSettings)
+    bpy.utils.register_class(CyclesCurveRenderSettings)
+    bpy.utils.register_class(CyclesCurveSettings)
 
 
 def unregister():
@@ -592,3 +778,5 @@
     bpy.utils.unregister_class(CyclesWorldSettings)
     bpy.utils.unregister_class(CyclesMeshSettings)
     bpy.utils.unregister_class(CyclesVisibilitySettings)
+    bpy.utils.unregister_class(CyclesCurveRenderSettings)
+    bpy.utils.unregister_class(CyclesCurveSettings)

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2012-12-28 14:19:05 UTC (rev 53372)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2012-12-28 14:21:30 UTC (rev 53373)
@@ -944,8 +944,96 @@
         else:
             slot = part.texture_slots[part.active_texture_index]
             layout.template_ID(slot, "texture", new="texture.new")
+            
+class CyclesParticle_PT_CurveSettings(CyclesButtonsPanel, Panel):
+    bl_label = "Cycles Hair Settings"
+    bl_context = "particle"
+    
+    @classmethod
+    def poll(cls, context):
+        psys = context.particle_system
+        device_type = context.user_preferences.system.compute_device_type

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list