[Bf-extensions-cvs] [a595c3a4] blender-v2.79a-release: *Fixed texture normal_factor regression *Fixed lighting attenuation for a closer match with Blender Internal

Maurice Raybaud noreply at git.blender.org
Mon Jan 1 16:36:25 CET 2018


Commit: a595c3a43f4cb3f66bba4b1800ceccc259946457
Author: Maurice Raybaud
Date:   Fri Sep 8 21:38:19 2017 +0200
Branches: blender-v2.79a-release
https://developer.blender.org/rBAa595c3a43f4cb3f66bba4b1800ceccc259946457

*Fixed texture normal_factor regression
*Fixed lighting attenuation for a closer match with Blender Internal

===================================================================

M	render_povray/__init__.py
M	render_povray/render.py
M	render_povray/shading.py

===================================================================

diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index 86286ce5..cfb45f5a 100644
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -36,6 +36,7 @@ if "bpy" in locals():
     import importlib
     importlib.reload(ui)
     importlib.reload(render)
+    importlib.reload(shading)
     importlib.reload(update_files)
 
 else:
diff --git a/render_povray/render.py b/render_povray/render.py
index 914fc45a..d3695780 100644
--- a/render_povray/render.py
+++ b/render_povray/render.py
@@ -28,6 +28,7 @@ import re
 import random
 import platform#
 import subprocess#
+import tempfile #generate temporary files with random names
 from bpy.types import(Operator)
 from imghdr import what #imghdr is a python lib to identify image file types
 
@@ -201,7 +202,7 @@ preview_dir = os.path.join(user_dir, "preview")
 
 ## Make sure Preview directory exists and is empty
 smokePath = os.path.join(preview_dir, "smoke.df3")
-
+'''
 def write_global_setting(scene,file):
     file.write("global_settings {\n")
     file.write("    assumed_gamma %.6f\n"%scene.pov.assumed_gamma)
@@ -285,7 +286,7 @@ def write_global_setting(scene,file):
                 file.write('        load_file "%s"\n'%fullFileName)
         file.write("}\n")
     file.write("}\n")
-
+'''
 def write_object_modifiers(scene,ob,File):
     '''XXX WIP
     onceCSG = 0
@@ -574,7 +575,7 @@ def write_pov(filename, scene=None, info_callback=None):
             matrix = global_matrix * ob.matrix_world
 
             # Color is modified by energy #muiltiplie by 2 for a better match --Maurice
-            color = tuple([c * lamp.energy for c in lamp.color])
+            color = tuple([c * (lamp.energy) for c in lamp.color])
 
             tabWrite("light_source {\n")
             tabWrite("< 0,0,0 >\n")
@@ -655,14 +656,16 @@ def write_pov(filename, scene=None, info_callback=None):
             # Sun shouldn't be attenuated. Hemi and area lights have no falloff attribute so they
             # are put to type 2 attenuation a little higher above.
             if lamp.type not in {'SUN', 'AREA', 'HEMI'}:
-                tabWrite("fade_distance %.6f\n" % (lamp.distance / 10.0))
                 if lamp.falloff_type == 'INVERSE_SQUARE':
+                    tabWrite("fade_distance %.6f\n" % (sqrt(lamp.distance/2.0)))
                     tabWrite("fade_power %d\n" % 2)  # Use blenders lamp quad equivalent
                 elif lamp.falloff_type == 'INVERSE_LINEAR':
+                    tabWrite("fade_distance %.6f\n" % (lamp.distance / 2.0))                
                     tabWrite("fade_power %d\n" % 1)  # Use blenders lamp linear
-                # supposing using no fade power keyword would default to constant, no attenuation.
                 elif lamp.falloff_type == 'CONSTANT':
-                    pass
+                    tabWrite("fade_distance %.6f\n" % (lamp.distance / 2.0))
+                    tabWrite("fade_power %d\n" % 3)  
+                    # Use blenders lamp constant equivalent no attenuation.
                 # Using Custom curve for fade power 3 for now.
                 elif lamp.falloff_type == 'CUSTOM_CURVE':
                     tabWrite("fade_power %d\n" % 4)
@@ -2982,7 +2985,20 @@ def write_pov(filename, scene=None, info_callback=None):
 
                             file.write("\n")
                             tabWrite("}\n")
-
+                            
+                        #XXX BOOLEAN
+                        onceCSG = 0
+                        for mod in ob.modifiers:
+                            if onceCSG == 0:
+                                if mod :
+                                    if mod.type == 'BOOLEAN':
+                                        if ob.pov.boolean_mod == "POV":
+                                            file.write("\tinside_vector <%.6g, %.6g, %.6g>\n" %
+                                                       (ob.pov.inside_vector[0],
+                                                        ob.pov.inside_vector[1],
+                                                        ob.pov.inside_vector[2]))
+                                            onceCSG = 1
+ 
                         if me.materials:
                             try:
                                 material = me.materials[0]  # dodgy
@@ -2990,6 +3006,10 @@ def write_pov(filename, scene=None, info_callback=None):
                             except IndexError:
                                 print(me)
 
+                        # POV object modifiers such as 
+                        # hollow / sturm / double_illuminate etc.
+                        write_object_modifiers(scene,ob,file)                        
+ 
                         #Importance for radiosity sampling added here:
                         tabWrite("radiosity { \n")
                         tabWrite("importance %3g \n" % importance)
@@ -3221,7 +3241,20 @@ def write_pov(filename, scene=None, info_callback=None):
 
                             file.write("\n")
                             tabWrite("}\n")
-
+                            
+                        #XXX BOOLEAN
+                        onceCSG = 0
+                        for mod in ob.modifiers:
+                            if onceCSG == 0:
+                                if mod :
+                                    if mod.type == 'BOOLEAN':
+                                        if ob.pov.boolean_mod == "POV":
+                                            file.write("\tinside_vector <%.6g, %.6g, %.6g>\n" %
+                                                       (ob.pov.inside_vector[0],
+                                                        ob.pov.inside_vector[1],
+                                                        ob.pov.inside_vector[2]))
+                                            onceCSG = 1
+ 
                         if me.materials:
                             try:
                                 material = me.materials[0]  # dodgy
@@ -3229,7 +3262,7 @@ def write_pov(filename, scene=None, info_callback=None):
                             except IndexError:
                                 print(me)
 
-                        # POV object inside_vector and modifiers such as 
+                        # POV object modifiers such as 
                         # hollow / sturm / double_illuminate etc.
                         write_object_modifiers(scene,ob,file)                        
                                 
@@ -3435,18 +3468,13 @@ def write_pov(filename, scene=None, info_callback=None):
         if scene.pov.charset != 'ascii':
             file.write("    charset %s\n"%scene.pov.charset)
         if scene.pov.global_settings_advanced:
-            if scene.pov.adc_bailout_enable and scene.pov.radio_enable == False:
+            if scene.pov.radio_enable == False:
                 file.write("    adc_bailout %.6f\n"%scene.pov.adc_bailout)
-            if scene.pov.ambient_light_enable:
-                file.write("    ambient_light <%.6f,%.6f,%.6f>\n"%scene.pov.ambient_light[:])
-            if scene.pov.irid_wavelength_enable:
-                file.write("    irid_wavelength <%.6f,%.6f,%.6f>\n"%scene.pov.irid_wavelength[:])
-            if scene.pov.max_intersections_enable:
-                file.write("    max_intersections %s\n"%scene.pov.max_intersections)
-            if scene.pov.number_of_waves_enable:
-                file.write("    number_of_waves %s\n"%scene.pov.number_of_waves)
-            if scene.pov.noise_generator_enable:
-                file.write("    noise_generator %s\n"%scene.pov.noise_generator)
+            file.write("    ambient_light <%.6f,%.6f,%.6f>\n"%scene.pov.ambient_light[:])
+            file.write("    irid_wavelength <%.6f,%.6f,%.6f>\n"%scene.pov.irid_wavelength[:])
+            file.write("    max_intersections %s\n"%scene.pov.max_intersections)
+            file.write("    number_of_waves %s\n"%scene.pov.number_of_waves)
+            file.write("    noise_generator %s\n"%scene.pov.noise_generator)
         if scene.pov.radio_enable:
             tabWrite("radiosity {\n")
             tabWrite("adc_bailout %.4g\n" % scene.pov.radio_adc_bailout)
@@ -3499,6 +3527,21 @@ def write_pov(filename, scene=None, info_callback=None):
                     tabWrite("adc_bailout %.3g\n" % scene.pov.photon_adc_bailout)
                     tabWrite("gather %d, %d\n" % (scene.pov.photon_gather_min,
                         scene.pov.photon_gather_max))
+                    if scene.pov.photon_map_file_save_load in {'save'}:
+                        filePhName = 'Photon_map_file.ph'
+                        if scene.pov.photon_map_file != '':
+                            filePhName = scene.pov.photon_map_file+'.ph'
+                        filePhDir = tempfile.gettempdir()
+                        path = bpy.path.abspath(scene.pov.photon_map_dir)
+                        if os.path.exists(path):
+                            filePhDir = path
+                        fullFileName = os.path.join(filePhDir,filePhName)
+                        tabWrite('save_file "%s"\n'%fullFileName)
+                        scene.pov.photon_map_file = fullFileName
+                    if scene.pov.photon_map_file_save_load in {'load'}:
+                        fullFileName = bpy.path.abspath(scene.pov.photon_map_file)
+                        if os.path.exists(fullFileName):
+                            tabWrite('load_file "%s"\n'%fullFileName)                        
                     tabWrite("}\n")
                     oncePhotons = 0
 
diff --git a/render_povray/shading.py b/render_povray/shading.py
index 42dd2636..c0759184 100644
--- a/render_povray/shading.py
+++ b/render_povray/shading.py
@@ -93,7 +93,7 @@ def writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments
                 pass  # let's keep things simple for now
             if material.diffuse_shader == 'LAMBERT' and Level != 3:
                 # trying to best match lambert attenuation by that constant brilliance value
-                tabWrite("brilliance 1.8\n")
+                tabWrite("brilliance 1\n")
 
             if Level == 2:
                 ###########################Specular Shader####

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list