Files
2026-03-17 15:34:28 -06:00

2799 lines
126 KiB
Python

# Copyright (C) 2021 Victor Soupday
# This file is part of CC/iC Blender Tools <https://github.com/soupday/cc_blender_tools>
#
# CC/iC Blender Tools 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 3 of the License, or
# (at your option) any later version.
#
# CC/iC Blender Tools 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 CC/iC Blender Tools. If not, see <https://www.gnu.org/licenses/>.
import math
import os
import bpy
from mathutils import Vector, Quaternion, Matrix, Euler
from . import colorspace, world, meshutils, nodeutils, rigidbody, physics, modifiers, utils, vars
def add_target(name, container, location):
bpy.ops.object.empty_add(type="PLAIN_AXES", radius = 0.1,
location = location)
target = utils.get_active_object()
target.name = name
utils.set_ccic_id(target)
if container:
target.parent = container
target.matrix_parent_inverse = container.matrix_world.inverted()
return target
def set_contact_shadow(light, distance, thickness, no_jitter=False):
if utils.B420():
light.data.use_shadow = True
light.data.use_shadow_jitter = not no_jitter
else:
light.data.use_contact_shadow = True
light.data.contact_shadow_distance = distance
light.data.contact_shadow_thickness = thickness
def track_to(obj, target):
constraint = obj.constraints.new(type="TRACK_TO")
constraint.target = target
constraint.track_axis = "TRACK_NEGATIVE_Z"
constraint.up_axis = "UP_Y"
def add_light_container():
container = None
for obj in bpy.data.objects:
if obj.type == "EMPTY" and "Lighting" in obj.name and utils.has_ccic_id(obj):
container = obj
if not container:
bpy.ops.object.empty_add(type="PLAIN_AXES", radius=0.01)
container = utils.get_active_object()
container.name = "Lighting"
utils.set_ccic_id(container)
return container
def add_sun_light(name, container, location, rotation, energy, angle, transmission=1.0):
bpy.ops.object.light_add(type="SUN",
location = location, rotation = rotation)
light = utils.get_active_object()
light.name = name
light.data.name = name
utils.set_ccic_id(light)
light.data.energy = energy
light.data.angle = angle
try:
light.data.transmission_factor = transmission
except: ...
if container:
light.parent = container
light.matrix_parent_inverse = container.matrix_world.inverted()
return light
def add_spot_light(name, container, location, rotation, energy, blend, size, distance, radius, transmission=1.0):
bpy.ops.object.light_add(type="SPOT",
location = location, rotation = rotation)
light = utils.get_active_object()
light.name = name
light.data.name = name
utils.set_ccic_id(light)
light.data.energy = energy
light.data.shadow_soft_size = radius
light.data.spot_blend = blend
light.data.spot_size = size
light.data.use_custom_distance = True
light.data.cutoff_distance = distance
try:
light.data.transmission_factor = transmission
except: ...
if container:
light.parent = container
light.matrix_parent_inverse = container.matrix_world.inverted()
return light
def add_area_light(name, container, location, rotation, energy, size, distance, transmission=1.0):
bpy.ops.object.light_add(type="AREA",
location = location, rotation = rotation)
light = utils.get_active_object()
light.name = name
light.data.name = name
utils.set_ccic_id(light)
light.data.shape = "DISK"
light.data.size = size
light.data.energy = energy
light.data.use_custom_distance = True
light.data.cutoff_distance = distance
try:
light.data.transmission_factor = transmission
except: ...
if container:
light.parent = container
light.matrix_parent_inverse = container.matrix_world.inverted()
return light
def add_point_light(name, container, location, rotation, energy, size, transmission=1.0):
bpy.ops.object.light_add(type="POINT",
location = location, rotation = rotation)
light = utils.get_active_object()
light.name = name
light.data.name = name
utils.set_ccic_id(light)
light.data.shadow_soft_size = size
light.data.energy = energy
try:
light.data.transmission_factor = transmission
except: ...
if container:
light.parent = container
light.matrix_parent_inverse = container.matrix_world.inverted()
return light
def remove_all_lights(inc_camera = False):
for obj in bpy.data.objects:
if not utils.object_exists(obj):
continue
if utils.has_ccic_id(obj):
if obj.type == "LIGHT":
bpy.data.objects.remove(obj)
elif inc_camera and obj.type == "EMPTY" and "CameraTarget" in obj.name:
bpy.data.objects.remove(obj)
pass
elif obj.type == "EMPTY" and \
("KeyTarget" in obj.name or \
"FillTarget" in obj.name or \
"BackTarget" in obj.name or \
"Lighting" in obj.name):
utils.delete_object_tree(obj)
elif inc_camera and obj.type == "CAMERA":
bpy.data.objects.remove(obj)
else:
if obj.type == "LIGHT":
utils.hide(obj)
obj.hide_render = True
elif inc_camera and obj.type == "EMPTY" and "CameraTarget" in obj.name:
utils.hide(obj)
obj.hide_render = True
pass
elif obj.type == "EMPTY" and \
("KeyTarget" in obj.name or \
"FillTarget" in obj.name or \
"BackTarget" in obj.name):
utils.hide(obj)
obj.hide_render = True
elif inc_camera and obj.type == "CAMERA":
utils.hide(obj)
obj.hide_render = True
def restore_hidden_camera():
# enable the first hidden camera
for obj in bpy.data.objects:
if obj.type == "CAMERA" and not obj.visible_get():
utils.unhide(obj)
bpy.context.scene.camera = obj
return
def camera_setup(context, camera_loc, target_loc):
context = vars.get_context(context)
# find an active camera
camera = None
target = None
for obj in bpy.data.objects:
if camera is None and obj.type == "CAMERA" and utils.has_ccic_id(obj):
camera = obj
camera.location = camera_loc
if target is None and obj.type == "EMPTY" and "CameraTarget" in obj.name and utils.has_ccic_id(obj):
target = obj
target.location = target_loc
if camera is None:
bpy.ops.object.camera_add(enter_editmode=False, align='VIEW', location=camera_loc)
camera = utils.get_active_object()
camera.name = "Camera"
utils.set_ccic_id(camera)
if target is None:
target = add_target("CameraTarget", None, target_loc)
utils.unhide(camera)
utils.unhide(target)
context.scene.camera = camera
track_to(camera, target)
camera.data.lens = 80
camera.data.dof.use_dof = True
camera.data.dof.focus_object = target
camera.data.dof.aperture_fstop = 5.4
camera.data.dof.aperture_blades = 5
camera.data.dof.aperture_rotation = 0
camera.data.dof.aperture_ratio = 1
camera.data.display_size = 0.2
camera.data.show_limits = True
#camera_auto_target(camera, target)
context.scene.render.resolution_x = 1920
context.scene.render.resolution_y = 2560
context.scene.render.resolution_percentage = 100
return camera, target
def camera_auto_target(camera, target):
props = vars.props()
chr_cache = props.get_context_character_cache()
if chr_cache is None:
chr_cache = props.get_character_cache(utils.get_active_object(), None)
if chr_cache is None:
chr_cache = props.import_cache[0]
arm = chr_cache.get_armature()
if arm:
left_eye = utils.find_pose_bone(chr_cache, "CC_Base_L_Eye", "L_Eye")
right_eye = utils.find_pose_bone(chr_cache, "CC_Base_R_Eye", "R_Eye")
head = utils.find_pose_bone(chr_cache, "CC_Base_FacialBone", "FacialBone")
if left_eye is None or right_eye is None or head is None:
return
head_location = arm.matrix_world @ head.head
head_dir = (arm.matrix_world @ head.vector).normalized()
target_location = arm.matrix_world @ ((left_eye.head + right_eye.head) * 0.5)
target.location = target_location + head_dir * 0.03
camera.location = head_location + head_dir * 2
def get_compositor_tree(context) -> bpy.types.NodeGroup:
if utils.B500():
if context.scene.compositing_node_group:
return context.scene.compositing_node_group
tree = bpy.data.node_groups.new("Compositor Bake", "CompositorNodeTree")
context.scene.compositing_node_group = tree
return tree
else:
context.scene.use_nodes = True
return context.scene.node_tree
def compositor_setup(context):
context = vars.get_context(context)
tree = get_compositor_tree(context)
nodes = tree.nodes
links = tree.links
nodes.clear()
rlayers_node = nodeutils.make_shader_node(nodes, "CompositorNodeRLayers")
c_node = None
if utils.B500():
c_node = nodeutils.make_shader_node(nodes, "NodeGroupOutput")
tree.interface.clear()
tree.interface.new_socket(name="Image", in_out="OUTPUT", socket_type="NodeSocketColor")
else:
c_node = nodeutils.make_shader_node(nodes, "CompositorNodeComposite")
glare_node = nodeutils.make_shader_node(nodes, "CompositorNodeGlare")
filter_node = nodeutils.make_shader_node(nodes, "CompositorNodeFilter")
lens_node = nodeutils.make_shader_node(nodes, "CompositorNodeLensdist")
rlayers_node.location = (-760,40)
filter_node.location = (-410, 0)
glare_node.location = (-180,120)
lens_node.location = (50,50)
c_node.location = (300,0)
if utils.B500():
nodeutils.set_node_input_value(glare_node, "Type", "Bloom")
nodeutils.set_node_input_value(glare_node, "Quality", "High")
nodeutils.set_node_input_value(filter_node, "Type", "Diamond Sharpen")
nodeutils.set_node_input_value(lens_node, "Fit", True)
else:
try:
glare_node.glare_type = 'BLOOM'
glare_node.quality = 'HIGH'
except:
glare_node.glare_type = 'FOG_GLOW'
glare_node.quality = 'HIGH'
glare_node.threshold = 0.85
filter_node.filter_type = "SHARPEN_DIAMOND"
lens_node.use_fit = True
nodeutils.set_node_input_value(filter_node, "Fac", 0.350)
nodeutils.set_node_input_value(glare_node, "Threshold", 1.0)
nodeutils.set_node_input_value(glare_node, "Strength", 0.5)
nodeutils.set_node_input_value(glare_node, "Saturation", 1.0)
nodeutils.set_node_input_value(lens_node, "Dispersion", 0.0325)
nodeutils.link_nodes(links, rlayers_node, "Image", filter_node, "Image")
nodeutils.link_nodes(links, filter_node, "Image", glare_node, "Image")
nodeutils.link_nodes(links, glare_node, "Image", lens_node, "Image")
nodeutils.link_nodes(links, lens_node, "Image", c_node, "Image")
shading = utils.get_view_3d_shading(context)
if shading:
shading.use_scene_world_render = True
def world_setup(context):
context = vars.get_context(context)
hide_view_extras(context, False)
world.copy_material_to_render_world(context)
def setup_scene_default(context, scene_type):
props = vars.props()
prefs = vars.prefs()
context = vars.get_context(context)
# reset brightness
props.lighting_brightness = 1.0
# store selection and mode
current_selected = context.selected_objects
current_active = utils.get_active_object()
current_mode = context.mode
shading = utils.get_view_3d_shading(context)
space_data = utils.get_view_3d_space(context)
# go to object mode
try:
if current_mode != "OBJECT":
bpy.ops.object.mode_set(mode="OBJECT")
if scene_type == "BLENDER":
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = False
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.2
context.scene.eevee.gtao_factor = 1.0
context.scene.eevee.use_bloom = False
context.scene.eevee.bloom_threshold = 0.8
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 6.5
context.scene.eevee.bloom_intensity = 0.05
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "None", 0.0, 1.0)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
key1 = add_point_light("Light", None,
(4.076245307922363, 1.0054539442062378, 5.903861999511719),
(0.6503279805183411, 0.055217113345861435, 1.8663908243179321),
1000, 0.1)
if shading:
shading.type = 'MATERIAL'
shading.use_scene_lights = True
shading.use_scene_world = False
shading.studio_light = 'forest.exr'
shading.studiolight_rotate_z = 0
shading.studiolight_intensity = 1
shading.studiolight_background_alpha = 0
shading.studiolight_background_blur = 0
space_data.clip_start = 0.1
elif scene_type == "MATCAP":
remove_all_lights(False)
restore_hidden_camera()
if shading:
shading.type = 'SOLID'
shading.light = 'MATCAP'
shading.studio_light = 'basic_1.exr'
shading.show_cavity = True
elif scene_type == "CC3":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800000011920929
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
1.0, 0.5)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Key", container,
(-0.9423741102218628, 0.30936846137046814, 0.5819238424301147),
(-0.07044415920972824, 1.2362500429153442, 2.5432639122009277),
50.0, 1.0,
2.0943946838378906, 9.729999542236328,
1.0)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (1.0, 0.9843137860298157, 0.9529412388801575)
spot_light_001 = add_spot_light("Back", container,
(0.12941402196884155, 1.31780207157135, 0.5352238416671753),
(-0.02363934926688671, 0.8857088685035706, 1.4288825988769531),
96.0, 1.0,
2.6179935932159424, 9.149999618530273,
0.0, transmission=0.0)
set_contact_shadow(spot_light_001, 0.05000000074505806, 0.0024999999441206455)
spot_light_001.data.color = (1.0, 1.0, 1.0)
spot_light_002 = add_spot_light("Fill", container,
(0.529399573802948, -1.2917252779006958, 0.682123064994812),
(-0.0518769733607769, 1.2371199131011963, -1.1787829399108887),
40.0, 0.32565000653266907,
1.5707961320877075, 50.0,
0.30000001192092896)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (1.0, 0.9843137860298157, 0.9529412388801575)
sun_light_003 = add_sun_light("Dir. Light", container,
(-0.001717992126941681, -0.03369736298918724, -1.4594181776046753),
(0.8644760847091675, 0.09251046180725098, 0.19978450238704681),
0.5625,
0.009180432185530663)
set_contact_shadow(sun_light_003, 0.05000000074505806, 0.0024999999441206455)
sun_light_003.data.color = (1.0, 1.0, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0
shading.studiolight_intensity = 1.0
shading.studiolight_background_alpha = 0.0
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "STUDIO":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.3499999940395355
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.10000000149011612
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium High Contrast",
0.5, 1.0)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Key_cc3iid_2528", container,
(0.3071320056915283, -4.603137016296387, 1.1155518293380737),
(0.39095383882522583, 1.387536644935608, -1.1138966083526611),
400.0, 0.75,
0.75, 7.5,
0.4000000059604645)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (1.0, 1.0, 1.0)
area_light_001 = add_area_light("Right_cc3iid_2529", container,
(2.065807819366455, 0.8457366824150085, -0.3064761161804199),
(-0.02618018537759781, 1.4189527034759521, 0.3748694360256195),
50.0, 2.0, 9.0, transmission=0.0)
set_contact_shadow(area_light_001, 0.05000000074505806, 0.0024999999441206455)
area_light_001.data.color = (1.0, 1.0, 1.0)
spot_light_002 = add_spot_light("Ear_cc3iid_2530", container,
(0.6722820401191711, 1.8733025789260864, 0.2355818748474121),
(-0.03316128998994827, 1.3578661680221558, 1.1847020387649536),
100.0, 1.0,
1.0995999574661255, 9.100000381469727,
0.5, transmission=0.0)
set_contact_shadow(spot_light_002, 0.20000000298023224, 0.20000000298023224)
spot_light_002.data.color = (1.0, 1.0, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0
shading.studiolight_intensity = 0.20000000298023224
shading.studiolight_background_alpha = 0.05
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
# New presets
elif scene_type == "PRESET_1":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 0.900)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
area_light_001 = add_area_light("Light.002", container, (-1.051, -0.809, -0.354), (0.000, -1.266, 0.802), 35.0, 1.0, 40.0)
set_contact_shadow(area_light_001, 0.200, 0.200)
area_light_001.data.color = (1.0000, 1.0000, 1.0000)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(area_light_001, target_001)
spot_light_002 = add_spot_light("Light.003", container, (1.230, -1.303, -0.191), (-0.000, -1.368, 2.288), 12.0, 0.8, 1.6, 40.0, 0.1)
set_contact_shadow(spot_light_002, 0.200, 0.200)
spot_light_002.data.color = (1.0000, 1.0000, 1.0000)
track_to(spot_light_002, target_001)
area_light_003 = add_area_light("Light.001", container, (0.453, 0.974, 0.000), (0.004, -1.175, 2.927), 10.0, 1.0, 40.0, transmission=0.0)
set_contact_shadow(area_light_003, 0.200, 0.200)
area_light_003.data.color = (1.0000, 1.0000, 1.0000)
track_to(area_light_003, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = -0.7854
shading.studiolight_intensity = 1.25
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
utils.get_resource_path("presets", "veranda_4k.hdr"),
(0,0,0,1),
Vector((0,0,0)), Vector((0, 0, 0)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
elif scene_type == "PRESET_2":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 1.000)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
area_light_001 = add_area_light("Light.002", container, (-1.051, -0.809, -0.354), (0.000, -1.266, 0.802), 35.0, 1.0, 40.0)
set_contact_shadow(area_light_001, 0.200, 0.200)
area_light_001.data.color = (1.0000, 1.0000, 1.0000)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(area_light_001, target_001)
spot_light_002 = add_spot_light("Light.003", container, (1.230, -1.303, -0.191), (-0.000, -1.368, 2.288), 12.0, 0.8, 1.6, 40.0, 0.1)
set_contact_shadow(spot_light_002, 0.200, 0.200)
spot_light_002.data.color = (1.0000, 1.0000, 1.0000)
track_to(spot_light_002, target_001)
area_light_003 = add_area_light("Light.001", container, (0.453, 0.974, 0.000), (0.004, -1.175, 2.927), 10.0, 1.0, 40.0, transmission=0.0)
set_contact_shadow(area_light_003, 0.200, 0.200)
area_light_003.data.color = (1.0000, 1.0000, 1.0000)
track_to(area_light_003, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0.000
shading.studiolight_intensity = 0.000
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
"",
(0,0,0,1),
Vector((0,0,0)), Vector((0, 0, 0)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
elif scene_type == "PRESET_3":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 1.000)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
spot_light_001 = add_spot_light("Light.001", container, (0.546, -1.256, 0.281), (-0.000, -1.368, 2.288), 50.0, 0.8, 1.6, 40.0, 0.2)
set_contact_shadow(spot_light_001, 0.200, 0.200)
spot_light_001.data.color = (1.0000, 1.0000, 1.0000)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(spot_light_001, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "courtyard.exr"
shading.studiolight_rotate_z = 0.1745
shading.studiolight_intensity = 1.25
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
utils.get_resource_path("presets", "kiara_1_dawn_4k.hdr"),
(0,0,0,1),
Vector((0,0,0)), Vector((0, 0, -0.87266)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
elif scene_type == "PRESET_4":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 1.000)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
area_light_001 = add_area_light("Light.001", container, (-1.051, -0.809, -0.354), (0.000, -1.266, 0.802), 35.0, 1.0, 40.0)
set_contact_shadow(area_light_001, 0.200, 0.200)
area_light_001.data.color = (0.4760, 0.7875, 1.0000)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(area_light_001, target_001)
spot_light_002 = add_spot_light("Light.002", container, (1.230, -1.303, -0.191), (-0.000, -1.368, 2.288), 12.0, 0.8, 1.6, 40.0, 0.1)
set_contact_shadow(spot_light_002, 0.200, 0.200)
spot_light_002.data.color = (1.0000, 1.0000, 1.0000)
track_to(spot_light_002, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0.000
shading.studiolight_intensity = 0.05
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
"",
(0.109461,0.104617,0.291771,1),
Vector((0,0,0)), Vector((0, 0, 0)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
elif scene_type == "PRESET_5":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 1.000)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
spot_light_001 = add_spot_light("Light.003", container, (1.230, -1.303, -0.191), (-0.000, -1.368, 2.288), 12.0, 0.8, 1.6, 40.0, 0.1)
set_contact_shadow(spot_light_001, 0.200, 0.200)
spot_light_001.data.color = (1.0000, 1.0000, 1.0000)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(spot_light_001, target_001)
area_light_002 = add_area_light("Light.001", container, (-1.051, -0.809, -0.354), (0.000, -1.266, 0.802), 55.0, 1.0, 40.0)
set_contact_shadow(area_light_002, 0.200, 0.200)
area_light_002.data.color = (0.4760, 0.7875, 1.0000)
track_to(area_light_002, target_001)
area_light_003 = add_area_light("Light.002", container, (-0.395, 0.584, 0.064), (0.000, -1.266, 0.802), 35.0, 1.0, 40.0, transmission=0.0)
set_contact_shadow(area_light_003, 0.200, 0.200)
area_light_003.data.color = (1.0000, 0.6038, 0.2462)
track_to(area_light_003, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0.000
shading.studiolight_intensity = 0.1
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
"",
(0.107022,0.23074,0.05127,1),
Vector((0,0,0)), Vector((0, 0, 0)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
elif scene_type == "PRESET_6":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.200
context.scene.eevee.gtao_factor = 1.000
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800
context.scene.eevee.bloom_knee = 0.500
context.scene.eevee.bloom_radius = 6.500
context.scene.eevee.bloom_intensity = 0.050
context.scene.eevee.use_ssr = False
context.scene.eevee.use_ssr_refraction = False
context.scene.eevee.bokeh_max_size = 100.000
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.000, 1.000)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()
area_light_001 = add_area_light("Light.001", container, (-0.981, -0.808, -0.343), (0.000, -1.266, 0.802), 20.0, 1.0, 40.0)
set_contact_shadow(area_light_001, 0.200, 0.200)
area_light_001.data.color = (1.0000, 0.0329, 0.8662)
target_001 = add_target("target_001", container, (0.000, 0.000, 0.000))
track_to(area_light_001, target_001)
area_light_002 = add_area_light("Light.002", container, (1.087, 0.150, 0.071), (0.000, -1.266, 0.802), 20.0, 1.0, 40.0)
set_contact_shadow(area_light_002, 0.200, 0.200)
area_light_002.data.color = (0.0194, 0.0354, 1.0000)
track_to(area_light_002, target_001)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0.000
shading.studiolight_intensity = 0.05
shading.studiolight_background_alpha = 0.000
shading.studiolight_background_blur = 0.500
space_data.clip_start = 0.010
world.world_setup(context,
"",
(0.0185,0.008568,0.07036,1),
Vector((0,0,0)), Vector((0, 0, 0)), 1.0,
1.0)
align_to_head(context, container, use_delta_rot=False)
create_backdrop(container, (0.799, 0.799, 0.799, 1.0), 0.75)
# Old presets
elif scene_type == "COURTYARD":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.3499999940395355
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.10000000149011612
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.5, 0.6000000238418579)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
area_light_000 = add_area_light("Key_cc3iid_2524", container,
(-1.5095206499099731, -1.1228091716766357, 0.7494019269943237),
(1.0848180055618286, -0.881056010723114, -0.5583388805389404),
40.0, 2.0, 9.0)
set_contact_shadow(area_light_000, 0.05000000074505806, 0.0024999999441206455)
area_light_000.data.color = (1.0, 1.0, 1.0)
area_light_001 = add_area_light("Fill_cc3iid_2525", container,
(2.2841720581054688, -1.5477973222732544, -0.051998138427734375),
(1.4248265027999878, 0.975606381893158, 0.8607898354530334),
20.0, 2.0, 9.0)
set_contact_shadow(area_light_001, 0.05000000074505806, 0.0024999999441206455)
area_light_001.data.color = (1.0, 1.0, 1.0)
area_light_002 = add_area_light("Back_cc3iid_2526", container,
(0.36617201566696167, 0.5814126133918762, 0.9025918245315552),
(-0.7961875796318054, 0.4831638038158417, -0.12206275016069412),
20.0, 1.0, 9.0, transmission=0.0)
set_contact_shadow(area_light_002, 0.20000000298023224, 0.20000000298023224)
area_light_002.data.color = (1.0, 1.0, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "courtyard.exr"
shading.studiolight_rotate_z = 0.7854
shading.studiolight_intensity = 0.3499999940395355
shading.studiolight_background_alpha = 0.05
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "AQUA":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.3499999940395355
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.10000000149011612
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.800000011920929, 0.550000011920929)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
sun_light_000 = add_sun_light("Dir. Light", container,
(-0.001717992126941681, -0.03369736298918724, -1.4594181776046753),
(-2.115131378173828, 0.18253736197948456, 1.0880452394485474),
0.14580000936985016,
0.009180432185530663)
set_contact_shadow(sun_light_000, 0.05000000074505806, 0.0024999999441206455)
sun_light_000.data.color = (0.5601616501808167, 0.5601616501808167, 0.7620295882225037)
spot_light_001 = add_spot_light("Back", container,
(-1.9980238676071167, -0.5209299921989441, 0.47781240940093994),
(-0.6497521996498108, 1.344329595565796, 2.641986131668091),
800.0, 1.0,
0.6806783080101013, 2.4000000953674316,
0.9646999835968018)
set_contact_shadow(spot_light_001, 0.05000000074505806, 0.0024999999441206455)
spot_light_001.data.color = (0.7183890342712402, 0.8502671718597412, 1.2038928270339966)
spot_light_002 = add_spot_light("Back.001", container,
(-1.0672816038131714, 1.770845651626587, 0.26936018466949463),
(-0.5413775444030762, 1.4816209077835083, 1.5110341310501099),
2000.0, 1.0,
0.6806783080101013, 2.4000000953674316,
2.392199993133545, transmission=0.0)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455, no_jitter=True)
spot_light_002.data.color = (0.7183890342712402, 0.8502671718597412, 1.2038928270339966)
spot_light_003 = add_spot_light("Key", container,
(-4.202385902404785, -0.3203423023223877, 2.212378978729248),
(-0.0384182371199131, 1.0002037286758423, -2.871201753616333),
220.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.5088000297546387)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.7106313705444336, 0.753057062625885, 0.8657234311103821)
spot_light_004 = add_spot_light("Key.001", container,
(-0.6216474771499634, -1.700995922088623, -0.5031678676605225),
(-0.425364226102829, -2.1132423877716064, 1.6004295349121094),
107.20000457763672, 1.0,
1.4486230611801147, 9.149999618530273,
0.5)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.6796281933784485, 0.7500560283660889, 0.8958061933517456)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 3.1416
shading.studiolight_intensity = 0.4
shading.studiolight_background_alpha = 0.05000000074505806
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "AUTHORITY":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.35
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.1
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast", 0.5, 0.6)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Back", container,
(-0.006970776244997978, 2.0284667015075684, 0.23129618167877197),
(-0.032768018543720245, 1.3572243452072144, 1.5501036643981934),
214.40000915527344, 1.0,
1.4486230611801147, 9.149999618530273,
1.0, transmission=0.0)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (0.8352941870689392, 0.5882353186607361, 0.4705882668495178)
sun_light_001 = add_point_light("Point light", container,
(-0.4660474359989166, -2.8790249824523926, 2.4746880531311035),
(-0.0, -0.0, 0.001198019366711378),
80.0,
0.0)
set_contact_shadow(sun_light_001, 0.05000000074505806, 0.0024999999441206455)
sun_light_001.data.color = (0.7843137979507446, 0.7843137979507446, 0.7843137979507446)
spot_light_002 = add_spot_light("Fill", container,
(1.072341799736023, 0.6809514164924622, -0.8709145784378052),
(2.765415906906128, -0.7434117197990417, 0.9125480055809021),
20.0, 1.0,
2.460913896560669, 5.03000020980835,
0.2020999938249588)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (0.5058823823928833, 0.5803921818733215, 0.6274510025978088)
spot_light_003 = add_spot_light("Key", container,
(-0.855573832988739, -1.4020836353302002, 1.0885698795318604),
(0.0018498882418498397, -1.2320795059204102, 0.9594647884368896),
320.0, 1.0,
1.4486230611801147, 9.149999618530273,
0.800000011920929)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.7568628191947937, 0.8235294818878174, 0.8352941870689392)
spot_light_004 = add_spot_light("Back Light Head", container,
(-0.5010148882865906, -1.1003491878509521, 0.7674758434295654),
(1.3239206075668335, 0.023048613220453262, -0.5318448543548584),
30.0, 0.2524999976158142,
1.2740901708602905, 2.5899999141693115,
0.5163000226020813)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.7843137979507446, 0.7843137979507446, 0.686274528503418)
spot_light_005 = add_spot_light("Key 2", container,
(-3.1835274696350098, 2.886387586593628, 2.2099413871765137),
(-0.03842170163989067, 1.0002015829086304, 2.6080286502838135),
500.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.5088000297546387)
set_contact_shadow(spot_light_005, 0.05000000074505806, 0.0024999999441206455)
spot_light_005.data.color = (1.0, 0.9843137860298157, 0.9529412388801575)
spot_light_006 = add_spot_light("Key Front", container,
(1.283434510231018, 4.030579090118408, 1.8864820003509521),
(-0.3483297824859619, 1.1461026668548584, 0.833476185798645),
60.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.6155999898910522, transmission=0.0)
set_contact_shadow(spot_light_006, 0.05000000074505806, 0.0024999999441206455)
spot_light_006.data.color = (0.8823530077934265, 0.9411765336990356, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0
shading.studiolight_intensity = 0.2
shading.studiolight_background_alpha = 0.05
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.01
align_to_head(context, container)
elif scene_type == "EXQUISITE":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800000011920929
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.550000011920929, 0.6000000238418579)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Back", container,
(-0.007075886707752943, 1.986365795135498, 0.23595929145812988),
(-0.03276771679520607, 1.3572238683700562, 1.5502748489379883),
214.40000915527344, 1.0,
1.4486230611801147, 9.149999618530273,
1.0, transmission=0.0)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (0.8352941870689392, 0.5882353186607361, 0.4705882668495178)
spot_light_001 = add_spot_light("Key", container,
(0.2691590487957001, -1.4757589101791382, 0.42834436893463135),
(0.06910523027181625, 1.289427638053894, -1.2877484560012817),
14.0, 1.0,
1.710422396659851, 9.729999542236328,
0.570900022983551)
set_contact_shadow(spot_light_001, 0.05000000074505806, 0.0024999999441206455)
spot_light_001.data.color = (0.48235297203063965, 0.5647059082984924, 0.8352941870689392)
spot_light_002 = add_spot_light("Fill", container,
(1.290446400642395, 0.9552819728851318, 0.18248343467712402),
(-1.58391535282135, -1.23851478099823, -0.9736499190330505),
20.0, 1.0,
2.460913896560669, 5.03000020980835,
0.2020999938249588, transmission=0.0)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (0.5058823823928833, 0.5803921818733215, 0.6274510025978088)
spot_light_003 = add_spot_light("Key.001", container,
(-1.0078679323196411, -1.402224063873291, -0.8448393940925598),
(-0.44580304622650146, -2.239304304122925, 1.3679754734039307),
350.0, 1.0,
1.4486230611801147, 9.149999618530273,
0.800000011920929)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.48235297203063965, 0.5647059082984924, 0.8352941870689392)
spot_light_004 = add_spot_light("Back Light_Head", container,
(-0.5920167565345764, -1.0476973056793213, -0.6991136074066162),
(2.2965502738952637, 0.219370499253273, -0.49700337648391724),
0.0, 0.2524999976158142,
1.2740901708602905, 2.5899999141693115,
0.5163000226020813)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.7843137979507446, 0.7843137979507446, 0.686274528503418)
spot_light_005 = add_spot_light("Key.002", container,
(-4.265609264373779, -0.32033464312553406, 2.0730538368225098),
(-0.03842073678970337, 1.0002021789550781, -2.8712077140808105),
300.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.5088000297546387)
set_contact_shadow(spot_light_005, 0.05000000074505806, 0.0024999999441206455)
spot_light_005.data.color = (0.48235297203063965, 0.5647059082984924, 0.8352941870689392)
spot_light_006 = add_spot_light("Key_Front", container,
(1.2833281755447388, 3.9884731769561768, 1.8911453485488892),
(-0.3483291268348694, 1.1461023092269897, 0.8336480855941772),
60.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.6155999898910522, transmission=0.0)
set_contact_shadow(spot_light_006, 0.05000000074505806, 0.0024999999441206455)
spot_light_006.data.color = (0.8823530077934265, 0.9411765336990356, 1.0)
spot_light_007 = add_spot_light("Fill.001", container,
(3.7928030490875244, -0.731768786907196, 2.6132020950317383),
(-0.03842347860336304, 1.0002011060714722, -0.283409982919693),
12.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.6155999898910522)
set_contact_shadow(spot_light_007, 0.05000000074505806, 0.0024999999441206455)
spot_light_007.data.color = (0.8823530077934265, 0.9411765336990356, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "sunset.exr"
shading.studiolight_rotate_z = 0.6440264591947198
shading.studiolight_intensity = 0.20000000298023224
shading.studiolight_background_alpha = 0.0
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "BLUR_WARM":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.35
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 4.0
context.scene.eevee.bloom_intensity = 0.15
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast", 0.0, 0.8)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
area_light_000 = add_area_light("Key", container,
(0.23867405951023102, -1.4948756694793701, 0.3496365547180176),
(0.06910630315542221, 1.2894277572631836, -1.3055258989334106),
13.334359169006348, 0.570900022983551, 9.729999542236328)
set_contact_shadow(area_light_000, 0.20000000298023224, 0.20000000298023224)
area_light_000.data.color = (1.0385820865631104, 0.9224395155906677, 0.9496166706085205)
area_light_001 = add_area_light("Rim_red", container,
(0.09254506230354309, 0.8227812051773071, 0.0968252420425415),
(-0.01860235258936882, 1.3557215929031372, 1.3542215824127197),
1.392878770828247, 0.30000001192092896, 1.5299999713897705, transmission=0.0)
set_contact_shadow(area_light_001, 0.20000000298023224, 0.20000000298023224)
area_light_001.data.color = (0.746380627155304, 0.2494838982820511, 0.1724458634853363)
area_light_002 = add_area_light("Face", container,
(0.3584509789943695, -1.7150081396102905, -0.013369083404541016),
(1.354569673538208, 1.4951262474060059, -0.10444492101669312),
4.196816921234131, 0.732699990272522, 9.149999618530273)
set_contact_shadow(area_light_002, 0.20000000298023224, 0.20000000298023224)
area_light_002.data.color = (0.7566361427307129, 0.6142145395278931, 0.6137133836746216)
area_light_003 = add_area_light("Key Light - Up", container,
(0.0537683479487896, -1.2218871116638184, -0.45024120807647705),
(0.21799428761005402, 1.0667732954025269, -1.6040315628051758),
8.910563468933105, 1.0, 2.799999952316284)
set_contact_shadow(area_light_003, 0.20000000298023224, 0.20000000298023224)
area_light_003.data.color = (0.8588783144950867, 0.7302938103675842, 0.7108697295188904)
sun_light_004 = add_sun_light("Dir. Light", container,
(-0.03220297023653984, -0.05281418189406395, -1.538125991821289),
(0.7853979468345642, 1.619704370625641e-08, 2.9214975833892822),
3.6000001430511475,
0.009180432185530663, transmission=0.0)
set_contact_shadow(sun_light_004, 0.20000000298023224, 0.20000000298023224)
sun_light_004.data.color = (0.7544040083885193, 0.5007292032241821, 0.4338947832584381)
sun_light_005 = add_sun_light("Dir. Light_closeup", container,
(-0.03220297023653984, -0.05281418189406395, -1.538125991821289),
(0.7853981852531433, -2.2826515788665347e-08, 0.19805686175823212),
2.0999999046325684,
0.009180432185530663)
set_contact_shadow(sun_light_005, 0.20000000298023224, 0.20000000298023224)
sun_light_005.data.color = (0.651659369468689, 0.5787855982780457, 0.5958379507064819)
spot_light_006 = add_spot_light("Rim_yellow", container,
(0.2832099497318268, 0.8227812051773071, 0.0968252420425415),
(-0.01860201172530651, 1.3557212352752686, 1.354223370552063),
13.374069213867188, 1.0,
2.6179935932159424, 1.5299999713897705,
0.0, transmission=0.0)
set_contact_shadow(spot_light_006, 0.20000000298023224, 0.20000000298023224)
spot_light_006.data.color = (1.0332900285720825, 0.6694098114967346, 0.2778758704662323)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "courtyard.exr"
shading.studiolight_rotate_z = 2.356194391846657
shading.studiolight_intensity = 0.25
shading.studiolight_background_alpha = 0.05
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "INTERIOR":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.800000011920929
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 2.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.0, 0.75)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Back", container,
(0.5539839267730713, 1.8741519451141357, 0.18556976318359375),
(-0.032768093049526215, 1.3572243452072144, 1.3471097946166992),
214.40000915527344, 1.0,
1.4486230611801147, 9.149999618530273,
1.0, transmission=0.0)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (0.8352941870689392, 0.5882353186607361, 0.4705882668495178)
sun_light_001 = add_point_light("Point light", container,
(-0.8802585601806641, -2.8414785861968994, 2.4289615154266357),
(-0.0, -0.0, -0.20179717242717743),
120.0,
0.25)
set_contact_shadow(sun_light_001, 0.05000000074505806, 0.0024999999441206455)
sun_light_001.data.color = (0.7843137979507446, 0.7843137979507446, 0.7843137979507446)
spot_light_002 = add_spot_light("Key Lower", container,
(-0.7574724555015564, -1.0714011192321777, -1.0519981384277344),
(2.292457342147827, -0.48952972888946533, -1.1989017724990845),
50.29998779296875, 1.0,
0.541051983833313, 10.989999771118164,
0.25)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (0.7568628191947937, 0.8235294818878174, 0.8352941870689392)
spot_light_003 = add_spot_light("Top Spot", container,
(-0.31087398529052734, -1.1979326009750366, 1.2510926723480225),
(0.8557190895080566, -1.1747671280204486e-08, -0.3761661648750305),
65.69999694824219, 0.375,
1.221730351448059, 5.0,
0.0)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.760784387588501, 1.0, 0.9803922176361084)
spot_light_004 = add_spot_light("Key", container,
(-0.7617886066436768, 4.546901226043701, 0.31877660751342773),
(-2.300450086593628, 1.8846901655197144, -0.3277812898159027),
800.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.5088000297546387, transmission=0.0)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.760784387588501, 1.0, 0.9803922176361084)
spot_light_005 = add_spot_light("Key Back", container,
(2.2198028564453125, 3.576693296432495, 1.8407554626464844),
(-0.3483298718929291, 1.146102786064148, 0.6304814219474792),
73.5999984741211, 0.75,
0.7504914402961731, 9.640000343322754,
0.6155999898910522, transmission=0.0)
set_contact_shadow(spot_light_005, 0.05000000074505806, 0.0024999999441206455)
spot_light_005.data.color = (1.0, 1.0, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "interior.exr"
shading.studiolight_rotate_z = 1.0472
shading.studiolight_intensity = 0.4551074802875519
shading.studiolight_background_alpha = 0.05000000074505806
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "LEADING_ROLE":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.65
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 3.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.5, 0.6)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
sun_light_000 = add_sun_light("Dir. Light", container,
(-0.001717992126941681, -0.03369736298918724, -1.4594181776046753),
(-2.115131378173828, 0.18253736197948456, 1.0880452394485474),
0.14580000936985016,
0.009180432185530663)
set_contact_shadow(sun_light_000, 0.05000000074505806, 0.0024999999441206455)
sun_light_000.data.color = (0.6222654581069946, 0.5600389242172241, 0.7000486254692078)
sun_light_001 = add_sun_light("Dir. Light_0", container,
(-0.001717992126941681, -0.03369736298918724, -1.4594181776046753),
(1.254795789718628, -0.12031947821378708, 1.9957903623580933),
0.18000000715255737,
0.009180432185530663)
set_contact_shadow(sun_light_001, 0.05000000074505806, 0.0024999999441206455)
sun_light_001.data.color = (0.5751467943191528, 0.5711802244186401, 0.4105357825756073)
spot_light_002 = add_spot_light("Back Light_Head", container,
(0.0018105169292539358, 1.526957392692566, 0.16657984256744385),
(-1.2665398120880127, 4.095466674125525e-11, 0.0013687603641301394),
201.60000610351562, 0.2524999976158142,
2.0943946838378906, 10.0,
0.05000000074505806, transmission=0.0)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (0.7852135300636292, 0.5582867860794067, 0.5388527512550354)
spot_light_003 = add_spot_light("Key", container,
(-1.1670068502426147, -1.4828466176986694, 0.5728923082351685),
(-0.40884634852409363, -1.5184019804000854, 1.2575336694717407),
98.4000015258789, 1.0,
1.4486230611801147, 9.149999618530273,
0.5)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.8283909559249878, 0.7455518841743469, 0.9319397807121277)
spot_light_004 = add_spot_light("Back", container,
(-2.088263511657715, -0.4154135584831238, 0.44909727573394775),
(-0.6497525572776794, 1.3443297147750854, 2.5910379886627197),
602.7999877929688, 1.0,
0.6806783080101013, 2.4000000953674316,
0.9646999835968018)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.9917355179786682, 0.8925620317459106, 1.1157023906707764)
spot_light_005 = add_spot_light("Key.001", container,
(-1.2335113286972046, -0.4877118170261383, 1.5836292505264282),
(0.4597858488559723, -0.7509121894836426, -0.4294576942920685),
100.80000305175781, 1.0,
1.4486230611801147, 9.149999618530273,
0.5)
set_contact_shadow(spot_light_005, 0.05000000074505806, 0.0024999999441206455)
spot_light_005.data.color = (0.8283909559249878, 0.7455518841743469, 0.9319397807121277)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "night.exr"
shading.studiolight_rotate_z = 2.3561945
shading.studiolight_intensity = 0.4000000059604645
shading.studiolight_background_alpha = 0.0
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "NEON":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.65
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 3.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32.0
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast",
0.75, 0.5)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
restore_hidden_camera()
container = add_light_container()
spot_light_000 = add_spot_light("Back", container,
(-0.007075886707752943, 1.986365795135498, 0.23595929145812988),
(-0.03276771679520607, 1.3572238683700562, 1.5502748489379883),
214.40000915527344, 1.0,
1.4486230611801147, 9.149999618530273,
1.0, transmission=0.0)
set_contact_shadow(spot_light_000, 0.05000000074505806, 0.0024999999441206455)
spot_light_000.data.color = (0.0, 0.9276570081710815, 0.5703822374343872)
sun_light_001 = add_sun_light("Dir. Light", container,
(-0.001717992126941681, -0.03369736298918724, -1.4594181776046753),
(1.3712451457977295, 0.11371027678251266, 2.9736037254333496),
1.6200001239776611,
0.009180432185530663)
set_contact_shadow(sun_light_001, 0.05000000074505806, 0.0024999999441206455)
sun_light_001.data.color = (0.0, 0.0, 1.0)
spot_light_002 = add_spot_light("Key", container,
(-1.7280012369155884, 0.9464914202690125, -0.048926472663879395),
(-1.139359951019287, -1.967456579208374, 0.5540574193000793),
292.0, 1.0,
1.4486230611801147, 9.149999618530273,
0.800000011920929)
set_contact_shadow(spot_light_002, 0.05000000074505806, 0.0024999999441206455)
spot_light_002.data.color = (0.8950275778770447, 0.0, 1.1049724817276)
spot_light_003 = add_spot_light("Key.001", container,
(-0.7152296304702759, -1.5677061080932617, -0.8448387384414673),
(-0.44580310583114624, -2.239304304122925, 1.5598453283309937),
101.5999984741211, 1.0,
1.4486230611801147, 9.149999618530273,
0.800000011920929)
set_contact_shadow(spot_light_003, 0.05000000074505806, 0.0024999999441206455)
spot_light_003.data.color = (0.7645107507705688, 0.9239347577095032, 1.127240777015686)
spot_light_004 = add_spot_light("Fill", container,
(1.2904465198516846, 0.9552818536758423, 0.18248367309570312),
(-1.583914875984192, -1.2385149002075195, -0.9736509919166565),
20.0, 1.0,
2.460913896560669, 5.03000020980835,
0.2020999938249588, transmission=0.0)
set_contact_shadow(spot_light_004, 0.05000000074505806, 0.0024999999441206455)
spot_light_004.data.color = (0.0, 0.0, 1.0)
spot_light_005 = add_spot_light("Back Light_Head", container,
(-0.5920169949531555, -1.0476973056793213, -0.6991136074066162),
(2.2965502738952637, 0.21937033534049988, -0.4970036447048187),
0.0, 0.2524999976158142,
1.2740901708602905, 2.5899999141693115,
0.5163000226020813)
set_contact_shadow(spot_light_005, 0.05000000074505806, 0.0024999999441206455)
spot_light_005.data.color = (0.5844155550003052, 0.0, 1.0822510719299316)
spot_light_006 = add_spot_light("Fill.001", container,
(3.792802333831787, -0.7317703366279602, 2.6132020950317383),
(-0.03842347487807274, 1.0002011060714722, -0.28341037034988403),
12.0, 0.75,
0.7504914402961731, 9.640000343322754,
0.6155999898910522)
set_contact_shadow(spot_light_006, 0.05000000074505806, 0.0024999999441206455)
spot_light_006.data.color = (0.0, 0.0, 1.0)
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "studio.exr"
shading.studiolight_rotate_z = 0.0
shading.studiolight_intensity = 0.4000000059604645
shading.studiolight_background_alpha = 0.0
shading.studiolight_background_blur = 0.5
space_data.clip_start = 0.009999999776482582
align_to_head(context, container)
elif scene_type == "TEMPLATE":
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.5
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 5.0
context.scene.eevee.bloom_intensity = 0.1
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 32
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "Medium Contrast", 0.6, 0.6)
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(False)
head_pos, camera_pos = target_head(context, 1.0)
camera, camera_target = camera_setup(context, camera_pos, head_pos)
context.scene.camera = camera
container = add_light_container()
key = add_area_light("Key", container,
(-1.5078026056289673, -1.0891118049621582, 2.208820104598999),
(1.0848181247711182, -0.881056010723114, -0.5597077012062073),
40, 1, 9)
target_key = add_target("KeyTarget", container, (-0.006276353262364864, -0.004782751202583313, 1.503425121307373))
track_to(key, target_key)
fill = add_area_light("Fill", container,
(2.28589, -1.51410, 1.40742),
(1.4248263835906982, 0.9756063222885132, 0.8594209551811218),
10, 1, 9)
target_fill = add_target("FillTarget", container, (0.013503191992640495, 0.005856933072209358, 1.1814184188842773))
track_to(fill, target_fill)
back = add_area_light("Back", container,
(0.36789, 0.61511, 2.36201),
(-0.7961875796318054, 0.4831638038158417, -0.12343151122331619),
40, 0.5, 9, )
target_back = add_target("BackTarget", container, (0.0032256320118904114, 0.06994983553886414, 1.6254671812057495))
track_to(back, target_back)
set_contact_shadow(key, 0.05, 0.0025)
set_contact_shadow(fill, 0.05, 0.0025)
if shading:
#shading.type = 'RENDERED'
shading.use_scene_lights_render = True
shading.use_scene_world_render = True
context.space_data.clip_start = 0.01
if context.scene.view_settings.view_transform == "AgX":
filter_lights((0.875, 1, 1, 1))
except Exception as e:
utils.log_error("Something went wrong adding lights:", e)
# restore selection
bpy.ops.object.select_all(action='DESELECT')
for obj in current_selected:
try:
obj.select_set(True)
except:
pass
try:
context.view_layer.objects.active = current_active
if current_mode != "OBJECT":
bpy.ops.object.mode_set(mode=current_mode)
except:
pass
def lighting_setup_camera(context):
context = vars.get_context(context)
hide_view_extras(context, False)
head_pos, camera_pos = target_head(context, 1.0)
camera, camera_target = camera_setup(context, camera_pos, head_pos)
context.scene.camera = camera
def get_head_delta(context, chr_cache):
context = vars.get_context(context)
z_angle = 0
head_pos = Vector((0,0,1.4))
head_rot_z = Quaternion((1, 0, 0, 0))
if chr_cache:
arm = chr_cache.get_armature()
head_bone = None
for try_name in ["CC_Base_Head", "head", "ORG-spine.006"]:
if try_name in arm.pose.bones:
head_bone = arm.pose.bones[try_name]
break
if arm and head_bone:
T: Matrix = arm.matrix_world @ head_bone.matrix
head_pos = T.to_translation()
rot = T.to_quaternion()
forward = rot @ Vector((0,0,1))
f_2d = Vector((forward.x, forward.y)).normalized()
z_angle = f_2d.angle_signed(Vector((0,-1)), 0)
#shading = utils.get_view_3d_shading(context)
#if shading:
# shading.studiolight_rotate_z += z_angle
head_rot_z = Euler((0,0,z_angle), "XYZ").to_quaternion()
return z_angle, head_pos, head_rot_z
def target_eyes_plane(chr_cache, head_pos, forward):
fN = forward.normalized()
if chr_cache:
arm = chr_cache.get_armature()
left_eye_bone = None
right_eye_bone = None
for try_name in ["CC_Base_L_Eye", "ORG-eye.L"]:
if try_name in arm.pose.bones:
left_eye_bone = arm.pose.bones[try_name]
break
for try_name in ["CC_Base_R_Eye", "ORG-eye.R"]:
if try_name in arm.pose.bones:
right_eye_bone = arm.pose.bones[try_name]
break
if left_eye_bone and right_eye_bone:
TL = arm.matrix_world @ left_eye_bone.matrix
TR = arm.matrix_world @ right_eye_bone.matrix
p = (TL.to_translation() + TR.to_translation()) / 2
dp = p - head_pos
d = fN.dot(dp) + 0.02
return head_pos + fN * d
return head_pos + fN * 0.09
def target_head(context, distance):
context = vars.get_context(context)
context.view_layer.update()
props = vars.props()
chr_cache = props.get_context_character_cache(context)
z_angle, head_pos, head_rot = get_head_delta(context, chr_cache)
forward = head_rot @ Vector((0,-1,0))
head_eyes_plane = target_eyes_plane(chr_cache, head_pos, forward)
return head_eyes_plane, head_eyes_plane + forward*distance
def align_to_head(context, container, use_delta_rot=True):
context = vars.get_context(context)
shading = utils.get_view_3d_shading(context)
current_angle = 0.0
if shading:
current_angle = shading.studiolight_rotate_z
context.view_layer.update()
props = vars.props()
chr_cache = props.get_context_character_cache(context)
z_angle, delta_loc, delta_rot = get_head_delta(context, chr_cache)
new_angle = current_angle - z_angle
if new_angle > math.pi:
new_angle -= 2*math.pi
elif new_angle < -math.pi:
new_angle += 2*math.pi
if shading and use_delta_rot:
shading.studiolight_rotate_z = new_angle
for child in container.children:
loc = child.location.copy()
if use_delta_rot:
loc = delta_rot @ loc
child.location = loc + delta_loc
if use_delta_rot:
rot = utils.get_transform_rotation(child)
utils.set_transform_rotation(child, delta_rot @ rot)
def dump_location(o, delta_loc=None):
if delta_loc is None:
delta_loc = Vector((0,0,0))
pos = o.location - delta_loc
return f"({pos.x:.3f}, {pos.y:.3f}, {pos.z:.3f})"
def dump_vector(v):
return f"({v.x:.5f}, {v.y:.5f}, {v.z:.5f})"
def dump_color(c):
return f"({c.r:.4f}, {c.g:.4f}, {c.b:.4f})"
def dump_euler(e):
return f"({e.x:.3f}, {e.y:.3f}, {e.z:.3f})"
def dump_rotation_euler(o, delta_rot=None):
if delta_rot is None:
delta_rot = Quaternion((1,0,0,0))
if o.rotation_mode == "XYZ":
rot = -delta_rot @ o.rotation_euler.to_quaternion()
euler = rot.to_euler()
return f"({euler.x:.3f}, {euler.y:.3f}, {euler.z:.3f})"
elif o.rotation_mode == "QUATERNION":
rot = -delta_rot @ o.rotation_quaternion
euler = rot.to_euler()
return f"({euler.x:.3f}, {euler.y:.3f}, {euler.z:.3f})"
def filter_lights(filter):
for light in bpy.data.objects:
if light.type == "LIGHT":
col = light.data.color
r = col.r
g = col.g
b = col.b
l0 = (r+g+b)/3
r *= filter[0]
g *= filter[1]
b *= filter[2]
l1 = (r+g+b)/3
if l1 > 0.0001:
m = l0/l1
else:
m = l0
r *= m
g *= m
b *= m
light.data.color = (r,g,b)
def align_with_view(context, obj=None):
context = vars.get_context(context)
hide_view_extras(context, False)
if obj is None:
obj = utils.get_active_object()
if utils.object_exists(obj):
utils.align_object_to_view(obj, context)
if obj.type == "CAMERA":
view_space, r3d = utils.get_region_3d(context)
obj.data.lens = view_space.lens
def hide_view_extras(context, hide):
context = vars.get_context(context)
view_space: bpy.types.Area = utils.get_view_3d_space(context)
if view_space:
view_space.overlay.show_extras = not hide
def add_view_aligned_camera(context):
context = vars.get_context(context)
hide_view_extras(context, False)
bpy.ops.object.camera_add(enter_editmode=False, align='VIEW')
camera = utils.get_active_object()
try:
context.scene.camera = camera
except: pass
align_with_view(context, camera)
camera.name = "Camera"
utils.set_ccic_id(camera)
view_space, r3d = utils.get_region_3d(context)
if view_space:
camera.data.lens = view_space.lens
camera.data.dof.use_dof = False
camera.data.dof.aperture_fstop = 5.4
camera.data.dof.aperture_blades = 5
camera.data.dof.aperture_rotation = 0
camera.data.dof.aperture_ratio = 1
camera.data.display_size = 0.2
camera.data.show_limits = True
def dump_scene_pycode(context):
context = vars.get_context(context)
props = vars.props()
chr_cache = props.get_context_character_cache(context)
if chr_cache:
za, dl, dr = get_head_delta(context, chr_cache)
else:
za = 0
dl = bpy.context.active_object.location
dr = Euler((0,0,0), "XYZ").to_quaternion()
shading = utils.get_view_3d_shading(context)
space_data = utils.get_view_3d_space(context)
code = f"""
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
context.scene.world.sun_threshold = 0.1
else:
context.scene.eevee.use_gtao = {context.scene.eevee.use_gtao}
context.scene.eevee.gtao_distance = {context.scene.eevee.gtao_distance:.3f}
context.scene.eevee.gtao_factor = {context.scene.eevee.gtao_factor:.3f}
context.scene.eevee.use_bloom = {context.scene.eevee.use_bloom}
context.scene.eevee.bloom_threshold = {context.scene.eevee.bloom_threshold:.3f}
context.scene.eevee.bloom_knee = {context.scene.eevee.bloom_knee:.3f}
context.scene.eevee.bloom_radius = {context.scene.eevee.bloom_radius:.3f}
context.scene.eevee.bloom_intensity = {context.scene.eevee.bloom_intensity:.3f}
context.scene.eevee.use_ssr = {context.scene.eevee.use_ssr}
context.scene.eevee.use_ssr_refraction = {context.scene.eevee.use_ssr_refraction}
context.scene.eevee.bokeh_max_size = {context.scene.eevee.bokeh_max_size:.3f}
view_transform = prefs.lighting_use_look if utils.B400() else "Filmic"
colorspace.set_view_settings(view_transform, "{context.scene.view_settings.look}",
{context.scene.view_settings.exposure:.3f}, {context.scene.view_settings.gamma:.3f})
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
remove_all_lights(True)
restore_hidden_camera()
container = add_light_container()"""
i = 1
t = 1
done_targets = {}
for light in context.selected_objects:
if light.type == "LIGHT" and light.data.type == "AREA":
name = f"area_light_{i:03d}"
i += 1
code += f"""
{name} = add_area_light("{light.name}", container, {dump_location(light, dl)}, {dump_rotation_euler(light, dr)}, {light.data.energy:.1f}, {light.data.size:.1f}, {light.data.cutoff_distance:.1f})
set_contact_shadow({name}, {light.data.contact_shadow_distance:.3f}, {light.data.contact_shadow_thickness:.3f})
{name}.data.color = {dump_color(light.data.color)}"""
if light.type == "LIGHT" and light.data.type == "SPOT":
name = f"spot_light_{i:03d}"
i += 1
code += f"""
{name} = add_spot_light("{light.name}", container, {dump_location(light, dl)}, {dump_rotation_euler(light, dr)}, {light.data.energy:.1f}, {light.data.spot_blend:.1f}, {light.data.spot_size:.1f}, {light.data.cutoff_distance:.1f}, {light.data.shadow_soft_size:.1f})
set_contact_shadow({name}, {light.data.contact_shadow_distance:.3f}, {light.data.contact_shadow_thickness:.3f})
{name}.data.color = {dump_color(light.data.color)}"""
if light.type == "LIGHT" and light.data.type == "SUN":
name = f"sun_light_{i:03d}"
i += 1
code += f"""
{name} = add_sun_light("{light.name}", container, {dump_location(light, dl)}, {dump_rotation_euler(light, dr)}, {light.data.energy:.1f}, {light.data.angle:.1f})
set_contact_shadow({name}, {light.data.contact_shadow_distance:.3f}, {light.data.contact_shadow_thickness:.3f})
{name}.data.color = {dump_color(light.data.color)}"""
if light.type == "LIGHT" and light.data.type == "POINT":
name = f"sun_light_{i:03d}"
i += 1
code += f"""
{name} = add_point_light("{light.name}", container, {dump_location(light, dl)}, {dump_rotation_euler(light, dr)}, {light.data.energy:.1f}, {light.data.shadow_soft_size:.1f})
set_contact_shadow({name}, {light.data.contact_shadow_distance:.3f}, {light.data.contact_shadow_thickness:.3f})
{name}.data.color = {dump_color(light.data.color)}"""
for con in light.constraints:
if con.type == "TRACK_TO":
target = con.target
if target and target not in done_targets:
target_name = f"target_{t:03d}"
done_targets[target] = target_name
t += 1
code += f"""
{target_name} = add_target({target_name}, container, {dump_location(target, dl)})"""
else:
target_name = done_targets[target]
code += f"""
track_to({name}, {target_name})"""
code += f"""
if shading:
if shading.type not in ["MATERIAL", "RENDERED"]:
shading.type = "MATERIAL"
shading.use_scene_lights = True
shading.use_scene_world = False
shading.use_scene_lights_render = True
shading.use_scene_world_render = False
shading.studio_light = "{shading.studio_light}"
shading.studiolight_rotate_z = {(shading.studiolight_rotate_z - za):.3f}
shading.studiolight_intensity = {shading.studiolight_intensity:.3f}
shading.studiolight_background_alpha = {shading.studiolight_background_alpha:.3f}
shading.studiolight_background_blur = {shading.studiolight_background_blur:.3f}
space_data.clip_start = {space_data.clip_start:.3f}
align_to_head(context, container)
"""
utils.log_always(code)
# zoom view to imported character
def zoom_to_character(chr_cache):
props = vars.props()
try:
if chr_cache:
utils.try_select_objects(chr_cache.get_cache_objects(), clear_selection=True)
zoom_to_selected()
except:
pass
def zoom_to_selected():
for area in bpy.context.screen.areas:
if area.type == "VIEW_3D":
for region in area.regions:
if region.type == "WINDOW":
context = bpy.context.copy()
context['area'] = area
context['region'] = region
if utils.B320():
with bpy.context.temp_override(**context):
bpy.ops.view3d.view_selected()
# bpy.ops.view3d.camera_to_view_selected()
else:
bpy.ops.view3d.view_selected(context)
def render_image(context):
# TBD
pass
def render_animation(context):
# TBD
pass
def dump_mesh_pycode(obj: bpy.types.Object):
code = f"""
location = {dump_location(obj)}
rotation = {dump_rotation_euler(obj)}
"""
mesh: bpy.types.Mesh = obj.data
vert_code = ""
for i, vert in enumerate(mesh.vertices):
if i > 0:
vert_code += ", "
if i % 4 == 0:
vert_code += """
"""
vert_code += dump_vector(vert.co)
face_code = ""
for i, face in enumerate(mesh.polygons):
if i > 0:
face_code += ", "
if i % 4 == 0:
face_code += """
"""
face_code += "("
for j, vert in enumerate(face.vertices):
if j > 0: face_code += ", "
face_code += f"{vert}"
face_code += ")"
code += f"""
mesh.from_pydata([{vert_code}],
[],
[{face_code}])
"""
utils.log_always(code)
def create_backdrop(container, color, roughness):
backdrop_name = "Backdrop"
backdrop_prop = "rl_backdrop_preset"
backdrop: bpy.types.Object = None
for obj in bpy.data.objects:
if obj.name.startswith(backdrop_name) and backdrop_prop in obj:
backdrop = obj
break
if not backdrop:
mesh = bpy.data.meshes.new(backdrop_name)
mesh.from_pydata([(-2.34281, -2.34281, 0.00000), (2.34281, -2.34281, 0.00000), (-2.34281, 2.34281, 3.41876), (2.34281, 2.34281, 3.41876),
(-2.34281, 1.51495, 0.00000), (-2.34281, 2.34281, 0.82786), (-2.34281, 1.58331, 0.00283), (-2.34281, 1.65121, 0.01129),
(-2.34281, 1.71817, 0.02533), (-2.34281, 1.78375, 0.04486), (-2.34281, 1.84749, 0.06973), (-2.34281, 1.90896, 0.09978),
(-2.34281, 1.96774, 0.13480), (-2.34281, 2.02343, 0.17456), (-2.34281, 2.07564, 0.21878), (-2.34281, 2.12402, 0.26717),
(-2.34281, 2.16825, 0.31938), (-2.34281, 2.20800, 0.37506), (-2.34281, 2.24303, 0.43384), (-2.34281, 2.27308, 0.49531),
(-2.34281, 2.29795, 0.55905), (-2.34281, 2.31748, 0.62463), (-2.34281, 2.33152, 0.69160), (-2.34281, 2.33998, 0.75950),
(2.34281, 2.34281, 0.82786), (2.34281, 1.51495, 0.00000), (2.34281, 2.33998, 0.75950), (2.34281, 2.33152, 0.69160),
(2.34281, 2.31748, 0.62463), (2.34281, 2.29795, 0.55905), (2.34281, 2.27308, 0.49531), (2.34281, 2.24303, 0.43384),
(2.34281, 2.20800, 0.37506), (2.34281, 2.16825, 0.31938), (2.34281, 2.12402, 0.26717), (2.34281, 2.07564, 0.21878),
(2.34281, 2.02343, 0.17456), (2.34281, 1.96774, 0.13480), (2.34281, 1.90896, 0.09978), (2.34281, 1.84749, 0.06973),
(2.34281, 1.78375, 0.04486), (2.34281, 1.71817, 0.02533), (2.34281, 1.65121, 0.01129), (2.34281, 1.58331, 0.00283)],
[],
[(5, 24, 3, 2), (24, 5, 23, 26), (26, 23, 22, 27), (27, 22, 21, 28),
(28, 21, 20, 29), (29, 20, 19, 30), (30, 19, 18, 31), (31, 18, 17, 32),
(32, 17, 16, 33), (33, 16, 15, 34), (34, 15, 14, 35), (35, 14, 13, 36),
(36, 13, 12, 37), (37, 12, 11, 38), (38, 11, 10, 39), (39, 10, 9, 40),
(40, 9, 8, 41), (41, 8, 7, 42), (42, 7, 6, 43), (43, 6, 4, 25),
(0, 1, 25, 4)])
for poly in mesh.polygons:
poly.use_smooth = True
mesh.update()
backdrop = bpy.data.objects.new(backdrop_name, mesh)
bpy.context.collection.objects.link(backdrop)
if backdrop:
if container:
backdrop.parent = container
backdrop.matrix_parent_inverse = container.matrix_world.inverted()
backdrop.location = Vector((0.000, -0.994, 0.000))
utils.set_transform_rotation(backdrop, Euler((0, 0, 0), "XYZ"))
backdrop[backdrop_prop] = True
# Material
material: bpy.types.Material = None
material_name = "Backdrop"
material_prop = "rl_backdrop_preset"
for mat in bpy.data.materials:
if mat.name.startswith(material_name) and material_prop in mat:
material = mat
break
if not material:
material = bpy.data.materials.new(material_name)
material[material_prop] = True
if material:
backdrop.data.materials.append(material)
material.use_nodes = True
for node in material.node_tree.nodes:
if node.type == "BSDF_PRINCIPLED":
node.inputs["Base Color"].default_value = color
node.inputs["Roughness"].default_value = roughness
return backdrop
def fetch_anim_range(context, expand = False, fit = True):
"""Fetch anim range from character animation.
"""
props = vars.props()
context = vars.get_context(context)
chr_cache = props.get_context_character_cache(context)
arm = chr_cache.get_armature()
if arm:
action = utils.safe_get_action(arm)
if action:
if context.scene.use_preview_range:
start = context.scene.frame_preview_start
end = context.scene.frame_preview_end
else:
start = context.scene.frame_start
end = context.scene.frame_end
action_start = math.floor(action.frame_range[0])
action_end = math.ceil(action.frame_range[1])
if expand:
if action_start < start:
start = action_start
if action_end > end:
end = action_end
elif fit:
start = action_start
end = action_end
if context.scene.use_preview_range:
context.scene.frame_preview_start = start
context.scene.frame_preview_end = end
else:
context.scene.frame_start = start
context.scene.frame_end = end
def eevee_setup(context):
props = vars.props()
context = vars.get_context(context)
hide_view_extras(context, False)
chr_cache = props.get_context_character_cache(context)
extracted = False
MSS = utils.store_mode_selection_state()
# rebuild for eevee if needed
if chr_cache.get_render_target() != "EEVEE":
bpy.ops.cc3.importer(param="REBUILD_EEVEE")
try:
context.scene.render.engine = 'BLENDER_EEVEE'
except:
try:
context.scene.render.engine = 'BLENDER_EEVEE_NEXT'
except:
try:
context.scene.render.engine = 'EEVEE'
except:
utils.log_error("Unable to set Eevee render engine!")
# add modifiers subdiv level 1
utils.set_mode("OBJECT")
objects = chr_cache.get_all_objects(of_type="MESH")
utils.try_select_objects(objects, True)
for obj in objects:
obj_cache = chr_cache.get_object_cache(obj)
if obj_cache and not obj_cache.disabled:
# clear custom normals for GPU subdivision
bpy.context.view_layer.objects.active = obj
if utils.edit_mode_to(obj):
bpy.ops.mesh.customdata_custom_splitnormals_clear()
if not modifiers.has_modifier(obj, "SUBSURF"):
mod = obj.modifiers.new(name = "Subdivision", type = "SUBSURF")
mod = modifiers.get_object_modifier(obj, "SUBSURF")
if mod:
mod.levels = 0
mod.render_levels = 1
if utils.B291():
mod.boundary_smooth = 'PRESERVE_CORNERS'
utils.set_mode("OBJECT")
try:
# preview
context.scene.eevee.taa_samples = 32
context.scene.eevee.taa_render_samples = 64
context.scene.eevee.use_taa_reprojection = True
if utils.B420():
context.scene.eevee.use_shadows = True
context.scene.eevee.use_volumetric_shadows = True
context.scene.eevee.use_raytracing = True
context.scene.eevee.ray_tracing_options.resolution_scale = "1"
context.scene.eevee.ray_tracing_options.use_denoise = True
context.scene.eevee.use_shadow_jitter_viewport = True
context.scene.eevee.use_bokeh_jittered = True
context.scene.world.use_sun_shadow = True
context.scene.world.use_sun_shadow_jitter = True
bpy.data.worlds["World"].sun_threshold = 0.05
bpy.data.worlds["World"].use_sun_shadow = True
else:
context.scene.eevee.use_gtao = True
context.scene.eevee.gtao_distance = 0.25
context.scene.eevee.gtao_factor = 0.5
context.scene.eevee.use_bloom = True
context.scene.eevee.bloom_threshold = 0.65
context.scene.eevee.bloom_knee = 0.5
context.scene.eevee.bloom_radius = 3.0
context.scene.eevee.bloom_intensity = 0.5
context.scene.eevee.use_ssr = True
context.scene.eevee.use_ssr_refraction = True
context.scene.eevee.bokeh_max_size = 64.0
except:
pass
utils.restore_mode_selection_state(MSS)
def cycles_setup(context):
props = vars.props()
context = vars.get_context(context)
MSS = utils.store_mode_selection_state()
hide_view_extras(context, False)
chr_cache = props.get_context_character_cache(context)
extracted = False
# extract eyelashes from body objects
for obj in chr_cache.get_cache_objects():
obj_cache = chr_cache.get_object_cache(obj)
if obj_cache and not obj_cache.disabled and obj_cache.is_mesh():
if obj_cache.object_type == "BODY":
eyelashes = meshutils.separate_mesh_material_type(chr_cache, obj, "EYELASH")
if eyelashes:
extracted = True
eyelashes.name = obj.name.replace("CC_Base_Body", "CC_Base_Eyelash")
# add modifiers and terminator offsets
utils.set_mode("OBJECT")
objects = chr_cache.get_all_objects(of_type="MESH")
utils.try_select_objects(objects, True)
for obj in objects:
# clear custom normals for GPU subdivision
obj_cache = chr_cache.get_object_cache(obj)
if obj_cache and not obj_cache.disabled:
# clear custom normals for GPU subdivision
bpy.context.view_layer.objects.active = obj
if utils.edit_mode_to(obj):
bpy.ops.mesh.customdata_custom_splitnormals_clear()
if not modifiers.has_modifier(obj, "SUBSURF"):
mod = obj.modifiers.new(name = "Subdivision", type = "SUBSURF")
mod = modifiers.get_object_modifier(obj, "SUBSURF")
if mod:
mod.levels = 0
mod.render_levels = 2
if utils.B291():
mod.boundary_smooth = 'PRESERVE_CORNERS'
if utils.B290():
if obj.cycles.shadow_terminator_offset == 0.0:
obj.cycles.shadow_terminator_offset = 0.1
# rebuild for cycles if needed
if chr_cache.get_render_target() != "CYCLES":
bpy.ops.cc3.importer(param="REBUILD_CYCLES")
else:
if extracted:
bpy.ops.cc3.importer(param="BUILD_DRIVERS")
try:
context.scene.render.engine = 'CYCLES'
context.scene.cycles.device = 'GPU'
except:
utils.log_error("Unable to set Cycles Render Engine!")
try:
# preview
context.scene.cycles.use_preview_adaptive_sampling = True
#context.scene.cycles.preview_adaptive_threshold = 0.05
#context.scene.cycles.preview_samples = 512
context.scene.cycles.use_preview_denoising = True
#context.scene.cycles.preview_denoising_start_sample = 1
context.scene.cycles.preview_denoising_input_passes = 'RGB_ALBEDO_NORMAL'
# render
context.scene.cycles.use_adaptive_sampling = True
#context.scene.cycles.adaptive_threshold = 0.02
#context.scene.cycles.samples = 512
context.scene.cycles.use_denoising = True
context.scene.cycles.denoising_input_passes = 'RGB_ALBEDO_NORMAL'
if context.scene.cycles.transparent_max_bounces < 100:
context.scene.cycles.transparent_max_bounces = 100
except:
pass
try:
context.scene.cycles.preview_denoiser = 'OPENIMAGEDENOISE'
context.scene.cycles.denoiser = 'OPTIX'
except:
pass
utils.restore_mode_selection_state(MSS)
class CC3Scene(bpy.types.Operator):
"""Scene Tools"""
bl_idname = "cc3.scene"
bl_label = "Scene Tools"
bl_options = {"REGISTER", "UNDO"}
param: bpy.props.StringProperty(
name = "param",
default = ""
)
def execute(self, context):
props = vars.props()
if self.param == "RENDER_IMAGE":
render_image(context)
elif self.param == "RENDER_ANIMATION":
render_animation(context)
elif self.param == "ANIM_RANGE_EXPAND":
fetch_anim_range(context, expand=True)
elif self.param == "ANIM_RANGE_FIT":
fetch_anim_range(context, fit=True)
elif self.param == "PHYSICS_PREP_CLOTH":
# stop any playing animation
if context.screen.is_animation_playing:
bpy.ops.screen.animation_cancel(restore_frame=False)
# reset the physics
physics.reset_cache(context)
# reset the animation
bpy.ops.screen.frame_jump(end=False)
elif self.param == "PHYSICS_PREP_RBW":
# stop any playing animation
if context.screen.is_animation_playing:
bpy.ops.screen.animation_cancel(restore_frame=False)
# reset the physics
rigidbody.reset_cache(context)
# reset the animation
bpy.ops.screen.frame_jump(end=False)
elif self.param == "PHYSICS_PREP_ALL":
# stop any playing animation
if context.screen.is_animation_playing:
bpy.ops.screen.animation_cancel(restore_frame=False)
# jump to end
bpy.ops.screen.frame_jump(end=True)
# reset the physics
physics.reset_cache(context, all_objects=True)
rigidbody.reset_cache(context)
bpy.ops.ptcache.free_bake_all()
# reset the animation
bpy.ops.screen.frame_jump(end=False)
context.view_layer.update()
elif self.param == "CYCLES_SETUP":
cycles_setup(context)
elif self.param == "EEVEE_SETUP":
eevee_setup(context)
elif self.param == "DUMP_SETUP":
dump_scene_pycode(context)
elif self.param == "DUMP_OBJ":
dump_mesh_pycode(context.active_object)
elif self.param == "FILTER_LIGHTS":
filter_lights(props.light_filter)
elif self.param == "ALIGN_WITH_VIEW":
align_with_view(context)
elif self.param == "ADD_CAMERA":
add_view_aligned_camera(context)
elif self.param == "SETUP_CAMERA":
lighting_setup_camera(context)
elif self.param == "SETUP_WORLD":
world_setup(context)
elif self.param == "SETUP_COMPOSITOR":
compositor_setup(context)
else:
setup_scene_default(context, self.param)
if self.param == "TEMPLATE":
compositor_setup(context)
world_setup(context)
utils.message_box("World nodes and compositor template set up.")
else:
if not self.param.startswith("PRESET_"):
world_setup(context)
return {"FINISHED"}
@classmethod
def description(cls, context, properties):
if properties.param == "BLENDER":
return "Restore the render settings and lighting to the Blender defaults"
elif properties.param == "MATCAP":
return "Use solid shading with matcap rendering"
elif properties.param == "CC3":
return "Use material shading with render settings and lighting to a replica of the default CC3 lighting"
elif properties.param == "STUDIO":
return "Use rendered shading with the Studio HDRI and left sided 3 point lighting"
elif properties.param == "COURTYARD":
return "Use rendered shading with the Courtyard HDRI and right sided 3 point lighting"
elif properties.param == "TEMPLATE":
return "Sets up a rendering template with rendered shading and world lighting. Sets up the Compositor and World nodes with a basic setup and adds tracking lights, a tracking camera and targetting objects"
elif properties.param == "RENDER_IMAGE":
return "Renders a single image"
elif properties.param == "RENDER_ANIMATION":
return "Renders the current animation range"
elif properties.param == "ANIM_RANGE_EXPAND":
return "Expands the animation range to include the range on the Action on the current character"
elif properties.param == "ANIM_RANGE_FIT":
return "Sets the animation range to the same range as the Action on the current character"
elif properties.param == "PHYSICS_PREP_CLOTH":
return "Resets the physics point cache on all cloth objects and synchronizes the physics point cache ranges " \
"on all cloth objects to fit the current scene animation range.\n\n" \
"i.e. if the point cache frame range does not cover the current scene range (or preview range) it will be extended to fit"
elif properties.param == "PHYSICS_PREP_RBW":
return "Resets the physics point cache for the rigid body world and synchronizes the physics point cache range " \
"to fit the current scene animation range.\n\n" \
"i.e. if the point cache frame range does not cover the current scene range (or preview range) it will be extended to fit"
elif properties.param == "CYCLES_SETUP":
return "Applies Shader Terminator Offset and subdivision to all meshes"
elif properties.param == "FILTER_LIGHTS":
return "Filter all light colors by this color"
elif properties.param == "ALIGN_WITH_VIEW":
return "Align active object to current viewpoint location and rotation. Useful for quickly positioning and aligning lights and cameras"
elif properties.param == "ADD_CAMERA":
return "Add a camera aligned with the current viewpoint location and rotation, and make it the currently active camera"
elif properties.param == "SETUP_CAMERA":
return "Add a tracking camera with track target on the current character"
elif properties.param == "SETUP_WORLD":
return "Setup the world shader nodes"
elif properties.param == "SETUP_COMPOSITOR":
return "Setup a default compositor with glare and lens distortion"
return ""