Skip to content
Snippets Groups Projects
Commit 0b522fda authored by Jesse Kaukonen's avatar Jesse Kaukonen
Browse files

Added a new summary block to the Renderfarm.fi render engine page

parent e8a00f90
No related branches found
No related tags found
No related merge requests found
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
bl_addon_info = { bl_addon_info = {
"name": "Renderfarm.fi", "name": "Renderfarm.fi",
"author": "Nathan Letwory <nathan@letworyinteractive.com>, Jesse Kaukonen <jesse.kaukonen@gmail.com>", "author": "Nathan Letwory <nathan@letworyinteractive.com>, Jesse Kaukonen <jesse.kaukonen@gmail.com>",
"version": (3,), "version": (4,),
"blender": (2, 5, 3), "blender": (2, 5, 5),
"api": 31847, "api": 32941,
"location": "Render > Engine > Renderfarm.fi", "location": "Render > Engine > Renderfarm.fi",
"description": "Send .blend as session to http://www.renderfarm.fi to render", "description": "Send .blend as session to http://www.renderfarm.fi to render",
"warning": "", "warning": "",
...@@ -119,7 +119,7 @@ ORESettings.inlicense = EnumProperty(items=licenses, name='source license', desc ...@@ -119,7 +119,7 @@ ORESettings.inlicense = EnumProperty(items=licenses, name='source license', desc
ORESettings.outlicense = EnumProperty(items=licenses, name='output license', description='license speficied for the output files', default='1') ORESettings.outlicense = EnumProperty(items=licenses, name='output license', description='license speficied for the output files', default='1')
ORESettings.sessions = CollectionProperty(type=ORESession, name='Sessions', description='Sessions on Renderfarm.fi') ORESettings.sessions = CollectionProperty(type=ORESession, name='Sessions', description='Sessions on Renderfarm.fi')
# all panels, except render panel # all panels, except render panel
# Example of wrapping every class 'as is' # Example of wrapping every class 'as is'
import properties_scene import properties_scene
...@@ -154,8 +154,98 @@ class RenderButtonsPanel(): ...@@ -154,8 +154,98 @@ class RenderButtonsPanel():
bl_space_type = 'PROPERTIES' bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW' bl_region_type = 'WINDOW'
bl_context = "render" bl_context = "render"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
class SUMMARY_PT_RenderfarmFi(RenderButtonsPanel, bpy.types.Panel):
# Prints a summary to the panel before uploading. If scene settings differ from ore settings, then display a warning icon
bl_label = 'Summary'
COMPAT_ENGINES = set(['RENDERFARMFI_RENDER'])
@classmethod
def poll(cls, context):
rd = context.scene.render
return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES)
def draw(self, context):
sce = context.scene
rd = context.scene.render
ore = context.scene.ore_render
layout = self.layout
# Check if correct resolution is set
if rd.resolution_x != ore.resox:
layout.label(text='Resolution X: ' + str(ore.resox), icon='ERROR')
else:
layout.label(text='Resolution X: ' + str(ore.resox), icon='FILE_TICK')
if rd.resolution_y != ore.resoy:
layout.label(text='Resolution Y: ' + str(ore.resoy), icon='ERROR')
else:
layout.label(text='Resolution Y: ' + str(ore.resoy), icon='FILE_TICK')
# Check if correct number of frames is specified
if (sce.frame_start != ore.start) and not ( (sce.frame_start == ore.start and sce.frame_end == ore.end) and sce.frame_start == sce.frame_end):
layout.label(text='Start frame: ' + str(ore.start), icon='ERROR')
layout.label(text='.blend Start frame is different to the one specified in the uploader script. Please verify!')
else:
layout.label(text='Start frame: ' + str(ore.start), icon='FILE_TICK')
if (sce.frame_end != ore.end) and not ( (sce.frame_start == ore.start and sce.frame_end == ore.end) and sce.frame_start == sce.frame_end):
layout.label(text='End frame: ' + str(ore.end), icon='ERROR')
layout.label(text='.blend End frame is different to the one specified in the uploader script. Please verify!')
else:
layout.label(text='End frame: ' + str(ore.end), icon='FILE_TICK')
# Check if more than 1 frame is specified
if (sce.frame_start == ore.start and sce.frame_end == ore.end) and (sce.frame_start == sce.frame_end):
layout.label(text='Only one frame specified to be rendered!')
layout.label(text='This is highly ineffective when using distributed rendering')
if rd.resolution_percentage != 100:
layout.label(text='Resolution percentage: ' + str(rd.resolution_percentage), icon='ERROR')
else:
layout.label(text='Resolution percentage: ' + str(rd.resolution_percentage), icon='FILE_TICK')
if rd.file_format != 'PNG':
layout.label(text='Output format: ' + rd.file_format, icon='ERROR')
layout.label(text='Output format must be set to PNG')
else:
layout.label(text='Output format: ' + rd.file_format, icon='FILE_TICK')
if ore.parts > 1 and rd.use_sss == True:
layout.label(text='Subsurface Scattering: ' + str(rd.use_sss), icon='ERROR')
layout.label(text='If you want to use SSS, parts must be set to 1')
else:
layout.label(text='Subsurface Scattering: ' + str(rd.use_sss), icon='FILE_TICK')
if rd.use_compositing == False:
layout.label(text='Composite nodes: ' + str(rd.use_compositing), icon='ERROR')
layout.label(text='Composite nodes are disabled.')
layout.label(text='The script automatically disables them if: ')
layout.label(text='- Filter type nodes are used and parts are more than 1')
layout.label(text='- There is an output node')
else:
layout.label(text='Composite nodes: ' + str(rd.use_compositing), icon='FILE_TICK')
if rd.use_save_buffers:
layout.label(text='Save buffers: ' + str(rd.use_save_buffers), icon='ERROR')
layout.label(text='Save buffers must be disabled')
layout.label(text='Can only disabled if Full Sample is turned off')
else:
layout.label(text='Save buffers: ' + str(rd.use_save_buffers), icon='FILE_TICK')
if rd.threads_mode != 'FIXED' or rd.threads > 1:
layout.label(text='Threads: ' + rd.threads_mode + ' ' + str(rd.threads), icon='ERROR')
layout.label(text='Threads must be set to Fixed, 1')
else:
layout.label(text='Threads: ' + rd.threads_mode + ' ' + str(rd.threads), icon='FILE_TICK')
if ore.prepared == False:
layout.label(text='The script reports "not ready".', icon='ERROR')
layout.label(text='Please review the settings above')
layout.label(text='If everything is in order, click Check Scene again')
layout.label(text='The script automatically changes settings, so make sure they are correct')
else:
layout.label(text='The script reports "Good to go!"', icon='FILE_TICK')
layout.label(text='To make sure that all works, please run a test render first')
class RENDERFARM_MT_Session(bpy.types.Menu): class RENDERFARM_MT_Session(bpy.types.Menu):
bl_label = "Show Session" bl_label = "Show Session"
...@@ -244,23 +334,22 @@ class SESSIONS_PT_RenderfarmFi(RenderButtonsPanel, bpy.types.Panel): ...@@ -244,23 +334,22 @@ class SESSIONS_PT_RenderfarmFi(RenderButtonsPanel, bpy.types.Panel):
class RENDER_PT_RenderfarmFi(RenderButtonsPanel, bpy.types.Panel): class RENDER_PT_RenderfarmFi(RenderButtonsPanel, bpy.types.Panel):
bl_label = "Scene Settings" bl_label = "Scene Settings"
COMPAT_ENGINES = set(['RENDERFARMFI_RENDER']) COMPAT_ENGINES = set(['RENDERFARMFI_RENDER'])
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):
rd = context.scene.render rd = context.scene.render
return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES) return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES)
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
sce = context.scene sce = context.scene
ore = sce.ore_render ore = sce.ore_render
if ore.prepared and ore.hash!='': if ore.prepared and ore.hash!='':
layout.prop(ore, 'memusage') layout.prop(ore, 'memusage')
layout.separator() layout.separator()
row = layout.row() row = layout.row()
row.label(text='Resolution: '+str(ore.resox)+'x'+str(ore.resoy))
layout.separator() layout.separator()
row = layout.row() row = layout.row()
...@@ -642,7 +731,7 @@ class ORE_PrepareOp(bpy.types.Operator): ...@@ -642,7 +731,7 @@ class ORE_PrepareOp(bpy.types.Operator):
def execute(self, context): def execute(self, context):
def hasSSSMaterial(): def hasSSSMaterial():
for m in bpy.data.materials: for m in bpy.data.materials:
if m.subsurface_scattering.enabled: if m.subsurface_scattering.use:
return True return True
return False return False
...@@ -710,8 +799,9 @@ class ORE_PrepareOp(bpy.types.Operator): ...@@ -710,8 +799,9 @@ class ORE_PrepareOp(bpy.types.Operator):
if len(bpy.errors) > 0: if len(bpy.errors) > 0:
ore.prepared = False ore.prepared = False
return {'CANCELLED'} return {'CANCELLED'}
rd = sce.render rd = sce.render
print("=============================================") print("=============================================")
rd.threads_mode = 'FIXED' rd.threads_mode = 'FIXED'
rd.threads = 1 rd.threads = 1
...@@ -741,6 +831,7 @@ class ORE_PrepareOp(bpy.types.Operator): ...@@ -741,6 +831,7 @@ class ORE_PrepareOp(bpy.types.Operator):
if rd.use_compositing: if rd.use_compositing:
if hasCompositingErrors(sce.use_nodes, sce.node_tree, ore.parts): if hasCompositingErrors(sce.use_nodes, sce.node_tree, ore.parts):
print("Found disallowed nodes or problematic setup") print("Found disallowed nodes or problematic setup")
rd.use_compositing = False
self.report({'WARNING'}, "Found disallowed nodes or problematic setup") self.report({'WARNING'}, "Found disallowed nodes or problematic setup")
errors = True errors = True
print("Done checking the scene. Now do a test render") print("Done checking the scene. Now do a test render")
...@@ -781,14 +872,18 @@ class ORE_UploaderOp(bpy.types.Operator): ...@@ -781,14 +872,18 @@ class ORE_UploaderOp(bpy.types.Operator):
class ORE_UseBlenderReso(bpy.types.Operator): class ORE_UseBlenderReso(bpy.types.Operator):
bl_idname = "ore.use_scene_settings" bl_idname = "ore.use_scene_settings"
bl_label = "Use Scene resolution" bl_label = "Use Scene settings"
def execute(self, context): def execute(self, context):
sce = context.scene sce = context.scene
ore = sce.ore_render ore = sce.ore_render
rd = context.scene.render
ore.resox = sce.render.resolution_x ore.resox = rd.resolution_x
ore.resoy = sce.render.resolution_y ore.resoy = rd.resolution_y
ore.start = sce.frame_start
ore.end = sce.frame_end
ore.fps = rd.fps
return {'FINISHED'} return {'FINISHED'}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment