Skip to content
Snippets Groups Projects
render.py 99.6 KiB
Newer Older
  • Learn to ignore specific revisions
  •                                 colvalue = t.default_value
                                    t_spec = t
    
                                if t.use_map_normal:
    
                                    texturesNorm = image_filename
                                    colvalue = t.normal_factor * 10.0
    
                                    #textNormName=t.texture.image.name + ".normal"
    
                                    #was the above used? --MR
                                    t_nor = t
    
                                if t.use_map_alpha:
    
                                    texturesAlpha = image_filename
                                    colvalue = t.alpha_factor * 10.0
    
                                    #textDispName=t.texture.image.name + ".displ"
    
                                    #was the above used? --MR
                                    t_alpha = t
    
                    ####################################################################################
    
                        file.write(" texture{%s}\n" % material.pov.replacement_text)
    
                        # THIS AREA NEEDS TO LEAVE THE TEXTURE OPEN UNTIL ALL MAPS ARE WRITTEN DOWN.
                        # --MR
                        tabWrite("texture {\n")
    
                        ################################################################################
    
                        if material.diffuse_shader == 'MINNAERT':
                            tabWrite("\n")
                            tabWrite("aoi\n")
                            tabWrite("texture_map {\n")
    
                            tabWrite("[%.3g finish {diffuse %.3g}]\n" % \
                                     (material.darkness / 2.0, 2.0 - material.darkness))
    
                            tabWrite("[%.3g\n" % (1.0 - (material.darkness / 2.0)))
    
                        if material.diffuse_shader == 'FRESNEL':
                            # For FRESNEL diffuse in POV, we'll layer slope patterned textures
                            # with lamp vector as the slope vector and nest one slope per lamp
                            # into each texture map's entry.
    
                            c = 1
                            while (c <= lampCount):
                                tabWrite("slope { lampTarget%s }\n" % (c))
                                tabWrite("texture_map {\n")
                                # Diffuse Fresnel value and factor go up to five,
                                # other kind of values needed: used the number 5 below to remap
    
                                tabWrite("[%.3g finish {diffuse %.3g}]\n" % \
                                         ((5.0 - material.diffuse_fresnel) / 5,
                                          (material.diffuse_intensity * 
                                           ((5.0 - material.diffuse_fresnel_factor) / 5))))
                                tabWrite("[%.3g\n" % ((material.diffuse_fresnel_factor / 5) *
                                                      (material.diffuse_fresnel / 5.0)))
    
                        # if shader is a 'FRESNEL' or 'MINNAERT': slope pigment pattern or aoi
                        # and texture map above, the rest below as one of its entry
    
    
                        if texturesSpec != "" or texturesAlpha != "":
                            if texturesSpec != "":
                                # tabWrite("\n")
                                tabWrite("pigment_pattern {\n")
    
                                # POV-Ray "scale" is not a number of repetitions factor, but its
                                # inverse, a standard scale factor.
                                # Offset seems needed relatively to scale so probably center of the
                                # scale is not the same in blender and POV
                                mappingSpec = "translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>\n" % \
                                              (-t_spec.offset.x, t_spec.offset.y, t_spec.offset.z,
                                               1.0 / t_spec.scale.x, 1.0 / t_spec.scale.y,
                                               1.0 / t_spec.scale.z)
                                tabWrite("uv_mapping image_map{%s \"%s\" %s}\n" % \
                                         (imageFormat(texturesSpec), texturesSpec, imgMap(t_spec)))
    
                            if texturesDif == "":
                                if texturesAlpha != "":
                                    tabWrite("\n")
    
                                    # POV-Ray "scale" is not a number of repetitions factor, but its
                                    # inverse, a standard scale factor.
                                    # Offset seems needed relatively to scale so probably center of the
                                    # scale is not the same in blender and POV
                                    mappingAlpha = " translate <%.4g, %.4g, %.4g> " \
                                                   "scale <%.4g, %.4g, %.4g>\n" % \
                                                   (-t_alpha.offset.x, -t_alpha.offset.y,
                                                    t_alpha.offset.z, 1.0 / t_alpha.scale.x,
                                                    1.0 / t_alpha.scale.y, 1.0 / t_alpha.scale.z)
                                    tabWrite("pigment {pigment_pattern {uv_mapping image_map" \
                                             "{%s \"%s\" %s}%s" % \
                                             (imageFormat(texturesAlpha), texturesAlpha,
                                              imgMap(t_alpha), mappingAlpha))
    
                                    tabWrite("}\n")
                                    tabWrite("pigment_map {\n")
                                    tabWrite("[0 color rgbft<0,0,0,1,1>]\n")
    
                                    tabWrite("[1 color rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>]\n" % \
                                             (col[0], col[1], col[2], povFilter, trans))
    
                                    tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>}\n" % \
                                             (col[0], col[1], col[2], povFilter, trans))
    
                                    # Level 1 is no specular
                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
    
                                    # Level 2 is translated spec
                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
    
                                # POV-Ray "scale" is not a number of repetitions factor, but its
                                # inverse, a standard scale factor.
                                # Offset seems needed relatively to scale so probably center of the
                                # scale is not the same in blender and POV
                                mappingDif = ("translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
                                              (-t_dif.offset.x, -t_dif.offset.y, t_dif.offset.z,
                                               1.0 / t_dif.scale.x, 1.0 / t_dif.scale.y,
                                               1.0 / t_dif.scale.z))
    
                                    # POV-Ray "scale" is not a number of repetitions factor, but its
                                    # inverse, a standard scale factor.
                                    # Offset seems needed relatively to scale so probably center of the
                                    # scale is not the same in blender and POV
                                    mappingAlpha = " translate <%.4g,%.4g,%.4g> " \
                                                   "scale <%.4g,%.4g,%.4g>" % \
                                                   (-t_alpha.offset.x, -t_alpha.offset.y,
                                                    t_alpha.offset.z, 1.0 / t_alpha.scale.x,
                                                    1.0 / t_alpha.scale.y, 1.0 / t_alpha.scale.z)
    
                                    tabWrite("pigment {\n")
                                    tabWrite("pigment_pattern {\n")
    
                                    tabWrite("uv_mapping image_map{%s \"%s\" %s}%s}\n" % \
                                             (imageFormat(texturesAlpha), texturesAlpha,
                                              imgMap(t_alpha), mappingAlpha))
    
                                    tabWrite("pigment_map {\n")
                                    tabWrite("[0 color rgbft<0,0,0,1,1>]\n")
    
                                    tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
                                             (imageFormat(texturesDif), texturesDif,
                                              (imgGamma + imgMap(t_dif)), mappingDif))
    
                                    tabWrite("pigment {uv_mapping image_map {%s \"%s\" %s}%s}\n" % \
                                             (imageFormat(texturesDif), texturesDif,
                                              (imgGamma + imgMap(t_dif)), mappingDif))
    
                                    # Level 1 is no specular
                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
    
                                    # Level 2 is translated specular
                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
    
                                #imageMap = ("{image_map {%s \"%s\" %s }\n" % \
                                #            (imageFormat(textures),textures,imgMap(t_dif)))
                                #tabWrite("uv_mapping pigment %s} %s finish {%s}\n" % \
                                #         (imageMap,mapping,safety(material_finish)))
                                #tabWrite("pigment {uv_mapping image_map {%s \"%s\" %s}%s} " \
                                #         "finish {%s}\n" % \
                                #         (imageFormat(texturesDif), texturesDif, imgMap(t_dif),
                                #          mappingDif, safety(material_finish)))
    
                                # POV-Ray "scale" is not a number of repetitions factor, but its
                                # inverse, a standard scale factor.
                                # Offset seems needed relatively to scale so probably center of the
                                # scale is not the same in blender and POV
                                mappingNor = " translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
                                             (-t_nor.offset.x, -t_nor.offset.y, t_nor.offset.z,
                                              1.0 / t_nor.scale.x, 1.0 / t_nor.scale.y,
                                              1.0 / t_nor.scale.z)
                                #imageMapNor = ("{bump_map {%s \"%s\" %s mapping}" % \
                                #               (imageFormat(texturesNorm),texturesNorm,imgMap(t_nor)))
    
                                tabWrite("normal {uv_mapping bump_map " \
                                         "{%s \"%s\" %s  bump_size %.4g }%s}\n" % \
                                         (imageFormat(texturesNorm), texturesNorm, imgMap(t_nor),
                                          t_nor.normal_factor * 10, mappingNor))
    
                            if texturesSpec != "":
    
                            ##################Second index for mapping specular max value###############
    
                    if texturesDif == "" and material.pov.replacement_text == "":
    
                        if texturesAlpha != "":
    
                            # POV-Ray "scale" is not a number of repetitions factor, but its inverse,
                            # a standard scale factor.
                            # Offset seems needed relatively to scale so probably center of the scale
                            # is not the same in blender and POV
                            # Strange that the translation factor for scale is not the same as for
                            # translate.
                            # TODO: verify both matches with blender internal.
                            mappingAlpha = " translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>\n" % \
                                           (-t_alpha.offset.x, -t_alpha.offset.y, t_alpha.offset.z,
                                            1.0 / t_alpha.scale.x, 1.0 / t_alpha.scale.y,
                                            1.0 / t_alpha.scale.z)
                            tabWrite("pigment {pigment_pattern {uv_mapping image_map" \
                                     "{%s \"%s\" %s}%s}\n" % \
                                     (imageFormat(texturesAlpha), texturesAlpha, imgMap(t_alpha),
                                      mappingAlpha))
    
                            tabWrite("pigment_map {\n")
                            tabWrite("[0 color rgbft<0,0,0,1,1>]\n")
    
                            tabWrite("[1 color rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>]\n" % \
                                     (col[0], col[1], col[2], povFilter, trans))
    
                            tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>}\n" % \
                                     (col[0], col[1], col[2], povFilter, trans))
    
                        if texturesSpec != "":
    
                            # Level 3 is full specular
                            tabWrite("finish {%s}\n" % (safety(material_finish, Level=3)))
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                        else:
    
                            # Level 2 is translated specular
                            tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
    
                    elif material.pov.replacement_text == "":
                        # POV-Ray "scale" is not a number of repetitions factor, but its inverse,
                        # a standard scale factor.
                        # Offset seems needed relatively to scale so probably center of the scale is
                        # not the same in blender and POV
                        # Strange that the translation factor for scale is not the same as for
                        # translate.
                        # TODO: verify both matches with blender internal.
                        mappingDif = ("translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
                                      (-t_dif.offset.x, -t_dif.offset.y, t_dif.offset.z,
                                       1.0 / t_dif.scale.x, 1.0 / t_dif.scale.y, 1.0 / t_dif.scale.z))
    
                        if texturesAlpha != "":
    
                            # Strange that the translation factor for scale is not the same as for
                            # translate.
                            # TODO: verify both matches with blender internal.
                            mappingAlpha = "translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
                                           (-t_alpha.offset.x, -t_alpha.offset.y, t_alpha.offset.z,
                                            1.0 / t_alpha.scale.x, 1.0 / t_alpha.scale.y,
                                            1.0 / t_alpha.scale.z)
                            tabWrite("pigment {pigment_pattern {uv_mapping image_map" \
                                     "{%s \"%s\" %s}%s}\n" % \
                                     (imageFormat(texturesAlpha), texturesAlpha, imgMap(t_alpha),
                                      mappingAlpha))
    
                            tabWrite("pigment_map {\n")
                            tabWrite("[0 color rgbft<0,0,0,1,1>]\n")
    
                            tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
                                     (imageFormat(texturesDif), texturesDif,
                                      (imgMap(t_dif) + imgGamma), mappingDif))
    
                            tabWrite("pigment {\n")
                            tabWrite("uv_mapping image_map {\n")
    
                            #tabWrite("%s \"%s\" %s}%s\n" % \
                            #         (imageFormat(texturesDif), texturesDif,
                            #         (imgGamma + imgMap(t_dif)),mappingDif))
    
                            tabWrite("%s \"%s\" \n" % (imageFormat(texturesDif), texturesDif))
                            tabWrite("%s\n" % (imgGamma + imgMap(t_dif)))
    
                            tabWrite("}\n")
                            tabWrite("%s\n" % mappingDif)
                            tabWrite("}\n")
    
                        if texturesSpec != "":
    
                            # Level 3 is full specular
                            tabWrite("finish {%s}\n" % (safety(material_finish, Level=3)))
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                        else:
    
                            # Level 2 is translated specular
                            tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
                        ## scale 1 rotate y*0
    
                        #imageMap = ("{image_map {%s \"%s\" %s }" % \
                        #            (imageFormat(textures), textures,imgMap(t_dif)))
                        #file.write("\n\t\t\tuv_mapping pigment %s} %s finish {%s}" % \
                        #           (imageMap, mapping, safety(material_finish)))
                        #file.write("\n\t\t\tpigment {uv_mapping image_map " \
                        #           "{%s \"%s\" %s}%s} finish {%s}" % \
                        #           (imageFormat(texturesDif), texturesDif,imgMap(t_dif),
                        #            mappingDif, safety(material_finish)))
                    if texturesNorm != "" and material.pov.replacement_text == "":
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                        ## scale 1 rotate y*0
    
                        # POV-Ray "scale" is not a number of repetitions factor, but its inverse,
                        # a standard scale factor.
                        # Offset seems needed relatively to scale so probably center of the scale is
                        # not the same in blender and POV
                        mappingNor = (" translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
                                      (-t_nor.offset.x, -t_nor.offset.y, t_nor.offset.z,
                                       1.0 / t_nor.scale.x, 1.0 / t_nor.scale.y, 1.0 / t_nor.scale.z))
                        #imageMapNor = ("{bump_map {%s \"%s\" %s mapping}" % \
                        #               (imageFormat(texturesNorm),texturesNorm,imgMap(t_nor)))
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                        #We were not using the above maybe we should?
    
                        tabWrite("normal {uv_mapping bump_map {%s \"%s\" %s  bump_size %.4g }%s}\n" % \
                                 (imageFormat(texturesNorm), texturesNorm, imgMap(t_nor),
                                  t_nor.normal_factor * 10.0, mappingNor))
                    if texturesSpec != "" and material.pov.replacement_text == "":
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
                    #End of slope/ior texture_map
    
                    if material.diffuse_shader == 'MINNAERT' and material.pov.replacement_text == "":
    
                        tabWrite("]\n")
                        tabWrite("}\n")
    
                    if material.diffuse_shader == 'FRESNEL' and material.pov.replacement_text == "":
    
                        c = 1
                        while (c <= lampCount):
                            tabWrite("]\n")
                            tabWrite("}\n")
                            c += 1
    
                    ####################################################################################
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    index[0] = idx
                    idx += 1
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                tabWrite("face_indices {\n")
                tabWrite("%d" % (len(me_faces) + quadCount))  # faces count
    
                for fi, f in enumerate(me_faces):
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    fv = faces_verts[fi]
                    material_index = f.material_index
                    if len(fv) == 4:
    
                        indices = (0, 1, 2), (0, 2, 3)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    else:
    
                        indices = ((0, 1, 2),)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                    if vcol_layer:
                        col = vcol_layer[fi]
    
                        if len(fv) == 4:
                            cols = col.color1, col.color2, col.color3, col.color4
                        else:
                            cols = col.color1, col.color2, col.color3
    
    
                    if not me_materials or me_materials[material_index] is None:  # No materials
    
                        for i1, i2, i3 in indices:
    
                            if not scene.pov.tempfiles_enable and scene.pov.list_lf_enable:
    
                                file.write(",\n")
    
                                # vert count
                                file.write(tabStr + "<%d,%d,%d>" % (fv[i1], fv[i2], fv[i3]))
    
                            else:
                                file.write(", ")
                                file.write("<%d,%d,%d>" % (fv[i1], fv[i2], fv[i3]))  # vert count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    else:
                        material = me_materials[material_index]
    
                        for i1, i2, i3 in indices:
    
                            if me.vertex_colors and material.use_vertex_color_paint:
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                                # Colour per vertex - vertex colour
    
                                col1 = cols[i1]
                                col2 = cols[i2]
                                col3 = cols[i3]
    
                                ci1 = vertCols[col1[0], col1[1], col1[2], material_index][0]
                                ci2 = vertCols[col2[0], col2[1], col2[2], material_index][0]
                                ci3 = vertCols[col3[0], col3[1], col3[2], material_index][0]
                            else:
                                # Colour per material - flat material colour
                                diffuse_color = material.diffuse_color
    
                                ci1 = ci2 = ci3 = vertCols[diffuse_color[0], diffuse_color[1], \
                                                  diffuse_color[2], f.material_index][0]
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                            if not scene.pov.tempfiles_enable and scene.pov.list_lf_enable:
    
                                file.write(",\n")
    
                                file.write(tabStr + "<%d,%d,%d>, %d,%d,%d" % \
                                           (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3))  # vert count
    
                            else:
                                file.write(", ")
    
                                file.write("<%d,%d,%d>, %d,%d,%d" % \
                                           (fv[i1], fv[i2], fv[i3], ci1, ci2, ci3))  # vert count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                # normal_indices indices
    
                tabWrite("normal_indices {\n")
                tabWrite("%d" % (len(me_faces) + quadCount))  # faces count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                for fi, fv in enumerate(faces_verts):
    
                    if len(fv) == 4:
    
                        indices = (0, 1, 2), (0, 2, 3)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    else:
    
                        indices = ((0, 1, 2),)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                    for i1, i2, i3 in indices:
    
                        if me_faces[fi].use_smooth:
    
                            if not scene.pov.tempfiles_enable and scene.pov.list_lf_enable:
    
                                file.write(",\n")
                                file.write(tabStr + "<%d,%d,%d>" %\
                                (uniqueNormals[verts_normals[fv[i1]]][0],\
                                 uniqueNormals[verts_normals[fv[i2]]][0],\
                                 uniqueNormals[verts_normals[fv[i3]]][0]))  # vert count
                            else:
                                file.write(", ")
                                file.write("<%d,%d,%d>" %\
                                (uniqueNormals[verts_normals[fv[i1]]][0],\
                                 uniqueNormals[verts_normals[fv[i2]]][0],\
                                 uniqueNormals[verts_normals[fv[i3]]][0]))  # vert count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                        else:
                            idx = uniqueNormals[faces_normals[fi]][0]
    
                            if not scene.pov.tempfiles_enable and scene.pov.list_lf_enable:
    
                                file.write(",\n")
                                file.write(tabStr + "<%d,%d,%d>" % (idx, idx, idx))  # vert count
                            else:
                                file.write(", ")
                                file.write("<%d,%d,%d>" % (idx, idx, idx))  # vert count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                if uv_layer:
    
                    tabWrite("uv_indices {\n")
                    tabWrite("%d" % (len(me_faces) + quadCount))  # faces count
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                    for fi, fv in enumerate(faces_verts):
    
                        if len(fv) == 4:
    
                            indices = (0, 1, 2), (0, 2, 3)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                        else:
    
                            indices = ((0, 1, 2),)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                        uv = uv_layer[fi]
                        if len(faces_verts[fi]) == 4:
    
                            uvs = uv.uv1[:], uv.uv2[:], uv.uv3[:], uv.uv4[:]
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                        else:
    
                            uvs = uv.uv1[:], uv.uv2[:], uv.uv3[:]
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                        for i1, i2, i3 in indices:
    
                            if not scene.pov.tempfiles_enable and scene.pov.list_lf_enable:
    
                                file.write(",\n")
                                file.write(tabStr + "<%d,%d,%d>" % (
                                         uniqueUVs[uvs[i1]][0],\
                                         uniqueUVs[uvs[i2]][0],\
                                         uniqueUVs[uvs[i3]][0]))
                            else:
                                file.write(", ")
                                file.write("<%d,%d,%d>" % (
                                         uniqueUVs[uvs[i1]][0],\
                                         uniqueUVs[uvs[i2]][0],\
                                         uniqueUVs[uvs[i3]][0]))
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                if me.materials:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                    try:
    
                        material = me.materials[0]  # dodgy
    
                        writeObjectMaterial(material, ob)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                    except IndexError:
                        print(me)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                writeMatrix(matrix)
    
    
                #Importance for radiosity sampling added here:
    
                tabWrite("radiosity { \n")
                tabWrite("importance %3g \n" % importance)
                tabWrite("}\n")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
                tabWrite("}\n")  # End of mesh block
                tabWrite("%s\n" % name)  # Use named declaration to allow reference e.g. for baking. MR
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
                bpy.data.meshes.remove(me)
    
        def exportWorld(world):
    
            render = scene.render
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            camera = scene.camera
    
            matrix = global_matrix * camera.matrix_world
    
    Luca Bonavita's avatar
    Luca Bonavita committed
            if not world:
                return
    
            #############Maurice####################################
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            #These lines added to get sky gradient (visible with PNG output)
            if world:
                #For simple flat background:
                if not world.use_sky_blend:
    
                    # Non fully transparent background could premultiply alpha and avoid anti-aliasing
                    # display issue:
    
    Maurice Raybaud's avatar
     
    Maurice Raybaud committed
                    if render.alpha_mode == 'PREMUL':
    
                        tabWrite("background {rgbt<%.3g, %.3g, %.3g, 0.75>}\n" % \
                                 (world.horizon_color[:]))
    
                    #Currently using no alpha with Sky option:
                    elif render.alpha_mode == 'SKY':
    
                        tabWrite("background {rgbt<%.3g, %.3g, %.3g, 0>}\n" % (world.horizon_color[:]))
    
                        tabWrite("background {rgbt<%.3g, %.3g, %.3g, 1>}\n" % (world.horizon_color[:]))
    
                worldTexCount = 0
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                #For Background image textures
    
                for t in world.texture_slots:  # risk to write several sky_spheres but maybe ok.
    
                    if t and t.texture.type is not None:
    
                        worldTexCount += 1
    
                    # XXX No enable checkbox for world textures yet (report it?)
                    #if t and t.texture.type == 'IMAGE' and t.use:
                    if t and t.texture.type == 'IMAGE':
    
                        image_filename = path_image(t.texture.image.filepath)
                        if t.texture.image.filepath != image_filename:
                            t.texture.image.filepath = image_filename
    
                        if image_filename != "" and t.use_map_blend:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                            texturesBlend = image_filename
                            #colvalue = t.default_value
                            t_blend = t
    
                        # Commented below was an idea to make the Background image oriented as camera
                        # taken here:
    #http://news.povray.org/povray.newusers/thread/%3Cweb.4a5cddf4e9c9822ba2f93e20@news.povray.org%3E/
                        # Replace 4/3 by the ratio of each image found by some custom or existing
                        # function
                        #mappingBlend = (" translate <%.4g,%.4g,%.4g> rotate z*degrees" \
                        #                "(atan((camLocation - camLookAt).x/(camLocation - " \
                        #                "camLookAt).y)) rotate x*degrees(atan((camLocation - " \
                        #                "camLookAt).y/(camLocation - camLookAt).z)) rotate y*" \
                        #                "degrees(atan((camLocation - camLookAt).z/(camLocation - " \
                        #                "camLookAt).x)) scale <%.4g,%.4g,%.4g>b" % \
                        #                (t_blend.offset.x / 10 , t_blend.offset.y / 10 ,
                        #                 t_blend.offset.z / 10, t_blend.scale.x ,
                        #                 t_blend.scale.y , t_blend.scale.z))
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                        #using camera rotation valuesdirectly from blender seems much easier
    
                        if t_blend.texture_coords == 'ANGMAP':
                            mappingBlend = ""
    
                            mappingBlend = " translate <%.4g-0.5,%.4g-0.5,%.4g-0.5> rotate<0,0,0>  " \
                                           "scale <%.4g,%.4g,%.4g>" % \
                                           (t_blend.offset.x / 10.0, t_blend.offset.y / 10.0,
                                            t_blend.offset.z / 10.0, t_blend.scale.x * 0.85,
                                            t_blend.scale.y * 0.85, t_blend.scale.z * 0.85)
    
                            # The initial position and rotation of the pov camera is probably creating
                            # the rotation offset should look into it someday but at least background
                            # won't rotate with the camera now.
                        # Putting the map on a plane would not introduce the skysphere distortion and
                        # allow for better image scale matching but also some waay to chose depth and
                        # size of the plane relative to camera.
    
                        tabWrite("sky_sphere {\n")
                        tabWrite("pigment {\n")
    
                        tabWrite("image_map{%s \"%s\" %s}\n" % \
                                 (imageFormat(texturesBlend), texturesBlend, imgMapBG(t_blend)))
    
                        tabWrite("}\n")
                        tabWrite("%s\n" % (mappingBlend))
    
                        # The following layered pigment opacifies to black over the texture for
                        # transmit below 1 or otherwise adds to itself
    
                        tabWrite("pigment {rgb 0 transmit %s}\n" % (t.texture.intensity))
    
                        tabWrite("}\n")
                        #tabWrite("scale 2\n")
                        #tabWrite("translate -1\n")
    
    
                #For only Background gradient
    
                if worldTexCount == 0:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                    if world.use_sky_blend:
    
                        tabWrite("sky_sphere {\n")
                        tabWrite("pigment {\n")
    
                        # maybe Should follow the advice of POV doc about replacing gradient
                        # for skysphere..5.5
                        tabWrite("gradient y\n")
    
                        if render.alpha_mode == 'STRAIGHT':
    
                            tabWrite("[0.0 rgbt<%.3g, %.3g, %.3g, 1>]\n" % (world.horizon_color[:]))
                            tabWrite("[1.0 rgbt<%.3g, %.3g, %.3g, 1>]\n" % (world.zenith_color[:]))
    
                        elif render.alpha_mode == 'PREMUL':
    
                            tabWrite("[0.0 rgbt<%.3g, %.3g, %.3g, 0.99>]\n" % (world.horizon_color[:]))
    
                            # aa premult not solved with transmit 1
                            tabWrite("[1.0 rgbt<%.3g, %.3g, %.3g, 0.99>]\n" % (world.zenith_color[:]))
    
                            tabWrite("[0.0 rgbt<%.3g, %.3g, %.3g, 0>]\n" % (world.horizon_color[:]))
                            tabWrite("[1.0 rgbt<%.3g, %.3g, %.3g, 0>]\n" % (world.zenith_color[:]))
                        tabWrite("}\n")
                        tabWrite("}\n")
                        tabWrite("}\n")
    
                        # Sky_sphere alpha (transmit) is not translating into image alpha the same
                        # way as 'background'
    
                #if world.light_settings.use_indirect_light:
    
                # Maybe change the above to a funtion copyInternalRenderer settings when
                # user pushes a button, then:
                #scene.pov.radio_enable = world.light_settings.use_indirect_light
                # and other such translations but maybe this would not be allowed either?
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
            ###############################################################
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Campbell Barton's avatar
    Campbell Barton committed
            mist = world.mist_settings
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
            if mist.use_mist:
    
                tabWrite("fog {\n")
                tabWrite("distance %.6f\n" % mist.depth)
    
                tabWrite("color rgbt<%.3g, %.3g, %.3g, %.3g>\n" % \
                         (world.horizon_color[:] + (1.0 - mist.intensity,)))
    
                #tabWrite("fog_offset %.6f\n" % mist.start)
                #tabWrite("fog_alt 5\n")
                #tabWrite("turbulence 0.2\n")
                #tabWrite("turb_depth 0.3\n")
                tabWrite("fog_type 1\n")
                tabWrite("}\n")
    
                tabWrite("scattering { 1, rgb <%.4g, %.4g, %.4g>}\n" % scene.pov.media_color[:])
                tabWrite("samples %.d\n" % scene.pov.media_samples)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
        def exportGlobalSettings(scene):
    
    
            tabWrite("global_settings {\n")
            tabWrite("assumed_gamma 1.0\n")
    
            tabWrite("max_trace_level %d\n" % scene.pov.max_trace_level)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                tabWrite("adc_bailout %.4g\n" % scene.pov.radio_adc_bailout)
                tabWrite("always_sample %d\n" % scene.pov.radio_always_sample)
                tabWrite("brightness %.4g\n" % scene.pov.radio_brightness)
                tabWrite("count %d\n" % scene.pov.radio_count)
                tabWrite("error_bound %.4g\n" % scene.pov.radio_error_bound)
                tabWrite("gray_threshold %.4g\n" % scene.pov.radio_gray_threshold)
                tabWrite("low_error_factor %.4g\n" % scene.pov.radio_low_error_factor)
                tabWrite("media %d\n" % scene.pov.radio_media)
                tabWrite("minimum_reuse %.4g\n" % scene.pov.radio_minimum_reuse)
                tabWrite("nearest_count %d\n" % scene.pov.radio_nearest_count)
                tabWrite("normal %d\n" % scene.pov.radio_normal)
                tabWrite("pretrace_start %.3g\n" % scene.pov.radio_pretrace_start)
                tabWrite("pretrace_end %.3g\n" % scene.pov.radio_pretrace_end)
                tabWrite("recursion_limit %d\n" % scene.pov.radio_recursion_limit)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            for material in bpy.data.materials:
                if material.subsurface_scattering.use and once:
    
                    # In pov, the scale has reversed influence compared to blender. these number
                    # should correct that
                    tabWrite("mm_per_unit %.6f\n" % \
                             (material.subsurface_scattering.scale * (-100.0) + 15.0))
                    # In POV-Ray, the scale factor for all subsurface shaders needs to be the same
                    once = 0
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                tabWrite("ambient_light rgb<%.3g, %.3g, %.3g>\n" % world.ambient_color[:])
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
            if material.pov.photons_refraction or material.pov.photons_reflection:
    
                tabWrite("spacing %.6f\n" % scene.pov.photon_spacing)
                tabWrite("max_trace_level %d\n" % scene.pov.photon_max_trace_level)
                tabWrite("adc_bailout %.3g\n" % scene.pov.photon_adc_bailout)
                tabWrite("gather %d, %d\n" % (scene.pov.photon_gather_min, scene.pov.photon_gather_max))
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                    # Why are the newlines needed?
                    file.write("\n")
                    file.write(txt.as_string())
                    file.write("\n")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        sel = scene.objects
    
        comments = scene.pov.comments_enable
        if not scene.pov.tempfiles_enable and comments:
            file.write("//----------------------------------------------\n" \
                       "//--Exported with POV-Ray exporter for Blender--\n" \
                       "//----------------------------------------------\n\n")
    
        if not scene.pov.tempfiles_enable and comments:
    
            file.write("\n//--CUSTOM CODE--\n\n")
        exportCustomCode()
    
        if not scene.pov.tempfiles_enable and comments:
    
            file.write("\n//--Global settings and background--\n\n")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        exportGlobalSettings(scene)
    
        if not scene.pov.tempfiles_enable and comments:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        exportWorld(scene.world)
    
        if not scene.pov.tempfiles_enable and comments:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        exportCamera()
    
        if not scene.pov.tempfiles_enable and comments:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        exportLamps([l for l in sel if l.type == 'LAMP'])
    
        if not scene.pov.tempfiles_enable and comments:
    
            file.write("\n//--Material Definitions--\n\n")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        # Convert all materials to strings we can access directly per vertex.
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        #exportMaterials()
    
        writeMaterial(None)  # default material
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        for material in bpy.data.materials:
    
            if material.users > 0:
    
        if not scene.pov.tempfiles_enable and comments:
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        exportMeta([l for l in sel if l.type == 'META'])
    
        if not scene.pov.tempfiles_enable and comments:
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        exportMeshs(scene, sel)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        #What follow used to happen here:
        #exportCamera()
        #exportWorld(scene.world)
        #exportGlobalSettings(scene)
    
        # MR:..and the order was important for an attempt to implement pov 3.7 baking
        #      (mesh camera) comment for the record
    
        # CR: Baking should be a special case than. If "baking", than we could change the order.
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        #print("pov file closed %s" % file.closed)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        file.close()
    
        #print("pov file closed %s" % file.closed)
    
    def write_pov_ini(scene, filename_ini, filename_pov, filename_image):
        #scene = bpy.data.scenes[0]
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        render = scene.render
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        x = int(render.resolution_x * render.resolution_percentage * 0.01)
        y = int(render.resolution_y * render.resolution_percentage * 0.01)
    
    
        file = open(filename_ini, "w")
    
        file.write("Input_File_Name='%s'\n" % filename_pov)
        file.write("Output_File_Name='%s'\n" % filename_image)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        file.write("Width=%d\n" % x)
        file.write("Height=%d\n" % y)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        # Border render.
        if render.use_border:
            file.write("Start_Column=%4g\n" % render.border_min_x)
            file.write("End_Column=%4g\n" % (render.border_max_x))
    
    
    Campbell Barton's avatar
    Campbell Barton committed
            file.write("Start_Row=%4g\n" % (1.0 - render.border_max_y))
            file.write("End_Row=%4g\n" % (1.0 - render.border_min_y))
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        file.write("Bounding_Method=2\n")  # The new automatic BSP is faster in most scenes
    
        # Activated (turn this back off when better live exchange is done between the two programs
        # (see next comment)
        file.write("Display=1\n")
    
        # PNG, with POV-Ray 3.7, can show background color with alpha. In the long run using the
        # POV-Ray interactive preview like bishop 3D could solve the preview for all formats.
        file.write("Output_File_Type=N\n")
    
        #file.write("Output_File_Type=T\n") # TGA, best progressive loading
        file.write("Output_Alpha=1\n")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        if scene.pov.antialias_enable:
            # method 2 (recursive) with higher max subdiv forced because no mipmapping in POV-Ray
            # needs higher sampling.
            # aa_mapping = {"5": 2, "8": 3, "11": 4, "16": 5}
    
            method = {"0": 1, "1": 2}
            file.write("Antialias=on\n")
    
            file.write("Sampling_Method=%s\n" % method[scene.pov.antialias_method])
            file.write("Antialias_Depth=%d\n" % scene.pov.antialias_depth)
            file.write("Antialias_Threshold=%.3g\n" % scene.pov.antialias_threshold)
            file.write("Antialias_Gamma=%.3g\n" % scene.pov.antialias_gamma)
            if scene.pov.jitter_enable:
    
                file.write("Jitter_Amount=%3g\n" % scene.pov.jitter_amount)
    
                file.write("Jitter=off\n")  # prevent animation flicker
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        else:
    
            file.write("Antialias=off\n")
        #print("ini file closed %s" % file.closed)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        file.close()
    
        #print("ini file closed %s" % file.closed)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    class PovrayRender(bpy.types.RenderEngine):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bl_idname = 'POVRAY_RENDER'
    
        def _export(self, scene, povPath, renderImagePath):
    
    Luca Bonavita's avatar
    Luca Bonavita committed
            import tempfile
    
                self._temp_file_in = tempfile.NamedTemporaryFile(suffix=".pov", delete=False).name
    
                # PNG with POV 3.7, can show the background color with alpha. In the long run using the
                # POV-Ray interactive preview like bishop 3D could solve the preview for all formats.
                self._temp_file_out = tempfile.NamedTemporaryFile(suffix=".png", delete=False).name
    
                #self._temp_file_out = tempfile.NamedTemporaryFile(suffix=".tga", delete=False).name
                self._temp_file_ini = tempfile.NamedTemporaryFile(suffix=".ini", delete=False).name
            else:
                self._temp_file_in = povPath + ".pov"
    
                # PNG with POV 3.7, can show the background color with alpha. In the long run using the
                # POV-Ray interactive preview like bishop 3D could solve the preview for all formats.
                self._temp_file_out = renderImagePath + ".png"
    
                #self._temp_file_out = renderImagePath + ".tga"
                self._temp_file_ini = povPath + ".ini"
                '''
                self._temp_file_in = "/test.pov"
    
                # PNG with POV 3.7, can show the background color with alpha. In the long run using the
                # POV-Ray interactive preview like bishop 3D could solve the preview for all formats.
                self._temp_file_out = "/test.png"
    
                #self._temp_file_out = "/test.tga"
                self._temp_file_ini = "/test.ini"
                '''
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
            def info_callback(txt):
    
                self.update_stats("", "POV-Ray 3.7: " + txt)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
            write_pov(self._temp_file_in, scene, info_callback)
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
            try:
    
                os.remove(self._temp_file_out)  # so as not to load the old file
    
    Campbell Barton's avatar
    Campbell Barton committed
            except OSError:
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                pass
    
    
            write_pov_ini(scene, self._temp_file_ini, self._temp_file_in, self._temp_file_out)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
            if scene.pov.command_line_switches != "":
                for newArg in scene.pov.command_line_switches.split(" "):
    
            if sys.platform[:3] == "win":
    
                self._is_windows = True
                #extra_args.append("/EXIT")
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                import winreg
    
                import platform as pltfrm
                if pltfrm.architecture()[0] == "64bit":
                    bitness = 64
                else:
                    bitness = 32
    
    
                regKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\POV-Ray\\v3.7\\Windows")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                if bitness == 64:
    
                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
    
                        self._process = subprocess.Popen(
                                [pov_binary, self._temp_file_ini] + extra_args,
                                stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
                        # This would work too but means we have to wait until its done:
                        # os.system("%s %s" % (pov_binary, self._temp_file_ini))
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                    except OSError:
                        # someone might run povray 32 bits on a 64 bits blender machine
                        try:
    
                            pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
    
                            self._process = subprocess.Popen(
                                    [pov_binary, self._temp_file_ini] + extra_args,
                                    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                            print("POV-Ray 3.7: could not execute '%s', possibly POV-Ray isn't " \
                                  "installed" % pov_binary)
    
                            import traceback
                            traceback.print_exc()
                            print ("***-DONE-***")
                            return False
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                        else:
                            print("POV-Ray 3.7 64 bits could not execute, running 32 bits instead")
    
                            print("Command line arguments passed: " + str(extra_args))
                            return True
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                    else:
                        print("POV-Ray 3.7 64 bits found")
    
                        print("Command line arguments passed: " + str(extra_args))
                        return True
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
                else:
    
                        pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine"
    
                        self._process = subprocess.Popen(
                                [pov_binary, self._temp_file_ini] + extra_args,
                                stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                    # someone might also run povray 64 bits with a 32 bits build of blender.
    
                            pov_binary = winreg.QueryValueEx(regKey, "Home")[0] + "\\bin\\pvengine64"
    
                            self._process = subprocess.Popen(
                                    [pov_binary, self._temp_file_ini] + extra_args,
                                    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                            print("POV-Ray 3.7: could not execute '%s', possibly POV-Ray isn't " \
                                  "installed" % pov_binary)
    
                            import traceback
                            traceback.print_exc()
                            print ("***-DONE-***")
                            return False
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                            print("Running POV-Ray 3.7 64 bits build with 32 bits Blender,\n" \
                                  "You might want to run Blender 64 bits as well.")
    
                            print("Command line arguments passed: " + str(extra_args))
                            return True
    
    Campbell Barton's avatar
    Campbell Barton committed
    
    
                    else:
                        print("POV-Ray 3.7 32 bits found")
    
                        print("Command line arguments passed: " + str(extra_args))
                        return True
    
            else:
                # DH - added -d option to prevent render window popup which leads to segfault on linux
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                isExists = False
                sysPathList = os.getenv("PATH").split(':')
                sysPathList.append("")
    
                for dirName in sysPathList:
                    if (os.path.exists(os.path.join(dirName, pov_binary))):
                        isExists = True
                        break
    
                if not isExists:
                    print("POV-Ray 3.7: could not found execute '%s' - not if PATH" % pov_binary)
                    import traceback
                    traceback.print_exc()
                    print ("***-DONE-***")
                    return False
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
                    self._process = subprocess.Popen([pov_binary, self._temp_file_ini] + extra_args,
                                                     stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    
    
                except OSError:
                    # TODO, report api
                    print("POV-Ray 3.7: could not execute '%s'" % pov_binary)
                    import traceback
                    traceback.print_exc()
                    print ("***-DONE-***")
                    return False
    
                else:
                    print("POV-Ray 3.7 found")
                    print("Command line arguments passed: " + str(extra_args))
                    return True
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        def _cleanup(self):
            for f in (self._temp_file_in, self._temp_file_ini, self._temp_file_out):
    
                for i in range(5):
                    try:
                        os.unlink(f)
                        break
                    except OSError:
                        # Wait a bit before retrying file might be still in use by Blender,
                        # and Windows does not know how to delete a file in use!
                        time.sleep(self.DELAY)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        def render(self, scene):
    
            import tempfile
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
            print("***INITIALIZING***")
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    ##WIP output format
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    ##        if r.file_format == 'OPENEXR':
    ##            fformat = 'EXR'
    ##            render.color_mode = 'RGBA'
    ##        else:
    ##            fformat = 'TGA'
    
    ##            r.file_format = 'TARGA'
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    ##            r.color_mode = 'RGBA'
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
            blendSceneName = bpy.data.filepath.split(os.path.sep)[-1].split(".")[0]
            povSceneName = ""
            povPath = ""
            renderImagePath = ""