feat: support eevee

This commit is contained in:
2024-06-12 15:23:09 +08:00
parent 322b84cc70
commit 134d8e382b
8 changed files with 88 additions and 51 deletions

View File

@@ -6,10 +6,11 @@ import numpy as np
from pathlib import Path
from uuid import uuid4
import mathutils
import random
from .nodes import custom_nodes
from .props import BIOXELNODES_Series
from .utils import (calc_bbox_verts, get_container, get_layer, get_text_index_str,
from .utils import (calc_bbox_verts, get_all_layers, get_container, get_layer, get_text_index_str,
get_node_by_type, hide_in_ray, lock_transform, show_message)
try:
@@ -218,6 +219,7 @@ class ImportVolumeDataDialog(bpy.types.Operator):
) # type: ignore
def execute(self, context):
is_first_import = len(get_all_layers()) == 0
image, name = read_image(self.filepath, self.series_id)
container_name = self.container_name or name
bioxel_size = self.bioxel_size
@@ -258,7 +260,7 @@ class ImportVolumeDataDialog(bpy.types.Operator):
interpolator = sitk.sitkNearestNeighbor
elif self.resample_method == "gaussian":
interpolator = sitk.sitkGaussian
if self.read_as == "labels":
interpolator = sitk.sitkNearestNeighbor
@@ -451,11 +453,14 @@ class ImportVolumeDataDialog(bpy.types.Operator):
input_node = get_node_by_type(nodes, 'NodeGroupInput')[0]
output_node = get_node_by_type(nodes, 'NodeGroupOutput')[0]
to_layer_node = custom_nodes.add_node(nodes, "BioxelNodes__ConvertToLayer")
to_layer_node = custom_nodes.add_node(nodes,
"BioxelNodes__ConvertToLayer")
links.new(input_node.outputs[0], to_layer_node.inputs[0])
links.new(to_layer_node.outputs[0], output_node.inputs[0])
to_layer_node.inputs['Layer ID'].default_value = random.randint(-200000000,
200000000)
to_layer_node.inputs['Bioxel Size'].default_value = bioxel_size
to_layer_node.inputs['Shape'].default_value = layer_shape
to_layer_node.inputs['Origin'].default_value = layer_origin
@@ -531,7 +536,7 @@ class ImportVolumeDataDialog(bpy.types.Operator):
bpy.context.view_layer.objects.active = container
# Change render setting for better result
if preferences.do_change_render_setting:
if preferences.do_change_render_setting and is_first_import:
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.volume_bounces = 12
bpy.context.scene.cycles.transparent_max_bounces = 16

View File

@@ -1,4 +1,5 @@
from pathlib import Path
import random
import bpy
import pyopenvdb as vdb
from uuid import uuid4
@@ -107,45 +108,6 @@ class JoinLayers(bpy.types.Operator):
filepath=str(vdb_path), align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))
joined_layer = bpy.context.active_object
base_layer_node = base_layer.modifiers[0].node_group.nodes['BioxelNodes__ConvertToLayer']
bioxel_size = base_layer_node.inputs['Bioxel Size'].default_value
layer_shape = base_layer_node.inputs['Shape'].default_value
layer_origin = base_layer_node.inputs['Origin'].default_value
layer_rotation = base_layer_node.inputs['Rotation'].default_value
scalar_offset = base_layer_node.inputs['Scalar Offset'].default_value
scalar_min = base_layer_node.inputs['Scalar Min'].default_value
scalar_max = base_layer_node.inputs['Scalar Max'].default_value
if self.scalar_layer != "None":
scalar_layer_node = scalar_layer.modifiers[0].node_group.nodes['BioxelNodes__ConvertToLayer']
scalar_offset = scalar_layer_node.inputs['Scalar Offset'].default_value
scalar_min = scalar_layer_node.inputs['Scalar Min'].default_value
scalar_max = scalar_layer_node.inputs['Scalar Max'].default_value
bpy.ops.node.new_geometry_nodes_modifier()
node_tree = joined_layer.modifiers[0].node_group
nodes = node_tree.nodes
links = node_tree.links
input_node = get_node_by_type(nodes, 'NodeGroupInput')[0]
output_node = get_node_by_type(nodes, 'NodeGroupOutput')[0]
joined_layer_node = custom_nodes.add_node(
nodes, "BioxelNodes__ConvertToLayer")
links.new(input_node.outputs[0], joined_layer_node.inputs[0])
links.new(joined_layer_node.outputs[0], output_node.inputs[0])
joined_layer_node.inputs['Bioxel Size'].default_value = bioxel_size
joined_layer_node.inputs['Shape'].default_value = layer_shape
joined_layer_node.inputs['Origin'].default_value = layer_origin
joined_layer_node.inputs['Rotation'].default_value = layer_rotation
joined_layer_node.inputs['Scalar Offset'].default_value = scalar_offset
joined_layer_node.inputs['Scalar Min'].default_value = scalar_min
joined_layer_node.inputs['Scalar Max'].default_value = scalar_max
# Set props to VDB object
joined_layer.name = f"{base_layer.name}_Joined"
@@ -162,6 +124,52 @@ class JoinLayers(bpy.types.Operator):
joined_layer['bioxel_layer'] = True
joined_layer.parent = base_layer.parent
for collection in layer.users_collection:
collection.objects.unlink(layer)
for collection in base_layer.users_collection:
collection.objects.link(layer)
# add convert to layer node
base_layer_node = base_layer.modifiers[0].node_group.nodes['BioxelNodes__ConvertToLayer']
bioxel_size = base_layer_node.inputs['Bioxel Size'].default_value
layer_shape = base_layer_node.inputs['Shape'].default_value
layer_origin = base_layer_node.inputs['Origin'].default_value
layer_rotation = base_layer_node.inputs['Rotation'].default_value
scalar_offset = base_layer_node.inputs['Scalar Offset'].default_value
scalar_min = base_layer_node.inputs['Scalar Min'].default_value
scalar_max = base_layer_node.inputs['Scalar Max'].default_value
if self.scalar_layer != "None":
scalar_layer_node = scalar_layer.modifiers[0].node_group.nodes['BioxelNodes__ConvertToLayer']
scalar_offset = scalar_layer_node.inputs['Scalar Offset'].default_value
scalar_min = scalar_layer_node.inputs['Scalar Min'].default_value
scalar_max = scalar_layer_node.inputs['Scalar Max'].default_value
bpy.ops.node.new_geometry_nodes_modifier()
node_tree = joined_layer.modifiers[0].node_group
nodes = node_tree.nodes
links = node_tree.links
input_node = get_node_by_type(nodes, 'NodeGroupInput')[0]
output_node = get_node_by_type(nodes, 'NodeGroupOutput')[0]
joined_layer_node = custom_nodes.add_node(
nodes, "BioxelNodes__ConvertToLayer")
links.new(input_node.outputs[0], joined_layer_node.inputs[0])
links.new(joined_layer_node.outputs[0], output_node.inputs[0])
joined_layer_node.inputs['Layer ID'].default_value = random.randint(-200000000,
200000000)
joined_layer_node.inputs['Bioxel Size'].default_value = bioxel_size
joined_layer_node.inputs['Shape'].default_value = layer_shape
joined_layer_node.inputs['Origin'].default_value = layer_origin
joined_layer_node.inputs['Rotation'].default_value = layer_rotation
joined_layer_node.inputs['Scalar Offset'].default_value = scalar_offset
joined_layer_node.inputs['Scalar Min'].default_value = scalar_min
joined_layer_node.inputs['Scalar Max'].default_value = scalar_max
return {'FINISHED'}
def invoke(self, context, event):
@@ -206,8 +214,8 @@ class ConvertToMesh(bpy.types.Operator):
output_node = get_node_by_type(nodes, 'NodeGroupOutput')[0]
object_node = nodes.new("GeometryNodeObjectInfo")
realize_nodes = nodes.new("GeometryNodeRealizeInstances")
separate_node = custom_nodes.add_node(
nodes, "BioxelNodes__SeparateComponent")
separate_node = custom_nodes.add_node(nodes,
"BioxelNodes__SeparateComponent")
object_node.inputs[0].default_value = container
separate_node.inputs[1].default_value = 1