Since we aren't doing breadth-first ray tracing anymore, this makes a lot more sense.
291 lines
9.3 KiB
Python
291 lines
9.3 KiB
Python
import bpy
|
|
|
|
# Use some of the existing buttons.
|
|
from bl_ui import properties_render
|
|
properties_render.RENDER_PT_render.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
properties_render.RENDER_PT_dimensions.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
properties_render.RENDER_PT_output.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
del properties_render
|
|
|
|
from bl_ui import properties_data_camera
|
|
properties_data_camera.DATA_PT_lens.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
properties_data_camera.DATA_PT_camera.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
properties_data_camera.DATA_PT_camera_display.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
properties_data_camera.DATA_PT_custom_props_camera.COMPAT_ENGINES.add('PSYCHOPATH_RENDER')
|
|
del properties_data_camera
|
|
|
|
class PsychopathPanel():
|
|
COMPAT_ENGINES = {'PSYCHOPATH_RENDER'}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
rd = context.scene.render
|
|
return (rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
|
|
|
|
|
|
class RENDER_PT_psychopath_render_settings(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Render Settings"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "render"
|
|
|
|
def draw(self, context):
|
|
scene = context.scene
|
|
layout = self.layout
|
|
|
|
col = layout.column()
|
|
|
|
col.label(text="Sampling")
|
|
col.prop(scene.psychopath, "spp")
|
|
|
|
col.label(text="Dicing")
|
|
col.prop(scene.psychopath, "dicing_rate")
|
|
|
|
col.label(text="Motion Blur")
|
|
col.prop(scene.psychopath, "motion_blur_segments")
|
|
col.prop(scene.psychopath, "shutter_start")
|
|
col.prop(scene.psychopath, "shutter_end")
|
|
|
|
col.label(text="Performance")
|
|
col.prop(scene.psychopath, "bucket_size")
|
|
|
|
|
|
class RENDER_PT_psychopath_export_settings(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Export Settings"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "render"
|
|
|
|
def draw(self, context):
|
|
scene = context.scene
|
|
layout = self.layout
|
|
|
|
col = layout.column()
|
|
col.prop(scene.psychopath, "export_path")
|
|
|
|
|
|
class WORLD_PT_psychopath_background(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Background"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "world"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return context.world and PsychopathPanel.poll(context)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
world = context.world
|
|
layout.prop(world, "horizon_color", text="Color")
|
|
|
|
|
|
class DATA_PT_psychopath_camera_dof(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Depth of Field"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "data"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
engine = context.scene.render.engine
|
|
return context.camera and PsychopathPanel.poll(context)
|
|
|
|
def draw(self, context):
|
|
ob = context.active_object
|
|
layout = self.layout
|
|
|
|
col = layout.column()
|
|
|
|
col.prop(ob.data, "dof_object")
|
|
col.prop(ob.data, "dof_distance")
|
|
col.prop(ob.data.psychopath, "aperture_radius")
|
|
|
|
|
|
class DATA_PT_psychopath_lamp(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Lamp"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "data"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
engine = context.scene.render.engine
|
|
return context.lamp and PsychopathPanel.poll(context)
|
|
|
|
def draw(self, context):
|
|
ob = context.active_object
|
|
layout = self.layout
|
|
|
|
col = layout.column()
|
|
|
|
row = col.row()
|
|
row.prop(ob.data, "type", expand=True)
|
|
|
|
if ob.data.type != 'HEMI' and ob.data.type != 'AREA':
|
|
col.prop(ob.data, "shadow_soft_size")
|
|
|
|
col.prop(ob.data.psychopath, "color_type")
|
|
|
|
if ob.data.psychopath.color_type == 'Rec709':
|
|
col.prop(ob.data, "color")
|
|
elif ob.data.psychopath.color_type == 'Blackbody' or ob.data.psychopath.color_type == 'ColorTemperature':
|
|
col.prop(ob.data.psychopath, "color_blackbody_temp")
|
|
|
|
col.prop(ob.data, "energy")
|
|
|
|
|
|
class DATA_PT_psychopath_area_lamp(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Area Shape"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "data"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
lamp = context.lamp
|
|
engine = context.scene.render.engine
|
|
return (lamp and lamp.type == 'AREA') and (engine in cls.COMPAT_ENGINES)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
lamp = context.lamp
|
|
|
|
col = layout.column()
|
|
col.row().prop(lamp, "shape", expand=True)
|
|
sub = col.row(align=True)
|
|
|
|
if lamp.shape == 'SQUARE':
|
|
sub.prop(lamp, "size")
|
|
elif lamp.shape == 'RECTANGLE':
|
|
sub.prop(lamp, "size", text="Size X")
|
|
sub.prop(lamp, "size_y", text="Size Y")
|
|
|
|
|
|
class DATA_PT_psychopath_mesh(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Psychopath Mesh Properties"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "data"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
engine = context.scene.render.engine
|
|
return context.mesh and (engine in cls.COMPAT_ENGINES)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
mesh = context.mesh
|
|
|
|
layout.row().prop(mesh.psychopath, "is_subdivision_surface")
|
|
|
|
|
|
class MATERIAL_PT_psychopath_context_material(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = ""
|
|
bl_space_type = "PROPERTIES"
|
|
bl_region_type = "WINDOW"
|
|
bl_context = "material"
|
|
bl_options = {'HIDE_HEADER'}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return (context.material or context.object) and PsychopathPanel.poll(context)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
mat = context.material
|
|
ob = context.object
|
|
slot = context.material_slot
|
|
space = context.space_data
|
|
|
|
if ob:
|
|
row = layout.row()
|
|
|
|
row.template_list("MATERIAL_UL_matslots", "", ob, "material_slots", ob, "active_material_index", rows=1)
|
|
|
|
col = row.column(align=True)
|
|
col.operator("object.material_slot_add", icon='ZOOMIN', text="")
|
|
col.operator("object.material_slot_remove", icon='ZOOMOUT', text="")
|
|
|
|
col.menu("MATERIAL_MT_specials", icon='DOWNARROW_HLT', text="")
|
|
|
|
if ob.mode == 'EDIT':
|
|
row = layout.row(align=True)
|
|
row.operator("object.material_slot_assign", text="Assign")
|
|
row.operator("object.material_slot_select", text="Select")
|
|
row.operator("object.material_slot_deselect", text="Deselect")
|
|
|
|
split = layout.split(percentage=0.65)
|
|
|
|
if ob:
|
|
split.template_ID(ob, "active_material", new="material.new")
|
|
row = split.row()
|
|
|
|
if slot:
|
|
row.prop(slot, "link", text="")
|
|
else:
|
|
row.label()
|
|
elif mat:
|
|
split.template_ID(space, "pin_id")
|
|
split.separator()
|
|
|
|
|
|
class MATERIAL_PT_psychopath_surface(PsychopathPanel, bpy.types.Panel):
|
|
bl_label = "Surface"
|
|
bl_space_type = "PROPERTIES"
|
|
bl_region_type = "WINDOW"
|
|
bl_context = "material"
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return context.material and PsychopathPanel.poll(context)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
col = layout.column()
|
|
|
|
mat = context.material
|
|
col.prop(mat.psychopath, "surface_shader_type")
|
|
|
|
col.prop(mat.psychopath, "color_type")
|
|
if mat.psychopath.color_type == 'Rec709':
|
|
col.prop(mat.psychopath, "color")
|
|
elif mat.psychopath.color_type == 'Blackbody' or mat.psychopath.color_type == 'ColorTemperature':
|
|
col.prop(mat.psychopath, "color_blackbody_temp")
|
|
|
|
if mat.psychopath.surface_shader_type == 'GTR':
|
|
layout.prop(mat.psychopath, "roughness")
|
|
layout.prop(mat.psychopath, "tail_shape")
|
|
layout.prop(mat.psychopath, "fresnel")
|
|
|
|
if mat.psychopath.surface_shader_type == 'GGX':
|
|
layout.prop(mat.psychopath, "roughness")
|
|
layout.prop(mat.psychopath, "fresnel")
|
|
|
|
|
|
def register():
|
|
bpy.utils.register_class(RENDER_PT_psychopath_render_settings)
|
|
bpy.utils.register_class(RENDER_PT_psychopath_export_settings)
|
|
bpy.utils.register_class(WORLD_PT_psychopath_background)
|
|
bpy.utils.register_class(DATA_PT_psychopath_camera_dof)
|
|
bpy.utils.register_class(DATA_PT_psychopath_mesh)
|
|
bpy.utils.register_class(DATA_PT_psychopath_lamp)
|
|
bpy.utils.register_class(DATA_PT_psychopath_area_lamp)
|
|
bpy.utils.register_class(MATERIAL_PT_psychopath_context_material)
|
|
bpy.utils.register_class(MATERIAL_PT_psychopath_surface)
|
|
|
|
def unregister():
|
|
bpy.utils.unregister_class(RENDER_PT_psychopath_render_settings)
|
|
bpy.utils.unregister_class(RENDER_PT_psychopath_export_settings)
|
|
bpy.utils.unregister_class(WORLD_PT_psychopath_background)
|
|
bpy.utils.unregister_class(DATA_PT_psychopath_camera_dof)
|
|
bpy.utils.register_class(DATA_PT_psychopath_mesh)
|
|
bpy.utils.unregister_class(DATA_PT_psychopath_lamp)
|
|
bpy.utils.unregister_class(DATA_PT_psychopath_area_lamp)
|
|
bpy.utils.unregister_class(MATERIAL_PT_psychopath_context_material)
|
|
bpy.utils.unregister_class(MATERIAL_PT_psychopath_surface)
|