[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