From 59ea4fc9f11f47922aaec7f48ea0f2633ad4dc80 Mon Sep 17 00:00:00 2001
From: Maurice Raybaud <mauriceraybaud@hotmail.fr>
Date: Fri, 29 Apr 2016 18:11:48 +0200
Subject: [PATCH] fixed: *transmit value removed from ambient light to avoid
 parse warning How do we generate a transparent background now ?

*name 'using_uberpov' was not defined in shading.py

added:
*moved exportPattern(texture) from render.py to shading.py
*moved texture influences from render.py to a function in shading.py
---
 render_povray/render.py  | 1003 +-------------------------------------
 render_povray/shading.py | 1001 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 1009 insertions(+), 995 deletions(-)

diff --git a/render_povray/render.py b/render_povray/render.py
index acc27a038..822e1be79 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -52,8 +52,8 @@ def imageFormat(imgF):
         'HDR': "hdr",
     }.get(os.path.splitext(imgF)[-1].upper(), "")
 
-    if not ext:
-        print(" WARNING: texture image format not supported ")
+    #if not ext:
+        #print(" WARNING: texture image has no extension") #too verbose 
 
     return ext
 
@@ -312,477 +312,7 @@ def write_object_modifiers(scene,ob,File):
         # if scene.pov.photon_enable == False:
             # File.write("caustics %.4g\n"%ob.pov.fake_caustics_power)
     
-def exportPattern(texture):
-    tex=texture
-    pat = tex.pov
-    PATname = "PAT_%s"%string_strip_hyphen(bpy.path.clean_name(tex.name))
-    mappingDif = ("translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
-          (pat.tex_mov_x, pat.tex_mov_y, pat.tex_mov_z,
-           1.0 / pat.tex_scale_x, 1.0 / pat.tex_scale_y, 1.0 / pat.tex_scale_z))
-    texStrg=""
-    def exportColorRamp(texture):
-        tex=texture
-        pat = tex.pov      
-        colRampStrg="color_map {\n"
-        numColor=0
-        for el in tex.color_ramp.elements:
-            numColor+=1
-            pos = el.position
-            col=el.color
-            colR,colG,colB,colA = col[0],col[1],col[2],1-col[3]
-            if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :
-                colRampStrg+="[%.4g color rgbf<%.4g,%.4g,%.4g,%.4g>] \n"%(pos,colR,colG,colB,colA)
-            if pat.tex_pattern_type in {'brick','checker'} and numColor < 3:
-                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-            if pat.tex_pattern_type == 'hexagon' and numColor < 4 :
-                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-            if pat.tex_pattern_type == 'square' and numColor < 5 :
-                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-            if pat.tex_pattern_type == 'triangular' and numColor < 7 :
-                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-                      
-        colRampStrg+="} \n"
-        #end color map
-        return colRampStrg
-    #much work to be done here only defaults translated for now:
-    #pov noise_generator 3 means perlin noise
-    if pat.tex_pattern_type == 'emulator':
-        texStrg+="pigment {\n"
-        ####################### EMULATE BLENDER VORONOI TEXTURE ####################
-        if tex.type == 'VORONOI':  
-            texStrg+="crackle\n"
-            texStrg+="    offset %.4g\n"%tex.nabla
-            texStrg+="    form <%.4g,%.4g,%.4g>\n"%(tex.weight_1, tex.weight_2, tex.weight_3)
-            if tex.distance_metric == 'DISTANCE':
-                texStrg+="    metric 2.5\n"          
-            if tex.distance_metric == 'DISTANCE_SQUARED':
-                texStrg+="    metric 2.5\n"
-                texStrg+="    poly_wave 2\n"                
-            if tex.distance_metric == 'MINKOVSKY': 
-                texStrg+="    metric %s\n"%tex.minkovsky_exponent             
-            if tex.distance_metric == 'MINKOVSKY_FOUR': 
-                texStrg+="    metric 4\n"
-            if tex.distance_metric == 'MINKOVSKY_HALF': 
-                texStrg+="    metric 0.5\n"
-            if tex.distance_metric == 'CHEBYCHEV': 
-                texStrg+="    metric 10\n"
-            if tex.distance_metric == 'MANHATTAN': 
-                texStrg+="    metric 1\n"
-
-            if tex.color_mode == 'POSITION':
-                texStrg+="solid\n"
-            texStrg+="scale 0.25\n"
-            
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<0,0,0,1>]\n"
-                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
-                texStrg+="}\n"            
-        ####################### EMULATE BLENDER CLOUDS TEXTURE ####################
-        if tex.type == 'CLOUDS':  
-            if tex.noise_type == 'SOFT_NOISE':
-                texStrg+="wrinkles\n"
-                texStrg+="scale 0.25\n"
-            else:
-                texStrg+="granite\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<0,0,0,1>]\n"
-                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
-                texStrg+="}\n"
-        ####################### EMULATE BLENDER WOOD TEXTURE ####################
-        if tex.type == 'WOOD':
-            if tex.wood_type == 'RINGS':
-                texStrg+="wood\n"
-                texStrg+="scale 0.25\n"
-            if tex.wood_type == 'RINGNOISE':
-                texStrg+="wood\n"
-                texStrg+="scale 0.25\n"
-                texStrg+="turbulence %.4g\n"%(tex.turbulence/100)
-            if tex.wood_type == 'BANDS':
-                texStrg+="marble\n"
-                texStrg+="scale 0.25\n"
-                texStrg+="rotate <45,-45,45>\n"
-            if tex.wood_type == 'BANDNOISE':
-                texStrg+="marble\n"
-                texStrg+="scale 0.25\n"
-                texStrg+="rotate <45,-45,45>\n"
-                texStrg+="turbulence %.4g\n"%(tex.turbulence/10)
-            
-            if tex.noise_basis_2 == 'SIN':
-                texStrg+="sine_wave\n"
-            if tex.noise_basis_2 == 'TRI':
-                texStrg+="triangle_wave\n"
-            if tex.noise_basis_2 == 'SAW':
-                texStrg+="ramp_wave\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<0,0,0,0>]\n"
-                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
-                texStrg+="}\n"
-        ####################### EMULATE BLENDER STUCCI TEXTURE ####################
-        if tex.type == 'STUCCI':  
-            texStrg+="bozo\n"
-            texStrg+="scale 0.25\n"
-            if tex.noise_type == 'HARD_NOISE':
-                texStrg+="triangle_wave\n"
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else:
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbf<1,1,1,0>]\n"
-                    texStrg+="[1 color rgbt<0,0,0,1>]\n"
-                    texStrg+="}\n"
-            else:
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else:
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbf<0,0,0,1>]\n"
-                    texStrg+="[1 color rgbt<1,1,1,0>]\n"
-                    texStrg+="}\n"
-        ####################### EMULATE BLENDER MAGIC TEXTURE ####################
-        if tex.type == 'MAGIC':  
-            texStrg+="leopard\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<1,1,1,0.5>]\n"
-                texStrg+="[0.25 color rgbf<0,1,0,0.75>]\n"
-                texStrg+="[0.5 color rgbf<0,0,1,0.75>]\n"
-                texStrg+="[0.75 color rgbf<1,0,1,0.75>]\n"
-                texStrg+="[1 color rgbf<0,1,0,0.75>]\n"
-                texStrg+="}\n"
-            texStrg+="scale 0.1\n"            
-        ####################### EMULATE BLENDER MARBLE TEXTURE ####################
-        if tex.type == 'MARBLE':  
-            texStrg+="marble\n"
-            texStrg+="turbulence 0.5\n"
-            texStrg+="noise_generator 3\n"
-            texStrg+="scale 0.75\n"
-            texStrg+="rotate <45,-45,45>\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                if tex.marble_type == 'SOFT':
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
-                    texStrg+="[0.05 color rgbt<0,0,0,0>]\n"
-                    texStrg+="[1 color rgbt<0.9,0.9,0.9,0>]\n"
-                    texStrg+="}\n"
-                elif tex.marble_type == 'SHARP':
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
-                    texStrg+="[0.025 color rgbt<0,0,0,0>]\n"
-                    texStrg+="[1 color rgbt<0.9,0.9,0.9,0>]\n"
-                    texStrg+="}\n"
-                else:
-                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
-                    texStrg+="[1 color rgbt<1,1,1,0>]\n"            
-                    texStrg+="}\n"
-            if tex.noise_basis_2 == 'SIN':
-                texStrg+="sine_wave\n"
-            if tex.noise_basis_2 == 'TRI':
-                texStrg+="triangle_wave\n"
-            if tex.noise_basis_2 == 'SAW':
-                texStrg+="ramp_wave\n"
-        ####################### EMULATE BLENDER BLEND TEXTURE ####################
-        if tex.type == 'BLEND':
-            if tex.progression=='RADIAL':
-                texStrg+="radial\n"
-                if tex.use_flip_axis=='HORIZONTAL':
-                    texStrg+="rotate x*90\n"
-                else:
-                    texStrg+="rotate <-90,0,90>\n"
-                texStrg+="ramp_wave\n"
-            elif tex.progression=='SPHERICAL':
-                texStrg+="spherical\n"
-                texStrg+="scale 3\n"
-                texStrg+="poly_wave 1\n"
-            elif tex.progression=='QUADRATIC_SPHERE':
-                texStrg+="spherical\n"
-                texStrg+="scale 3\n"
-                texStrg+="    poly_wave 2\n"
-            elif tex.progression=='DIAGONAL':
-                texStrg+="gradient <1,1,0>\n"
-                texStrg+="scale 3\n"
-            elif tex.use_flip_axis=='HORIZONTAL':        
-                texStrg+="gradient x\n"
-                texStrg+="scale 2.01\n"
-            elif tex.use_flip_axis=='VERTICAL':
-                texStrg+="gradient y\n"
-                texStrg+="scale 2.01\n"
-            #texStrg+="ramp_wave\n"
-            #texStrg+="frequency 0.5\n"
-            texStrg+="phase 0.5\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else:
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                texStrg+="}\n"
-            if tex.progression == 'LINEAR': 
-                texStrg+="    poly_wave 1\n"
-            if tex.progression == 'QUADRATIC': 
-                texStrg+="    poly_wave 2\n"
-            if tex.progression == 'EASING':
-                texStrg+="    poly_wave 1.5\n"            
-        ####################### EMULATE BLENDER MUSGRAVE TEXTURE ####################
-        # if tex.type == 'MUSGRAVE':  
-            # texStrg+="function{ f_ridged_mf( x, y, 0, 1, 2, 9, -0.5, 3,3 )*0.5}\n"
-            # texStrg+="color_map {\n"
-            # texStrg+="[0 color rgbf<0,0,0,1>]\n"
-            # texStrg+="[1 color rgbf<1,1,1,0>]\n"
-            # texStrg+="}\n"
-        # simplified for now:
-
-        if tex.type == 'MUSGRAVE':
-            texStrg+="bozo scale 0.25 \n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else: 
-                texStrg+="color_map {[0.5 color rgbf<0,0,0,1>][1 color rgbt<1,1,1,0>]}ramp_wave \n"            
-        ####################### EMULATE BLENDER DISTORTED NOISE TEXTURE ####################
-        if tex.type == 'DISTORTED_NOISE':  
-            texStrg+="average\n"
-            texStrg+="  pigment_map {\n"
-            texStrg+="  [1 bozo scale 0.25 turbulence %.4g\n" %tex.distortion
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else: 
-                texStrg+="color_map {\n"
-                texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                texStrg+="}\n"
-            texStrg+="]\n"
-
-            if tex.noise_distortion == 'CELL_NOISE':
-                texStrg+="  [1 cells scale 0.1\n"
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else: 
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                    texStrg+="}\n"
-                texStrg+="]\n"                
-            if tex.noise_distortion=='VORONOI_CRACKLE':
-                texStrg+="  [1 crackle scale 0.25\n"
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else: 
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                    texStrg+="}\n"
-                texStrg+="]\n"                
-            if tex.noise_distortion in ['VORONOI_F1','VORONOI_F2','VORONOI_F3','VORONOI_F4','VORONOI_F2_F1']:
-                texStrg+="  [1 crackle metric 2.5 scale 0.25 turbulence %.4g\n" %(tex.distortion/2)
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else: 
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                    texStrg+="}\n"
-                texStrg+="]\n"                
-            else:
-                texStrg+="  [1 wrinkles scale 0.25\n" 
-                if tex.use_color_ramp == True:
-                    texStrg+=exportColorRamp(tex)
-                else: 
-                    texStrg+="color_map {\n"
-                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
-                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
-                    texStrg+="}\n"
-                texStrg+="]\n"
-            texStrg+="  }\n"
-        ####################### EMULATE BLENDER NOISE TEXTURE ####################
-        if tex.type == 'NOISE':  
-            texStrg+="cells\n"
-            texStrg+="turbulence 3\n"
-            texStrg+="omega 3\n"
-            if tex.use_color_ramp == True:
-                texStrg+=exportColorRamp(tex)
-            else: 
-                texStrg+="color_map {\n"
-                texStrg+="[0.75 color rgb<0,0,0,>]\n"
-                texStrg+="[1 color rgb<1,1,1,>]\n"
-                texStrg+="}\n"
-
-        ####################### IGNORE OTHER BLENDER TEXTURE ####################
-        else: #non translated textures
-            pass
-        texStrg+="}\n\n"            
 
-        texStrg+="#declare f%s=\n"%PATname
-        texStrg+="function{pigment{%s}}\n"%PATname       
-        texStrg+="\n"
-        
-    else:
-        texStrg+="pigment {\n"
-        texStrg+="%s\n"%pat.tex_pattern_type
-        if pat.tex_pattern_type == 'agate': 
-            texStrg+="agate_turb %.4g\n"%pat.modifier_turbulence                           
-        if pat.tex_pattern_type in {'spiral1', 'spiral2', 'tiling'}: 
-            texStrg+="%s\n"%pat.modifier_numbers
-        if pat.tex_pattern_type == 'quilted': 
-            texStrg+="control0 %s control1 %s\n"%(pat.modifier_control0, pat.modifier_control1)                           
-        if pat.tex_pattern_type == 'mandel': 
-            texStrg+="%s exponent %s \n"%(pat.f_iter, pat.f_exponent)  
-        if pat.tex_pattern_type == 'julia': 
-            texStrg+="<%.4g, %.4g> %s exponent %s \n"%(pat.julia_complex_1, pat.julia_complex_2, pat.f_iter, pat.f_exponent)   
-        if pat.tex_pattern_type == 'magnet' and pat.magnet_style == 'mandel': 
-            texStrg+="%s mandel %s \n"%(pat.magnet_type, pat.f_iter)
-        if pat.tex_pattern_type == 'magnet' and pat.magnet_style == 'julia':  
-            texStrg+="%s julia <%.4g, %.4g> %s\n"%(pat.magnet_type, pat.julia_complex_1, pat.julia_complex_2, pat.f_iter) 
-        if pat.tex_pattern_type in {'mandel', 'julia', 'magnet'}:
-            texStrg+="interior %s, %.4g\n"%(pat.f_ior, pat.f_ior_fac) 
-            texStrg+="exterior %s, %.4g\n"%(pat.f_eor, pat.f_eor_fac)
-        if pat.tex_pattern_type == 'gradient': 
-            texStrg+="<%s, %s, %s> \n"%(pat.grad_orient_x, pat.grad_orient_y, pat.grad_orient_z)
-        if pat.tex_pattern_type == 'pavement':
-            numTiles=pat.pave_tiles
-            numPattern=1
-            if pat.pave_sides == '4' and pat.pave_tiles == 3: 
-                 numPattern = pat.pave_pat_2
-            if pat.pave_sides == '6' and pat.pave_tiles == 3: 
-                numPattern = pat.pave_pat_3
-            if pat.pave_sides == '3' and pat.pave_tiles == 4: 
-                numPattern = pat.pave_pat_3
-            if pat.pave_sides == '3' and pat.pave_tiles == 5: 
-                numPattern = pat.pave_pat_4
-            if pat.pave_sides == '4' and pat.pave_tiles == 4: 
-                numPattern = pat.pave_pat_5
-            if pat.pave_sides == '6' and pat.pave_tiles == 4: 
-                numPattern = pat.pave_pat_7
-            if pat.pave_sides == '4' and pat.pave_tiles == 5: 
-                numPattern = pat.pave_pat_12
-            if pat.pave_sides == '3' and pat.pave_tiles == 6: 
-                numPattern = pat.pave_pat_12
-            if pat.pave_sides == '6' and pat.pave_tiles == 5: 
-                numPattern = pat.pave_pat_22
-            if pat.pave_sides == '4' and pat.pave_tiles == 6: 
-                numPattern = pat.pave_pat_35
-            if pat.pave_sides == '6' and pat.pave_tiles == 6: 
-                numTiles = 5                                
-            texStrg+="number_of_sides %s number_of_tiles %s pattern %s form %s \n"%(pat.pave_sides, numTiles, numPattern, pat.pave_form)
-        ################ functions #####################################################################################################
-        if pat.tex_pattern_type == 'function':                 
-            texStrg+="{ %s"%pat.func_list
-            texStrg+="(x"
-            if pat.func_plus_x != "NONE":
-                if pat.func_plus_x =='increase':
-                    texStrg+="*"                                    
-                if pat.func_plus_x =='plus':
-                    texStrg+="+"
-                texStrg+="%.4g"%pat.func_x
-            texStrg+=",y"
-            if pat.func_plus_y != "NONE":
-                if pat.func_plus_y =='increase':
-                    texStrg+="*"                                   
-                if pat.func_plus_y =='plus':
-                    texStrg+="+"
-                texStrg+="%.4g"%pat.func_y
-            texStrg+=",z"
-            if pat.func_plus_z != "NONE":
-                if pat.func_plus_z =='increase':
-                    texStrg+="*"                                    
-                if pat.func_plus_z =='plus':
-                    texStrg+="+"
-                texStrg+="%.4g"%pat.func_z
-            sort = -1
-            if pat.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"}:
-                sort = 0
-            if pat.func_list in {"f_bicorn","f_bifolia","f_boy_surface","f_superellipsoid","f_torus"}:
-                sort = 1
-            if pat.func_list in {"f_ellipsoid","f_folium_surface","f_hyperbolic_torus",
-                                 "f_kampyle_of_eudoxus","f_parabolic_torus","f_quartic_cylinder","f_torus2"}:
-                sort = 2
-            if pat.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"}:
-                sort = 3
-            if pat.func_list in {"f_algbr_cyl1","f_algbr_cyl2","f_algbr_cyl3","f_algbr_cyl4","f_blob","f_mesh1","f_poly4","f_spikes"}:
-                sort = 4
-            if pat.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"}:
-                sort = 5
-            if pat.func_list in {"f_helix1","f_helix2","f_piriform_2d","f_strophoid_2d"}:
-                sort = 6
-            if pat.func_list == "f_helical_torus":
-                sort = 7
-            if sort > -1:
-                texStrg+=",%.4g"%pat.func_P0
-            if sort > 0:
-                texStrg+=",%.4g"%pat.func_P1
-            if sort > 1:
-                texStrg+=",%.4g"%pat.func_P2
-            if sort > 2:
-                texStrg+=",%.4g"%pat.func_P3
-            if sort > 3:
-                texStrg+=",%.4g"%pat.func_P4
-            if sort > 4:
-                texStrg+=",%.4g"%pat.func_P5
-            if sort > 5:
-                texStrg+=",%.4g"%pat.func_P6
-            if sort > 6:
-                texStrg+=",%.4g"%pat.func_P7
-                texStrg+=",%.4g"%pat.func_P8
-                texStrg+=",%.4g"%pat.func_P9
-            texStrg+=")}\n"
-        ############## end functions ###############################################################
-        if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'}:                        
-            texStrg+="color_map {\n"
-        numColor=0
-        if tex.use_color_ramp == True:
-            for el in tex.color_ramp.elements:
-                numColor+=1
-                pos = el.position
-                col=el.color
-                colR,colG,colB,colA = col[0],col[1],col[2],1-col[3]
-                if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :
-                    texStrg+="[%.4g color rgbf<%.4g,%.4g,%.4g,%.4g>] \n"%(pos,colR,colG,colB,colA)
-                if pat.tex_pattern_type in {'brick','checker'} and numColor < 3:
-                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-                if pat.tex_pattern_type == 'hexagon' and numColor < 4 :
-                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-                if pat.tex_pattern_type == 'square' and numColor < 5 :
-                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-                if pat.tex_pattern_type == 'triangular' and numColor < 7 :
-                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
-        else:
-            texStrg+="[0 color rgbf<0,0,0,1>]\n"
-            texStrg+="[1 color rgbf<1,1,1,0>]\n"
-        if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :                        
-            texStrg+="} \n"                       
-        if pat.tex_pattern_type == 'brick':                        
-            texStrg+="brick_size <%.4g, %.4g, %.4g> mortar %.4g \n"%(pat.brick_size_x, pat.brick_size_y, pat.brick_size_z, pat.brick_mortar)
-        texStrg+="%s \n"%mappingDif
-        texStrg+="rotate <%.4g,%.4g,%.4g> \n"%(pat.tex_rot_x, pat.tex_rot_y, pat.tex_rot_z)
-        texStrg+="turbulence <%.4g,%.4g,%.4g> \n"%(pat.warp_turbulence_x, pat.warp_turbulence_y, pat.warp_turbulence_z)
-        texStrg+="octaves %s \n"%pat.modifier_octaves
-        texStrg+="lambda %.4g \n"%pat.modifier_lambda
-        texStrg+="omega %.4g \n"%pat.modifier_omega
-        texStrg+="frequency %.4g \n"%pat.modifier_frequency
-        texStrg+="phase %.4g \n"%pat.modifier_phase                       
-        texStrg+="}\n\n"
-        texStrg+="#declare f%s=\n"%PATname
-        texStrg+="function{pigment{%s}}\n"%PATname       
-        texStrg+="\n"
-    return(texStrg)
 
 def write_pov(filename, scene=None, info_callback=None):
     import mathutils
@@ -3175,516 +2705,16 @@ def write_pov(filename, scene=None, info_callback=None):
                                         trans = 0.0
 
                                     else:
-                                        material_finish = materialNames[mater.name]                        
-                                        if mater.use_transparency:
-                                            trans = 1.0 - mater.alpha
-                                        else:
-                                            trans = 0.0                            
-                                        if (mater.specular_color.s == 0.0):
-                                            colored_specular_found = False
-                                        else:
-                                            colored_specular_found = True
-
-                                        if mater.use_transparency and mater.transparency_method == 'RAYTRACE':
-                                            povFilter = mater.raytrace_transparency.filter * (1.0 - mater.alpha)
-                                            trans = (1.0 - mater.alpha) - povFilter
-                                        else:
-                                            povFilter = 0.0
-                                            
-                                        ##############SF
-                                        texturesDif = ""
-                                        texturesSpec = ""
-                                        texturesNorm = ""
-                                        texturesAlpha = ""
-                                        #proceduralFlag=False
-                                        for t in mater.texture_slots:
-                                            if t and t.use and t.texture.type != 'IMAGE' and t.texture.type != 'NONE':
-                                                proceduralFlag=True
-                                                image_filename = "PAT_%s"%string_strip_hyphen(bpy.path.clean_name(t.texture.name))
-                                                if image_filename:
-                                                    if t.use_map_color_diffuse:
-                                                        texturesDif = image_filename
-                                                        # colvalue = t.default_value  # UNUSED
-                                                        t_dif = t
-                                                        if t_dif.texture.pov.tex_gamma_enable:
-                                                            imgGamma = (" gamma %.3g " % t_dif.texture.pov.tex_gamma_value)
-                                                    if t.use_map_specular or t.use_map_raymir:
-                                                        texturesSpec = image_filename
-                                                        # colvalue = t.default_value  # UNUSED
-                                                        t_spec = t
-                                                    if t.use_map_normal:
-                                                        texturesNorm = image_filename
-                                                        # colvalue = t.normal_factor * 10.0  # UNUSED
-                                                        #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  # UNUSED
-                                                        #textDispName=t.texture.image.name + ".displ"
-                                                        #was the above used? --MR
-                                                        t_alpha = t
-
-                                            if t and t.texture.type == 'IMAGE' and t.use and t.texture.image and t.texture.pov.tex_pattern_type == 'emulator':
-                                                proceduralFlag=False
-                                                if t.texture.image.packed_file:
-                                                    orig_image_filename=t.texture.image.filepath_raw
-                                                    unpackedfilename= os.path.join(preview_dir,("unpacked_img_"+(string_strip_hyphen(bpy.path.clean_name(t.texture.name)))))
-                                                    if not os.path.exists(unpackedfilename):
-                                                        # record which images that were newly copied and can be safely
-                                                        # cleaned up
-                                                        unpacked_images.append(unpackedfilename)                                            
-                                                    t.texture.image.filepath_raw=unpackedfilename
-                                                    t.texture.image.save()
-                                                    image_filename = unpackedfilename
-                                                    t.texture.image.filepath_raw=orig_image_filename
-                                                else:
-                                                    image_filename = path_image(t.texture.image)
-                                                # IMAGE SEQUENCE BEGINS
-                                                if image_filename:
-                                                    if bpy.data.images[t.texture.image.name].source == 'SEQUENCE':
-                                                        korvaa = "." + str(bpy.data.textures[t.texture.name].image_user.frame_offset + 1).zfill(3) + "."
-                                                        image_filename = image_filename.replace(".001.", korvaa)
-                                                        print(" seq debug ")
-                                                        print(image_filename)
-                                                # IMAGE SEQUENCE ENDS
-                                                imgGamma = ""
-                                                if image_filename:
-                                                    if t.use_map_color_diffuse:
-                                                        texturesDif = image_filename
-                                                        # colvalue = t.default_value  # UNUSED
-                                                        t_dif = t
-                                                        if t_dif.texture.pov.tex_gamma_enable:
-                                                            imgGamma = (" gamma %.3g " % t_dif.texture.pov.tex_gamma_value)
-                                                    if t.use_map_specular or t.use_map_raymir:
-                                                        texturesSpec = image_filename
-                                                        # colvalue = t.default_value  # UNUSED
-                                                        t_spec = t
-                                                    if t.use_map_normal:
-                                                        texturesNorm = image_filename
-                                                        # colvalue = t.normal_factor * 10.0  # UNUSED
-                                                        #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  # UNUSED
-                                                        #textDispName=t.texture.image.name + ".displ"
-                                                        #was the above used? --MR
-                                                        t_alpha = t
-
-                                        ####################################################################################
-
-
-                                        file.write("\n")
-                                        # THIS AREA NEEDS TO LEAVE THE TEXTURE OPEN UNTIL ALL MAPS ARE WRITTEN DOWN.
-                                        # --MR
-                                        currentMatName = string_strip_hyphen(materialNames[mater.name])
-                                        LocalMaterialNames.append(currentMatName)
-                                        file.write("\n #declare MAT_%s = \ntexture{\n" % currentMatName)
-
-                                        ################################################################################
-                                        
-                                        if mater.pov.replacement_text != "":
-                                            file.write("%s\n" % mater.pov.replacement_text)
-                                        #################################################################################
-                                        if mater.diffuse_shader == 'MINNAERT':
-                                            tabWrite("\n")
-                                            tabWrite("aoi\n")
-                                            tabWrite("texture_map {\n")
-                                            tabWrite("[%.3g finish {diffuse %.3g}]\n" % \
-                                                     (mater.darkness / 2.0, 2.0 - mater.darkness))
-                                            tabWrite("[%.3g\n" % (1.0 - (mater.darkness / 2.0)))
-
-                                        if mater.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 - mater.diffuse_fresnel) / 5,
-                                                          (mater.diffuse_intensity *
-                                                           ((5.0 - mater.diffuse_fresnel_factor) / 5))))
-                                                tabWrite("[%.3g\n" % ((mater.diffuse_fresnel_factor / 5) *
-                                                                      (mater.diffuse_fresnel / 5.0)))
-                                                c += 1
-
-                                        # 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")
-                                                if texturesSpec and texturesSpec.startswith("PAT_"):
-                                                    tabWrite("function{f%s(x,y,z).grey}" %texturesSpec) 
-                                                else:
-                                                    # 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 =imgMapTransforms(t_spec)
-                                                    # 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)))
-                                                    tabWrite("%s\n" % mappingSpec)
-                                                tabWrite("}\n")
-                                                tabWrite("texture_map {\n")
-                                                tabWrite("[0 \n")
-
-                                            if texturesDif == "":
-                                                if texturesAlpha != "":
-                                                    tabWrite("\n")
-                                                    if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                        tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
-                                                    else:
-                                                        # 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 = imgMapTransforms(t_alpha)
-                                                        # 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("}\n")
-                                                    tabWrite("}\n")
-
-                                                else:
-
-                                                    tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>}\n" % \
-                                                             (col[0], col[1], col[2], povFilter, trans))
-
-                                                if texturesSpec != "":
-                                                    # Level 1 is no specular
-                                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
-
-                                                else:
-                                                    # Level 2 is translated spec
-                                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
-
-                                            else:
-                                                mappingDif = imgMapTransforms(t_dif)
-
-                                                if texturesAlpha != "":
-                                                    mappingAlpha = imgMapTransforms(t_alpha)
-                                                    # 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")
-                                                    if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                        tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
-                                                    else:
-                                                        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")
-                                                    #if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                        #tabWrite("[1 pigment{%s}]\n" %texturesDif) 
-                                                    if texturesDif and not texturesDif.startswith("PAT_"):
-                                                        tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
-                                                                 (imageFormat(texturesDif), texturesDif,
-                                                                  (imgGamma + imgMap(t_dif)), mappingDif))
-                                                    elif texturesDif and texturesDif.startswith("PAT_"):
-                                                        tabWrite("[1 %s]\n" %texturesDif)                                                          
-                                                    tabWrite("}\n")
-                                                    tabWrite("}\n")
-                                                    if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                        tabWrite("}\n")
-
-                                                else:
-                                                    if texturesDif and texturesDif.startswith("PAT_"):
-                                                        tabWrite("pigment{%s}\n" %texturesDif) 
-                                                    else:
-                                                        tabWrite("pigment {uv_mapping image_map {%s \"%s\" %s}%s}\n" % \
-                                                                 (imageFormat(texturesDif), texturesDif,
-                                                                  (imgGamma + imgMap(t_dif)), mappingDif))
-
-                                                if texturesSpec != "":
-                                                    # Level 1 is no specular
-                                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
-
-                                                else:
-                                                    # Level 2 is translated specular
-                                                    tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
-
-                                                ## scale 1 rotate y*0
-                                                #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)))
-                                            if texturesNorm != "":
-                                                ## 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 =imgMapTransforms(t_nor)
-                                                # 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)))
-                                                #We were not using the above maybe we should?
-                                                if texturesNorm and texturesNorm.startswith("PAT_"):
-                                                    tabWrite("normal{function{f%s(x,y,z).grey} bump_size %.4g}\n" %(texturesNorm, t_nor.normal_factor * 10)) 
-                                                else:
-                                                    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 != "":
-                                                tabWrite("]\n")
-                                            ##################Second index for mapping specular max value###############
-                                                tabWrite("[1 \n")
-
-                                        if texturesDif == "" and mater.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 = imgMapTransforms(t_alpha)
-                                                # 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)
-                                                if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                    tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
-                                                else:
-                                                    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("}\n")
-                                                tabWrite("}\n")
-
-                                            else:
-                                                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)))
-                                                
-                                            elif colored_specular_found:
-                                                # Level 1 is no specular
-                                                tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
-
-                                            else:
-                                                # Level 2 is translated specular
-                                                tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
-
-                                        elif mater.pov.replacement_text == "":
-                                            mappingDif = imgMapTransforms(t_dif)
-                                            # mappingDif = ("scale <%.4g,%.4g,%.4g> translate <%.4g,%.4g,%.4g>" % \
-                                                          # ( 1.0 / t_dif.scale.x, 
-                                                          # 1.0 / t_dif.scale.y,
-                                                          # 1.0 / t_dif.scale.z, 
-                                                          # 0.5-(0.5/t_dif.scale.x) + t_dif.offset.x,
-                                                          # 0.5-(0.5/t_dif.scale.y) + t_dif.offset.y,
-                                                          # 0.5-(0.5/t_dif.scale.z) + t_dif.offset.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 = imgMapTransforms(t_alpha)
-                                                # 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)
-                                                if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                    tabWrite("pigment{pigment_pattern {function{f%s(x,y,z).transmit}}\n" %texturesAlpha)
-                                                else:
-                                                    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")
-                                                if texturesAlpha and texturesAlpha.startswith("PAT_"):
-                                                    tabWrite("[1 function{f%s(x,y,z).transmit}]\n" %texturesAlpha) 
-                                                elif texturesDif and not texturesDif.startswith("PAT_"):                                       
-                                                    tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
-                                                             (imageFormat(texturesDif), texturesDif,
-                                                              (imgMap(t_dif) + imgGamma), mappingDif))
-                                                elif texturesDif and texturesDif.startswith("PAT_"):
-                                                    tabWrite("[1 %s]\n" %texturesDif)
-                                                tabWrite("}\n")
-                                                tabWrite("}\n")
-
-                                            else:
-                                                if texturesDif and texturesDif.startswith("PAT_"):
-                                                    tabWrite("pigment{%s}\n" %texturesDif) 
-                                                else:                                    
-                                                    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)))                  
-                                            else:
-                                                # Level 2 is translated specular
-                                                tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
-
-                                            ## 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 mater.pov.replacement_text == "":
-                                            ## 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 =imgMapTransforms(t_nor)
-                                            # 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)))
-                                            #We were not using the above maybe we should?
-                                            if texturesNorm and texturesNorm.startswith("PAT_"):
-                                                tabWrite("normal{function{f%s(x,y,z).grey} bump_size %.4g}\n" %(texturesNorm, t_nor.normal_factor * 10))
-                                            else:                                    
-                                                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 mater.pov.replacement_text == "":
-                                            tabWrite("]\n")
-
-                                            tabWrite("}\n")
-
-                                        #End of slope/ior texture_map
-                                        if mater.diffuse_shader == 'MINNAERT' and mater.pov.replacement_text == "":
-                                            tabWrite("]\n")
-                                            tabWrite("}\n")
-                                        if mater.diffuse_shader == 'FRESNEL' and mater.pov.replacement_text == "":
-                                            c = 1
-                                            while (c <= lampCount):
-                                                tabWrite("]\n")
-                                                tabWrite("}\n")
-                                                c += 1
-
-                                          
-                                                
-                                        # Close first layer of POV "texture" (Blender material)
-                                        tabWrite("}\n")
-                                        
-                                        if (mater.specular_color.s > 0.0):
-                                            colored_specular_found = True
-                                        else:
-                                            colored_specular_found = False
-                                            
-                                        # Write another layered texture using invisible diffuse and metallic trick 
-                                        # to emulate colored specular highlights
-                                        special_texture_found = False
-                                        for t in mater.texture_slots:
-                                            if(t and t.use and ((t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE') and
-                                               (t.use_map_specular or t.use_map_raymir)):
-                                                # Specular mapped textures would conflict with colored specular
-                                                # because POV can't layer over or under pigment patterned textures
-                                                special_texture_found = True
-                                        
-                                        if colored_specular_found and not special_texture_found:
-                                            if comments:
-                                                file.write("  // colored highlights with a stransparent metallic layer\n")
-                                            else:
-                                                tabWrite("\n")
-                                        
-                                            tabWrite("texture {\n")
-                                            tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, 0, 1>}\n" % \
-                                                             (mater.specular_color[0], mater.specular_color[1], mater.specular_color[2]))
-                                            tabWrite("finish {%s}\n" % (safety(material_finish, Level=2))) # Level 2 is translated spec
-
-                                            texturesNorm = ""
-                                            for t in mater.texture_slots:
-
-                                                if t and t.texture.pov.tex_pattern_type != 'emulator':
-                                                    proceduralFlag=True
-                                                    image_filename = string_strip_hyphen(bpy.path.clean_name(t.texture.name))
-                                                if (t and t.texture.type == 'IMAGE' and
-                                                        t.use and t.texture.image and
-                                                        t.texture.pov.tex_pattern_type == 'emulator'):
-                                                    proceduralFlag=False 
-                                                    image_filename = path_image(t.texture.image)
-                                                    imgGamma = ""
-                                                    if image_filename:
-                                                        if t.use_map_normal:
-                                                            texturesNorm = image_filename
-                                                            # colvalue = t.normal_factor * 10.0  # UNUSED
-                                                            #textNormName=t.texture.image.name + ".normal"
-                                                            #was the above used? --MR
-                                                            t_nor = t
-                                                            if proceduralFlag:
-                                                                tabWrite("normal{function" \
-                                                                         "{f%s(x,y,z).grey} bump_size %.4g}\n" % \
-                                                                         (texturesNorm,
-                                                                         t_nor.normal_factor * 10))
-                                                            else:
-                                                                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))
-                                                                          
-                                            tabWrite("}\n") # THEN IT CAN CLOSE LAST LAYER OF TEXTURE
-
-
+                                        shading.writeTextureInfluence(mater, materialNames, 
+                                                                        LocalMaterialNames,
+                                                                        path_image, imageFormat,
+                                                                        imgMap, imgMapTransforms,
+                                                                        file, tabWrite,
+                                                                        string_strip_hyphen,
+                                                                        safety, col)
                                     ###################################################################
                                     index[0] = idx
-                                    idx += 1
-                                    
+                                    idx += 1                                    
 
 
                             
@@ -4068,7 +3098,7 @@ def write_pov(filename, scene=None, info_callback=None):
                 onceSss = 0
 
             if world and onceAmbient:
-                tabWrite("ambient_light rgbt<%.3g, %.3g, %.3g,1>\n" % world.ambient_color[:])
+                tabWrite("ambient_light rgb<%.3g, %.3g, %.3g>\n" % world.ambient_color[:])
                 onceAmbient = 0
 
             if (oncePhotons and
@@ -4123,8 +3153,8 @@ def write_pov(filename, scene=None, info_callback=None):
             #string_strip_hyphen(patternNames[texture.name]) #maybe instead of the above
             LocalPatternNames.append(currentPatName) 
             #use above list to prevent writing texture instances several times and assign in mats?
-            file.write("\n #declare PAT_%s = \n" % currentPatName)
-            file.write(exportPattern(texture))
+            file.write("\n#declare PAT_%s = \n" % currentPatName)
+            file.write(shading.exportPattern(texture, string_strip_hyphen))
             file.write("\n")                
     if comments:
         file.write("\n//--Background--\n\n")
@@ -4159,10 +3189,11 @@ def write_pov(filename, scene=None, info_callback=None):
     file.write("#default{ pigment{ color rgb 0.8 }}\n")
     # Convert all materials to strings we can access directly per vertex.
     #exportMaterials()
-    shading.writeMaterial(DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, None)  # default material
+    shading.writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, None)  # default material
     for material in bpy.data.materials:
         if material.users > 0:
-            shading.writeMaterial(DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, material)
+            shading.writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, material)
+            # attributes are all the variables needed by the other python file...
     if comments:
         file.write("\n")
 
@@ -4715,7 +3746,7 @@ class RenderPovTexturePreview(Operator):
         filePov=open("%s"%inputPrevFile,"w")
         PATname = "PAT_"+string_strip_hyphen(bpy.path.clean_name(tex.name))
         filePov.write("#declare %s = \n"%PATname)
-        filePov.write(exportPattern(tex))
+        filePov.write(shading.exportPattern(tex, string_strip_hyphen))
 
         filePov.write("#declare Plane =\n")
         filePov.write("mesh {\n")
diff --git a/render_povray/shading.py b/render_povray/shading.py
index d882bfec6..1939cbe9f 100644
--- a/render_povray/shading.py
+++ b/render_povray/shading.py
@@ -1,7 +1,7 @@
 # For BI > POV shaders emulation
 import bpy
 
-def writeMaterial(DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, material):
+def writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, material):
     # Assumes only called once on each material
     if material:
         name_orig = material.name
@@ -23,25 +23,26 @@ def writeMaterial(DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, m
 
     def povHasnoSpecularMaps(Level):
         if Level == 1:
-            tabWrite("#declare %s = finish {" % safety(name, Level=1))
             if comments:
-                file.write("  //No specular nor Mirror reflection\n")
+                tabWrite("//--No specular nor Mirror reflection--\n")
             else:
                 tabWrite("\n")
+            tabWrite("#declare %s = finish {\n" % safety(name, Level=1))
+            
         elif Level == 2:
-            tabWrite("#declare %s = finish {" % safety(name, Level=2))
             if comments:
-                file.write("  //translation of spec and mir levels for when no map " \
-                           "influences them\n")
+                tabWrite("//--translation of spec and mir levels for when no map " \
+                           "influences them--\n")
             else:
                 tabWrite("\n")
+            tabWrite("#declare %s = finish {\n" % safety(name, Level=2))
+
         elif Level == 3:
-            tabWrite("#declare %s = finish {" % safety(name, Level=3))
             if comments:
-                file.write("  //Maximum Spec and Mirror\n")
+                tabWrite("//--Maximum Spec and Mirror--\n")
             else:
                 tabWrite("\n")
-
+            tabWrite("#declare %s = finish {\n" % safety(name, Level=3))
         if material:
             # POV-Ray 3.7 now uses two diffuse values respectively for front and back shading
             # (the back diffuse is like blender translucency)
@@ -229,3 +230,985 @@ def writeMaterial(DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, m
 
             # Level=3 Means Maximum Spec and Mirror
             povHasnoSpecularMaps(Level=3)
+
+
+def exportPattern(texture, string_strip_hyphen):
+    tex=texture
+    pat = tex.pov
+    PATname = "PAT_%s"%string_strip_hyphen(bpy.path.clean_name(tex.name))
+    mappingDif = ("translate <%.4g,%.4g,%.4g> scale <%.4g,%.4g,%.4g>" % \
+          (pat.tex_mov_x, pat.tex_mov_y, pat.tex_mov_z,
+           1.0 / pat.tex_scale_x, 1.0 / pat.tex_scale_y, 1.0 / pat.tex_scale_z))
+    texStrg=""
+    def exportColorRamp(texture):
+        tex=texture
+        pat = tex.pov      
+        colRampStrg="color_map {\n"
+        numColor=0
+        for el in tex.color_ramp.elements:
+            numColor+=1
+            pos = el.position
+            col=el.color
+            colR,colG,colB,colA = col[0],col[1],col[2],1-col[3]
+            if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :
+                colRampStrg+="[%.4g color rgbf<%.4g,%.4g,%.4g,%.4g>] \n"%(pos,colR,colG,colB,colA)
+            if pat.tex_pattern_type in {'brick','checker'} and numColor < 3:
+                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+            if pat.tex_pattern_type == 'hexagon' and numColor < 4 :
+                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+            if pat.tex_pattern_type == 'square' and numColor < 5 :
+                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+            if pat.tex_pattern_type == 'triangular' and numColor < 7 :
+                colRampStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+                      
+        colRampStrg+="} \n"
+        #end color map
+        return colRampStrg
+    #much work to be done here only defaults translated for now:
+    #pov noise_generator 3 means perlin noise
+    if pat.tex_pattern_type == 'emulator':
+        texStrg+="pigment {\n"
+        ####################### EMULATE BLENDER VORONOI TEXTURE ####################
+        if tex.type == 'VORONOI':  
+            texStrg+="crackle\n"
+            texStrg+="    offset %.4g\n"%tex.nabla
+            texStrg+="    form <%.4g,%.4g,%.4g>\n"%(tex.weight_1, tex.weight_2, tex.weight_3)
+            if tex.distance_metric == 'DISTANCE':
+                texStrg+="    metric 2.5\n"          
+            if tex.distance_metric == 'DISTANCE_SQUARED':
+                texStrg+="    metric 2.5\n"
+                texStrg+="    poly_wave 2\n"                
+            if tex.distance_metric == 'MINKOVSKY': 
+                texStrg+="    metric %s\n"%tex.minkovsky_exponent             
+            if tex.distance_metric == 'MINKOVSKY_FOUR': 
+                texStrg+="    metric 4\n"
+            if tex.distance_metric == 'MINKOVSKY_HALF': 
+                texStrg+="    metric 0.5\n"
+            if tex.distance_metric == 'CHEBYCHEV': 
+                texStrg+="    metric 10\n"
+            if tex.distance_metric == 'MANHATTAN': 
+                texStrg+="    metric 1\n"
+
+            if tex.color_mode == 'POSITION':
+                texStrg+="solid\n"
+            texStrg+="scale 0.25\n"
+            
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<0,0,0,1>]\n"
+                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
+                texStrg+="}\n"            
+        ####################### EMULATE BLENDER CLOUDS TEXTURE ####################
+        if tex.type == 'CLOUDS':  
+            if tex.noise_type == 'SOFT_NOISE':
+                texStrg+="wrinkles\n"
+                texStrg+="scale 0.25\n"
+            else:
+                texStrg+="granite\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<0,0,0,1>]\n"
+                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
+                texStrg+="}\n"
+        ####################### EMULATE BLENDER WOOD TEXTURE ####################
+        if tex.type == 'WOOD':
+            if tex.wood_type == 'RINGS':
+                texStrg+="wood\n"
+                texStrg+="scale 0.25\n"
+            if tex.wood_type == 'RINGNOISE':
+                texStrg+="wood\n"
+                texStrg+="scale 0.25\n"
+                texStrg+="turbulence %.4g\n"%(tex.turbulence/100)
+            if tex.wood_type == 'BANDS':
+                texStrg+="marble\n"
+                texStrg+="scale 0.25\n"
+                texStrg+="rotate <45,-45,45>\n"
+            if tex.wood_type == 'BANDNOISE':
+                texStrg+="marble\n"
+                texStrg+="scale 0.25\n"
+                texStrg+="rotate <45,-45,45>\n"
+                texStrg+="turbulence %.4g\n"%(tex.turbulence/10)
+            
+            if tex.noise_basis_2 == 'SIN':
+                texStrg+="sine_wave\n"
+            if tex.noise_basis_2 == 'TRI':
+                texStrg+="triangle_wave\n"
+            if tex.noise_basis_2 == 'SAW':
+                texStrg+="ramp_wave\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<0,0,0,0>]\n"
+                texStrg+="[1 color rgbt<1,1,1,0>]\n" 
+                texStrg+="}\n"
+        ####################### EMULATE BLENDER STUCCI TEXTURE ####################
+        if tex.type == 'STUCCI':  
+            texStrg+="bozo\n"
+            texStrg+="scale 0.25\n"
+            if tex.noise_type == 'HARD_NOISE':
+                texStrg+="triangle_wave\n"
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else:
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbf<1,1,1,0>]\n"
+                    texStrg+="[1 color rgbt<0,0,0,1>]\n"
+                    texStrg+="}\n"
+            else:
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else:
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbf<0,0,0,1>]\n"
+                    texStrg+="[1 color rgbt<1,1,1,0>]\n"
+                    texStrg+="}\n"
+        ####################### EMULATE BLENDER MAGIC TEXTURE ####################
+        if tex.type == 'MAGIC':  
+            texStrg+="leopard\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<1,1,1,0.5>]\n"
+                texStrg+="[0.25 color rgbf<0,1,0,0.75>]\n"
+                texStrg+="[0.5 color rgbf<0,0,1,0.75>]\n"
+                texStrg+="[0.75 color rgbf<1,0,1,0.75>]\n"
+                texStrg+="[1 color rgbf<0,1,0,0.75>]\n"
+                texStrg+="}\n"
+            texStrg+="scale 0.1\n"            
+        ####################### EMULATE BLENDER MARBLE TEXTURE ####################
+        if tex.type == 'MARBLE':  
+            texStrg+="marble\n"
+            texStrg+="turbulence 0.5\n"
+            texStrg+="noise_generator 3\n"
+            texStrg+="scale 0.75\n"
+            texStrg+="rotate <45,-45,45>\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                if tex.marble_type == 'SOFT':
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
+                    texStrg+="[0.05 color rgbt<0,0,0,0>]\n"
+                    texStrg+="[1 color rgbt<0.9,0.9,0.9,0>]\n"
+                    texStrg+="}\n"
+                elif tex.marble_type == 'SHARP':
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
+                    texStrg+="[0.025 color rgbt<0,0,0,0>]\n"
+                    texStrg+="[1 color rgbt<0.9,0.9,0.9,0>]\n"
+                    texStrg+="}\n"
+                else:
+                    texStrg+="[0 color rgbt<0,0,0,0>]\n"
+                    texStrg+="[1 color rgbt<1,1,1,0>]\n"            
+                    texStrg+="}\n"
+            if tex.noise_basis_2 == 'SIN':
+                texStrg+="sine_wave\n"
+            if tex.noise_basis_2 == 'TRI':
+                texStrg+="triangle_wave\n"
+            if tex.noise_basis_2 == 'SAW':
+                texStrg+="ramp_wave\n"
+        ####################### EMULATE BLENDER BLEND TEXTURE ####################
+        if tex.type == 'BLEND':
+            if tex.progression=='RADIAL':
+                texStrg+="radial\n"
+                if tex.use_flip_axis=='HORIZONTAL':
+                    texStrg+="rotate x*90\n"
+                else:
+                    texStrg+="rotate <-90,0,90>\n"
+                texStrg+="ramp_wave\n"
+            elif tex.progression=='SPHERICAL':
+                texStrg+="spherical\n"
+                texStrg+="scale 3\n"
+                texStrg+="poly_wave 1\n"
+            elif tex.progression=='QUADRATIC_SPHERE':
+                texStrg+="spherical\n"
+                texStrg+="scale 3\n"
+                texStrg+="    poly_wave 2\n"
+            elif tex.progression=='DIAGONAL':
+                texStrg+="gradient <1,1,0>\n"
+                texStrg+="scale 3\n"
+            elif tex.use_flip_axis=='HORIZONTAL':        
+                texStrg+="gradient x\n"
+                texStrg+="scale 2.01\n"
+            elif tex.use_flip_axis=='VERTICAL':
+                texStrg+="gradient y\n"
+                texStrg+="scale 2.01\n"
+            #texStrg+="ramp_wave\n"
+            #texStrg+="frequency 0.5\n"
+            texStrg+="phase 0.5\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else:
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                texStrg+="}\n"
+            if tex.progression == 'LINEAR': 
+                texStrg+="    poly_wave 1\n"
+            if tex.progression == 'QUADRATIC': 
+                texStrg+="    poly_wave 2\n"
+            if tex.progression == 'EASING':
+                texStrg+="    poly_wave 1.5\n"            
+        ####################### EMULATE BLENDER MUSGRAVE TEXTURE ####################
+        # if tex.type == 'MUSGRAVE':  
+            # texStrg+="function{ f_ridged_mf( x, y, 0, 1, 2, 9, -0.5, 3,3 )*0.5}\n"
+            # texStrg+="color_map {\n"
+            # texStrg+="[0 color rgbf<0,0,0,1>]\n"
+            # texStrg+="[1 color rgbf<1,1,1,0>]\n"
+            # texStrg+="}\n"
+        # simplified for now:
+
+        if tex.type == 'MUSGRAVE':
+            texStrg+="bozo scale 0.25 \n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else: 
+                texStrg+="color_map {[0.5 color rgbf<0,0,0,1>][1 color rgbt<1,1,1,0>]}ramp_wave \n"            
+        ####################### EMULATE BLENDER DISTORTED NOISE TEXTURE ####################
+        if tex.type == 'DISTORTED_NOISE':  
+            texStrg+="average\n"
+            texStrg+="  pigment_map {\n"
+            texStrg+="  [1 bozo scale 0.25 turbulence %.4g\n" %tex.distortion
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else: 
+                texStrg+="color_map {\n"
+                texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                texStrg+="}\n"
+            texStrg+="]\n"
+
+            if tex.noise_distortion == 'CELL_NOISE':
+                texStrg+="  [1 cells scale 0.1\n"
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else: 
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                    texStrg+="}\n"
+                texStrg+="]\n"                
+            if tex.noise_distortion=='VORONOI_CRACKLE':
+                texStrg+="  [1 crackle scale 0.25\n"
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else: 
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                    texStrg+="}\n"
+                texStrg+="]\n"                
+            if tex.noise_distortion in ['VORONOI_F1','VORONOI_F2','VORONOI_F3','VORONOI_F4','VORONOI_F2_F1']:
+                texStrg+="  [1 crackle metric 2.5 scale 0.25 turbulence %.4g\n" %(tex.distortion/2)
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else: 
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                    texStrg+="}\n"
+                texStrg+="]\n"                
+            else:
+                texStrg+="  [1 wrinkles scale 0.25\n" 
+                if tex.use_color_ramp == True:
+                    texStrg+=exportColorRamp(tex)
+                else: 
+                    texStrg+="color_map {\n"
+                    texStrg+="[0 color rgbt<1,1,1,0>]\n"
+                    texStrg+="[1 color rgbf<0,0,0,1>]\n"
+                    texStrg+="}\n"
+                texStrg+="]\n"
+            texStrg+="  }\n"
+        ####################### EMULATE BLENDER NOISE TEXTURE ####################
+        if tex.type == 'NOISE':  
+            texStrg+="cells\n"
+            texStrg+="turbulence 3\n"
+            texStrg+="omega 3\n"
+            if tex.use_color_ramp == True:
+                texStrg+=exportColorRamp(tex)
+            else: 
+                texStrg+="color_map {\n"
+                texStrg+="[0.75 color rgb<0,0,0,>]\n"
+                texStrg+="[1 color rgb<1,1,1,>]\n"
+                texStrg+="}\n"
+
+        ####################### IGNORE OTHER BLENDER TEXTURE ####################
+        else: #non translated textures
+            pass
+        texStrg+="}\n\n"            
+
+        texStrg+="#declare f%s=\n"%PATname
+        texStrg+="function{pigment{%s}}\n"%PATname       
+        texStrg+="\n"
+        
+    else:
+        texStrg+="pigment {\n"
+        texStrg+="%s\n"%pat.tex_pattern_type
+        if pat.tex_pattern_type == 'agate': 
+            texStrg+="agate_turb %.4g\n"%pat.modifier_turbulence                           
+        if pat.tex_pattern_type in {'spiral1', 'spiral2', 'tiling'}: 
+            texStrg+="%s\n"%pat.modifier_numbers
+        if pat.tex_pattern_type == 'quilted': 
+            texStrg+="control0 %s control1 %s\n"%(pat.modifier_control0, pat.modifier_control1)                           
+        if pat.tex_pattern_type == 'mandel': 
+            texStrg+="%s exponent %s \n"%(pat.f_iter, pat.f_exponent)  
+        if pat.tex_pattern_type == 'julia': 
+            texStrg+="<%.4g, %.4g> %s exponent %s \n"%(pat.julia_complex_1, pat.julia_complex_2, pat.f_iter, pat.f_exponent)   
+        if pat.tex_pattern_type == 'magnet' and pat.magnet_style == 'mandel': 
+            texStrg+="%s mandel %s \n"%(pat.magnet_type, pat.f_iter)
+        if pat.tex_pattern_type == 'magnet' and pat.magnet_style == 'julia':  
+            texStrg+="%s julia <%.4g, %.4g> %s\n"%(pat.magnet_type, pat.julia_complex_1, pat.julia_complex_2, pat.f_iter) 
+        if pat.tex_pattern_type in {'mandel', 'julia', 'magnet'}:
+            texStrg+="interior %s, %.4g\n"%(pat.f_ior, pat.f_ior_fac) 
+            texStrg+="exterior %s, %.4g\n"%(pat.f_eor, pat.f_eor_fac)
+        if pat.tex_pattern_type == 'gradient': 
+            texStrg+="<%s, %s, %s> \n"%(pat.grad_orient_x, pat.grad_orient_y, pat.grad_orient_z)
+        if pat.tex_pattern_type == 'pavement':
+            numTiles=pat.pave_tiles
+            numPattern=1
+            if pat.pave_sides == '4' and pat.pave_tiles == 3: 
+                 numPattern = pat.pave_pat_2
+            if pat.pave_sides == '6' and pat.pave_tiles == 3: 
+                numPattern = pat.pave_pat_3
+            if pat.pave_sides == '3' and pat.pave_tiles == 4: 
+                numPattern = pat.pave_pat_3
+            if pat.pave_sides == '3' and pat.pave_tiles == 5: 
+                numPattern = pat.pave_pat_4
+            if pat.pave_sides == '4' and pat.pave_tiles == 4: 
+                numPattern = pat.pave_pat_5
+            if pat.pave_sides == '6' and pat.pave_tiles == 4: 
+                numPattern = pat.pave_pat_7
+            if pat.pave_sides == '4' and pat.pave_tiles == 5: 
+                numPattern = pat.pave_pat_12
+            if pat.pave_sides == '3' and pat.pave_tiles == 6: 
+                numPattern = pat.pave_pat_12
+            if pat.pave_sides == '6' and pat.pave_tiles == 5: 
+                numPattern = pat.pave_pat_22
+            if pat.pave_sides == '4' and pat.pave_tiles == 6: 
+                numPattern = pat.pave_pat_35
+            if pat.pave_sides == '6' and pat.pave_tiles == 6: 
+                numTiles = 5                                
+            texStrg+="number_of_sides %s number_of_tiles %s pattern %s form %s \n"%(pat.pave_sides, numTiles, numPattern, pat.pave_form)
+        ################ functions #####################################################################################################
+        if pat.tex_pattern_type == 'function':                 
+            texStrg+="{ %s"%pat.func_list
+            texStrg+="(x"
+            if pat.func_plus_x != "NONE":
+                if pat.func_plus_x =='increase':
+                    texStrg+="*"                                    
+                if pat.func_plus_x =='plus':
+                    texStrg+="+"
+                texStrg+="%.4g"%pat.func_x
+            texStrg+=",y"
+            if pat.func_plus_y != "NONE":
+                if pat.func_plus_y =='increase':
+                    texStrg+="*"                                   
+                if pat.func_plus_y =='plus':
+                    texStrg+="+"
+                texStrg+="%.4g"%pat.func_y
+            texStrg+=",z"
+            if pat.func_plus_z != "NONE":
+                if pat.func_plus_z =='increase':
+                    texStrg+="*"                                    
+                if pat.func_plus_z =='plus':
+                    texStrg+="+"
+                texStrg+="%.4g"%pat.func_z
+            sort = -1
+            if pat.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"}:
+                sort = 0
+            if pat.func_list in {"f_bicorn","f_bifolia","f_boy_surface","f_superellipsoid","f_torus"}:
+                sort = 1
+            if pat.func_list in {"f_ellipsoid","f_folium_surface","f_hyperbolic_torus",
+                                 "f_kampyle_of_eudoxus","f_parabolic_torus","f_quartic_cylinder","f_torus2"}:
+                sort = 2
+            if pat.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"}:
+                sort = 3
+            if pat.func_list in {"f_algbr_cyl1","f_algbr_cyl2","f_algbr_cyl3","f_algbr_cyl4","f_blob","f_mesh1","f_poly4","f_spikes"}:
+                sort = 4
+            if pat.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"}:
+                sort = 5
+            if pat.func_list in {"f_helix1","f_helix2","f_piriform_2d","f_strophoid_2d"}:
+                sort = 6
+            if pat.func_list == "f_helical_torus":
+                sort = 7
+            if sort > -1:
+                texStrg+=",%.4g"%pat.func_P0
+            if sort > 0:
+                texStrg+=",%.4g"%pat.func_P1
+            if sort > 1:
+                texStrg+=",%.4g"%pat.func_P2
+            if sort > 2:
+                texStrg+=",%.4g"%pat.func_P3
+            if sort > 3:
+                texStrg+=",%.4g"%pat.func_P4
+            if sort > 4:
+                texStrg+=",%.4g"%pat.func_P5
+            if sort > 5:
+                texStrg+=",%.4g"%pat.func_P6
+            if sort > 6:
+                texStrg+=",%.4g"%pat.func_P7
+                texStrg+=",%.4g"%pat.func_P8
+                texStrg+=",%.4g"%pat.func_P9
+            texStrg+=")}\n"
+        ############## end functions ###############################################################
+        if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'}:                        
+            texStrg+="color_map {\n"
+        numColor=0
+        if tex.use_color_ramp == True:
+            for el in tex.color_ramp.elements:
+                numColor+=1
+                pos = el.position
+                col=el.color
+                colR,colG,colB,colA = col[0],col[1],col[2],1-col[3]
+                if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :
+                    texStrg+="[%.4g color rgbf<%.4g,%.4g,%.4g,%.4g>] \n"%(pos,colR,colG,colB,colA)
+                if pat.tex_pattern_type in {'brick','checker'} and numColor < 3:
+                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+                if pat.tex_pattern_type == 'hexagon' and numColor < 4 :
+                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+                if pat.tex_pattern_type == 'square' and numColor < 5 :
+                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+                if pat.tex_pattern_type == 'triangular' and numColor < 7 :
+                    texStrg+="color rgbf<%.4g,%.4g,%.4g,%.4g> \n"%(colR,colG,colB,colA)
+        else:
+            texStrg+="[0 color rgbf<0,0,0,1>]\n"
+            texStrg+="[1 color rgbf<1,1,1,0>]\n"
+        if pat.tex_pattern_type not in {'checker', 'hexagon', 'square', 'triangular', 'brick'} :                        
+            texStrg+="} \n"                       
+        if pat.tex_pattern_type == 'brick':                        
+            texStrg+="brick_size <%.4g, %.4g, %.4g> mortar %.4g \n"%(pat.brick_size_x, pat.brick_size_y, pat.brick_size_z, pat.brick_mortar)
+        texStrg+="%s \n"%mappingDif
+        texStrg+="rotate <%.4g,%.4g,%.4g> \n"%(pat.tex_rot_x, pat.tex_rot_y, pat.tex_rot_z)
+        texStrg+="turbulence <%.4g,%.4g,%.4g> \n"%(pat.warp_turbulence_x, pat.warp_turbulence_y, pat.warp_turbulence_z)
+        texStrg+="octaves %s \n"%pat.modifier_octaves
+        texStrg+="lambda %.4g \n"%pat.modifier_lambda
+        texStrg+="omega %.4g \n"%pat.modifier_omega
+        texStrg+="frequency %.4g \n"%pat.modifier_frequency
+        texStrg+="phase %.4g \n"%pat.modifier_phase                       
+        texStrg+="}\n\n"
+        texStrg+="#declare f%s=\n"%PATname
+        texStrg+="function{pigment{%s}}\n"%PATname       
+        texStrg+="\n"
+    return(texStrg)
+    
+    
+def writeTextureInfluence(mater, materialNames, LocalMaterialNames, path_image,
+                            imageFormat, imgMap, imgMapTransforms, file,
+                            tabWrite, string_strip_hyphen, safety, col):
+    material_finish = materialNames[mater.name]                        
+    if mater.use_transparency:
+        trans = 1.0 - mater.alpha
+    else:
+        trans = 0.0                            
+    if (mater.specular_color.s == 0.0):
+        colored_specular_found = False
+    else:
+        colored_specular_found = True
+
+    if mater.use_transparency and mater.transparency_method == 'RAYTRACE':
+        povFilter = mater.raytrace_transparency.filter * (1.0 - mater.alpha)
+        trans = (1.0 - mater.alpha) - povFilter
+    else:
+        povFilter = 0.0
+        
+    ##############SF
+    texturesDif = ""
+    texturesSpec = ""
+    texturesNorm = ""
+    texturesAlpha = ""
+    #proceduralFlag=False
+    for t in mater.texture_slots:
+        if t and t.use and t.texture.type != 'IMAGE' and t.texture.type != 'NONE':
+            proceduralFlag=True
+            image_filename = "PAT_%s"%string_strip_hyphen(bpy.path.clean_name(t.texture.name))
+            if image_filename:
+                if t.use_map_color_diffuse:
+                    texturesDif = image_filename
+                    # colvalue = t.default_value  # UNUSED
+                    t_dif = t
+                    if t_dif.texture.pov.tex_gamma_enable:
+                        imgGamma = (" gamma %.3g " % t_dif.texture.pov.tex_gamma_value)
+                if t.use_map_specular or t.use_map_raymir:
+                    texturesSpec = image_filename
+                    # colvalue = t.default_value  # UNUSED
+                    t_spec = t
+                if t.use_map_normal:
+                    texturesNorm = image_filename
+                    # colvalue = t.normal_factor * 10.0  # UNUSED
+                    #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  # UNUSED
+                    #textDispName=t.texture.image.name + ".displ"
+                    #was the above used? --MR
+                    t_alpha = t
+
+        if t and t.texture.type == 'IMAGE' and t.use and t.texture.image and t.texture.pov.tex_pattern_type == 'emulator':
+            proceduralFlag=False
+            if t.texture.image.packed_file:
+                orig_image_filename=t.texture.image.filepath_raw
+                unpackedfilename= os.path.join(preview_dir,("unpacked_img_"+(string_strip_hyphen(bpy.path.clean_name(t.texture.name)))))
+                if not os.path.exists(unpackedfilename):
+                    # record which images that were newly copied and can be safely
+                    # cleaned up
+                    unpacked_images.append(unpackedfilename)                                            
+                t.texture.image.filepath_raw=unpackedfilename
+                t.texture.image.save()
+                image_filename = unpackedfilename
+                t.texture.image.filepath_raw=orig_image_filename
+            else:
+                image_filename = path_image(t.texture.image)
+            # IMAGE SEQUENCE BEGINS
+            if image_filename:
+                if bpy.data.images[t.texture.image.name].source == 'SEQUENCE':
+                    korvaa = "." + str(bpy.data.textures[t.texture.name].image_user.frame_offset + 1).zfill(3) + "."
+                    image_filename = image_filename.replace(".001.", korvaa)
+                    print(" seq debug ")
+                    print(image_filename)
+            # IMAGE SEQUENCE ENDS
+            imgGamma = ""
+            if image_filename:
+                if t.use_map_color_diffuse:
+                    texturesDif = image_filename
+                    # colvalue = t.default_value  # UNUSED
+                    t_dif = t
+                    if t_dif.texture.pov.tex_gamma_enable:
+                        imgGamma = (" gamma %.3g " % t_dif.texture.pov.tex_gamma_value)
+                if t.use_map_specular or t.use_map_raymir:
+                    texturesSpec = image_filename
+                    # colvalue = t.default_value  # UNUSED
+                    t_spec = t
+                if t.use_map_normal:
+                    texturesNorm = image_filename
+                    # colvalue = t.normal_factor * 10.0  # UNUSED
+                    #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  # UNUSED
+                    #textDispName=t.texture.image.name + ".displ"
+                    #was the above used? --MR
+                    t_alpha = t
+
+    ####################################################################################
+
+
+    file.write("\n")
+    # THIS AREA NEEDS TO LEAVE THE TEXTURE OPEN UNTIL ALL MAPS ARE WRITTEN DOWN.
+    # --MR
+    currentMatName = string_strip_hyphen(materialNames[mater.name])
+    LocalMaterialNames.append(currentMatName)
+    file.write("\n#declare MAT_%s = \ntexture{\n" % currentMatName)
+
+    ################################################################################
+    
+    if mater.pov.replacement_text != "":
+        file.write("%s\n" % mater.pov.replacement_text)
+    #################################################################################
+    if mater.diffuse_shader == 'MINNAERT':
+        tabWrite("\n")
+        tabWrite("aoi\n")
+        tabWrite("texture_map {\n")
+        tabWrite("[%.3g finish {diffuse %.3g}]\n" % \
+                 (mater.darkness / 2.0, 2.0 - mater.darkness))
+        tabWrite("[%.3g\n" % (1.0 - (mater.darkness / 2.0)))
+
+    if mater.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 - mater.diffuse_fresnel) / 5,
+                      (mater.diffuse_intensity *
+                       ((5.0 - mater.diffuse_fresnel_factor) / 5))))
+            tabWrite("[%.3g\n" % ((mater.diffuse_fresnel_factor / 5) *
+                                  (mater.diffuse_fresnel / 5.0)))
+            c += 1
+
+    # 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")
+            if texturesSpec and texturesSpec.startswith("PAT_"):
+                tabWrite("function{f%s(x,y,z).grey}" %texturesSpec) 
+            else:
+                # 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 =imgMapTransforms(t_spec)
+                # 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)))
+                tabWrite("%s\n" % mappingSpec)
+            tabWrite("}\n")
+            tabWrite("texture_map {\n")
+            tabWrite("[0 \n")
+
+        if texturesDif == "":
+            if texturesAlpha != "":
+                tabWrite("\n")
+                if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                    tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
+                else:
+                    # 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 = imgMapTransforms(t_alpha)
+                    # 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("}\n")
+                tabWrite("}\n")
+
+            else:
+
+                tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, %.3g, %.3g>}\n" % \
+                         (col[0], col[1], col[2], povFilter, trans))
+
+            if texturesSpec != "":
+                # Level 1 is no specular
+                tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
+
+            else:
+                # Level 2 is translated spec
+                tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
+
+        else:
+            mappingDif = imgMapTransforms(t_dif)
+
+            if texturesAlpha != "":
+                mappingAlpha = imgMapTransforms(t_alpha)
+                # 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")
+                if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                    tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
+                else:
+                    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")
+                #if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                    #tabWrite("[1 pigment{%s}]\n" %texturesDif) 
+                if texturesDif and not texturesDif.startswith("PAT_"):
+                    tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
+                             (imageFormat(texturesDif), texturesDif,
+                              (imgGamma + imgMap(t_dif)), mappingDif))
+                elif texturesDif and texturesDif.startswith("PAT_"):
+                    tabWrite("[1 %s]\n" %texturesDif)                                                          
+                tabWrite("}\n")
+                tabWrite("}\n")
+                if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                    tabWrite("}\n")
+
+            else:
+                if texturesDif and texturesDif.startswith("PAT_"):
+                    tabWrite("pigment{%s}\n" %texturesDif) 
+                else:
+                    tabWrite("pigment {uv_mapping image_map {%s \"%s\" %s}%s}\n" % \
+                             (imageFormat(texturesDif), texturesDif,
+                              (imgGamma + imgMap(t_dif)), mappingDif))
+
+            if texturesSpec != "":
+                # Level 1 is no specular
+                tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
+
+            else:
+                # Level 2 is translated specular
+                tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
+
+            ## scale 1 rotate y*0
+            #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)))
+        if texturesNorm != "":
+            ## 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 =imgMapTransforms(t_nor)
+            # 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)))
+            #We were not using the above maybe we should?
+            if texturesNorm and texturesNorm.startswith("PAT_"):
+                tabWrite("normal{function{f%s(x,y,z).grey} bump_size %.4g}\n" %(texturesNorm, t_nor.normal_factor * 10)) 
+            else:
+                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 != "":
+            tabWrite("]\n")
+        ##################Second index for mapping specular max value###############
+            tabWrite("[1 \n")
+
+    if texturesDif == "" and mater.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 = imgMapTransforms(t_alpha)
+            # 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)
+            if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                tabWrite("function{f%s(x,y,z).transmit}\n" %texturesAlpha) 
+            else:
+                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("}\n")
+            tabWrite("}\n")
+
+        else:
+            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)))
+            
+        elif colored_specular_found:
+            # Level 1 is no specular
+            tabWrite("finish {%s}\n" % (safety(material_finish, Level=1)))
+
+        else:
+            # Level 2 is translated specular
+            tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
+
+    elif mater.pov.replacement_text == "":
+        mappingDif = imgMapTransforms(t_dif)
+        # mappingDif = ("scale <%.4g,%.4g,%.4g> translate <%.4g,%.4g,%.4g>" % \
+                      # ( 1.0 / t_dif.scale.x, 
+                      # 1.0 / t_dif.scale.y,
+                      # 1.0 / t_dif.scale.z, 
+                      # 0.5-(0.5/t_dif.scale.x) + t_dif.offset.x,
+                      # 0.5-(0.5/t_dif.scale.y) + t_dif.offset.y,
+                      # 0.5-(0.5/t_dif.scale.z) + t_dif.offset.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 = imgMapTransforms(t_alpha)
+            # 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)
+            if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                tabWrite("pigment{pigment_pattern {function{f%s(x,y,z).transmit}}\n" %texturesAlpha)
+            else:
+                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")
+            if texturesAlpha and texturesAlpha.startswith("PAT_"):
+                tabWrite("[1 function{f%s(x,y,z).transmit}]\n" %texturesAlpha) 
+            elif texturesDif and not texturesDif.startswith("PAT_"):                                       
+                tabWrite("[1 uv_mapping image_map {%s \"%s\" %s} %s]\n" % \
+                         (imageFormat(texturesDif), texturesDif,
+                          (imgMap(t_dif) + imgGamma), mappingDif))
+            elif texturesDif and texturesDif.startswith("PAT_"):
+                tabWrite("[1 %s]\n" %texturesDif)
+            tabWrite("}\n")
+            tabWrite("}\n")
+
+        else:
+            if texturesDif and texturesDif.startswith("PAT_"):
+                tabWrite("pigment{%s}\n" %texturesDif) 
+            else:                                    
+                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)))                  
+        else:
+            # Level 2 is translated specular
+            tabWrite("finish {%s}\n" % (safety(material_finish, Level=2)))
+
+        ## 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 mater.pov.replacement_text == "":
+        ## 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 =imgMapTransforms(t_nor)
+        # 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)))
+        #We were not using the above maybe we should?
+        if texturesNorm and texturesNorm.startswith("PAT_"):
+            tabWrite("normal{function{f%s(x,y,z).grey} bump_size %.4g}\n" %(texturesNorm, t_nor.normal_factor * 10))
+        else:                                    
+            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 mater.pov.replacement_text == "":
+        tabWrite("]\n")
+
+        tabWrite("}\n")
+
+    #End of slope/ior texture_map
+    if mater.diffuse_shader == 'MINNAERT' and mater.pov.replacement_text == "":
+        tabWrite("]\n")
+        tabWrite("}\n")
+    if mater.diffuse_shader == 'FRESNEL' and mater.pov.replacement_text == "":
+        c = 1
+        while (c <= lampCount):
+            tabWrite("]\n")
+            tabWrite("}\n")
+            c += 1
+
+      
+            
+    # Close first layer of POV "texture" (Blender material)
+    tabWrite("}\n")
+    
+    if (mater.specular_color.s > 0.0):
+        colored_specular_found = True
+    else:
+        colored_specular_found = False
+        
+    # Write another layered texture using invisible diffuse and metallic trick 
+    # to emulate colored specular highlights
+    special_texture_found = False
+    for t in mater.texture_slots:
+        if(t and t.use and ((t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE') and
+           (t.use_map_specular or t.use_map_raymir)):
+            # Specular mapped textures would conflict with colored specular
+            # because POV can't layer over or under pigment patterned textures
+            special_texture_found = True
+    
+    if colored_specular_found and not special_texture_found:
+        if comments:
+            file.write("  // colored highlights with a stransparent metallic layer\n")
+        else:
+            tabWrite("\n")
+    
+        tabWrite("texture {\n")
+        tabWrite("pigment {rgbft<%.3g, %.3g, %.3g, 0, 1>}\n" % \
+                         (mater.specular_color[0], mater.specular_color[1], mater.specular_color[2]))
+        tabWrite("finish {%s}\n" % (safety(material_finish, Level=2))) # Level 2 is translated spec
+
+        texturesNorm = ""
+        for t in mater.texture_slots:
+
+            if t and t.texture.pov.tex_pattern_type != 'emulator':
+                proceduralFlag=True
+                image_filename = string_strip_hyphen(bpy.path.clean_name(t.texture.name))
+            if (t and t.texture.type == 'IMAGE' and
+                    t.use and t.texture.image and
+                    t.texture.pov.tex_pattern_type == 'emulator'):
+                proceduralFlag=False 
+                image_filename = path_image(t.texture.image)
+                imgGamma = ""
+                if image_filename:
+                    if t.use_map_normal:
+                        texturesNorm = image_filename
+                        # colvalue = t.normal_factor * 10.0  # UNUSED
+                        #textNormName=t.texture.image.name + ".normal"
+                        #was the above used? --MR
+                        t_nor = t
+                        if proceduralFlag:
+                            tabWrite("normal{function" \
+                                     "{f%s(x,y,z).grey} bump_size %.4g}\n" % \
+                                     (texturesNorm,
+                                     t_nor.normal_factor * 10))
+                        else:
+                            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))
+                                      
+        tabWrite("}\n") # THEN IT CAN CLOSE LAST LAYER OF TEXTURE
-- 
GitLab