Skip to content

Commit 7545afc

Browse files
committed
Updates, Added Daz3D
1 parent 34b2eab commit 7545afc

7 files changed

Lines changed: 165 additions & 77 deletions

File tree

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Blender Addon Pipeline
22

3-
Provides tools for a Blender + ZBrushCore + Substance Painter + iClone 3D pipeline.
3+
Pipeline import/export/open for ZBrushCore, Substance Painter, iClone, Daz3D.
44

55
# Features
66

@@ -20,15 +20,18 @@ Provides tools for a Blender + ZBrushCore + Substance Painter + iClone 3D pipeli
2020
- One click ZBrushCore OBJ Import (Imports exported obj and replaces vertices co-ordinates on selected object)
2121

2222
- Application Link to Open Substance Painter (Exports scene to export folder before opening Substance Painter)
23+
2324
- Application Link to Open iClone Character Creator (Exports scene to export folder before opening Character Creator for manual import)
2425
- One click iClone 3DXchange FBX Export (Exports scene to export folder and opens file in 3DXchange)
2526
- Application Link to Open iClone
2627

28+
- Application Link to Open Daz3D (Exports scene to export folder before opening Daz3D for manual import)
29+
2730
# Required Blender Version
2831

2932
2.79
3033

31-
\* May work in previous versions but untested, space_info.py and space_view3d.py will likely cause issues/unexpected behaviour.
34+
\* May work in previous versions but untested, space_info.py will likely cause issues/unexpected behaviour.
3235

3336
# IMPORTANT USAGE NOTES
3437

__init__.py

Lines changed: 62 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,22 @@ class ds_pipeline_addon_prefs(bpy.types.AddonPreferences):
7676

7777
bl_idname = __package__
7878

79-
option_iclone_exe = bpy.props.StringProperty(
79+
option_ic_exe = bpy.props.StringProperty(
8080
name="iClone Executable",
8181
subtype='FILE_PATH',
8282
default="C:\Program Files\Reallusion\iClone 7\Bin64\iClone.exe",
8383
)
84-
option_iclone_cc_exe = bpy.props.StringProperty(
84+
option_ic_cc_exe = bpy.props.StringProperty(
8585
name="iClone Character Creator Executable",
8686
subtype='FILE_PATH',
8787
default="C:\Program Files\Reallusion\Character Creator 2 for iClone\Bin64\CharacterCreator.exe",
8888
)
89-
option_iclone_3dx_exe = bpy.props.StringProperty(
89+
option_ic_3dx_exe = bpy.props.StringProperty(
9090
name="iClone 3DX Executable",
9191
subtype='FILE_PATH',
9292
default="C:\Program Files (x86)\Reallusion\iClone 3DXchange 7\Bin\iClone3DXchange.exe",
9393
)
94-
option_substance_exe = bpy.props.StringProperty(
94+
option_sp_exe = bpy.props.StringProperty(
9595
name="Substance Executable",
9696
subtype='FILE_PATH',
9797
default="C:\Program Files\Allegorithmic\Substance Painter\Substance Painter.exe",
@@ -101,38 +101,73 @@ class ds_pipeline_addon_prefs(bpy.types.AddonPreferences):
101101
subtype='FILE_PATH',
102102
default="C:\Program Files\Pixologic\ZBrushCore\ZBrushCore.exe",
103103
)
104+
option_daz3d_exe = bpy.props.StringProperty(
105+
name="Daz3D Executable",
106+
subtype='FILE_PATH',
107+
default="C:\Program Files\DAZ 3D\DAZStudio4\DAZStudio.exe",
108+
)
104109
option_export_folder = bpy.props.StringProperty(
105110
name="Export Folder Name",
106111
default="eXport",
107112
)
108-
option_iclone_templates_path = bpy.props.StringProperty(
113+
option_ic_templates_path = bpy.props.StringProperty(
109114
name="iClone Templates Path",
110115
subtype='DIR_PATH',
111116
default="",
112117
)
118+
option_hide_info_engines = bpy.props.BoolProperty(
119+
name="Hide Engines",
120+
default=True,
121+
)
122+
option_hide_info_scene = bpy.props.BoolProperty(
123+
name="Hide Scene",
124+
default=True,
125+
)
126+
option_show_zbc = bpy.props.BoolProperty(
127+
name="Show ZBrushCore Buttons",
128+
default=True,
129+
)
130+
option_show_ic = bpy.props.BoolProperty(
131+
name="Show iClone Buttons",
132+
default=True,
133+
)
134+
option_show_sp = bpy.props.BoolProperty(
135+
name="Show Substance Painter Button",
136+
default=True,
137+
)
138+
option_show_daz3d = bpy.props.BoolProperty(
139+
name="Show Daz3D Button",
140+
default=True,
141+
)
113142

114143
def draw(self, context):
115144

116145
layout = self.layout
117146

147+
layout.label('Info toolbar',icon='PREFERENCES')
148+
149+
layout.prop(self, 'option_hide_info_engines')
150+
layout.prop(self, 'option_hide_info_scene')
151+
118152
layout.label('Defaults',icon='PREFERENCES')
119-
153+
120154
layout.prop(self, 'option_export_folder')
121155
layout.label('Automatically created as a sub folder relative to the saved .blend file.',icon='INFO')
122156
layout.label('* Do NOT include any "\\".',icon='INFO')
123157

124158
layout.label('Applications',icon='PREFERENCES')
125159

160+
layout.prop(self, 'option_show_zbc')
126161
layout.prop(self, 'option_zbc_exe')
127-
layout.prop(self, 'option_substance_exe')
128-
129-
layout.prop(self, 'option_iclone_exe')
130-
layout.prop(self, 'option_iclone_3dx_exe')
131-
layout.prop(self, 'option_iclone_cc_exe')
132-
133-
layout.label('iClone',icon='PREFERENCES')
134-
135-
layout.prop(self, 'option_iclone_templates_path')
162+
layout.prop(self, 'option_show_sp')
163+
layout.prop(self, 'option_sp_exe')
164+
layout.prop(self, 'option_show_ic')
165+
layout.prop(self, 'option_ic_exe')
166+
layout.prop(self, 'option_ic_3dx_exe')
167+
layout.prop(self, 'option_ic_cc_exe')
168+
layout.prop(self, 'option_ic_templates_path')
169+
layout.prop(self, 'option_show_daz3d')
170+
layout.prop(self, 'option_daz3d_exe')
136171

137172
def register():
138173

@@ -153,13 +188,15 @@ def register():
153188
ds_obj.register()
154189
ds_fbx.register()
155190

156-
from . import ds_iclone
191+
from . import ds_ic
157192
from . import ds_zbc
158-
from . import ds_substance
193+
from . import ds_sp
194+
from . import ds_daz3d
159195

160-
ds_iclone.register()
196+
ds_ic.register()
161197
ds_zbc.register()
162-
ds_substance.register()
198+
ds_sp.register()
199+
ds_daz3d.register()
163200

164201
def unregister():
165202

@@ -176,13 +213,15 @@ def unregister():
176213
ds_obj.unregister()
177214
ds_fbx.unregister()
178215

179-
from . import ds_iclone
216+
from . import ds_ic
180217
from . import ds_zbc
181-
from . import ds_substance
218+
from . import ds_sp
219+
from . import ds_daz3d
182220

183-
ds_iclone.unregister()
221+
ds_ic.unregister()
184222
ds_zbc.unregister()
185-
ds_substance.unregister()
223+
ds_sp.unregister()
224+
ds_daz3d.unregister()
186225

187226
from . import space_info
188227

ds_daz3d.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import bpy
2+
from subprocess import Popen
3+
4+
from .ds_fbx import (ds_fbx_export,)
5+
6+
class ds_daz3d_export(bpy.types.Operator):
7+
8+
bl_idname = "ds_daz3d.export"
9+
bl_label = "Open Daz3D."
10+
11+
def execute(self, context):
12+
13+
export_file = ds_fbx_export(self, context)
14+
15+
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_daz3d_exe])
16+
17+
return {'FINISHED'}
18+
19+
def register():
20+
21+
from bpy.utils import register_class
22+
23+
register_class(ds_daz3d_export)
24+
25+
def unregister():
26+
27+
from bpy.utils import unregister_class
28+
29+
unregister_class(ds_daz3d_export)

ds_iclone.py renamed to ds_ic.py

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,106 +3,106 @@
33
from os import system
44
from .ds_fbx import (ds_fbx_export,)
55

6-
class ds_iclone_import_base(bpy.types.Operator):
6+
class ds_ic_import_base(bpy.types.Operator):
77

8-
bl_idname = "ds_iclone.import_base"
8+
bl_idname = "ds_ic.import_base"
99
bl_label = "Import Base FBX."
1010

1111
def execute(self, context):
1212

1313
_export_name = bpy.path.basename(bpy.context.blend_data.filepath).replace('.blend','')
1414
_export_path = bpy.path.abspath('//') + bpy.context.user_preferences.addons[__package__].preferences.option_export_folder + '\\'
15-
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
15+
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
1616

17-
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base.fbx", axis_forward='-Z', axis_up='Y')
17+
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base.fbx", axis_forward='-Z', axis_up='Y')
1818

1919
return {'FINISHED'}
2020

21-
class ds_iclone_import_female(bpy.types.Operator):
21+
class ds_ic_import_female(bpy.types.Operator):
2222

23-
bl_idname = "ds_iclone.import_female"
23+
bl_idname = "ds_ic.import_female"
2424
bl_label = "Import Base Female FBX."
2525

2626
def execute(self, context):
2727

2828
_export_name = bpy.path.basename(bpy.context.blend_data.filepath).replace('.blend','')
2929
_export_path = bpy.path.abspath('//') + bpy.context.user_preferences.addons[__package__].preferences.option_export_folder + '\\'
30-
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base Female.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
30+
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base Female.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
3131

32-
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base Female.fbx", axis_forward='-Z', axis_up='Y')
32+
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base Female.fbx", axis_forward='-Z', axis_up='Y')
3333

3434
return {'FINISHED'}
3535

36-
class ds_iclone_import_male(bpy.types.Operator):
36+
class ds_ic_import_male(bpy.types.Operator):
3737

38-
bl_idname = "ds_iclone.import_male"
38+
bl_idname = "ds_ic.import_male"
3939
bl_label = "Import Base Male FBX."
4040

4141
def execute(self, context):
4242

4343
_export_name = bpy.path.basename(bpy.context.blend_data.filepath).replace('.blend','')
4444
_export_path = bpy.path.abspath('//') + bpy.context.user_preferences.addons[__package__].preferences.option_export_folder + '\\'
45-
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base Male.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
45+
system('copy "' + bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base Male.fbxkey" + '" "' + _export_path + _export_name + '.fbxkey"')
4646

47-
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_iclone_templates_path + "Base Male.fbx", axis_forward='-Z', axis_up='Y')
47+
bpy.ops.import_scene.fbx(filepath = bpy.context.user_preferences.addons[__package__].preferences.option_ic_templates_path + "Base Male.fbx", axis_forward='-Z', axis_up='Y')
4848

4949
return {'FINISHED'}
5050

51-
class ds_iclone_export_3dx(bpy.types.Operator):
51+
class ds_ic_export_3dx(bpy.types.Operator):
5252

53-
bl_idname = "ds_iclone.export_3dx"
53+
bl_idname = "ds_ic.export_3dx"
5454
bl_label = "Export FBX and open in 3DXchange."
5555

5656
def execute(self, context):
5757

5858
export_file = ds_fbx_export(self, context)
5959

60-
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_iclone_3dx_exe, export_file])
60+
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_ic_3dx_exe, export_file])
6161

6262
return {'FINISHED'}
6363

64-
class ds_iclone_export_ic(bpy.types.Operator):
64+
class ds_ic_export_ic(bpy.types.Operator):
6565

66-
bl_idname = "ds_iclone.export_ic"
66+
bl_idname = "ds_ic.export_ic"
6767
bl_label = "Open iClone."
6868

6969
def execute(self, context):
7070

71-
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_iclone_exe])
71+
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_ic_exe])
7272

7373
return {'FINISHED'}
7474

75-
class ds_iclone_export_cc(bpy.types.Operator):
75+
class ds_ic_export_cc(bpy.types.Operator):
7676

77-
bl_idname = "ds_iclone.export_cc"
77+
bl_idname = "ds_ic.export_cc"
7878
bl_label = "Export FBX and Open Character Creator."
7979

8080
def execute(self, context):
8181

8282
export_file = ds_fbx_export(self, context)
8383

84-
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_iclone_cc_exe])
84+
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_ic_cc_exe])
8585

8686
return {'FINISHED'}
8787

8888
def register():
8989

9090
from bpy.utils import register_class
9191

92-
register_class(ds_iclone_import_base)
93-
register_class(ds_iclone_import_female)
94-
register_class(ds_iclone_import_male)
95-
register_class(ds_iclone_export_cc)
96-
register_class(ds_iclone_export_3dx)
97-
register_class(ds_iclone_export_ic)
92+
register_class(ds_ic_import_base)
93+
register_class(ds_ic_import_female)
94+
register_class(ds_ic_import_male)
95+
register_class(ds_ic_export_cc)
96+
register_class(ds_ic_export_3dx)
97+
register_class(ds_ic_export_ic)
9898

9999
def unregister():
100100

101101
from bpy.utils import unregister_class
102102

103-
unregister_class(ds_iclone_import_base)
104-
unregister_class(ds_iclone_import_female)
105-
unregister_class(ds_iclone_import_male)
106-
unregister_class(ds_iclone_export_cc)
107-
unregister_class(ds_iclone_export_3dx)
108-
unregister_class(ds_iclone_export_ic)
103+
unregister_class(ds_ic_import_base)
104+
unregister_class(ds_ic_import_female)
105+
unregister_class(ds_ic_import_male)
106+
unregister_class(ds_ic_export_cc)
107+
unregister_class(ds_ic_export_3dx)
108+
unregister_class(ds_ic_export_ic)

ds_substance.py renamed to ds_sp.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import bpy
22
from subprocess import Popen
33

4+
from .ds_fbx import (ds_fbx_export,)
5+
46
class ds_substance_open(bpy.types.Operator):
57

6-
bl_idname = "ds_substance.export"
8+
bl_idname = "ds_sp.export"
79
bl_label = "Open Substance Painter."
810

911
def execute(self, context):
1012

13+
export_file = ds_fbx_export(self, context)
14+
1115
Popen([bpy.context.user_preferences.addons[__package__].preferences.option_substance_exe])
1216

1317
return {'FINISHED'}

screenshots/pipeline_prefs.png

24.5 KB
Loading

0 commit comments

Comments
 (0)