kopia lustrzana https://github.com/vilemduha/blendercam
fixes to z buffer getting
rodzic
a524963477
commit
69e12c8c9b
|
@ -1032,17 +1032,25 @@ def _backup_render_settings(pairs):
|
||||||
properties=[]
|
properties=[]
|
||||||
for owner,struct_name in pairs:
|
for owner,struct_name in pairs:
|
||||||
obj = getattr(owner,struct_name)
|
obj = getattr(owner,struct_name)
|
||||||
obj_dict={}
|
if isinstance(obj,bpy.types.bpy_struct):
|
||||||
for k in dir(obj):
|
# structure, backup all properties
|
||||||
if not k.startswith("_"):
|
obj_value={}
|
||||||
obj_dict[k]=getattr(obj,k)
|
for k in dir(obj):
|
||||||
properties.append(obj_dict)
|
if not k.startswith("_"):
|
||||||
|
obj_value[k]=getattr(obj,k)
|
||||||
|
properties.append(obj_value)
|
||||||
|
else:
|
||||||
|
# simple value
|
||||||
|
properties.append(obj)
|
||||||
|
|
||||||
def _restore_render_settings(pairs,properties):
|
def _restore_render_settings(pairs,properties):
|
||||||
for (owner,struct_name),obj_dict in zip(pairs,properties):
|
for (owner,struct_name),obj_value in zip(pairs,properties):
|
||||||
obj = getattr(owner,struct_name)
|
obj = getattr(owner,struct_name)
|
||||||
for k,v in obj_dict.items():
|
if isinstance(obj,bpy.types.bpy_struct):
|
||||||
setattr(obj,k,v)
|
for k,v in obj_value.items():
|
||||||
|
setattr(obj,k,v)
|
||||||
|
else:
|
||||||
|
setattr(owner,struct_name,obj_value)
|
||||||
|
|
||||||
def renderSampleImage(o):
|
def renderSampleImage(o):
|
||||||
t = time.time()
|
t = time.time()
|
||||||
|
@ -1076,85 +1084,99 @@ def renderSampleImage(o):
|
||||||
o.update_zbufferimage_tag = True
|
o.update_zbufferimage_tag = True
|
||||||
if o.update_zbufferimage_tag:
|
if o.update_zbufferimage_tag:
|
||||||
s = bpy.context.scene
|
s = bpy.context.scene
|
||||||
|
|
||||||
# prepare nodes first
|
|
||||||
s.use_nodes = True
|
s.use_nodes = True
|
||||||
|
vl = bpy.context.view_layer
|
||||||
n = s.node_tree
|
n = s.node_tree
|
||||||
r = s.render
|
r = s.render
|
||||||
r.resolution_x = resx
|
|
||||||
r.resolution_y = resy
|
|
||||||
# use cycles for everything because
|
|
||||||
# it renders okay on github actions
|
|
||||||
r.engine = 'CYCLES'
|
|
||||||
s.cycles.samples = 1
|
|
||||||
bpy.context.view_layer.samples=1
|
|
||||||
vl_settings=bpy.context.view_layer.cycles
|
|
||||||
vl_settings.use_denoising=False
|
|
||||||
|
|
||||||
|
SETTINGS_TO_BACKUP = [
|
||||||
|
(s.render,"resolution_x"),
|
||||||
|
(s.render,"resolution_x"),
|
||||||
|
(s.cycles,"samples"),
|
||||||
|
(s,"camera"),
|
||||||
|
(vl,"samples"),
|
||||||
|
(vl.cycles,"use_denoising"),
|
||||||
|
(s.world,"mist_settings"),
|
||||||
|
(r,"resolution_x"),
|
||||||
|
(r,"resolution_y"),
|
||||||
|
(r,"resolution_percentage"),
|
||||||
|
]
|
||||||
|
for ob in s.objects:
|
||||||
|
SETTINGS_TO_BACKUP.append((ob,"hide_render"))
|
||||||
|
backup_settings=None
|
||||||
|
try:
|
||||||
|
backup_settings=_backup_render_settings(SETTINGS_TO_BACKUP)
|
||||||
|
# prepare nodes first
|
||||||
|
r.resolution_x = resx
|
||||||
|
r.resolution_y = resy
|
||||||
|
# use cycles for everything because
|
||||||
|
# it renders okay on github actions
|
||||||
|
r.engine = 'CYCLES'
|
||||||
|
s.cycles.samples = 1
|
||||||
|
vl.samples=1
|
||||||
|
vl.cycles.use_denoising=False
|
||||||
|
|
||||||
n.links.clear()
|
n.links.clear()
|
||||||
n.nodes.clear()
|
n.nodes.clear()
|
||||||
node_in = n.nodes.new('CompositorNodeRLayers')
|
node_in = n.nodes.new('CompositorNodeRLayers')
|
||||||
s.view_layers[node_in.layer].use_pass_mist=True
|
s.view_layers[node_in.layer].use_pass_mist=True
|
||||||
# s.view_layers[node_in.layer].use_pass_z=True
|
mist_settings=s.world.mist_settings
|
||||||
mist_settings=s.world.mist_settings
|
s.world.mist_settings.depth=10.0
|
||||||
s.world.mist_settings.depth=10.0
|
s.world.mist_settings.start=0
|
||||||
s.world.mist_settings.start=0
|
s.world.mist_settings.falloff="LINEAR"
|
||||||
s.world.mist_settings.falloff="LINEAR"
|
s.world.mist_settings.height=0
|
||||||
s.world.mist_settings.height=0
|
s.world.mist_settings.intensity=0
|
||||||
s.world.mist_settings.intensity=0
|
node_out = n.nodes.new("CompositorNodeOutputFile")
|
||||||
node_out = n.nodes.new("CompositorNodeOutputFile")
|
node_out.base_path = os.path.dirname(iname)
|
||||||
node_out.base_path = os.path.dirname(iname)
|
node_out.format.file_format = 'OPEN_EXR'
|
||||||
node_out.format.file_format = 'OPEN_EXR'
|
node_out.format.color_mode = 'RGB'
|
||||||
node_out.format.color_mode = 'RGB'
|
node_out.format.color_depth = '32'
|
||||||
node_out.format.color_depth = '32'
|
node_out.file_slots.new(os.path.basename(iname))
|
||||||
node_out.file_slots.new(os.path.basename(iname))
|
n.links.new(node_in.outputs[node_in.outputs.find('Mist')], node_out.inputs[-1])
|
||||||
print(node_out,node_out.inputs)
|
###################
|
||||||
n.links.new(node_in.outputs[node_in.outputs.find('Mist')], node_out.inputs[-1])
|
|
||||||
###################
|
|
||||||
|
|
||||||
# resize operation image
|
# resize operation image
|
||||||
o.offset_image= numpy.full(shape=(resx,resy),fill_value=-10,dtype=numpy.double)
|
o.offset_image= numpy.full(shape=(resx,resy),fill_value=-10,dtype=numpy.double)
|
||||||
|
|
||||||
# various settings for faster render
|
# various settings for faster render
|
||||||
r.resolution_percentage = 100
|
r.resolution_percentage = 100
|
||||||
|
|
||||||
# camera settings
|
# add a new camera settings
|
||||||
camera = s.camera
|
|
||||||
if camera is None:
|
|
||||||
bpy.ops.object.camera_add(align='WORLD', enter_editmode=False, location=(0, 0, 0),
|
bpy.ops.object.camera_add(align='WORLD', enter_editmode=False, location=(0, 0, 0),
|
||||||
rotation=(0, 0, 0))
|
rotation=(0, 0, 0))
|
||||||
camera = bpy.context.active_object
|
camera = bpy.context.active_object
|
||||||
bpy.context.scene.camera = camera
|
bpy.context.scene.camera = camera
|
||||||
|
|
||||||
camera.data.type = 'ORTHO'
|
camera.data.type = 'ORTHO'
|
||||||
camera.data.ortho_scale = max(resx * o.optimisation.pixsize, resy * o.optimisation.pixsize)
|
camera.data.ortho_scale = max(resx * o.optimisation.pixsize, resy * o.optimisation.pixsize)
|
||||||
camera.location = (o.min.x + sx / 2, o.min.y + sy / 2, 1)
|
camera.location = (o.min.x + sx / 2, o.min.y + sy / 2, 1)
|
||||||
camera.rotation_euler = (0, 0, 0)
|
camera.rotation_euler = (0, 0, 0)
|
||||||
camera.data.clip_end = 10.0
|
camera.data.clip_end = 10.0
|
||||||
# if not o.render_all:#removed in 0.3
|
# if not o.render_all:#removed in 0.3
|
||||||
|
|
||||||
h = []
|
h = []
|
||||||
|
|
||||||
# ob=bpy.data.objects[o.object_name]
|
# ob=bpy.data.objects[o.object_name]
|
||||||
for ob in s.objects:
|
for ob in s.objects:
|
||||||
h.append(ob.hide_render)
|
ob.hide_render = True
|
||||||
ob.hide_render = True
|
for ob in o.objects:
|
||||||
for ob in o.objects:
|
ob.hide_render = False
|
||||||
ob.hide_render = False
|
|
||||||
|
|
||||||
bpy.ops.render.render()
|
bpy.ops.render.render()
|
||||||
|
|
||||||
n.nodes.remove(node_out)
|
n.nodes.remove(node_out)
|
||||||
n.nodes.remove(node_in)
|
n.nodes.remove(node_in)
|
||||||
|
camera.select_set(True)
|
||||||
|
bpy.ops.object.delete()
|
||||||
|
|
||||||
os.replace(iname+"0002.exr",iname)
|
os.replace(iname+"%04d.exr"%(s.frame_current),iname)
|
||||||
|
finally:
|
||||||
|
if backup_settings is not None:
|
||||||
|
_restore_render_settings(SETTINGS_TO_BACKUP,backup_settings)
|
||||||
|
else:
|
||||||
|
print("Failed to backup scene settings")
|
||||||
|
|
||||||
|
|
||||||
# if not o.render_all:
|
|
||||||
for id, obs in enumerate(s.objects):
|
|
||||||
obs.hide_render = h[id]
|
|
||||||
|
|
||||||
i = bpy.data.images.load(iname)
|
i = bpy.data.images.load(iname)
|
||||||
bpy.context.scene.render.engine = 'BLENDERCAM_RENDER'
|
bpy.context.scene.render.engine = 'BLENDERCAM_RENDER'
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue