8 Commits

Author SHA1 Message Date
Ma Nan
d4bc355d94 Merge pull request #51 from OmooLab/feature/dev
Feature/dev
2024-11-01 11:58:31 +08:00
4e9dc1ce67 Merge branch 'main' of https://github.com/OmooLab/BioxelNodes into feature/dev 2024-11-01 11:57:41 +08:00
dc7d9382d6 fix: slice viewer change all 3d viewports
fix: eevee env light effect cycles render
feat: add gamma prop to correct color from non-linear image
feat: add "copy transform" node
2024-11-01 11:57:29 +08:00
Ma Nan
66aafb41bd Merge pull request #50 from OmooLab/feature/dev
Feature/dev
2024-10-30 13:32:19 +08:00
2c844c01ec Merge branch 'main' of https://github.com/OmooLab/BioxelNodes into feature/dev 2024-10-30 13:30:50 +08:00
e5be3ad5db feat: better shader in eevee
feat: add more control to transform node
feat: add env light to reduse volume shadow in eevee
2024-10-30 13:29:53 +08:00
Ma Nan
29b302531b Merge pull request #49 from OmooLab/feature/dev
feat: improve eevee render
2024-10-29 15:15:14 +08:00
3ca7c2ac5a feat: improve eevee render 2024-10-29 15:14:31 +08:00
8 changed files with 79 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
schema_version = "1.0.0" schema_version = "1.0.0"
id = "bioxelnodes" id = "bioxelnodes"
version = "1.0.4" version = "1.0.7"
name = "Bioxel Nodes" name = "Bioxel Nodes"
tagline = "For scientific volumetric data visualization in Blender" tagline = "For scientific volumetric data visualization in Blender"
maintainer = "Ma Nan <icrdr2010@outlook.com>" maintainer = "Ma Nan <icrdr2010@outlook.com>"

View File

@@ -1,6 +1,6 @@
from pathlib import Path from pathlib import Path
VERSIONS = [{"label": "Latest", "node_version": (1, 0, 4)}, VERSIONS = [{"label": "Latest", "node_version": (1, 0, 7)},
{"label": "v0.3.x", "node_version": (0, 3, 3)}, {"label": "v0.3.x", "node_version": (0, 3, 3)},
{"label": "v0.2.x", "node_version": (0, 2, 9)}] {"label": "v0.2.x", "node_version": (0, 2, 9)}]
@@ -166,6 +166,12 @@ MENU_ITEMS = [
'name': 'ReCenter', 'name': 'ReCenter',
'description': '' 'description': ''
}, },
{
'label': 'Copy Transform',
'icon': 'EMPTY_AXIS',
'name': 'CopyTransform',
'description': ''
},
{ {
'label': 'Extract Transform', 'label': 'Extract Transform',
'icon': 'EMPTY_AXIS', 'icon': 'EMPTY_AXIS',

View File

@@ -19,7 +19,7 @@ from .operators.container import (AddLocator, AddSlicer, ContainerProps,
ExtractNodeMesh, ExtractNodeBboxWire, ExtractNodeShapeWire) ExtractNodeMesh, ExtractNodeBboxWire, ExtractNodeShapeWire)
from .operators.io import (ImportAsLabel, ImportAsScalar, ImportAsColor) from .operators.io import (ImportAsLabel, ImportAsScalar, ImportAsColor)
from .operators.misc import (CleanTemp, Help, from .operators.misc import (AddEeveeEnv, CleanTemp, Help,
ReLinkNodeLib, RemoveAllMissingLayers, ReLinkNodeLib, RemoveAllMissingLayers,
RenderSettingPreset, SaveAllLayersCache, RenderSettingPreset, SaveAllLayersCache,
SaveNodeLib, SliceViewer) SaveNodeLib, SliceViewer)
@@ -212,6 +212,7 @@ class BioxelNodesTopbarMenu(bpy.types.Menu):
layout.menu(DangerZoneMenu.bl_idname) layout.menu(DangerZoneMenu.bl_idname)
layout.separator() layout.separator()
layout.operator(AddEeveeEnv.bl_idname)
layout.menu(RenderSettingMenu.bl_idname) layout.menu(RenderSettingMenu.bl_idname)
layout.separator() layout.separator()

View File

@@ -541,6 +541,7 @@ class ContainerProps(bpy.types.Operator):
bl_label = "Change Container Properties" bl_label = "Change Container Properties"
bl_description = "Change current ontainer properties" bl_description = "Change current ontainer properties"
bl_icon = "FILE_TICK" bl_icon = "FILE_TICK"
bl_options = {'UNDO'}
scene_scale: bpy.props.FloatProperty(name="Scene Scale", scene_scale: bpy.props.FloatProperty(name="Scene Scale",
soft_min=0.0001, soft_max=10.0, soft_min=0.0001, soft_max=10.0,

View File

@@ -664,6 +664,9 @@ class ImportVolumetricDataDialog(bpy.types.Operator):
else: else:
data = data.astype(np.float32) data = data.astype(np.float32)
# Gamma Correct
# data = data ** 2.2
name = self.layer_name or "Color" name = self.layer_name or "Color"
if data.shape[4] == 1: if data.shape[4] == 1:
data = np.repeat(data, repeats=3, axis=4) data = np.repeat(data, repeats=3, axis=4)
@@ -854,6 +857,7 @@ class ImportVolumetricDataDialog(bpy.types.Operator):
bpy.ops.bioxelnodes.render_setting_preset('EXEC_DEFAULT', bpy.ops.bioxelnodes.render_setting_preset('EXEC_DEFAULT',
preset="balance") preset="balance")
bpy.context.scene.render.engine = 'CYCLES' bpy.context.scene.render.engine = 'CYCLES'
bpy.ops.bioxelnodes.slice_viewer('EXEC_DEFAULT')
self.report({"INFO"}, "Successfully Imported") self.report({"INFO"}, "Successfully Imported")
return {'FINISHED'} return {'FINISHED'}

View File

@@ -146,7 +146,7 @@ class RenderSettingPreset(bpy.types.Operator):
def execute(self, context): def execute(self, context):
if self.preset == "performance": if self.preset == "performance":
# EEVEE # EEVEE
bpy.context.scene.eevee.use_taa_reprojection = False # bpy.context.scene.eevee.use_taa_reprojection = False
bpy.context.scene.eevee.volumetric_tile_size = '2' bpy.context.scene.eevee.volumetric_tile_size = '2'
bpy.context.scene.eevee.volumetric_shadow_samples = 32 bpy.context.scene.eevee.volumetric_shadow_samples = 32
bpy.context.scene.eevee.volumetric_samples = 64 bpy.context.scene.eevee.volumetric_samples = 64
@@ -162,7 +162,7 @@ class RenderSettingPreset(bpy.types.Operator):
elif self.preset == "balance": elif self.preset == "balance":
# EEVEE # EEVEE
bpy.context.scene.eevee.use_taa_reprojection = False # bpy.context.scene.eevee.use_taa_reprojection = False
bpy.context.scene.eevee.volumetric_tile_size = '2' bpy.context.scene.eevee.volumetric_tile_size = '2'
bpy.context.scene.eevee.volumetric_shadow_samples = 64 bpy.context.scene.eevee.volumetric_shadow_samples = 64
bpy.context.scene.eevee.volumetric_samples = 128 bpy.context.scene.eevee.volumetric_samples = 128
@@ -178,7 +178,7 @@ class RenderSettingPreset(bpy.types.Operator):
elif self.preset == "quality": elif self.preset == "quality":
# EEVEE # EEVEE
bpy.context.scene.eevee.use_taa_reprojection = False # bpy.context.scene.eevee.use_taa_reprojection = False
bpy.context.scene.eevee.volumetric_tile_size = '2' bpy.context.scene.eevee.volumetric_tile_size = '2'
bpy.context.scene.eevee.volumetric_shadow_samples = 128 bpy.context.scene.eevee.volumetric_shadow_samples = 128
bpy.context.scene.eevee.volumetric_samples = 256 bpy.context.scene.eevee.volumetric_samples = 256
@@ -202,20 +202,29 @@ class SliceViewer(bpy.types.Operator):
bl_icon = "FILE_VOLUME" bl_icon = "FILE_VOLUME"
def execute(self, context): def execute(self, context):
bpy.context.scene.eevee.use_taa_reprojection = False # bpy.context.scene.eevee.use_taa_reprojection = False
bpy.context.scene.eevee.volumetric_tile_size = '2' bpy.context.scene.eevee.volumetric_tile_size = '2'
bpy.context.scene.eevee.volumetric_shadow_samples = 128 bpy.context.scene.eevee.volumetric_shadow_samples = 128
bpy.context.scene.eevee.volumetric_samples = 128 bpy.context.scene.eevee.volumetric_samples = 128
bpy.context.scene.eevee.volumetric_ray_depth = 1 bpy.context.scene.eevee.volumetric_ray_depth = 1
bpy.context.scene.eevee.use_shadows = False
bpy.context.scene.eevee.use_volumetric_shadows = False bpy.context.scene.eevee.use_volumetric_shadows = False
for area in bpy.context.screen.areas: view_3d = None
if context.area.type == 'VIEW_3D':
view_3d = context.area
else:
for area in context.screen.areas:
if area.type == 'VIEW_3D': if area.type == 'VIEW_3D':
area.spaces[0].shading.type = 'MATERIAL' view_3d = area
area.spaces[0].shading.studio_light = 'studio.exr' break
area.spaces[0].shading.studiolight_intensity = 2.5 if view_3d:
area.spaces[0].shading.use_scene_lights = False view_3d.spaces[0].shading.type = 'MATERIAL'
area.spaces[0].shading.use_scene_world = False view_3d.spaces[0].shading.studio_light = 'studio.exr'
view_3d.spaces[0].shading.studiolight_intensity = 1.5
view_3d.spaces[0].shading.use_scene_lights = False
view_3d.spaces[0].shading.use_scene_world = False
return {'FINISHED'} return {'FINISHED'}
@@ -274,3 +283,43 @@ class Help(bpy.types.Operator):
'https://omoolab.github.io/BioxelNodes/latest/', new=2) 'https://omoolab.github.io/BioxelNodes/latest/', new=2)
return {'FINISHED'} return {'FINISHED'}
class AddEeveeEnv(bpy.types.Operator):
bl_idname = "bioxelnodes.add_eevee_env"
bl_label = "Add EEVEE Env Light"
bl_description = "To make volume shadow less dark"
def execute(self, context):
bpy.ops.wm.append(
directory=f"{str(LATEST_NODE_LIB_PATH)}/Object",
filename="EeveeEnv"
)
# bpy.ops.object.light_add(
# type='POINT', align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))
# light_obj = bpy.context.active_object
# light_obj.name = "EeveeEnv"
# light_obj.data.shadow_soft_size = 100
# light_obj.data.energy = 1e+06
# light_obj.data.color = (0.1, 0.1, 0.1)
# light_obj.data.use_shadow = False
# light_obj.data.diffuse_factor = 0
# light_obj.data.specular_factor = 0
# light_obj.data.transmission_factor = 0
# light_obj.hide_select = True
# light_obj.lock_location[0] = True
# light_obj.lock_location[1] = True
# light_obj.lock_location[2] = True
# light_obj.lock_rotation[0] = True
# light_obj.lock_rotation[1] = True
# light_obj.lock_rotation[2] = True
# light_obj.lock_scale[0] = True
# light_obj.lock_scale[1] = True
# light_obj.lock_scale[2] = True
bpy.context.scene.eevee.use_shadows = True
bpy.context.scene.eevee.use_volumetric_shadows = True
return {'FINISHED'}

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "bioxelnodes" name = "bioxelnodes"
version = "1.0.4" version = "1.0.7"
description = "" description = ""
authors = ["Ma Nan <icrdr2010@outlook.com>"] authors = ["Ma Nan <icrdr2010@outlook.com>"]
license = "MIT" license = "MIT"