Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurice Raybaud <mauriceraybaud@hotmail.fr>2016-08-30 23:49:33 +0300
committerMaurice Raybaud <mauriceraybaud@hotmail.fr>2016-08-30 23:49:33 +0300
commit52916b8315533c86a18b69735ff46ffde1f0a820 (patch)
tree1c74cb8287335773f6930aa94f130abfaa29ad57
parent3dc2ed11c05de63d2d98b9914f5f1e1b25db8f6f (diff)
*Added dupli objects (groups,particles,verts, faces but no frames for now)
*Added basic halo for lights
-rw-r--r--render_povray/render.py90
-rw-r--r--render_povray/shading.py2
2 files changed, 79 insertions, 13 deletions
diff --git a/render_povray/render.py b/render_povray/render.py
index 74f720f3..e08fdf3d 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -538,7 +538,7 @@ def write_pov(filename, scene=None, info_callback=None):
matrix = global_matrix * ob.matrix_world
# Color is modified by energy #muiltiplie by 2 for a better match --Maurice
- color = tuple([c * lamp.energy * 2.0 for c in lamp.color])
+ color = tuple([c * lamp.energy for c in lamp.color])
tabWrite("light_source {\n")
tabWrite("< 0,0,0 >\n")
@@ -558,6 +558,31 @@ def write_pov(filename, scene=None, info_callback=None):
tabWrite("tightness 0\n") # 0:10f
tabWrite("point_at <0, 0, -1>\n")
+ if lamp.use_halo:
+ tabWrite("looks_like{\n")
+ tabWrite("sphere{<0,0,0>,%.6f\n" %lamp.distance)
+ tabWrite("hollow\n")
+ tabWrite("material{\n")
+ tabWrite("texture{\n")
+ tabWrite("pigment{rgbf<1,1,1,%.4f>}\n" % (lamp.halo_intensity*5.0))
+ tabWrite("}\n")
+ tabWrite("interior{\n")
+ tabWrite("media{\n")
+ tabWrite("emission 1\n")
+ tabWrite("scattering {1, 0.5}\n")
+ tabWrite("density{\n")
+ tabWrite("spherical\n")
+ tabWrite("color_map{\n")
+ tabWrite("[0.0 rgb <0,0,0>]\n")
+ tabWrite("[0.5 rgb <1,1,1>]\n")
+ tabWrite("[1.0 rgb <1,1,1>]\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
+ tabWrite("}\n")
elif lamp.type == 'SUN':
tabWrite("parallel\n")
tabWrite("point_at <0, 0, -1>\n") # *must* be after 'parallel'
@@ -1896,7 +1921,7 @@ def write_pov(filename, scene=None, info_callback=None):
# XXX I moved all those checks here, as there is no need to compute names
# for object we won't export here!
- if (ob.type in {'LAMP', 'CAMERA', 'EMPTY',
+ if (ob.type in {'LAMP', 'CAMERA', #'EMPTY', #empties can bear dupligroups
'META', 'ARMATURE', 'LATTICE'}):
continue
smokeFlag=False
@@ -2092,9 +2117,22 @@ def write_pov(filename, scene=None, info_callback=None):
# (baking for now or anything else).
# XXX I don't understand that if we are here, sel if a non-empty iterable,
# so this condition is always True, IMO -- mont29
- if sel:
+ if ob.data:
name_orig = "OB" + ob.name
dataname_orig = "DATA" + ob.data.name
+ elif ob.is_duplicator:
+ if ob.dupli_type == 'GROUP':
+ name_orig = "OB" + ob.name
+ dataname_orig = "DATA" + ob.dupli_group.name
+ else:
+ #hoping only dupligroups have several source datablocks
+ ob.dupli_list_create(scene)
+ for eachduplicate in ob.dupli_list:
+ dataname_orig = "DATA" + eachduplicate.object.name
+ ob.dupli_list_clear()
+ elif ob.type == 'EMPTY':
+ name_orig = "OB" + ob.name
+ dataname_orig = "DATA" + ob.name
else:
name_orig = DEF_OBJ_NAME
dataname_orig = DEF_OBJ_NAME
@@ -2487,7 +2525,11 @@ def write_pov(filename, scene=None, info_callback=None):
############################################else try to export mesh
- else:
+ elif ob.is_duplicator == False: #except duplis which should be instances groups for now but all duplis later
+ if ob.type == 'EMPTY':
+ tabWrite("\n//dummy sphere to represent Empty location\n")
+ tabWrite("#declare %s =sphere {<0, 0, 0>,0 pigment{rgbt 1} no_image no_reflection no_radiosity photons{pass_through collect off} hollow}\n" % povdataname)
+
try:
me = ob.to_mesh(scene, True, 'RENDER')
@@ -2503,8 +2545,7 @@ def write_pov(filename, scene=None, info_callback=None):
me_materials = me.materials
me_faces = me.tessfaces[:]
if len(me_faces)==0:
- file.write("\n")
- tabWrite("//dummy sphere to represent empty mesh location\n")
+ tabWrite("\n//dummy sphere to represent empty mesh location\n")
tabWrite("#declare %s =sphere {<0, 0, 0>,0 pigment{rgbt 1} no_image no_reflection no_radiosity photons{pass_through collect off} hollow}\n" % povdataname)
@@ -3041,15 +3082,42 @@ def write_pov(filename, scene=None, info_callback=None):
tabWrite("}\n") # End of mesh block
+
+
bpy.data.meshes.remove(me)
+ duplidata_ref = []
+ for ob in sel:
+ #matrix = global_matrix * ob.matrix_world
+ if ob.is_duplicator:
+ tabWrite("\n//--DupliObjects in %s--\n\n"% ob.name)
+ ob.dupli_list_create(scene)
+ dup = ""
+ if ob.is_modified(scene, 'RENDER'):
+ #modified object always unique so using object name rather than data name
+ dup = "#declare OB%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
+ else:
+ dup = "#declare DATA%s = union{\n" %(string_strip_hyphen(bpy.path.clean_name(ob.name)))
+ for eachduplicate in ob.dupli_list:
+ duplidataname = "OB"+string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name))
+ dup += ("\tobject {\n\t\tDATA%s\n\t\t%s\t}\n" %(string_strip_hyphen(bpy.path.clean_name(bpy.data.objects[eachduplicate.object.name].data.name)), MatrixAsPovString(ob.matrix_world.inverted() * eachduplicate.matrix)))
+ #add object to a list so that it is not rendered for some dupli_types
+ if ob.dupli_type not in {'GROUP'} and duplidataname not in duplidata_ref:
+ duplidata_ref.append(duplidataname) #older key [string_strip_hyphen(bpy.path.clean_name("OB"+ob.name))]
+ dup += "}\n"
+ ob.dupli_list_clear()
+ tabWrite(dup)
+ else:
+ continue
+ print(duplidata_ref)
for data_name, inst in data_ref.items():
for ob_name, matrix_str in inst:
- tabWrite("//----Blender Object Name:%s----\n" % ob_name)
- tabWrite("object { \n")
- tabWrite("%s\n" % data_name)
- tabWrite("%s\n" % matrix_str)
- tabWrite("}\n")
+ if ob_name not in duplidata_ref: #.items() for a dictionary
+ tabWrite("\n//----Blender Object Name:%s----\n" % ob_name)
+ tabWrite("object { \n")
+ tabWrite("%s\n" % data_name)
+ tabWrite("%s\n" % matrix_str)
+ tabWrite("}\n")
def exportWorld(world):
render = scene.render
diff --git a/render_povray/shading.py b/render_povray/shading.py
index d6245a16..50ff8389 100644
--- a/render_povray/shading.py
+++ b/render_povray/shading.py
@@ -743,12 +743,10 @@ def writeTextureInfluence(mater, materialNames, LocalMaterialNames, path_image,
if t and (t.use and (t.texture is not None)):
# 'NONE' ('NONE' type texture is different from no texture covered above)
if (t.texture.type == 'NONE' and t.texture.pov.tex_pattern_type == 'emulator'):
- print('RESHAITE')
continue # move to next slot
# PROCEDURAL
elif (t.texture.type != 'IMAGE' and t.texture.type != 'NONE'):
proceduralFlag=True
- print('XXXSHHHAAIIIITE')
image_filename = "PAT_%s"%string_strip_hyphen(bpy.path.clean_name(t.texture.name))
if image_filename:
if t.use_map_color_diffuse: