 |
headus 3D tools / 3D scans Support Forums
|
 |
View previous topic :: View next topic |
Author |
Message |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Fri Oct 08, 2010 2:24 pm Post subject: Could I get automation with uvlayout |
|
|
we are using uvlayout in house right now, and artists are asking for a crazy feature with the following steps,
1. send a group of geometries to headus from Maya.[ of course, yes]
2. UVLayout will do pack all automatically without user intervention in UVLayout.
3. UVLayout will send these geometries back to maya automatically without user intervention in UVlayout.
That means artists have no any operation in UVLayout, and UVlayout works as a engine in backend. |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Fri Oct 08, 2010 7:35 pm Post subject: |
|
|
Yes, completely crazy, but you should be able to do that via the plugin interface, which is described here ...
http://www.headus.com/phpbb/viewtopic.php?t=159
If you scroll down to the "Other commands" section you'll see that you can get UVLayout to cut edges, detach and drop shells, then flatten, optimize and save out, all with no user interaction.
Its been a while since I've tested some of those other commands, so if you have any problems getting it to work, don't give up ... just let me know and I'll fix anything that's broken.
Phil |
|
Back to top |
|
 |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Tue Oct 12, 2010 1:01 pm Post subject: About automatically "Pack All" |
|
|
Hi Phil,
It is exciting to get positive reply saying it is doable.
By giving more details, I believe you can help me better.
1.This is for lightmapping workflow.
2. we have legacy assets created before. Lightmap uvs were created and packed for grouped geometries sharing with the same lightmap file
3. what we want from Headus is to utilize super smart pack all function to repack all grouped geometries based on existing UV. When grouped geometries are loaded into headus, most of time, simply clicking on "pack all" button will result a satisfactory result.
That is why we would like to automate the whole process.
I followed the instruction in this page(http://www.headus.com/phpbb/viewtopic.php?t=159), and did not find exact cmd for "pack all". is it not mentioned there, or I have to restudy the page.?
Many thanks. |
|
Back to top |
|
 |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Tue Oct 12, 2010 2:58 pm Post subject: |
|
|
the cmd file,
Suppose "Pack All" can be sent to uvlayout from Maya successfully, and I have to ask uvlayout to save file so that Maya can load it back. roughly the cmd file will look like(with psudeo uvlayout cmds),
packall
sendback
but I really don't know what is the exact cmds from uvlayout.
I tried drop, and it is not what I want. |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Tue Oct 12, 2010 7:37 pm Post subject: |
|
|
OK, to just do the pack and nothing else, we need to go into undocumented territory. We're going to use low level GUI commands; there's too many of them to document, and they can change, but this will most likely work for a long while yet.
1] So first up, create a text file with these two lines in it ...
run UVLayout|Pack|Pack All
run UVLayout|Plugin|Save
2] Next, start UVLayout in plugin mode in the usual way ...
uvlayout -plugin,Poly,Edit plugin.obj
... and its at this point that you need to manually set the pack parameters in the GUI (e.g. if you want to try rotating shells for better packing, the pack quality, if you want to align shells to the axes etc). Sorry, there's no way currently to set these through the command file, but you only have to do it once for each batch of files that you want to process.
3] So once you've decided on the pack settings, load in the first mesh by copying it to "plugin.obj". UVLayout should automatically load the file in Edit mode, so all existing UVs are preserved.
4] Next, copy the text file from step 1] into "plugin.cmd". UVLayout should automatically pack all shells according to the parameters you set in the GUI, and when its done, the result is written to "plugin.out". Your controlling application needs to watch for this file to know when UVLayout has finished.
To repeat on other meshes, just keep cycling through steps 3] and 4].
Phil |
|
Back to top |
|
 |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Wed Oct 13, 2010 7:48 am Post subject: |
|
|
that works. really cool.
Great job, Phil |
|
Back to top |
|
 |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Mon Oct 18, 2010 2:28 pm Post subject: |
|
|
I got a disturbing issue with this right now.
For example, give 5 lightmap groups(grp1, grp2, ...grp5). it works perfect on the 1st lightmap grp1. however, for grp2, maya gets wrong geometries back from uvlyaout, which actually are the ones sent to uvlayout in grp1.
However, with the same code, if I $SelectedGroups as only one lightmap group, the code works perfectly.
any idea? it seems uvlayout needs a break btw lightmap group to change its breath
my code looks like the following roughly,
proc automation()
{
for($lmGrp in $SelectedGroups){
string $geos[] = getGeosinLMGrp($lmGrp);
select -r $geos;
uvlayout_send();//this is changed
}
}
//changed uvlayout_send()
{
....
uvlayout_set( $uvlayout_subdiv ? "SUBD" : "Poly");
uvlayout_cmd( "run UVLayout|Pack|Pack All\nrun UVLayout|Plugin|Save");
//delete
sysFile -delete $uvlayout_loadname;
uvlayout_mv( $uvlayout_tempname, $uvlayout_savename);
delete $uvlayout_exported;
if( $HeadusAutomation ){//if automation is required, wait until headus finishes it work.
progressWindow - title "Auto Packing Lightmap UV"
-progress 0
-status "Waiting result from Headus... Please ESC to cancel"
-isInterruptable true;
int $cancelled = 0;
pause -seconds 5;
while(!`filetest -w $uvlayout_loadname`){//wait until uvlayout finishes it job
if ( `progressWindow -query -isCancelled` ){
$cancelled = 1;
break;
}
pause -seconds 1;
}
progressWindow -endProgress;
if($cancelled ==0){
print("\n uvlayout_send: To load result back...\n");
uvlayout_loadfile($uvlayout_loadname,$uvlayout_exported, $uvlayout_selected );// which is very similar to uvlayout_load
}
}
}
....
} |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Mon Oct 18, 2010 6:06 pm Post subject: |
|
|
The only obvious thing I can spot there is that you're creating the command file before the geometry file, but it should be the other way around. Create or copy the command file after you've done that uvlayout_mv() call, with maybe a 1 second pause in between.
By the way, if you add "-debug" to the uvlayout command line (before the "-plugin" arg) then it'll write out some trace calls, showing you whats its thinking when running in plugin mode.
Phil |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Tue Oct 19, 2010 1:32 am Post subject: |
|
|
I thought I should actually test this myself and came across the same problem!
Whats going on is that UVLayout is over-paranoid about infinite load loops when in plugin mode (it sometimes happened in the early days) so its detected this auto processing as a loop and doesn't load in the second file. The first file just gets repacked and saved out again.
What you need to do is wait 6 seconds after you detect the result back from UVLayout before sending a new file. That gives UVLayout enough time to calm down and be ready to work again.
FYI, here's a shell script that packs all OBJ files listed on the command line, and it really works! You can study it to work out the same sequences and timings for your mel code.
Code: |
#!/bin/csh -f
# start UVLayout
uvlayout -debug -plugin,Edit pack.obj &
# create command file
cat > pack-cmd << EOF
run UVLayout|Pack|Pack All
run UVLayout|Plugin|Save
EOF
# process files
foreach mesh ( $* )
echo "Sending $mesh ..."
cp $mesh pack.obj
cp pack-cmd pack.cmd
while ( ! -e pack.out )
echo "Waiting for result ..."
sleep 1
end
echo "Saving result ..."
mv pack.out done-$mesh
echo "Waiting for UVLayout ..."
sleep 6
end
# kill UVLayout
rm pack-cmd
echo exit > pack.cmd
|
Phil |
|
Back to top |
|
 |
hnzhang
Posts: 7
Joined: 08 Oct 2010
|
Posted: Tue Oct 19, 2010 1:23 pm Post subject: |
|
|
Thanks for your test, Phil
Coincidently, I did the same, per lightmap group,
--uvlayout is launched as plugin
--geometries are save to obj file
--commands are saved to cmd file
--wait until output file is writable(means uvlayout finishes its job)
--send exit command
--wait for 8 seconds
This works perfectly.
Thanks again. |
|
Back to top |
|
 |
dela
Posts: 20
Joined: 06 Dec 2017
|
Posted: Tue Dec 12, 2017 7:46 am Post subject: |
|
|
What is actually the use for setting SUBD or Poly after the file is loaded. These settings dont seem to be used on the next load. Why you want to set them after file is loaded i dont get.
The command drop does work directly.
Still figuring out OSX how the get '-plugin, SUBD, edit' to work. I think this just wont work on OSX.
this is part if loadind code, when i add the Code: | '-plugin, SUBD, edit' | part before the file. I do get a load panel but nothing is set. When i add the code after the file. i See error in console, im using blender on OSX for this.
This works but no commands are send
Code: | ''/Applications/headus-UVLayout-'+versiononUVL+'.app -uvlayout-plugin', path+file_Name' |
If i leave spaces out i get this error;
Code: | uvlayoutP: Need to define plugin transfer file in args. |
Using this results opening app in regular mode.
Code: | ''/Applications/headus-UVLayout-'+versiononUVL+'.app' |
Sending the command to *cmd file after OBJ is created also work, though i dont see the point of setting the Type after file is loaded. Setting it doesnt change anything, the drop command does work as do the others. Sometimes however the window closes and only main panel is visible. I need to redo the export then??? |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Thu Dec 14, 2017 4:24 pm Post subject: |
|
|
"Sending the command to *cmd file after OBJ is created also work, though i dont see the point of setting the Type after file is loaded"
You are correct, so you need to create the CMD file *before* writing out the OBJ file. UVLayout is looking for the OBJ, so when it sees that, it looks for the CMD to apply the settings when the OBJ is loaded.
And generally speaking, working with the CMD file is easier than adding the options to the command line. As you've discovered, knowing where and when to put spaces and quotes etc is complicated because of the multiple levels of execution (i.e. plug runs script which runs application).
Phil |
|
Back to top |
|
 |
dela
Posts: 20
Joined: 06 Dec 2017
|
Posted: Thu Dec 14, 2017 5:01 pm Post subject: |
|
|
BUt i tried adding the .cmd file and it does set it to say SUBD but it doesnt apply it to that model when it loads it during plugin send.
Why dont the arguments work on OSX or how do they need to be implemented? |
|
Back to top |
|
 |
headus Site Admin

Posts: 2902
Joined: 24 Mar 2005
Location: Perth, Australia
|
Posted: Thu Dec 14, 2017 5:21 pm Post subject: |
|
|
Are you using you own plugin? if you're using someone else's, could it be writing its own CMD file, overriding whatever you put in your own?
Anyway, I just checked the code, and it looks like a SET file will do the same job, and maybe will work better in this case. So as with the CMD file, just write "poly" or "subd" to the plugin file with a ".set" extension.
Phil |
|
Back to top |
|
 |
dela
Posts: 20
Joined: 06 Dec 2017
|
Posted: Thu Dec 14, 2017 5:25 pm Post subject: |
|
|
Can this *.set file have multiple commands?
what i like about the arguments is that you can pass all along. With the *.cmd file you can set UV to edit or new.
The way the code is setup is by writing a obj file, this then get read by uvlayout. That change the file to *.keep and at the moment it sends it. The plugin writes a exit in a *.cmd file
I tried the other commands like pack etc and they work as well before or after the command. But uv edit and new doesnt work then. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|