Skip to content
Snippets Groups Projects
properties_render.py 18.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    narrowui = 180
    
    class RENDER_MT_presets(bpy.types.Menu):
        bl_label = "Render Presets"
    
        preset_subdir = "render"
        preset_operator = "script.python_file_run"
        draw = bpy.types.Menu.draw_preset
    
    class RenderButtonsPanel(bpy.types.Panel):
    
        bl_space_type = 'PROPERTIES'
        bl_region_type = 'WINDOW'
        bl_context = "render"
        # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
    
        def poll(self, context):
            rd = context.scene.render_data
    
            return (context.scene and rd.use_game_engine is False) and (rd.engine in self.COMPAT_ENGINES)
    
    
    class RENDER_PT_render(RenderButtonsPanel):
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            split = layout.split()
    
            col = split.column()
    
            col.operator("screen.render", text="Image", icon='RENDER_STILL')
    
                col = split.column()
    
            col.operator("screen.render", text="Animation", icon='RENDER_ANIMATION').animation = True
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.prop(rd, "display_mode", text="Display")
    
    class RENDER_PT_layers(RenderButtonsPanel):
    
        bl_label = "Layers"
        bl_default_closed = True
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            scene = context.scene
            rd = scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            row = layout.row()
            row.template_list(rd, "layers", rd, "active_layer_index", rows=2)
    
            col = row.column(align=True)
    
            col.operator("scene.render_layer_add", icon='ZOOMIN', text="")
            col.operator("scene.render_layer_remove", icon='ZOOMOUT', text="")
    
    
            rl = rd.layers[rd.active_layer_index]
    
            if rl:
    
    Campbell Barton's avatar
    Campbell Barton committed
                layout.prop(rl, "name")
    
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(scene, "visible_layers", text="Scene")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rl, "visible_layers", text="Layer")
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.prop(rl, "light_override", text="Light")
            layout.prop(rl, "material_override", text="Material")
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.separator()
            layout.label(text="Include:")
    
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rl, "zmask")
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "zmask_negate", text="Negate")
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rl, "all_z")
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rl, "solid")
            col.prop(rl, "halo")
            col.prop(rl, "ztransp")
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rl, "sky")
            col.prop(rl, "edge")
            col.prop(rl, "strand")
    
    Campbell Barton's avatar
    Campbell Barton committed
                split.label(text="Zmask Layers:")
                split.column().prop(rl, "zmask_layers", text="")
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.separator()
    
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.label(text="Passes:")
            col.prop(rl, "pass_combined")
            col.prop(rl, "pass_z")
            col.prop(rl, "pass_vector")
            col.prop(rl, "pass_normal")
            col.prop(rl, "pass_uv")
            col.prop(rl, "pass_mist")
            col.prop(rl, "pass_object_index")
    
            col.prop(rl, "pass_color")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.label()
            col.prop(rl, "pass_diffuse")
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "pass_specular")
    
            row.prop(rl, "pass_specular_exclude", text="", icon='X')
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "pass_shadow")
    
            row.prop(rl, "pass_shadow_exclude", text="", icon='X')
    
            row.prop(rl, "pass_emit")
            row.prop(rl, "pass_emit_exclude", text="", icon='X')
            row = col.row()
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "pass_ao")
    
            row.prop(rl, "pass_ao_exclude", text="", icon='X')
    
            row.prop(rl, "pass_environment")
            row.prop(rl, "pass_environment_exclude", text="", icon='X')
            row = col.row()
            row.prop(rl, "pass_indirect")
            row.prop(rl, "pass_indirect_exclude", text="", icon='X')
            row = col.row()
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "pass_reflection")
    
            row.prop(rl, "pass_reflection_exclude", text="", icon='X')
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rl, "pass_refraction")
    
            row.prop(rl, "pass_refraction_exclude", text="", icon='X')
    
    
    class RENDER_PT_shading(RenderButtonsPanel):
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "render_textures", text="Textures")
            col.prop(rd, "render_shadows", text="Shadows")
            col.prop(rd, "render_sss", text="Subsurface Scattering")
            col.prop(rd, "render_envmaps", text="Environment Map")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "render_raytracing", text="Ray Tracing")
            col.prop(rd, "color_management")
            col.prop(rd, "alpha_mode", text="Alpha")
    
    class RENDER_PT_performance(RenderButtonsPanel):
    
        bl_label = "Performance"
        bl_default_closed = True
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.label(text="Threads:")
            col.row().prop(rd, "threads_mode", expand=True)
    
            sub = col.column()
            sub.enabled = rd.threads_mode == 'THREADS_FIXED'
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "threads")
    
            sub = col.column(align=True)
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Tiles:")
            sub.prop(rd, "parts_x", text="X")
            sub.prop(rd, "parts_y", text="Y")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.label(text="Memory:")
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "save_buffers")
    
            sub.enabled = not rd.full_sample
            sub = col.column()
            sub.active = rd.use_compositing
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "free_image_textures")
    
            sub = col.column()
            sub.active = rd.render_raytracing
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Acceleration structure:")
            sub.prop(rd, "raytrace_structure", text="")
    
            if rd.raytrace_structure == 'OCTREE':
    
    Campbell Barton's avatar
    Campbell Barton committed
                sub.prop(rd, "octree_resolution", text="Resolution")
    
    Campbell Barton's avatar
    Campbell Barton committed
                sub.prop(rd, "use_instances", text="Instances")
            sub.prop(rd, "use_local_coords", text="Local Coordinates")
    
    class RENDER_PT_post_processing(RenderButtonsPanel):
    
        bl_label = "Post Processing"
        bl_default_closed = True
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "use_compositing")
            col.prop(rd, "use_sequencer")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "dither_intensity", text="Dither", slider=True)
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.separator()
    
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "fields", text="Fields")
    
            sub = col.column()
            sub.active = rd.fields
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.row().prop(rd, "field_order", expand=True)
            sub.prop(rd, "fields_still", text="Still")
    
                col = split.column()
            else:
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.separator()
            col.prop(rd, "edge")
    
            sub = col.column()
            sub.active = rd.edge
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "edge_threshold", text="Threshold", slider=True)
            sub.prop(rd, "edge_color", text="")
    
    class RENDER_PT_output(RenderButtonsPanel):
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
    Campbell Barton's avatar
    Campbell Barton committed
            layout.prop(rd, "output_path", text="")
    
    
            split = layout.split()
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "file_format", text="")
            col.row().prop(rd, "color_mode", text="Color", expand=True)
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "use_overwrite")
            col.prop(rd, "use_placeholder")
    
    
            if rd.file_format in ('AVIJPEG', 'JPEG'):
                split = layout.split()
    
    Campbell Barton's avatar
    Campbell Barton committed
                split.prop(rd, "quality", slider=True)
    
    
            elif rd.file_format == 'OPENEXR':
                split = layout.split()
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.label(text="Codec:")
                col.prop(rd, "exr_codec", text="")
    
                    subsplit = split.split()
                    col = subsplit.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "exr_half")
                col.prop(rd, "exr_zbuf")
    
                    col = subsplit.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "exr_preview")
    
    
            elif rd.file_format == 'JPEG2000':
                split = layout.split()
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.label(text="Depth:")
                col.row().prop(rd, "jpeg2k_depth", expand=True)
    
                    col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "jpeg2k_preset", text="")
                col.prop(rd, "jpeg2k_ycc")
    
    
            elif rd.file_format in ('CINEON', 'DPX'):
                split = layout.split()
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "cineon_log", text="Convert to Log")
    
                    col = split.column(align=True)
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "cineon_black", text="Black")
                col.prop(rd, "cineon_white", text="White")
                col.prop(rd, "cineon_gamma", text="Gamma")
    
    
            elif rd.file_format == 'TIFF':
                split = layout.split()
    
    Campbell Barton's avatar
    Campbell Barton committed
                split.prop(rd, "tiff_bit")
    
            elif rd.file_format == 'QUICKTIME_CARBON':
                split = layout.split()
                split.operator("scene.render_data_set_quicktime_codec")
    
    
            elif rd.file_format == 'QUICKTIME_QTKIT':
                split = layout.split()
                col = split.column()
                col.prop(rd, "quicktime_codec_type")
    
                col.prop(rd, "quicktime_codec_spatial_quality", text="Quality")
    
    class RENDER_PT_encoding(RenderButtonsPanel):
    
        bl_label = "Encoding"
        bl_default_closed = True
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def poll(self, context):
            rd = context.scene.render_data
            return rd.file_format in ('FFMPEG', 'XVID', 'H264', 'THEORA')
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_format")
    
            if rd.ffmpeg_format in ('AVI', 'QUICKTIME', 'MKV', 'OGG'):
    
                if wide_ui:
                    col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
                col.prop(rd, "ffmpeg_codec")
    
                if wide_ui:
    
    Campbell Barton's avatar
    Campbell Barton committed
                    split.label()
    
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_video_bitrate")
    
            if wide_ui:
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_gopsize")
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.label(text="Rate:")
            col.prop(rd, "ffmpeg_minrate", text="Minimum")
            col.prop(rd, "ffmpeg_maxrate", text="Maximum")
            col.prop(rd, "ffmpeg_buffersize", text="Buffer")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_autosplit")
            col.label(text="Mux:")
            col.prop(rd, "ffmpeg_muxrate", text="Rate")
            col.prop(rd, "ffmpeg_packetsize", text="Packet Size")
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            layout.prop(rd, "ffmpeg_multiplex_audio", text="Audio")
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            sub = layout.column()
            sub.active = rd.ffmpeg_multiplex_audio
            sub.prop(rd, "ffmpeg_audio_codec", text="Codec")
            sub.separator()
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            split = sub.split()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_audio_bitrate")
            col.prop(rd, "ffmpeg_audio_mixrate")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "ffmpeg_audio_volume", slider=True)
    
    class RENDER_PT_antialiasing(RenderButtonsPanel):
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw_header(self, context):
            rd = context.scene.render_data
    
    
    Campbell Barton's avatar
    Campbell Barton committed
            self.layout.prop(rd, "antialiasing", text="")
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            layout.active = rd.antialiasing
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.row().prop(rd, "antialiasing_samples", expand=True)
            col.prop(rd, "full_sample")
    
                col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "pixel_filter", text="")
    
            col.prop(rd, "filter_size", text="Size")
    
    class RENDER_PT_dimensions(RenderButtonsPanel):
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw(self, context):
            layout = self.layout
    
            scene = context.scene
            rd = scene.render_data
    
            wide_ui = context.region.width > narrowui
    
            row = layout.row().split()
            sub = row.row(align=True).split(percentage=0.75)
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.menu("RENDER_MT_presets", text="Presets")
            sub.operator("render.preset_add", text="Add")
    
            split = layout.split()
    
            col = split.column()
            sub = col.column(align=True)
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Resolution:")
            sub.prop(rd, "resolution_x", text="X")
            sub.prop(rd, "resolution_y", text="Y")
            sub.prop(rd, "resolution_percentage", text="")
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Aspect Ratio:")
            sub.prop(rd, "pixel_aspect_x", text="X")
            sub.prop(rd, "pixel_aspect_y", text="Y")
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rd, "use_border", text="Border")
    
    Thomas Dinges's avatar
    Thomas Dinges committed
            sub = row.row()
            sub.active = rd.use_border
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "crop_to_border", text="Crop")
    
                col = split.column()
            sub = col.column(align=True)
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Frame Range:")
            sub.prop(scene, "start_frame", text="Start")
            sub.prop(scene, "end_frame", text="End")
            sub.prop(scene, "frame_step", text="Step")
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.label(text="Frame Rate:")
            sub.prop(rd, "fps")
    
        bl_label = "Stamp"
        bl_default_closed = True
    
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
    
        def draw_header(self, context):
            rd = context.scene.render_data
    
    
    Campbell Barton's avatar
    Campbell Barton committed
            self.layout.prop(rd, "render_stamp", text="")
    
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
    
            wide_ui = context.region.width > narrowui
    
    
            layout.active = rd.render_stamp
    
            split = layout.split()
    
            col = split.column()
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "stamp_time", text="Time")
            col.prop(rd, "stamp_date", text="Date")
            col.prop(rd, "stamp_render_time", text="RenderTime")
            col.prop(rd, "stamp_frame", text="Frame")
            col.prop(rd, "stamp_scene", text="Scene")
            col.prop(rd, "stamp_camera", text="Camera")
            col.prop(rd, "stamp_filename", text="Filename")
            col.prop(rd, "stamp_marker", text="Marker")
    
            col.prop(rd, "stamp_sequencer_strip", text="Seq. Strip")
    
                col = split.column()
    
            col.active = rd.render_stamp
    
    Campbell Barton's avatar
    Campbell Barton committed
            col.prop(rd, "stamp_foreground", slider=True)
            col.prop(rd, "stamp_background", slider=True)
            col.separator()
            col.prop(rd, "stamp_font_size", text="Font Size")
    
    
            row = layout.split(percentage=0.2)
    
    Campbell Barton's avatar
    Campbell Barton committed
            row.prop(rd, "stamp_note", text="Note")
    
            sub = row.row()
            sub.active = rd.stamp_note
    
    Campbell Barton's avatar
    Campbell Barton committed
            sub.prop(rd, "stamp_note_text", text="")
    
    class RENDER_PT_bake(RenderButtonsPanel):
        bl_label = "Bake"
        bl_default_closed = True
        COMPAT_ENGINES = {'BLENDER_RENDER'}
    
        def draw(self, context):
            layout = self.layout
    
            rd = context.scene.render_data
            wide_ui = context.region.width > narrowui
    
            layout.operator("object.bake_image", icon='RENDER_STILL')
            
            if wide_ui:
                layout.prop(rd, "bake_type")
            else:
                layout.prop(rd, "bake_type", text="")
            
    
                if wide_ui:
                    layout.prop(rd, "bake_normal_space")
                else:
                    layout.prop(rd, "bake_normal_space", text="")
    
            elif rd.bake_type in ('DISPLACEMENT', 'AO'):
    
            # col.prop(rd, "bake_aa_mode")
            # col.prop(rd, "bake_enable_aa")
    
            col = split.column()
            col.prop(rd, "bake_clear")
            col.prop(rd, "bake_margin")
            col.prop(rd, "bake_quad_split", text="Split")
            
            if wide_ui:
                col = split.column()
            col.prop(rd, "bake_active")
            sub = col.column()
            sub.active = rd.bake_active
            sub.prop(rd, "bake_distance")
            sub.prop(rd, "bake_bias")
    
    bpy.types.register(RENDER_MT_presets)
    
    bpy.types.register(RENDER_PT_render)
    bpy.types.register(RENDER_PT_layers)
    bpy.types.register(RENDER_PT_dimensions)
    bpy.types.register(RENDER_PT_antialiasing)
    bpy.types.register(RENDER_PT_shading)
    bpy.types.register(RENDER_PT_output)
    bpy.types.register(RENDER_PT_encoding)
    bpy.types.register(RENDER_PT_performance)
    bpy.types.register(RENDER_PT_post_processing)
    
    bpy.types.register(RENDER_PT_stamp)
    
    bpy.types.register(RENDER_PT_bake)