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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to