[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22758] branches/blender2.5/blender: * Volume Rendering

Matt Ebb matt at mke3.net
Tue Aug 25 08:30:09 CEST 2009


Revision: 22758
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22758
Author:   broken
Date:     2009-08-25 08:30:09 +0200 (Tue, 25 Aug 2009)

Log Message:
-----------
* Volume Rendering

Finally in 2.5 branch :)

Still things to do, but will continue working in here. I won't bother
repeating the commit messages from the last year or so, however I've 
written up some technical docs to help Ton/Brecht/etc review and find 
their way around the code:
http://wiki.blender.org/index.php/User:Broken/VolumeRenderingDev

That above page has some known issues and todos listed, but I'm still 
interested in bug reports.

Credits for this code:
* Matt Ebb 
(with thanks to Red Cartel/ProMotion Studios)
* Raul Fernandez Hernandez (Farsthary) for patches:
  o Light cache based multiple scattering approximation
  o Initial voxeldata texture code
  o Depth Cutoff threshold 
* Andre Susano Pinto for BVH range lookup addition
* Trilinear interpolation adapted from pbrt
* Tricubic interpolation from libtricubic 

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_material.py
    branches/blender2.5/blender/release/ui/buttons_texture.py
    branches/blender2.5/blender/source/blender/blenkernel/BKE_texture.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/material.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/texture.c
    branches/blender2.5/blender/source/blender/blenlib/BLI_arithb.h
    branches/blender2.5/blender/source/blender/blenlib/BLI_kdopbvh.h
    branches/blender2.5/blender/source/blender/blenlib/intern/BLI_kdopbvh.c
    branches/blender2.5/blender/source/blender/blenlib/intern/arithb.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_material_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_texture_types.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_texture.c
    branches/blender2.5/blender/source/blender/render/CMakeLists.txt
    branches/blender2.5/blender/source/blender/render/SConscript
    branches/blender2.5/blender/source/blender/render/extern/include/RE_shader_ext.h
    branches/blender2.5/blender/source/blender/render/intern/include/render_types.h
    branches/blender2.5/blender/source/blender/render/intern/include/shading.h
    branches/blender2.5/blender/source/blender/render/intern/include/texture.h
    branches/blender2.5/blender/source/blender/render/intern/source/convertblender.c
    branches/blender2.5/blender/source/blender/render/intern/source/occlusion.c
    branches/blender2.5/blender/source/blender/render/intern/source/rayshade.c
    branches/blender2.5/blender/source/blender/render/intern/source/raytrace.c
    branches/blender2.5/blender/source/blender/render/intern/source/shadeinput.c
    branches/blender2.5/blender/source/blender/render/intern/source/shadeoutput.c
    branches/blender2.5/blender/source/blender/render/intern/source/texture.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/blenlib/BLI_voxel.h
    branches/blender2.5/blender/source/blender/blenlib/intern/voxel.c
    branches/blender2.5/blender/source/blender/render/intern/include/pointdensity.h
    branches/blender2.5/blender/source/blender/render/intern/include/volume_precache.h
    branches/blender2.5/blender/source/blender/render/intern/include/volumetric.h
    branches/blender2.5/blender/source/blender/render/intern/include/voxeldata.h
    branches/blender2.5/blender/source/blender/render/intern/source/pointdensity.c
    branches/blender2.5/blender/source/blender/render/intern/source/volume_precache.c
    branches/blender2.5/blender/source/blender/render/intern/source/volumetric.c
    branches/blender2.5/blender/source/blender/render/intern/source/voxeldata.c

Modified: branches/blender2.5/blender/release/ui/buttons_material.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_material.py	2009-08-25 04:32:40 UTC (rev 22757)
+++ branches/blender2.5/blender/release/ui/buttons_material.py	2009-08-25 06:30:09 UTC (rev 22758)
@@ -73,6 +73,9 @@
 	__label__ = "Shading"
 	COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
 
+	def poll(self, context):
+		return (context.material.type in ('SURFACE', 'WIRE', 'HALO'))
+
 	def draw(self, context):
 		layout = self.layout
 		
@@ -83,7 +86,7 @@
 
 		if mat:
 
-			if mat.type in ('SURFACE', 'WIRE', 'VOLUME'):
+			if mat.type in ('SURFACE', 'WIRE'):
 				split = layout.split()
 	
 				col = split.column()
@@ -113,6 +116,9 @@
 		mat = context.material
 		return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
 	
+	def poll(self, context):
+		return context.material.type in ('SURFACE', 'WIRE', 'HALO')
+	
 	def draw(self, context):
 		layout = self.layout
 		
@@ -170,6 +176,9 @@
 	__label__ = "Options"
 	COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
 
+	def poll(self, context):
+		return (context.material.type in ('SURFACE', 'WIRE', 'HALO'))
+
 	def draw(self, context):
 		layout = self.layout
 		
@@ -204,6 +213,9 @@
 	__label__ = "Shadow"
 	__default_closed__ = True
 	COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
+	
+	def poll(self, context):
+		return context.material.type in ('SURFACE', 'WIRE')
 
 	def draw(self, context):
 		layout = self.layout
@@ -236,7 +248,7 @@
 
 	def poll(self, context):
 		mat = context.material
-		return mat and (mat.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+		return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
 
 	def draw(self, context):
 		layout = self.layout
@@ -290,7 +302,7 @@
 
 	def poll(self, context):
 		mat = context.material
-		return mat and (mat.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+		return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
 
 	def draw(self, context):
 		layout = self.layout
@@ -499,7 +511,126 @@
 			sub.active = rayt.gloss < 1
 			sub.itemR(rayt, "gloss_threshold", text="Threshold")
 			sub.itemR(rayt, "gloss_samples", text="Samples")
+
+class MATERIAL_PT_volume_shading(MaterialButtonsPanel):
+	__label__ = "Shading"
+	__default_closed__ = False
+	COMPAT_ENGINES = set(['BLENDER_RENDER'])
+	
+	def poll(self, context):
+		return (context.material.type == 'VOLUME') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+	
+	def draw(self, context):
+		layout = self.layout
+
+		mat = context.material
+		vol = context.material.volume
 		
+		split = layout.split()
+		
+		row = split.row()
+		row.itemR(vol, "density")
+		row.itemR(vol, "scattering")
+		
+		split = layout.split()
+		col = split.column()
+		col.itemR(vol, "absorption")
+		col.itemR(vol, "absorption_color", text="")
+		
+				
+		col = split.column()
+		col.itemR(vol, "emission")
+		col.itemR(vol, "emission_color", text="")
+		
+		
+
+class MATERIAL_PT_volume_scattering(MaterialButtonsPanel):
+	__label__ = "Scattering"
+	__default_closed__ = False
+	COMPAT_ENGINES = set(['BLENDER_RENDER'])
+	
+	def poll(self, context):
+		return (context.material.type == 'VOLUME') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+	
+	def draw(self, context):
+		layout = self.layout
+		
+		mat = context.material
+		vol = context.material.volume
+		
+		split = layout.split()
+		
+		col = split.column()
+		col.itemR(vol, "scattering_mode", text="")
+		if vol.scattering_mode == 'SINGLE_SCATTERING':
+			col.itemR(vol, "light_cache")
+			sub = col.column()
+			sub.active = vol.light_cache
+			sub.itemR(vol, "cache_resolution")
+		elif vol.scattering_mode in ('MULTIPLE_SCATTERING', 'SINGLE_PLUS_MULTIPLE_SCATTERING'):
+			col.itemR(vol, "cache_resolution")
+			
+			col = col.column(align=True)
+			col.itemR(vol, "ms_diffusion")
+			col.itemR(vol, "ms_spread")
+			col.itemR(vol, "ms_intensity")
+		
+		col = split.column()
+		# col.itemL(text="Anisotropic Scattering:")
+		col.itemR(vol, "phase_function", text="")
+		if vol.phase_function in ('SCHLICK', 'HENYEY-GREENSTEIN'):
+			col.itemR(vol, "asymmetry")
+
+class MATERIAL_PT_volume_transp(MaterialButtonsPanel):
+	__label__= "Transparency"
+	COMPAT_ENGINES = set(['BLENDER_RENDER'])
+		
+	def poll(self, context):
+		mat = context.material
+		return mat and (mat.type == 'VOLUME') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+
+	def draw_header(self, context):
+		layout = self.layout
+
+	def draw(self, context):
+		layout = self.layout
+		
+		mat = context.material
+		rayt = context.material.raytrace_transparency
+		
+		row= layout.row()
+		row.itemR(mat, "transparency_method", expand=True)
+		row.active = mat.transparency and (not mat.shadeless)
+		
+class MATERIAL_PT_volume_integration(MaterialButtonsPanel):
+	__label__ = "Integration"
+	__default_closed__ = False
+	COMPAT_ENGINES = set(['BLENDER_RENDER'])
+	
+	def poll(self, context):
+		return (context.material.type == 'VOLUME') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+	
+	def draw(self, context):
+		layout = self.layout
+		
+		mat = context.material
+		vol = context.material.volume
+		
+		split = layout.split()
+		
+		col = split.column()
+		col.itemL(text="Step Calculation:")
+		col.itemR(vol, "step_calculation", text="")
+		col = col.column(align=True)
+		col.itemR(vol, "step_size")
+		col.itemR(vol, "shading_step_size")
+		
+		col = split.column()
+		col.itemL()
+		col.itemR(vol, "depth_cutoff")
+		col.itemR(vol, "density_scale")
+		
+		
 class MATERIAL_PT_halo(MaterialButtonsPanel):
 	__label__= "Halo"
 	COMPAT_ENGINES = set(['BLENDER_RENDER'])
@@ -587,6 +718,10 @@
 bpy.types.register(MATERIAL_PT_transp)
 bpy.types.register(MATERIAL_PT_mirror)
 bpy.types.register(MATERIAL_PT_sss)
+bpy.types.register(MATERIAL_PT_volume_shading)
+bpy.types.register(MATERIAL_PT_volume_scattering)
+bpy.types.register(MATERIAL_PT_volume_transp)
+bpy.types.register(MATERIAL_PT_volume_integration)
 bpy.types.register(MATERIAL_PT_halo)
 bpy.types.register(MATERIAL_PT_flare)
 bpy.types.register(MATERIAL_PT_physics)

Modified: branches/blender2.5/blender/release/ui/buttons_texture.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_texture.py	2009-08-25 04:32:40 UTC (rev 22757)
+++ branches/blender2.5/blender/release/ui/buttons_texture.py	2009-08-25 06:30:09 UTC (rev 22758)
@@ -210,35 +210,51 @@
 			sub.itemR(tex, factor, text=name, slider=True)
 		
 		if ma:
-			split = layout.split()
-			
-			col = split.column()
-			col.itemL(text="Diffuse:")
-			factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity")
-			factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color")
-			factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha")
-			factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency")
+			if ma.type in ['SURFACE', 'HALO', 'WIRE']:
+				split = layout.split()
+				
+				col = split.column()
+				col.itemL(text="Diffuse:")
+				factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity")
+				factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color")
+				factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha")
+				factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency")
 
-			col.itemL(text="Specular:")
-			factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity")
-			factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color")
-			factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness")
+				col.itemL(text="Specular:")
+				factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity")
+				factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color")
+				factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness")
 
-			col = split.column()
-			col.itemL(text="Shading:")
-			factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient")
-			factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
-			factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
-			factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
+				col = split.column()
+				col.itemL(text="Shading:")
+				factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient")
+				factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
+				factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
+				factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
 
-			col.itemL(text="Geometry:")
-			factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal")
-			factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp")
-			factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace")
+				col.itemL(text="Geometry:")
+				factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal")
+				factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp")
+				factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace")
 
-			#sub = col.column()
-			#sub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
-			#sub.itemR(tex, "default_value", text="Amount", slider=True)
+				#sub = col.column()
+				#sub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
+				#sub.itemR(tex, "default_value", text="Amount", slider=True)
+			elif ma.type == 'VOLUME':
+				split = layout.split()
+				
+				col = split.column()
+				factor_but(col, tex.map_density, "map_density", "density_factor", "Density")
+				factor_but(col, tex.map_emission, "map_emission", "emission_factor", "Emission")
+				factor_but(col, tex.map_absorption, "map_absorption", "absorption_factor", "Absorption")

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list