Blender templates to convert OBJs exported from VAM into OBJs that use UDIM

Other Blender templates to convert OBJs exported from VAM into OBJs that use UDIM

zoidberg updated Blender templates to convert OBJs exported from VAM into OBJs that use UDIM with a new update entry:

small fix and order changed order of textures

Moved tongue vertices of female model into Innermouth group.
Changed the order of textures for all scripts, the more common targets for texturing (Torso, Limbs, Face, Genitals)
are now in UDIM tiles 1001 - 1004
(this also makes it easier to load the textures as a UDIM texture set in Blender (on the OBJ that was saved without
materials !) , just rename them to your_texturename.UDIM_tilenumber.fileformat (e.g. png), create a tiled texture in
the UV editor, and load the UDIM_tile textures onto...

Read the rest of this update entry...
 
Hi,

I know I'm late on this, but there's an error with Male skins.
Yes it works but the Ears are not in the right UV slot.

I tried your script a couple of time and I didn't realized that I was fixing issues with ears because of this error.

I'm not the best at python, I know maybe it's something with the material_index.

Thanks.


1670342532684.png
 
Hey, thanks for pointing it out, will post an update :)
And don't worry, I can't know Python (other than Monty Python), it's more like manualy recording a macro from the info-window , doing the steps (one by one) to select and move the UVs , then copy/pasting the output of the info-window into the text window.
 
Last edited:
When reloading G2F to Vam skin texture from SP does layer 1007 go in gens texture and does 1008 go in Gens decal?
 
1007 are the eyelashes, those go into the "F Eyelash Materials" tab, textures section.
 
The script not works, all objects goes into a single tile when I run it.
screen.png
 
No matter what I do it's putting some parts of the body in wrong slots:

udim_failure.jpg


I think it would be helpful to screenshot all required settings when exporting from daz, importing into blend file, and exporting from blend file. There's so many knobs in these steps, and if any is wrong stuff just breaks.
 
They are ment for usage on the OBJs exported from VAM (in the person Control & Physics 1 tab, "Export OBJ and...." button).
export OBJ.png
 
Ooh, since every vam editing tutorial starts with converting to g2 models I was just using those. Thx for clarification, seems to be working now.
 
Unfortunately this broke in the latest Blender, and is now throwing this error:
Code:
Python: Traceback (most recent call last):
  File "F:\Virtamate\Meshes\UDIM conversion\VAM_female_to_UDIM.blend\VAM_female", line 11, in <module>
  File "E:\apps\blender-3.6.0-windows-x64\3.6\scripts\modules\bpy\ops.py", line 113, in __call__
    ret = _op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "orient_axis_ortho" unrecognized

Solution is to download an older portable blender version and do it there. 100% works on 3.3. Might work on later ones too, but I didn't bother trying.
 
Unfortunately this broke in the latest Blender, and is now throwing this error:
Code:
Python: Traceback (most recent call last):
  File "F:\Virtamate\Meshes\UDIM conversion\VAM_female_to_UDIM.blend\VAM_female", line 11, in <module>
  File "E:\apps\blender-3.6.0-windows-x64\3.6\scripts\modules\bpy\ops.py", line 113, in __call__
    ret = _op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "orient_axis_ortho" unrecognized

Solution is to download an older portable blender version and do it there. 100% works on 3.3. Might work on later ones too, but I didn't bother trying.
THANK YOU! Was just having this error on 3.6. Will try 3.3.

Update: I had 3.4 already, and can confirm no errors thrown there.
 
I'm following the instructions but I get an error and it won't split and place the UDIM like shown in the images above.

On the 1-2-3 Instructions it doesn't say what Options to choose when import OBJ so I leave on default: "Split By Object" is the only one that checked.
I'm not sure if it's ok, but I also tried with NOTHING selected, and also with "Split By Group" selected, nothing works.

If this information helps:
I'm using the Female template: "VAM_female_to_UDIM.blend"
and Exported as OBJ from VAM via the 'Control & Physics 1' tab

Code:
Python: Traceback (most recent call last):
File "D:\VAM\Blender templates to UDIM\VAM_female", line 11, in <module>
File "D:\Blender\Blender 3.6\3.6\scripts\modules\bpy\ops.py", line 113, in__call__
ret =_op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "orient_axis_ortho" unrecognized
 
I'm following the instructions but I get an error and it won't split and place the UDIM like shown in the images above.

On the 1-2-3 Instructions it doesn't say what Options to choose when import OBJ so I leave on default: "Split By Object" is the only one that checked.
I'm not sure if it's ok, but I also tried with NOTHING selected, and also with "Split By Group" selected, nothing works.

If this information helps:
I'm using the Female template: "VAM_female_to_UDIM.blend"
and Exported as OBJ from VAM via the 'Control & Physics 1' tab

Code:
Python: Traceback (most recent call last):
File "D:\VAM\Blender templates to UDIM\VAM_female", line 11, in <module>
File "D:\Blender\Blender 3.6\3.6\scripts\modules\bpy\ops.py", line 113, in__call__
ret =_op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "orient_axis_ortho" unrecognized
Looks like you're using blender 3.6? Read above comments but it currently doesn't seem to function in newest builds. It worked great in 3.4 build for me.
 
If anyone is interested, I edited the script to order tiles in VaM's conventional way, that is: face->torso->limbs->etc (by default it orders torso->limbs->face).

Rename var to zip to open it. For some reason this forum is configured to not allow uploads of zip files, but vars are allowed :confused:.

It still requires blender 3.3 though. I guess there was some API change or something that broke it. And the way the script works (emulates UI actions instead of actually editing stuff under the hood) I suspect it'd be annoying to bring to newer blender version, and I don't want to spend hours or days learning this environment to get me where I'm already at right now with a separate portable blender 3.3 version.
 

Attachments

  • VAM_female_to_UDIM_reordered.var
    883.8 KB · Views: 0
zoidberg updated Blender templates to convert OBJs exported from VAM into OBJs that use UDIM with a new update entry:

Updated version for Blender 3.6 (tested with v3.6.2 LTS)

They changed something, but replacing

bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

with

bpy.ops.transform.translate(value=(1, 0, 0), orient_type='GLOBAL'...

Read the rest of this update entry...
 
@zoidberg
This is working great for VAM exported OBJs.
I need it for a DAZ exported OBJ with the original mesh to be able to create morphs with it in DAZ too.
So I tried to the best of my abilities to modify it.
Added comments with the material index for VAM and DAZ variants and removed the genital part because it does not exist for the original base mesh.
It's almost working - but some are faces being stretched over multiple UVs:
fail.jpg

I'm not sure what the first material index does. Technically that index does not exist in the material list (is +1 higher to the last material).
Any hint on how to fix it?
Code:
# Original Blender Script by Zoidberg
# https://hub.virtamate.com/resources/blender-templates-to-convert-objs-exported-from-vam-into-objs-that-use-udim.24032/
# Reordered by qdaro for VAMs typical texture order
# Commented and switch to DAZ material index by Sally Whitemane

import bpy

bpy.ops.object.editmode_toggle()
bpy.context.scene.tool_settings.use_uv_select_sync = True


bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 28 # UNKNOWN / SELECT ALL?
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 25 # EYELASHES VAM 24 - DAZ 25
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 7 # GUMS VAM 7 - DAZ 7
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 9 # TEETH VAM 9 - DAZ 9
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 27 # INNERMOUTH VAM 26 - DAZ 27
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 26 # TONGUE VAM 25 - DAZ 26
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 1 # EYEREFLECTION VAM 1 - DAZ 1
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 3 # LACRIMALS VAM 3 - DAZ 3
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 4 # PUPILS VAM 4 - DAZ 4
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 6 # TEARS VAM 6 - DAZ 6
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 8 # IRISES VAM 8 - DAZ 8
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 10 # CORNEA VAM 10 - DAZ 10
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 13 # SCLERA VAM 14 - DAZ 13
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

#bpy.context.area.ui_type = 'PROPERTIES'
#bpy.context.object.active_material_index = 28 # GENITAL VAM 28 - DOES NOT EXIST FOR DAZ
#bpy.ops.object.material_slot_select()
#bpy.context.area.ui_type = 'UV'
#bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 0 # LEGS VAM 0 - DAZ 0
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 12 # TOENAILS VAM 12 - DAZ 12
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 14 # FINGERNAILS VAM 14 - DAZ 14
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 17 # HANDS VAM 16 - DAZ 17
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 18 # SHOULDERS VAM 17 - DAZ 18
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 23 # FOREARMS VAM 22 - DAZ 23
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 24 # FEET VAM 23 - DAZ 24
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 15 # HEAD VAM 15 - DAZ 15
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 19 # NECK VAM 18 - DAZ 19
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 20 # HIPS VAM 19 - DAZ 20
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 21 # TORSO VAM 20 - DAZ 21
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 22 # NIPPLES VAM 21 - DAZ 22
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 16 # EARS VAM 27 - DAZ 16
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.ops.mesh.select_all(action='DESELECT')
bpy.context.area.ui_type = 'TEXT_EDITOR'
 
@zoidberg
This is working great for VAM exported OBJs.
I need it for a DAZ exported OBJ with the original mesh to be able to create morphs with it in DAZ too.
So I tried to the best of my abilities to modify it.
Added comments with the material index for VAM and DAZ variants and removed the genital part because it does not exist for the original base mesh.
It's almost working - but some are faces being stretched over multiple UVs:
View attachment 302606
I'm not sure what the first material index does. Technically that index does not exist in the material list (is +1 higher to the last material).
Any hint on how to fix it?
Code:
# Original Blender Script by Zoidberg
# https://hub.virtamate.com/resources/blender-templates-to-convert-objs-exported-from-vam-into-objs-that-use-udim.24032/
# Reordered by qdaro for VAMs typical texture order
# Commented and switch to DAZ material index by Sally Whitemane

import bpy

bpy.ops.object.editmode_toggle()
bpy.context.scene.tool_settings.use_uv_select_sync = True


bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 28 # UNKNOWN / SELECT ALL?
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 25 # EYELASHES VAM 24 - DAZ 25
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 7 # GUMS VAM 7 - DAZ 7
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 9 # TEETH VAM 9 - DAZ 9
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 27 # INNERMOUTH VAM 26 - DAZ 27
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 26 # TONGUE VAM 25 - DAZ 26
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 1 # EYEREFLECTION VAM 1 - DAZ 1
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 3 # LACRIMALS VAM 3 - DAZ 3
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 4 # PUPILS VAM 4 - DAZ 4
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 6 # TEARS VAM 6 - DAZ 6
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 8 # IRISES VAM 8 - DAZ 8
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 10 # CORNEA VAM 10 - DAZ 10
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 13 # SCLERA VAM 14 - DAZ 13
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

#bpy.context.area.ui_type = 'PROPERTIES'
#bpy.context.object.active_material_index = 28 # GENITAL VAM 28 - DOES NOT EXIST FOR DAZ
#bpy.ops.object.material_slot_select()
#bpy.context.area.ui_type = 'UV'
#bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 0 # LEGS VAM 0 - DAZ 0
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 12 # TOENAILS VAM 12 - DAZ 12
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 14 # FINGERNAILS VAM 14 - DAZ 14
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 17 # HANDS VAM 16 - DAZ 17
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 18 # SHOULDERS VAM 17 - DAZ 18
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 23 # FOREARMS VAM 22 - DAZ 23
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 24 # FEET VAM 23 - DAZ 24
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.context.area.ui_type = 'PROPERTIES'
bpy.context.object.active_material_index = 15 # HEAD VAM 15 - DAZ 15
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 19 # NECK VAM 18 - DAZ 19
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 20 # HIPS VAM 19 - DAZ 20
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 21 # TORSO VAM 20 - DAZ 21
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 22 # NIPPLES VAM 21 - DAZ 22
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 16 # EARS VAM 27 - DAZ 16
bpy.ops.object.material_slot_select()
bpy.context.area.ui_type = 'UV'
bpy.ops.transform.translate(value=(1, 0, 0), orient_axis_ortho='X', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(True, False, False), mirror=False, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

bpy.ops.mesh.select_all(action='DESELECT')
bpy.context.area.ui_type = 'TEXT_EDITOR'

Very strange, it looks like some vertices are shared between materials, e.g. when I just select the head-001 material group, I get this :
1698904982319.png

vs. the head group of the VAM exported OBJ:
1698905142079.png

Come to think of it, technically there must be shared vertices and edges, since materials are used on polygons/tiangle faces during render.
Still, strange how much these 2 exports differ. Will try to find out if it's a Blender messup on import, but can't promisse anything. :unsure:

Maybe selecting the material that one wants to move, but then also deselecting the bording materials before the transform will work (in this case, for the head, I selected "head", and then deselected "Face", "Ears" and "Neck"):

bpy.context.space_data.context = 'MATERIAL'
bpy.context.object.active_material_index = 15
bpy.ops.object.material_slot_select()
bpy.context.object.active_material_index = 11
bpy.ops.object.material_slot_deselect()
bpy.context.object.active_material_index = 16
bpy.ops.object.material_slot_deselect()
bpy.context.object.active_material_index = 19
bpy.ops.object.material_slot_deselect()
 
Last edited:
I tried some more with the deselect idea and then I tried to untangle it manually move moving vertices to another 'UDIM slot'.
Hope by pressing for example G + X + 1 + return with vertices selected it's precise enough.
It really seems impossible to solve for a DAZ exported OBJ the way it's sharing some vertices.
 
Last edited:
I tried some more with the deselect idea and then I tried to untangle it manually move moving vertices to another 'UDIM slot'.
Hope by pressing for example G + X + 1 + return with vertices selected it's precise enough.
It really seems impossible to solve for a DAZ exported OBJ the way it's sharing some vertices.
Yeah, while the method of selecting the head, and then selecting the bordering materials and deslect them looks good on the UV-pile at first, when one tries to move the selected UVs it still has connections one would not want. Trying to find out what's happening there, using the vertex index display in Blender (enabled by enabling "Developer Extras" in Blender-preferences/Interface, and then enabling Indices (guess those are vertex IDs ?) in the "Viewport Overlays"
1698931568583.png


... and my attemps at raw OBJ reading/interpretation , using it's wikipedia descrition ..... :geek:
 
I tried some more with the deselect idea and then I tried to untangle it manually move moving vertices to another 'UDIM slot'.
Hope by pressing for example G + X + 1 + return with vertices selected it's precise enough.
It really seems impossible to solve for a DAZ exported OBJ the way it's sharing some vertices.
There is a Genesis 1 + 2 to UDIM conversion UV set on shareCG:
Did not try it out, so I can't say if it realy works (or if the resulting altered OBJ still works as a source for morphs).
 
I tried some more with the deselect idea and then I tried to untangle it manually move moving vertices to another 'UDIM slot'.
Hope by pressing for example G + X + 1 + return with vertices selected it's precise enough.
It really seems impossible to solve for a DAZ exported OBJ the way it's sharing some vertices.
Just tried the UDIM conversion UVs, and they look fine:
1698934791922.png

BUT, when loading the exported OBJ back into DAZ in morphloader pro ....
1698934878970.png

So, it looks like you can't have both, UDIMs and compatibility with DAZ morphs ... :(
 
Don't ask me why - but I got it working here now with the help of that 'Genesis 2 UDIM conversion'.
I installed it for DAZ, set mesh to base resolution, set the UV to the UDIM variant and exported with DAZ present and 3 different scales: 100%, 10% and 1%.
  • 1% is for Blender so it's should be similar in size to the 2 meter default cube.
  • 10% seems a good scale for 'Faceform WRAP'.
  • 100% is just for reference or to re-import direct back into DAZ.
The OBJs do re-import with Morph Loader Pro - even after running them through wrapping in 'Faceform WRAP'.
Attached zipped OBJ-files. Had to change extension from .ZIP to .VAR because upload restrictions.

Could do a successful face texture transfer in 'WRAP' now. Ignore the missing scalp, it's missing in the original.
Previously with stacked UVs it looked like here. There are a few remaining problems to to solve with transferring all textures, but that's off topic.
Clipboard01.jpg
 

Attachments

  • Sally.DAZ_G2F_default_t-pose_base_resolution_UDIM.1.var
    2.7 MB · Views: 0
Back
Top Bottom