*added: first implementation of procedural textures

*fixed:packed textures
*fixed:library objects
This commit is contained in:
Maurice Raybaud 2014-02-27 22:53:01 +01:00
parent d030a694ef
commit 07d031412a
3 changed files with 1525 additions and 116 deletions

View File

@ -20,19 +20,17 @@
bl_info = {
"name": "POV-Ray 3.7",
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, "
"Constantin Rahn, Bastien Montagne",
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, Constantin Rahn, Bastien Montagne",
"version": (0, 0, 9),
"blender": (2, 57, 0),
"location": "Render > Engine > POV-Ray 3.7",
"description": "Basic POV-Ray 3.7 integration for blender",
"warning": "both POV-Ray 3.7 and this script are beta",
"warning": "this script is RC",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
"Scripts/Render/POV-Ray",
"Scripts/Render/POV-Ray",
"tracker_url": "https://developer.blender.org/T23145",
"category": "Render"}
if "bpy" in locals():
import imp
imp.reload(ui)
@ -43,6 +41,7 @@ else:
import bpy
from bpy.types import (AddonPreferences,
PropertyGroup,
Operator,
)
from bpy.props import (StringProperty,
BoolProperty,
@ -56,7 +55,8 @@ else:
from . import render
from . import update_files
def string_strip_hyphen(name):
return name.replace("-", "")
###############################################################################
# Scene POV properties.
@ -67,6 +67,10 @@ class RenderPovSettingsScene(PropertyGroup):
name="Enable Tempfiles",
description="Enable the OS-Tempfiles. Otherwise set the path where to save the files",
default=True)
pov_editor = BoolProperty(
name="POV-Ray editor",
description="Don't Close POV-Ray editor after rendering (Overriden by /EXIT command)",
default=False)
deletefiles_enable = BoolProperty(
name="Delete files",
description="Delete files after rendering. Doesn't work with the image",
@ -419,7 +423,452 @@ class RenderPovSettingsTexture(PropertyGroup):
# "it points at. pigment {} expected",
# default="")
tex_pattern_type = EnumProperty(
name="Texture_Type",
description="Choose between Blender or POV-Ray parameters to specify texture",
items= (('agate', 'Agate', '','PLUGIN', 0), ('aoi', 'Aoi', '', 'PLUGIN', 1),
('average', 'Average', '', 'PLUGIN', 2), ('boxed', 'Boxed', '', 'PLUGIN', 3),
('bozo', 'Bozo', '', 'PLUGIN', 4), ('bumps', 'Bumps', '', 'PLUGIN', 5),
('cells', 'Cells', '', 'PLUGIN', 6), ('crackle', 'Crackle', '', 'PLUGIN', 7),
('cubic', 'Cubic', '', 'PLUGIN', 8), ('cylindrical', 'Cylindrical', '', 'PLUGIN', 9),
('density_file', 'Density', '(.df3)', 'PLUGIN', 10),
('dents', 'Dents', '', 'PLUGIN', 11),
('fractal', 'Fractal', '', 'PLUGIN', 12),
('function', 'Function', '', 'PLUGIN', 13),
('gradient', 'Gradient', '', 'PLUGIN', 14), ('granite', 'Granite', '', 'PLUGIN', 15),
('image_pattern', 'Image pattern', '', 'PLUGIN', 16),
('leopard', 'Leopard', '', 'PLUGIN', 17),
('marble', 'Marble', '', 'PLUGIN', 18), ('onion', 'Onion', '', 'PLUGIN', 19),
('pigment_pattern', 'pigment pattern', '', 'PLUGIN', 20),
('planar', 'Planar', '', 'PLUGIN', 21), ('quilted', 'Quilted', '', 'PLUGIN', 22),
('radial', 'Radial', '', 'PLUGIN', 23), ('ripples', 'Ripples', '', 'PLUGIN', 24),
('slope', 'Slope', '', 'PLUGIN', 25),
('spherical', 'Spherical', '', 'PLUGIN', 26), ('spiral1', 'Spiral1', '', 'PLUGIN', 27),
('spiral2', 'Spiral2', '', 'PLUGIN', 28), ('spotted', 'Spotted', '', 'PLUGIN', 29),
('waves', 'Waves', '', 'PLUGIN', 30), ('wood', 'Wood', '', 'PLUGIN', 31),
('wrinkles', 'Wrinkles', '', 'PLUGIN', 32), ('brick', "Brick", "", 'PLUGIN', 33),
('checker', "Checker", "", 'PLUGIN', 34), ('hexagon', "Hexagon", "", 'PLUGIN', 35),
('object', "Mesh", "", 'PLUGIN', 36), ('emulator', "Internal Emulator", "", 'PLUG', 37)),
default='emulator',
)
magnet_style = EnumProperty(
name="Magnet style",
description="magnet or julia",
items=(('mandel', "Mandelbrot", ""),('julia', "Julia", "")),
default='julia')
magnet_type = IntProperty(
name="Magnet_type",
description="1 or 2",
min=1, max=2, default=2)
warp_types = EnumProperty(
name="Warp Types",
description="Select the type of warp",
items=(('PLANAR', "Planar", ""), ('CUBIC', "Cubic", ""), ('SPHERICAL', "Spherical", ""),
('TOROIDAL', "Toroidal", ""), ('CYLINDRICAL', "Cylindrical", ""),('NONE', "None", "No indentation")),
default='NONE')
warp_orientation = EnumProperty(
name="Warp Orientation",
description="Select the orientation of warp",
items=(('x', "X", ""), ('y', "Y", ""), ('z', "Z", "")),
default='y')
wave_type = EnumProperty(
name="Waves type",
description="Select the type of waves",
items=(('ramp', "Ramp", ""), ('sine', "Sine", ""), ('scallop', "Scallop", ""), ('cubic', "Cubic", ""),
('poly', "Poly", ""), ('triangle', 'Triangle', "")),
default='ramp')
gen_noise = IntProperty(
name="Noise Generators",
description="Noise Generators",
min=1, max=3, default=1)
warp_dist_exp = FloatProperty(
name="Distance exponent",
description="Distance exponent",
min=0.0, max=100.0, default=1.0)
warp_tor_major_radius = FloatProperty(
name="Major radius",
description="Torus is distance from major radius",
min=0.0, max=5.0, default=1.0)
warp_turbulence_x = FloatProperty(
name="Turbulence X",
description="Turbulence X",
min=0.0, max=5.0, default=0.0)
warp_turbulence_y = FloatProperty(
name="Turbulence Y",
description="Turbulence Y",
min=0.0, max=5.0, default=0.0)
warp_turbulence_z = FloatProperty(
name="Turbulence Z",
description="Turbulence Z",
min=0.0, max=5.0, default=0.0)
modifier_octaves = IntProperty(
name="Turbulence octaves",
description="Turbulence octaves",
min=1, max=10, default=1)
modifier_lambda = FloatProperty(
name="Turbulence lambda",
description="Turbulence lambda",
min=0.0, max=5.0, default=1.00)
modifier_omega = FloatProperty(
name="Turbulence omega",
description="Turbulence omega",
min=0.0, max=10.0, default=1.00)
modifier_phase = FloatProperty(
name="Phase",
description="The phase value causes the map entries to be shifted so that the map starts and ends at a different place.",
min=0.0, max=2.0, default=0.0)
modifier_frequency = FloatProperty(
name="Frequency",
description="The frequency keyword adjusts the number of times that a color map repeats over one cycle of a pattern.",
min=0.0, max=25.0, default=2.0)
modifier_turbulence = FloatProperty(
name="Turbulence",
description="Turbulence",
min=0.0, max=5.0, default=2.0)
modifier_numbers = IntProperty(
name="Numbers",
description="Numbers",
min=1, max=27, default=2)
modifier_control0 = IntProperty(
name="Control0",
description="Control0",
min=0, max=100, default=1)
modifier_control1 = IntProperty(
name="Control1",
description="Control1",
min=0, max=100, default=1)
brick_size_x = FloatProperty(
name="Brick size x",
description="",
min=0.0000, max=1.0000, default=0.2500)
brick_size_y = FloatProperty(
name="Brick size y",
description="",
min=0.0000, max=1.0000, default=0.0525)
brick_size_z = FloatProperty(
name="Brick size z",
description="",
min=0.0000, max=1.0000, default=0.1250)
brick_mortar = FloatProperty(
name="Mortar",
description="Mortar",
min=0.000, max=1.500, default=0.01)
julia_complex_1 = FloatProperty(
name="Julia Complex 1",
description="",
min=0.000, max=1.500, default=0.360)
julia_complex_2 = FloatProperty(
name="Julia Complex 2",
description="",
min=0.000, max=1.500, default=0.250)
f_iter = IntProperty(
name="Fractal Iteration",
description="",
min=0, max=100, default=20)
f_exponent = IntProperty(
name="Fractal Exponent",
description="",
min=2, max=33, default=2)
f_ior = IntProperty(
name="Fractal Interior",
description="",
min=1, max=6, default=1)
f_ior_fac = FloatProperty(
name="Fractal Interior Factor",
description="",
min=0.0, max=10.0, default=1.0)
f_eor = IntProperty(
name="Fractal Exterior",
description="",
min=1, max=8, default=1)
f_eor_fac = FloatProperty(
name="Fractal Exterior Factor",
description="",
min=0.0, max=10.0, default=1.0)
grad_orient_x= IntProperty(
name="Gradient orientation X",
description="",
min=0, max=1, default=0)
grad_orient_y= IntProperty(
name="Gradient orientation Y",
description="",
min=0, max=1, default=1)
grad_orient_z= IntProperty(
name="Gradient orientation Z",
description="",
min=0, max=1, default=0)
pave_sides = EnumProperty(
name="Pavement sides",
description="",
items=(('3', "3", ""), ('4', "4", ""), ('6', "6", "")),
default='3')
pave_pat_2= IntProperty(
name="Pavement pattern 2",
description="maximum: 2",
min=1, max=2, default=2)
pave_pat_3= IntProperty(
name="Pavement pattern 3",
description="maximum: 3",
min=1, max=3, default=3)
pave_pat_4= IntProperty(
name="Pavement pattern 4",
description="maximum: 4",
min=1, max=4, default=4)
pave_pat_5= IntProperty(
name="Pavement pattern 5",
description="maximum: 5",
min=1, max=5, default=5)
pave_pat_7= IntProperty(
name="Pavement pattern 7",
description="maximum: 7",
min=1, max=7, default=7)
pave_pat_12= IntProperty(
name="Pavement pattern 12",
description="maximum: 12",
min=1, max=12, default=12)
pave_pat_22= IntProperty(
name="Pavement pattern 22",
description="maximum: 22",
min=1, max=22, default=22)
pave_pat_35= IntProperty(
name="Pavement pattern 35",
description="maximum: 35",
min=1, max=35, default=35)
pave_tiles= IntProperty(
name="Pavement tiles",
description="If sides = 6, maximum tiles 5!!!",
min=1, max=6, default=1)
pave_form= IntProperty(
name="Pavement form",
description="",
min=0, max=4, default=0)
#########FUNCTIONS#########################################################################################################################
#########FUNCTIONS#########################################################################################################################
func_list = EnumProperty(
name="Functions",
description="Select the function for create pattern",
items=(('NONE', "None", "No indentation"),
("f_algbr_cyl1","Algbr cyl1",""), ("f_algbr_cyl2","Algbr cyl2",""),
("f_algbr_cyl3","Algbr cyl3",""), ("f_algbr_cyl4","Algbr cyl4",""),
("f_bicorn","Bicorn",""), ("f_bifolia","Bifolia",""),
("f_blob","Blob",""), ("f_blob2","Blob2",""),
("f_boy_surface","Boy surface",""), ("f_comma","Comma",""),
("f_cross_ellipsoids","Cross ellipsoids",""), ("f_crossed_trough","Crossed trough",""),
("f_cubic_saddle","Cubic saddle",""), ("f_cushion","Cushion",""),
("f_devils_curve","Devils curve",""), ("f_devils_curve_2d","Devils curve 2d",""),
("f_dupin_cyclid","Dupin cyclid",""), ("f_ellipsoid","Ellipsoid",""),
("f_enneper","Enneper",""), ("f_flange_cover","Flange cover",""),
("f_folium_surface","Folium surface",""), ("f_folium_surface_2d","Folium surface 2d",""),
("f_glob","Glob",""), ("f_heart","Heart",""),
("f_helical_torus","Helical torus",""), ("f_helix1","Helix1",""),
("f_helix2","Helix2",""), ("f_hex_x","Hex x",""),
("f_hex_y","Hex y",""), ("f_hetero_mf","Hetero mf",""),
("f_hunt_surface","Hunt surface",""), ("f_hyperbolic_torus","Hyperbolic torus",""),
("f_isect_ellipsoids","Isect ellipsoids",""), ("f_kampyle_of_eudoxus","Kampyle of eudoxus",""),
("f_kampyle_of_eudoxus_2d","Kampyle of eudoxus 2d",""), ("f_klein_bottle","Klein bottle",""),
("f_kummer_surface_v1","Kummer surface v1",""), ("f_kummer_surface_v2","Kummer surface v2",""),
("f_lemniscate_of_gerono","Lemniscate of gerono",""), ("f_lemniscate_of_gerono_2d","Lemniscate of gerono 2d",""),
("f_mesh1","Mesh1",""), ("f_mitre","Mitre",""),
("f_nodal_cubic","Nodal cubic",""), ("f_noise3d","Noise3d",""),
("f_noise_generator","Noise generator",""), ("f_odd","Odd",""),
("f_ovals_of_cassini","Ovals of cassini",""), ("f_paraboloid","Paraboloid",""),
("f_parabolic_torus","Parabolic torus",""), ("f_ph","Ph",""),
("f_pillow","Pillow",""), ("f_piriform","Piriform",""),
("f_piriform_2d","Piriform 2d",""), ("f_poly4","Poly4",""),
("f_polytubes","Polytubes",""), ("f_quantum","Quantum",""),
("f_quartic_paraboloid","Quartic paraboloid",""), ("f_quartic_saddle","Quartic saddle",""),
("f_quartic_cylinder","Quartic cylinder",""), ("f_r","R",""),
("f_ridge","Ridge",""), ("f_ridged_mf","Ridged mf",""),
("f_rounded_box","Rounded box",""), ("f_sphere","Sphere",""),
("f_spikes","Spikes",""), ("f_spikes_2d","Spikes 2d",""),
("f_spiral","Spiral",""), ("f_steiners_roman","Steiners roman",""),
("f_strophoid","Strophoid",""), ("f_strophoid_2d","Strophoid 2d",""),
("f_superellipsoid","Superellipsoid",""), ("f_th","Th",""),
("f_torus","Torus",""), ("f_torus2","Torus2",""),
("f_torus_gumdrop","Torus gumdrop",""), ("f_umbrella","Umbrella",""),
("f_witch_of_agnesi","Witch of agnesi",""), ("f_witch_of_agnesi_2d","Witch of agnesi 2d","")),
default='NONE')
func_x = FloatProperty(
name="FX",
description="",
min=0.0, max=25.0, default=1.0)
func_plus_x = EnumProperty(
name="Func plus x",
description="",
items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
default='NONE')
func_y = FloatProperty(
name="FY",
description="",
min=0.0, max=25.0, default=1.0)
func_plus_y = EnumProperty(
name="Func plus y",
description="",
items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
default='NONE')
func_z = FloatProperty(
name="FZ",
description="",
min=0.0, max=25.0, default=1.0)
func_plus_z = EnumProperty(
name="Func plus z",
description="",
items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
default='NONE')
func_P0 = FloatProperty(
name="P0",
description="",
min=0.0, max=25.0, default=1.0)
func_P1 = FloatProperty(
name="P1",
description="",
min=0.0, max=25.0, default=1.0)
func_P2 = FloatProperty(
name="P2",
description="",
min=0.0, max=25.0, default=1.0)
func_P3 = FloatProperty(
name="P3",
description="",
min=0.0, max=25.0, default=1.0)
func_P4 = FloatProperty(
name="P4",
description="",
min=0.0, max=25.0, default=1.0)
func_P5 = FloatProperty(
name="P5",
description="",
min=0.0, max=25.0, default=1.0)
func_P6 = FloatProperty(
name="P6",
description="",
min=0.0, max=25.0, default=1.0)
func_P7 = FloatProperty(
name="P7",
description="",
min=0.0, max=25.0, default=1.0)
func_P8 = FloatProperty(
name="P8",
description="",
min=0.0, max=25.0, default=1.0)
func_P9 = FloatProperty(
name="P9",
description="",
min=0.0, max=25.0, default=1.0)
#########################################
tex_rot_x = FloatProperty(
name="Rotate X",
description="",
min=-180.0, max=180.0, default=0.0)
tex_rot_y = FloatProperty(
name="Rotate Y",
description="",
min=-180.0, max=180.0, default=0.0)
tex_rot_z = FloatProperty(
name="Rotate Z",
description="",
min=-180.0, max=180.0, default=0.0)
tex_mov_x = FloatProperty(
name="Move X",
description="",
min=-100000.0, max=100000.0, default=0.0)
tex_mov_y = FloatProperty(
name="Move Y",
description="",
min=-100000.0, max=100000.0, default=0.0)
tex_mov_z = FloatProperty(
name="Move Z",
description="",
min=-100000.0, max=100000.0, default=0.0)
tex_scale_x = FloatProperty(
name="Scale X",
description="",
min=0.0, max=10000.0, default=1.0)
tex_scale_y = FloatProperty(
name="Scale Y",
description="",
min=0.0, max=10000.0, default=1.0)
tex_scale_z = FloatProperty(
name="Scale Z",
description="",
min=0.0, max=10000.0, default=1.0)
###############################################################################
# Object POV properties.
###############################################################################
@ -530,10 +979,12 @@ class PovrayPreferences(AddonPreferences):
layout = self.layout
layout.prop(self, "filepath_povray")
def register():
bpy.utils.register_module(__name__)
#bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
bpy.types.Material.pov = PointerProperty(type=RenderPovSettingsMaterial)
bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
@ -544,7 +995,7 @@ def register():
def unregister():
bpy.utils.unregister_module(__name__)
#bpy.types.TEXTURE_PT_context_texture.remove(TEXTURE_PT_povray_type)
del bpy.types.Scene.pov
del bpy.types.Material.pov
del bpy.types.Texture.pov

File diff suppressed because it is too large Load Diff

View File

@ -57,6 +57,7 @@ for member in dir(properties_data_mesh):
del properties_data_mesh
from bl_ui import properties_texture
from bl_ui.properties_texture import context_tex_datablock
for member in dir(properties_texture):
subclass = getattr(properties_texture, member)
try:
@ -65,6 +66,7 @@ for member in dir(properties_texture):
pass
del properties_texture
from bl_ui import properties_data_camera
for member in dir(properties_data_camera):
subclass = getattr(properties_data_camera, member)
@ -130,6 +132,14 @@ class TextureButtonsPanel():
rd = context.scene.render
return tex and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
# class TextureTypePanel(TextureButtonsPanel):
# @classmethod
# def poll(cls, context):
# tex = context.texture
# engine = context.scene.render.engine
# return tex and ((tex.type == cls.tex_type and not tex.use_nodes) and (engine in cls.COMPAT_ENGINES))
class ObjectButtonsPanel():
bl_space_type = 'PROPERTIES'
@ -156,11 +166,22 @@ class CameraDataButtonsPanel():
rd = context.scene.render
return cam and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
class WorldButtonsPanel():
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "world"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
def poll(cls, context):
wld = context.world
rd = context.scene.render
return wld and (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
class TextButtonsPanel():
bl_space_type = 'TEXT_EDITOR'
bl_region_type = 'UI'
bl_label = "P.O.V-Ray"
bl_label = "POV-Ray"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
@ -174,6 +195,8 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Export Settings"
COMPAT_ENGINES = {'POVRAY_RENDER'}
def draw_header(self, context):
self.layout.label(icon='CONSOLE')
def draw(self, context):
layout = self.layout
@ -187,6 +210,7 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
col.prop(scene.pov, "command_line_switches", text="")
split = layout.split()
split.prop(scene.pov, "tempfiles_enable", text="OS Tempfiles")
split.prop(scene.pov, "pov_editor", text="POV Editor")
if not scene.pov.tempfiles_enable:
split.prop(scene.pov, "deletefiles_enable", text="Delete files")
@ -209,13 +233,15 @@ class RENDER_PT_povray_export_settings(RenderButtonsPanel, bpy.types.Panel):
class RENDER_PT_povray_render_settings(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Render Settings"
bl_icon = 'SETTINGS'
COMPAT_ENGINES = {'POVRAY_RENDER'}
def draw_header(self, context):
self.layout.label(icon='SETTINGS')
def draw(self, context):
layout = self.layout
scene = context.scene
layout.active = (scene.pov.max_trace_level != 0)
col = layout.column()
@ -243,8 +269,10 @@ class RENDER_PT_povray_antialias(RenderButtonsPanel, bpy.types.Panel):
def draw_header(self, context):
scene = context.scene
self.layout.prop(scene.pov, "antialias_enable", text="")
if scene.pov.antialias_enable:
self.layout.prop(scene.pov, "antialias_enable", text="", icon='ANTIALIASED')
else:
self.layout.prop(scene.pov, "antialias_enable", text="", icon='ALIASED')
def draw(self, context):
layout = self.layout
@ -275,11 +303,12 @@ class RENDER_PT_povray_antialias(RenderButtonsPanel, bpy.types.Panel):
class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Radiosity"
COMPAT_ENGINES = {'POVRAY_RENDER'}
def draw_header(self, context):
scene = context.scene
self.layout.prop(scene.pov, "radio_enable", text="")
if scene.pov.radio_enable:
self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIO')
else:
self.layout.prop(scene.pov, "radio_enable", text="", icon='RADIOBUT_OFF')
def draw(self, context):
layout = self.layout
@ -323,7 +352,7 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel):
split.prop(scene.pov, "radio_always_sample")
class RENDER_PT_povray_media(RenderButtonsPanel, bpy.types.Panel):
class RENDER_PT_povray_media(WorldButtonsPanel, bpy.types.Panel):
bl_label = "Atmosphere Media"
COMPAT_ENGINES = {'POVRAY_RENDER'}
@ -500,7 +529,251 @@ class MATERIAL_PT_povray_replacement_text(MaterialButtonsPanel, bpy.types.Panel)
col.label(text="Replace properties with:")
col.prop(mat.pov, "replacement_text", text="")
class TEXTURE_PT_povray_type(TextureButtonsPanel, bpy.types.Panel):
bl_label = "POV-ray Textures"
COMPAT_ENGINES = {'POVRAY_RENDER'}
bl_options = {'HIDE_HEADER'}
def draw(self, context):
layout = self.layout
tex = context.texture
split = layout.split(percentage=0.2)
split.label(text="POV:")
split.prop(tex.pov, "tex_pattern_type", text="")
class TEXTURE_PT_povray_preview(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Preview"
COMPAT_ENGINES = {'POVRAY_RENDER'}
bl_options = {'HIDE_HEADER'}
@classmethod
def poll(cls, context):
engine = context.scene.render.engine
if not hasattr(context, "texture_slot"):
return False
tex=context.texture
mat=context.material
return (tex and (tex.pov.tex_pattern_type != 'emulator') and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
tex = context.texture
slot = getattr(context, "texture_slot", None)
idblock = context_tex_datablock(context)
layout = self.layout
# if idblock:
# layout.template_preview(tex, parent=idblock, slot=slot)
if tex.pov.tex_pattern_type != 'emulator':
layout.operator("tex.preview_update")
else:
layout.template_preview(tex, slot=slot)
class TEXTURE_PT_povray_parameters(TextureButtonsPanel, bpy.types.Panel):
bl_label = "POV-ray Pattern Options"
COMPAT_ENGINES = {'POVRAY_RENDER'}
def draw(self, context):
mat = context.material
layout = self.layout
tex = context.texture
align=True
if tex is not None and tex.pov.tex_pattern_type != 'emulator':
if tex.pov.tex_pattern_type == 'agate':
layout.prop(tex.pov, "modifier_turbulence", text="Agate Turbulence")
if tex.pov.tex_pattern_type in {'spiral1', 'spiral2'}:
layout.prop(tex.pov, "modifier_numbers", text="Number of arms")
if tex.pov.tex_pattern_type == 'tiling':
layout.prop(tex.pov, "modifier_numbers", text="Pattern number")
if tex.pov.tex_pattern_type == 'magnet':
layout.prop(tex.pov, "magnet_style", text="Magnet style")
if tex.pov.tex_pattern_type == 'quilted':
row = layout.row(align=align)
row.prop(tex.pov, "modifier_control0", text="Control0")
row.prop(tex.pov, "modifier_control1", text="Control1")
if tex.pov.tex_pattern_type == 'brick':
col = layout.column(align=align)
row = col.row()
row.prop(tex.pov, "brick_size_x", text="Brick size X")
row.prop(tex.pov, "brick_size_y", text="Brick size Y")
row=col.row()
row.prop(tex.pov, "brick_size_z", text="Brick size Z")
row.prop(tex.pov, "brick_mortar", text="Brick mortar")
if tex.pov.tex_pattern_type in {'julia','mandel','magnet'}:
col = layout.column(align=align)
if tex.pov.tex_pattern_type == 'julia':
row = col.row()
row.prop(tex.pov, "julia_complex_1", text="Complex 1")
row.prop(tex.pov, "julia_complex_2", text="Complex 2")
if tex.pov.tex_pattern_type == 'magnet' and tex.pov.magnet_style == 'julia':
row = col.row()
row.prop(tex.pov, "julia_complex_1", text="Complex 1")
row.prop(tex.pov, "julia_complex_2", text="Complex 2")
row=col.row()
if tex.pov.tex_pattern_type in {'julia','mandel'}:
row.prop(tex.pov, "f_exponent", text="Exponent")
if tex.pov.tex_pattern_type == 'magnet':
row.prop(tex.pov, "magnet_type", text="Type")
row.prop(tex.pov, "f_iter", text="Iterations")
row=col.row()
row.prop(tex.pov, "f_ior", text="Interior")
row.prop(tex.pov, "f_ior_fac", text="Factor I")
row=col.row()
row.prop(tex.pov, "f_eor", text="Exterior")
row.prop(tex.pov, "f_eor_fac", text="Factor E")
if tex.pov.tex_pattern_type == 'gradient':
layout.label(text="Gradient orientation:")
column_flow = layout.column_flow(columns=3, align=True)
column_flow.prop(tex.pov, "grad_orient_x", text="X")
column_flow.prop(tex.pov, "grad_orient_y", text="Y")
column_flow.prop(tex.pov, "grad_orient_z", text="Z")
if tex.pov.tex_pattern_type == 'pavement':
layout.prop(tex.pov, "pave_sides", text="Pavement:number of sides")
col = layout.column(align=align)
column_flow = col.column_flow(columns=3, align=True)
column_flow.prop(tex.pov, "pave_tiles", text="Tiles")
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 6:
column_flow.prop(tex.pov, "pave_pat_35", text="Pattern")
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 5:
column_flow.prop(tex.pov, "pave_pat_22", text="Pattern")
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 5:
column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 6:
column_flow.prop(tex.pov, "pave_pat_12", text="Pattern")
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 4:
column_flow.prop(tex.pov, "pave_pat_7", text="Pattern")
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 4:
column_flow.prop(tex.pov, "pave_pat_5", text="Pattern")
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 5:
column_flow.prop(tex.pov, "pave_pat_4", text="Pattern")
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 3:
column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
if tex.pov.pave_sides == '3' and tex.pov.pave_tiles == 4:
column_flow.prop(tex.pov, "pave_pat_3", text="Pattern")
if tex.pov.pave_sides == '4' and tex.pov.pave_tiles == 3:
column_flow.prop(tex.pov, "pave_pat_2", text="Pattern")
if tex.pov.pave_sides == '6' and tex.pov.pave_tiles == 6:
column_flow.label(text="!!! 5 tiles!")
column_flow.prop(tex.pov, "pave_form", text="Form")
if tex.pov.tex_pattern_type == 'function':
layout.prop(tex.pov, "func_list", text="Functions")
if tex.pov.tex_pattern_type == 'function' and tex.pov.func_list != "NONE":
func = None
if tex.pov.func_list in {"f_noise3d", "f_ph", "f_r", "f_th"}:
func = 0
if tex.pov.func_list in {"f_comma","f_crossed_trough","f_cubic_saddle",
"f_cushion","f_devils_curve","f_enneper","f_glob",
"f_heart","f_hex_x","f_hex_y","f_hunt_surface",
"f_klein_bottle","f_kummer_surface_v1",
"f_lemniscate_of_gerono","f_mitre","f_nodal_cubic",
"f_noise_generator","f_odd","f_paraboloid","f_pillow",
"f_piriform","f_quantum","f_quartic_paraboloid",
"f_quartic_saddle","f_sphere","f_steiners_roman",
"f_torus_gumdrop","f_umbrella"}:
func = 1
if tex.pov.func_list in {"f_bicorn","f_bifolia","f_boy_surface","f_superellipsoid","f_torus"}:
func = 2
if tex.pov.func_list in {"f_ellipsoid","f_folium_surface","f_hyperbolic_torus",
"f_kampyle_of_eudoxus","f_parabolic_torus",
"f_quartic_cylinder","f_torus2"}:
func = 3
if tex.pov.func_list in {"f_blob2","f_cross_ellipsoids","f_flange_cover",
"f_isect_ellipsoids","f_kummer_surface_v2","f_ovals_of_cassini",
"f_rounded_box","f_spikes_2d","f_strophoid"}:
func = 4
if tex.pov.func_list in {"f_algbr_cyl1","f_algbr_cyl2","f_algbr_cyl3","f_algbr_cyl4",
"f_blob","f_mesh1","f_poly4","f_spikes"}:
func = 5
if tex.pov.func_list in {"f_devils_curve_2d","f_dupin_cyclid","f_folium_surface_2d",
"f_hetero_mf","f_kampyle_of_eudoxus_2d","f_lemniscate_of_gerono_2d",
"f_polytubes","f_ridge","f_ridged_mf","f_spiral","f_witch_of_agnesi"}:
func = 6
if tex.pov.func_list in {"f_helix1","f_helix2","f_piriform_2d","f_strophoid_2d"}:
func = 7
if tex.pov.func_list == "f_helical_torus":
func = 8
column_flow = layout.column_flow(columns=3, align=True)
column_flow.label(text="X")
column_flow.prop(tex.pov, "func_plus_x", text="")
column_flow.prop(tex.pov, "func_x", text="Value")
column_flow = layout.column_flow(columns=3, align=True)
column_flow.label(text="Y")
column_flow.prop(tex.pov, "func_plus_y", text="")
column_flow.prop(tex.pov, "func_y", text="Value")
column_flow = layout.column_flow(columns=3, align=True)
column_flow.label(text="Z")
column_flow.prop(tex.pov, "func_plus_z", text="")
column_flow.prop(tex.pov, "func_z", text="Value")
row=layout.row(align=align)
if func > 0:
row.prop(tex.pov, "func_P0", text="P0")
if func > 1:
row.prop(tex.pov, "func_P1", text="P1")
row=layout.row(align=align)
if func > 2:
row.prop(tex.pov, "func_P2", text="P2")
if func > 3:
row.prop(tex.pov, "func_P3", text="P3")
row=layout.row(align=align)
if func > 4:
row.prop(tex.pov, "func_P4", text="P4")
if func > 5:
row.prop(tex.pov, "func_P5", text="P5")
row=layout.row(align=align)
if func > 6:
row.prop(tex.pov, "func_P6", text="P6")
if func > 7:
row.prop(tex.pov, "func_P7", text="P7")
row=layout.row(align=align)
row.prop(tex.pov, "func_P8", text="P8")
row.prop(tex.pov, "func_P9", text="P9")
###################################################End Patterns############################
layout.prop(tex.pov, "warp_types", text="Warp types") #warp
if tex.pov.warp_types == "TOROIDAL":
layout.prop(tex.pov, "warp_tor_major_radius", text="Major radius")
if tex.pov.warp_types not in {"CUBIC","NONE"}:
layout.prop(tex.pov, "warp_orientation", text="Warp orientation")
col = layout.column(align=align)
row = col.row()
row.prop(tex.pov, "warp_dist_exp", text="Distance exponent")
row = col.row()
row.prop(tex.pov, "modifier_frequency", text="Frequency")
row.prop(tex.pov, "modifier_phase", text="Phase")
row=layout.row()
row.label(text="Offset:")
row.label(text="Scale:")
row.label(text="Rotate:")
col=layout.column(align=align)
row=col.row()
row.prop(tex.pov, "tex_mov_x", text="X")
row.prop(tex.pov, "tex_scale_x", text="X")
row.prop(tex.pov, "tex_rot_x", text="X")
row=col.row()
row.prop(tex.pov, "tex_mov_y", text="Y")
row.prop(tex.pov, "tex_scale_y", text="Y")
row.prop(tex.pov, "tex_rot_y", text="Y")
row=col.row()
row.prop(tex.pov, "tex_mov_z", text="Z")
row.prop(tex.pov, "tex_scale_z", text="Z")
row.prop(tex.pov, "tex_rot_z", text="Z")
row=layout.row()
row.label(text="Turbulence:")
col=layout.column(align=align)
row=col.row()
row.prop(tex.pov, "warp_turbulence_x", text="X")
row.prop(tex.pov, "modifier_octaves", text="Octaves")
row=col.row()
row.prop(tex.pov, "warp_turbulence_y", text="Y")
row.prop(tex.pov, "modifier_lambda", text="Lambda")
row=col.row()
row.prop(tex.pov, "warp_turbulence_z", text="Z")
row.prop(tex.pov, "modifier_omega", text="Omega")
class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
bl_label = "Image Gamma"
COMPAT_ENGINES = {'POVRAY_RENDER'}
@ -508,7 +781,7 @@ class TEXTURE_PT_povray_tex_gamma(TextureButtonsPanel, bpy.types.Panel):
def draw_header(self, context):
tex = context.texture
self.layout.prop(tex.pov, "tex_gamma_enable", text="")
self.layout.prop(tex.pov, "tex_gamma_enable", text="", icon='SEQ_LUMA_WAVEFORM')
def draw(self, context):
layout = self.layout