[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