Skip to content
Snippets Groups Projects
scene_objects_bi.py 7.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • # gpl: author meta-androcto
    
    import bpy
    from bpy.types import Operator
    
    
    class add_BI_scene(Operator):
        bl_idname = "bi.add_scene"
        bl_label = "Create test scene"
    
        bl_description = "Blender Internal renderer Scene with Objects"
    
        bl_options = {'REGISTER', 'UNDO'}
    
        def execute(self, context):
    
            try:
                blend_data = context.blend_data
                # ob = bpy.context.active_object
    
                # add new scene
                bpy.ops.scene.new(type="NEW")
                scene = bpy.context.scene
                scene.name = "scene_materials"
    
                # render settings
                render = scene.render
                render.resolution_x = 1920
                render.resolution_y = 1080
                render.resolution_percentage = 50
    
                # add new world
                world = bpy.data.worlds.new("Materials_World")
                scene.world = world
                world.use_sky_blend = True
                world.use_sky_paper = True
                world.horizon_color = (0.004393, 0.02121, 0.050)
                world.zenith_color = (0.03335, 0.227, 0.359)
                world.light_settings.use_ambient_occlusion = True
                world.light_settings.ao_factor = 0.25
    
                # add camera
                bpy.ops.object.camera_add(
    
                        location=(7.48113, -6.50764, 5.34367),
                        rotation=(1.109319, 0.010817, 0.814928)
                        )
    
                cam = bpy.context.active_object.data
                cam.lens = 35
    
                cam.display_size = 0.1
    
                bpy.ops.view3d.viewnumpad(type='CAMERA')
    
                bpy.ops.object.light_add(
    
                        type="POINT", location=(4.07625, 1.00545, 5.90386),
                        rotation=(0.650328, 0.055217, 1.866391)
                        )
    
                lamp1 = bpy.context.active_object.data
                lamp1.name = "Point_Right"
                lamp1.energy = 1.0
                lamp1.distance = 30.0
                lamp1.shadow_method = "RAY_SHADOW"
                lamp1.use_sphere = True
    
                # add point lamp2
    
                bpy.ops.object.light_add(
    
                        type="POINT", location=(-0.57101, -4.24586, 5.53674),
                        rotation=(1.571, 0, 0.785)
                        )
    
                lamp2 = bpy.context.active_object.data
                lamp2.name = "Point_Left"
                lamp2.energy = 1.0
                lamp2.distance = 30.0
    
                # Add cube
                bpy.ops.mesh.primitive_cube_add()
                bpy.ops.object.editmode_toggle()
                bpy.ops.mesh.subdivide(number_cuts=2)
                bpy.ops.uv.unwrap(method='CONFORMAL', margin=0.001)
                bpy.ops.object.editmode_toggle()
    
                cube = bpy.context.active_object
                # add new material
                cubeMaterial = blend_data.materials.new("Cube_Material")
                bpy.ops.object.material_slot_add()
                cube.material_slots[0].material = cubeMaterial
                # Diffuse
                cubeMaterial.preview_render_type = "CUBE"
                cubeMaterial.diffuse_color = (1.000, 0.373, 0.00)
                cubeMaterial.diffuse_shader = 'OREN_NAYAR'
                cubeMaterial.diffuse_intensity = 1.0
                cubeMaterial.roughness = 0.09002
                # Specular
                cubeMaterial.specular_color = (1.000, 0.800, 0.136)
                cubeMaterial.specular_shader = "PHONG"
                cubeMaterial.specular_intensity = 1.0
                cubeMaterial.specular_hardness = 511.0
                # Shading
                cubeMaterial.ambient = 1.00
                cubeMaterial.use_cubic = False
                # Transparency
                cubeMaterial.use_transparency = False
                cubeMaterial.alpha = 0
                # Mirror
                cubeMaterial.raytrace_mirror.use = True
                cubeMaterial.mirror_color = (1.000, 0.793, 0.0)
                cubeMaterial.raytrace_mirror.reflect_factor = 0.394
                cubeMaterial.raytrace_mirror.fresnel = 2.0
                cubeMaterial.raytrace_mirror.fresnel_factor = 1.641
                cubeMaterial.raytrace_mirror.fade_to = "FADE_TO_SKY"
                cubeMaterial.raytrace_mirror.gloss_anisotropic = 1.0
                # Shadow
                cubeMaterial.use_transparent_shadows = True
    
                # Add a texture
                cubetex = blend_data.textures.new("CloudTex", type='CLOUDS')
                cubetex.noise_type = 'SOFT_NOISE'
                cubetex.noise_scale = 0.25
                mtex = cubeMaterial.texture_slots.add()
                mtex.texture = cubetex
                mtex.texture_coords = 'ORCO'
                mtex.scale = (0.800, 0.800, 0.800)
                mtex.use_map_mirror = True
                mtex.mirror_factor = 0.156
                mtex.use_map_color_diffuse = True
                mtex.diffuse_color_factor = 0.156
                mtex.use_map_normal = True
                mtex.normal_factor = 0.010
                mtex.blend_type = "ADD"
                mtex.use_rgb_to_intensity = True
                mtex.color = (1.000, 0.207, 0.000)
    
                # Add monkey
                bpy.ops.mesh.primitive_monkey_add(location=(-0.1, 0.08901, 1.505))
                bpy.ops.transform.rotate(value=(1.15019), axis=(0, 0, 1))
                bpy.ops.transform.rotate(value=(-0.673882), axis=(0, 1, 0))
                bpy.ops.transform.rotate(value=-0.055, axis=(1, 0, 0))
                bpy.ops.object.modifier_add(type='SUBSURF')
                bpy.ops.object.shade_smooth()
                monkey = bpy.context.active_object
                # add new material
                monkeyMaterial = blend_data.materials.new("Monkey_Material")
                bpy.ops.object.material_slot_add()
                monkey.material_slots[0].material = monkeyMaterial
                # Material settings
                monkeyMaterial.preview_render_type = "MONKEY"
                monkeyMaterial.diffuse_color = (0.239, 0.288, 0.288)
                monkeyMaterial.specular_color = (0.604, 0.465, 0.136)
                monkeyMaterial.diffuse_shader = 'LAMBERT'
                monkeyMaterial.diffuse_intensity = 1.0
                monkeyMaterial.specular_intensity = 0.3
                monkeyMaterial.ambient = 0
                monkeyMaterial.type = 'SURFACE'
                monkeyMaterial.use_cubic = True
                monkeyMaterial.use_transparency = False
                monkeyMaterial.alpha = 0
                monkeyMaterial.use_transparent_shadows = True
                monkeyMaterial.raytrace_mirror.use = True
                monkeyMaterial.raytrace_mirror.reflect_factor = 0.65
                monkeyMaterial.raytrace_mirror.fade_to = "FADE_TO_MATERIAL"
    
                # Add plane
                bpy.ops.mesh.primitive_plane_add(
                                radius=50, view_align=False, enter_editmode=False, location=(0, 0, -1)
                                )
                bpy.ops.object.editmode_toggle()
                bpy.ops.transform.rotate(
                        value=-0.8, axis=(0, 0, 1), constraint_axis=(False, False, True),
                        constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED',
                        proportional_edit_falloff='SMOOTH', proportional_size=1
                        )
                bpy.ops.uv.unwrap(method='CONFORMAL', margin=0.001)
                bpy.ops.object.editmode_toggle()
                plane = bpy.context.active_object
                # add new material
                planeMaterial = blend_data.materials.new("Plane_Material")
                bpy.ops.object.material_slot_add()
                plane.material_slots[0].material = planeMaterial
                # Material settings
                planeMaterial.preview_render_type = "CUBE"
                planeMaterial.diffuse_color = (0.2, 0.2, 0.2)
                planeMaterial.specular_color = (0.604, 0.465, 0.136)
                planeMaterial.specular_intensity = 0.3
                planeMaterial.ambient = 0
                planeMaterial.use_cubic = True
                planeMaterial.use_transparency = False
                planeMaterial.alpha = 0
                planeMaterial.use_transparent_shadows = True
    
            except Exception as e:
                self.report({'WARNING'},
                            "Some operations could not be performed (See Console for more info)")
    
                print("\n[Add Advanced  Objects]\nOperator: "
                      "bi.add_scene\nError: {}".format(e))
    
                return {'CANCELLED'}