diff --git a/render_povray/__init__.py b/render_povray/__init__.py index 4dcbd76f4efd5dd8e12871b8ec6f0e4938f53dae..1d042749081257588bd5bab11ecfef5aa7028f70 100644 --- a/render_povray/__init__.py +++ b/render_povray/__init__.py @@ -54,6 +54,10 @@ def register(): name="Advanced Options", description="Show advanced options", default=False) + Scene.pov_baking_enable = BoolProperty( + name="Enable Baking", + description="Enable povrays texture baking", + default=False) # Real pov options Scene.pov_radio_adc_bailout = FloatProperty( @@ -186,7 +190,7 @@ def register(): def unregister(): import bpy Scene = bpy.types.Scene - Mat = bpy.types.Material#MR + Mat = bpy.types.Material # MR del Scene.pov_radio_enable del Scene.pov_radio_display_advanced del Scene.pov_radio_adc_bailout @@ -201,20 +205,21 @@ 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 + del Scene.pov_baking_enable # MR + 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() diff --git a/render_povray/render.py b/render_povray/render.py index f04723c6226b3331add960ecc962fc7b0a188fc5..28a09a1586622a7c3a28c6a166ba3a6ce687832c 100644 --- a/render_povray/render.py +++ b/render_povray/render.py @@ -377,6 +377,7 @@ def write_pov(filename, scene=None, info_callback=None): def exportCamera(): camera = scene.camera + active_object = bpy.context.active_object # MR matrix = camera.matrix_world focal_point = camera.data.dof_distance @@ -386,19 +387,27 @@ def write_pov(filename, scene=None, info_callback=None): file.write('#declare camLookAt = <%.6f, %.6f, %.6f>;\n' % tuple([degrees(e) for e in matrix.rotation_part().to_euler()])) file.write('camera {\n') - file.write('\tlocation <0, 0, 0>\n') - file.write('\tlook_at <0, 0, -1>\n') - file.write('\tright <%s, 0, 0>\n' % - Qsize) - file.write('\tup <0, 1, 0>\n') - file.write('\tangle %f \n' % (360.0 * atan(16.0 / camera.data.lens) / pi)) - - file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotation_part().to_euler()])) - file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2])) - if focal_point != 0: - file.write('\taperture 0.25\n') # fixed blur amount for now to do, add slider a button? - file.write('\tblur_samples 96 128\n') - file.write('\tvariance 1/10000\n') - file.write('\tfocal_point <0, 0, %f>\n' % focal_point) + if scene.pov_baking_enable and active_object.type=='MESH': + file.write('\tmesh_camera{ 1 3\n') # distribution 3 is what we want here + file.write('\t\tmesh{%s}\n' % active_object.name) + file.write('\t}\n') + file.write('location <0,0,.01>') + file.write('direction <0,0,-1>') + # Using standard camera otherwise + else: + file.write('\tlocation <0, 0, 0>\n') + file.write('\tlook_at <0, 0, -1>\n') + file.write('\tright <%s, 0, 0>\n' % - Qsize) + file.write('\tup <0, 1, 0>\n') + file.write('\tangle %f \n' % (360.0 * atan(16.0 / camera.data.lens) / pi)) + + file.write('\trotate <%.6f, %.6f, %.6f>\n' % tuple([degrees(e) for e in matrix.rotation_part().to_euler()])) + file.write('\ttranslate <%.6f, %.6f, %.6f>\n' % (matrix[3][0], matrix[3][1], matrix[3][2])) + if focal_point != 0: + file.write('\taperture 0.25\n') # fixed blur amount for now to do, add slider a button? + file.write('\tblur_samples 96 128\n') + file.write('\tvariance 1/10000\n') + file.write('\tfocal_point <0, 0, %f>\n' % focal_point) file.write('}\n') def exportLamps(lamps): @@ -608,6 +617,8 @@ def write_pov(filename, scene=None, info_callback=None): # quads incur an extra face quadCount = sum(1 for f in faces_verts if len(f) == 4) + # Use named declaration to allow reference e.g. for baking. MR + file.write('#declare %s=\n' % ob.name) file.write('mesh2 {\n') file.write('\tvertex_vectors {\n') file.write('\t\t%s' % (len(me.vertices))) # vert count @@ -1027,6 +1038,7 @@ def write_pov(filename, scene=None, info_callback=None): writeMatrix(matrix) file.write('}\n') + file.write('%s\n' % ob.name) # Use named declaration to allow reference e.g. for baking. MR bpy.data.meshes.remove(me) @@ -1165,12 +1177,13 @@ def write_pov(filename, scene=None, info_callback=None): for material in bpy.data.materials: writeMaterial(material) - exportCamera() + #exportMaterials() sel = scene.objects exportLamps([l for l in sel if l.type == 'LAMP']) exportMeta([l for l in sel if l.type == 'META']) exportMeshs(scene, sel) + exportCamera() exportWorld(scene.world) exportGlobalSettings(scene) diff --git a/render_povray/ui.py b/render_povray/ui.py index dbd57bc9c557a8ef9289d0dc3d8427c9ac4133a7..e156c5e72b81b9f9eaaada3b010d4a963f4718d7 100644 --- a/render_povray/ui.py +++ b/render_povray/ui.py @@ -288,3 +288,20 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel, bpy.types.Panel): col = split.column() col.prop(scene, "pov_radio_always_sample") + +class RENDER_PT_povray_baking(RenderButtonsPanel, bpy.types.Panel): + bl_label = "Baking" + COMPAT_ENGINES = {'POVRAY_RENDER'} + + def draw_header(self, context): + scene = context.scene + + self.layout.prop(scene, "pov_baking_enable", text="") + + def draw(self, context): + layout = self.layout + + scene = context.scene + rd = scene.render + + layout.active = scene.pov_baking_enable