Skip to content
Snippets Groups Projects
Commit c3828e7d authored by Maurice Raybaud's avatar Maurice Raybaud
Browse files

first commit ever!

parent 52551aa2
No related branches found
No related tags found
No related merge requests found
......@@ -17,31 +17,30 @@
# ##### END GPL LICENSE BLOCK #####
bl_addon_info = {
"name": "PovRay",
"author": "Campbell Barton",
"version": (0,1),
"name": "PovRay 3.7",
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud",
"version": (0, 0, 3),
"blender": (2, 5, 4),
"api": 31667,
"location": "Info Header (engine dropdown)",
"description": "Basic povray integration for blender",
"warning": "",
"description": "Basic povray 3.7 integration for blender",
"warning": "both povray 3.7 and this script are beta",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
"Scripts/Render/PovRay",
"tracker_url": "https://projects.blender.org/tracker/index.php?"\
"func=detail&aid=23145&group_id=153&atid=469",
"func=detail&atid=468&aid=22717&group_id=153",
"category": "Render"}
if "bpy" in locals():
reload(render)
reload(ui)
reload(render)
else:
import bpy
from bpy.props import *
from render_povray import render
from render_povray import ui
from render_povray_37 import ui
from render_povray_37 import render
def register():
Scene = bpy.types.Scene
......@@ -106,11 +105,88 @@ def register():
name="Recursion Limit", description="how many recursion levels are used to calculate the diffuse inter-reflection",
min=1, max=20, default=3)
########################################MR######################################
Mat = bpy.types.Material
Mat.pov_irid_enable = BoolProperty(
name="Enable Iridescence",
description="Newton's thin film interference (like an oil slick on a puddle of water or the rainbow hues of a soap bubble.)",
default=False)
Mat.pov_mirror_use_IOR = BoolProperty(
name="Correct Reflection",
description="Use same IOR as raytrace transparency to calculate mirror reflections. More physically correct",
default=False)
Mat.pov_mirror_metallic = BoolProperty(
name="Metallic Reflection",
description="mirror reflections get colored as diffuse (for metallic materials)",
default=False)
Mat.pov_conserve_energy = BoolProperty(
name="Conserve Energy",
description="Light transmitted is more correctly reduced by mirror reflections, also the sum of diffuse and translucency gets reduced below one ",
default=True)
Mat.pov_irid_amount = FloatProperty(
name="amount",
description="Contribution of the iridescence effect to the overall surface color. As a rule of thumb keep to around 0.25 (25% contribution) or less, but experiment. If the surface is coming out too white, try lowering the diffuse and possibly the ambient values of the surface.",
min=0.0, max=1.0, soft_min=0.01, soft_max=1.0, default=0.25)
Mat.pov_irid_thickness = FloatProperty(
name="thickness",
description="A very thin film will have a high frequency of color changes while a thick film will have large areas of color.",
min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1)
Mat.pov_irid_turbulence = FloatProperty(
name="turbulence",
description="This parameter varies the thickness.",
min=0.0, max=10.0, soft_min=0.000, soft_max=1.0, default=0)
Mat.pov_caustics_enable = BoolProperty(
name="Caustics",
description="use only fake refractive caustics (default) or photon based reflective/refractive caustics",
default=True)
Mat.pov_fake_caustics = BoolProperty(
name="Fake Caustics",
description="use only (Fast) fake refractive caustics",
default=True)
Mat.pov_fake_caustics_power = FloatProperty(
name="Fake caustics power",
description="Values typically range from 0.0 to 1.0 or higher. Zero is no caustics. Low, non-zero values give broad hot-spots while higher values give tighter, smaller simulated focal points",
min=0.00, max=10.0, soft_min=0.00, soft_max=1.10, default=0.1)
Mat.pov_photons_refraction = BoolProperty(
name="Refractive Photon Caustics",
description="more physically correct",
default=False)
Mat.pov_photons_dispersion = FloatProperty(
name="chromatic dispersion",
description="Light passing through will be separated according to wavelength. This ratio of refractive indices for violet to red controls how much the colors are spread out 1 = no dispersion, good values are 1.01 to 1.1",
min=1.00, max=10.0, soft_min=1.00, soft_max=1.10, default=1.00)
Mat.pov_photons_reflection = BoolProperty(
name="Reflective Photon Caustics",
description="Use this to make your Sauron's ring ;-P",
default=False)
Mat.pov_refraction_type = EnumProperty(
items=[("0","None","use only reflective caustics"),
("1","Fake Caustics","use fake caustics"),
("2","Photons Caustics","use photons for refractive caustics"),
],
name="Refractive",
description="use fake caustics (fast) or true photons for refractive Caustics",
default="1")#ui.py has to be loaded before render.py with this.
######################################EndMR#####################################
def unregister():
import bpy
Scene = bpy.types.Scene
Mat = bpy.types.Material#MR
del Scene.pov_radio_enable
del Scene.pov_radio_display_advanced
del Scene.pov_radio_adc_bailout
......@@ -125,7 +201,20 @@ def unregister():
del Scene.pov_radio_nearest_count
del Scene.pov_radio_normal
del Scene.pov_radio_recursion_limit
del Mat.pov_irid_enable#MR
del Mat.pov_mirror_use_IOR#MR
del Mat.pov_mirror_metallic#MR
del Mat.pov_conserve_energy#MR
del Mat.pov_irid_amount#MR
del Mat.pov_irid_thickness#MR
del Mat.pov_irid_turbulence#MR
del Mat.pov_caustics_enable#MR
del Mat.pov_fake_caustics#MR
del Mat.pov_fake_caustics_power#MR
del Mat.pov_photons_refraction#MR
del Mat.pov_photons_dispersion#MR
del Mat.pov_photons_reflection#MR
del Mat.pov_refraction_type#MR
if __name__ == "__main__":
register()
This diff is collapsed.
......@@ -20,18 +20,18 @@ import bpy
# Use some of the existing buttons.
import properties_render
properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_render.RENDER_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_render.RENDER_PT_render.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_render.RENDER_PT_antialiasing.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_render.RENDER_PT_output.COMPAT_ENGINES.add('POVRAY_37_RENDER')
del properties_render
# Use only a subset of the world panels
import properties_world
properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_RENDER')
properties_world.WORLD_PT_preview.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_world.WORLD_PT_context_world.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_world.WORLD_PT_world.COMPAT_ENGINES.add('POVRAY_37_RENDER')
properties_world.WORLD_PT_mist.COMPAT_ENGINES.add('POVRAY_37_RENDER')
del properties_world
# Example of wrapping every class 'as is'
......@@ -39,7 +39,7 @@ import properties_material
for member in dir(properties_material):
subclass = getattr(properties_material, member)
try:
subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
subclass.COMPAT_ENGINES.add('POVRAY_37_RENDER')
except:
pass
del properties_material
......@@ -48,7 +48,7 @@ import properties_data_mesh
for member in dir(properties_data_mesh):
subclass = getattr(properties_data_mesh, member)
try:
subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
subclass.COMPAT_ENGINES.add('POVRAY_37_RENDER')
except:
pass
del properties_data_mesh
......@@ -57,7 +57,7 @@ import properties_texture
for member in dir(properties_texture):
subclass = getattr(properties_texture, member)
try:
subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
subclass.COMPAT_ENGINES.add('POVRAY_37_RENDER')
except:
pass
del properties_texture
......@@ -66,11 +66,20 @@ import properties_data_camera
for member in dir(properties_data_camera):
subclass = getattr(properties_data_camera, member)
try:
subclass.COMPAT_ENGINES.add('POVRAY_RENDER')
subclass.COMPAT_ENGINES.add('POVRAY_37_RENDER')
except:
pass
del properties_data_camera
import properties_data_lamp
for member in dir(properties_data_lamp):
subclass = getattr(properties_data_lamp, member)
try:
subclass.COMPAT_ENGINES.add('POVRAY_37_RENDER')
except:
pass
del properties_data_lamp
class RenderButtonsPanel():
......@@ -84,10 +93,154 @@ class RenderButtonsPanel():
rd = context.scene.render
return (rd.use_game_engine == False) and (rd.engine in cls.COMPAT_ENGINES)
class MaterialButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "material"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
def poll(cls, context):
mat = context.material
rd = context.scene.render
return (rd.use_game_engine == False) and (rd.engine in cls.COMPAT_ENGINES)
########################################MR######################################
class MATERIAL_PT_povray_mirrorIOR(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "IOR Mirror"
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
scene = context.material
self.layout.prop(scene, "pov_mirror_use_IOR", text="")
def draw(self, context):
layout = self.layout
mat = context.material
layout.active = mat.pov_mirror_use_IOR
if mat.pov_mirror_use_IOR:
split = layout.split()
col = split.column()
row = col.row()
row.alignment = 'CENTER'
row.label(text="The current Raytrace ")
row = col.row()
row.alignment = 'CENTER'
row.label(text="Transparency IOR is: "+str(mat.raytrace_transparency.ior))
class MATERIAL_PT_povray_metallic(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "metallic Mirror"
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
scene = context.material
self.layout.prop(scene, "pov_mirror_metallic", text="")
def draw(self, context):
layout = self.layout
mat = context.material
layout.active = mat.pov_mirror_metallic
class MATERIAL_PT_povray_conserve_energy(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "conserve energy"
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
mat = context.material
self.layout.prop(mat, "pov_conserve_energy", text="")
def draw(self, context):
layout = self.layout
mat = context.material
layout.active = mat.pov_conserve_energy
class MATERIAL_PT_povray_iridescence(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "iridescence"
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
mat = context.material
self.layout.prop(mat, "pov_irid_enable", text="")
def draw(self, context):
layout = self.layout
mat = context.material
layout.active = mat.pov_irid_enable
if mat.pov_irid_enable:
split = layout.split()
col = split.column()
col.prop(mat, "pov_irid_amount", slider=True)
col.prop(mat, "pov_irid_thickness", slider=True)
col.prop(mat, "pov_irid_turbulence", slider=True)
class MATERIAL_PT_povray_caustics(MaterialButtonsPanel, bpy.types.Panel):
bl_label = "Caustics"
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
mat = context.material
self.layout.prop(mat, "pov_caustics_enable", text="")
def draw(self, context):
layout = self.layout
mat = context.material
layout.active = mat.pov_caustics_enable
Radio = 1
if mat.pov_caustics_enable:
split = layout.split()
col = split.column()
col.prop(mat, "pov_refraction_type")
if mat.pov_refraction_type=="0":
mat.pov_fake_caustics = False
mat.pov_photons_refraction = False
mat.pov_photons_reflection = True
elif mat.pov_refraction_type=="1":
mat.pov_fake_caustics = True
mat.pov_photons_refraction = False
col.prop(mat, "pov_fake_caustics_power", slider=True)
elif mat.pov_refraction_type=="2":
mat.pov_fake_caustics = False
mat.pov_photons_refraction = True
col.prop(mat, "pov_photons_dispersion", slider=True)
col.prop(mat, "pov_photons_reflection")
## col.prop(mat, "pov_fake_caustics")
## if mat.pov_fake_caustics:
## col.prop(mat, "pov_fake_caustics_power", slider=True)
## mat.pov_photons_refraction=0
## else:
## col.prop(mat, "pov_photons_refraction")
## if mat.pov_photons_refraction:
## col.prop(mat, "pov_photons_dispersion", slider=True)
## Radio = 0
## mat.pov_fake_caustics=Radio
## col.prop(mat, "pov_photons_reflection")
####TODO : MAKE THIS A real RADIO BUTTON (using EnumProperty?)
######################################EndMR#####################################
class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Radiosity"
COMPAT_ENGINES = {'POVRAY_RENDER'}
COMPAT_ENGINES = {'POVRAY_37_RENDER'}
def draw_header(self, context):
scene = context.scene
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment