[Utility] SB3Utility (GUI + Script) Releases and Support Discussion

@enimaroah Let see here now, the version that I previous used was 1.5.14, or 1.5.16 and jumped to 1.5.21.
I didn't give the version at top of the window much attention, but I've been behind on keeping SB3UG up to date.

I don't think that I did spot anything unusually in the script log window when I checked it as I kept trying to copy sheet 1 and 2 and/or paste back into them.
Let see... I believe this should be the extract of the SB3UtilityGUI.autosavescript.txt that you'd want, it's reduced to the point where I opened the studio list file the first time.

Code:
opensUNITY3D1 = FormUnity3d("E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d", "opensUNITY3D1")
unityParser1 = OpenUnity3d(path="E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d")
unityEditor1 = Unity3dEditor(parser=unityParser1)
unityEditor1.GetAssetNames(filter=True)
unityEditor1.CopyToClipboardMonoBehaviour(asset=unityParser1.Cabinet.Components[0])
unityEditor1.GetAssetNames(filter=True)
unityEditor1.CopyToClipboardMonoBehaviour(asset=unityParser1.Cabinet.Components[0])
unityEditor1.GetAssetNames(filter=True)
opensUnity0 = FormUnity3d(path="E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d", variable="opensUnity0")
unityParser2 = OpenUnity3d(path="E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d")
unityEditor2 = Unity3dEditor(parser=unityParser2)
unityEditor2.GetAssetNames(filter=True)
unityEditor2.CopyToClipboardMonoBehaviour(asset=unityParser2.Cabinet.Components[0])
unityEditor2.GetAssetNames(filter=True)
unityEditor2.PasteFromClipboardMonoBehaviour(asset=unityParser2.Cabinet.Components[0])
unityEditor2.GetAssetNames(filter=True)
unityEditor2.CopyToClipboardMonoBehaviour(asset=unityParser2.Cabinet.Components[3])
unityEditor2.GetAssetNames(filter=True)
unityEditor0.SaveUnity3d(keepBackup=False, backupExtension=".unit-y3d", background=True, pathIDsMode=-1)
unityEditor0.GetAssetNames(filter=True)
opensUNITY3D2 = FormUnity3d("E:\illusion\HS\abdata\studio\itemobj\honey\SIT_HoH01.unity3d", "opensUNITY3D2")
unityParser3 = OpenUnity3d(path="E:\illusion\HS\abdata\studio\itemobj\honey\SIT_HoH01.unity3d")
unityEditor3 = Unity3dEditor(parser=unityParser3)
unityEditor3.GetAssetNames(filter=True)
opensUNITY3D3 = FormUnity3d("E:\illusion\HS\abdata\studio\itemobj\honey\sit_HoH_s1.unity3d", "opensUNITY3D3")
unityParser4 = OpenUnity3d(path="E:\illusion\HS\abdata\studio\itemobj\honey\sit_HoH_s1.unity3d")
unityEditor4 = Unity3dEditor(parser=unityParser4)
unityEditor4.GetAssetNames(filter=True)
unityEditor3.RenameCabinet(name="CAB-f6a130618787f554e9e2c2b43f756339")
unityEditor3.SaveUnity3d(keepBackup=False, backupExtension=".unit-y3d", background=True, pathIDsMode=-1)
unityEditor3.GetAssetNames(filter=True)
opensUNITY3D4 = FormUnity3d("E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d", "opensUNITY3D4")
unityParser5 = OpenUnity3d(path="E:\illusion\HS\abdata\studio\list\itemlist\honey\03.unity3d")
unityEditor5 = Unity3dEditor(parser=unityParser5)
unityEditor5.GetAssetNames(filter=True)
unityEditor5.PasteFromClipboardMonoBehaviour(asset=unityParser5.Cabinet.Components[0])
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=0)
stringTableAsset0 = unityEditor5.LoadWhenNeeded(componentIndex=0)
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=0)
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=0)
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=0)
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=3)
stringTableAsset1 = unityEditor5.LoadWhenNeeded(componentIndex=3)
unityEditor5.GetAssetNames(filter=True)
unityEditor5.CopyToClipboardMonoBehaviour(asset=unityParser5.Cabinet.Components[0])
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=3)
unityEditor5.GetAssetNames(filter=True)
opensUNITY3D4.OpenStringTable(componentIndex=3)
unityEditor5.GetAssetNames(filter=True)
; end session [2/12/2017 4:58 PM]

But aight, it's working now, so it might have been something during the extraction from the archive?
 
Last edited:
Thanks!

I checked the relevant changes but couldn't find something which would explain a not-opening-MBs/TAs.

No, I dont think that the extraction of the archive failed. Your virusscanner may have stepped in and checked the files, but if they had been removed then the Unity*.dll would not be functional or missing and Sb3UGS would not be able to open any *.unity3d file.

May be your mouse click got lost because you were controlling your desktop through TeamViewer?^^ Please let me know when the problem returns :-)
 
Thanks!
I checked the[...]

My virusscanner has actually not been messing with SB3UG so far, but it has been trying to quarantine several HS unity3d files a few times (it's nice enough to tell me about such things).
In the end I added every vanilla HS file to its exception list. Can't be TeamViewer either, I don't have it installed.

I'll let you know if the issue appears again, but hopefully it was just a very rare weird event.
 
Last edited:
@enimaroah

Sorry to bother with another bug report. I didn't see it reported.

On previous versions, when importing morphs, as long as the morph in the asset bundle was called the same as the new one being imported, inserting the new morph(s) from fbx would replace the existing ones.

Now however, even if the morphs are called equally, they get added instead of replaced (the log even tells you they got added, and the list of existing morphs for that morph clip gets much bigger).

Is this a bug, or is there anything I'm missing?
 
The replacement of morphs still works, but I changed the name handling to ease group support. This might mean that older exports need correction of morph names in the dialog. Make sure that you use the correct format:
fetch
This all should look like this:
MorphRepla3627.jpg

Please, could you attach an example fbx to reproduce your problem?
 
It is required to rename the Mesh (not the mesh Transform) and then Sb3UGS can find the morph keyframes for replacing.
ReplacingM5f9f.jpg

But I noticed that the head is unskinned. Is that intended?
 
It is required to rename the Mesh (not the mesh Transform) and then Sb3UGS can find the morph keyframes for replacing.
ReplacingM5f9f.jpg

But I noticed that the head is unskinned. Is that intended?

Oh, so that's why. I get it now. I either rename the mesh in SB3UGUI or in Blender so they have the same name.

The head is unskinned everywhere besides the face root, yes, I don't actually need the other bones there. One of these days though, I'd like to try skinning one to all the bones. But we can't reposition face bones, right? Only possible for dynamic bones?
 
The skeleton for body cant be changed because of skeletal bone animations. But I dont know when the head's bones are actually used. Lip-synch speech? I haven't seen such animations, but I didn't look for them either.

No the DynamicBones are for physics - gravitation, even negative like for the balloons. But I dont think that they could be used for facial expressions.
 
What I meant with dynamic bones is that I've been able to successfully modify them, probably because of that same reason, they're dynamic and they just react to physics.

However, I've not been able to replace head bones and have them reflect the changes in-game (the changes are reflected in SB3UGUI though). I tried with the eyes, but nothing, ingame they still look the same.
 
It can mean that you didn't made the changes to the skeleton used by the game. I had tried to do such changes to the skeleton of the body and had to change several skeletons. At the end the game was unstable. So it might require to decompile and analyze and at that point I cancelled my experiment.

For simple modifications you could still use the rest pose.
HeadRestPo04c1.jpg
 
@enimaroah

Regarding my previous problem, it seems Blender is to blame. It can't export to fbx an object that has both shapekeys (morphs) and is also weighted to an armature (exports only the morphs). This leaves me with no option but to export expressions separately, and when doing so, you can't seem to be able to replace existing ones. With just the shapekeys in the FBX, I can only add.

I used to be able to though, I think it only checked the morph name and replaced it if it matched with the destination.
 
I am not sure if I got that entirely. You were exporting in Blender a head without armature but with morphs. And that file's morphs can only be added in Sb3UGS but not be replaced? May I have such a file then?

Did you try Collada export in Blender?

Edit:
Workaround for Blender's "unknown_blendshape" group is to rename the destination group in Sb3UGS to "unknown_blendshape" and rename it back after the morph has been replaced.

Edit2:
Another test showed that Blender's FBX export produces compatible output with the combination of skin and blendshapes. Important for all Transforms is that their does NOT include a '.'. The dot is the separator for blendshape groups and should not be used in names for Transforms.
 
Last edited:
Have a look at this file.

View attachment head_expressions_weighted.zip

It's weighted to two bones, and has 114 morphs.

Reimporting in Blender shows everything is fine.

In SB3UGUI, I only get the ImportedFrame and ImportedMorph, but the ImportedMesh is nowhere to be seen. Is it supposed to be this way?
 
Hello
i can not replace the textasset with v1.5.27 while it still works with v1.3.0

here is what i did
i write the following script to E:\Temp\test\t\ss.txt
Code:
LoadPlugin(PluginDirectory+"UnityPlugin.dll")
unityParser = OpenUnity3d("E:\Temp\test\p_hairF_Ag00.unity3d")
unityEditor = Unity3dEditor(parser=unityParser)
unityEditor.ReplaceTextAssets(pattern="p_hairF_ag00_Data", path="E:\Temp\test\t")
unityEditor.SaveUnity3d(keepBackup=False, backupExtension=".unit-3d", background=False, pathIDsMode=1)
then i run this command line
Code:
start "" "E:\Games\SBPR\mods\tools\SB3UGS\SB3UtilityScript.exe" "E:\Temp\test\t\ss.txt"

but the file content "E:\Temp\test\p_hairF_Ag00.unity3d" is not changed (date modified not changed)
Thanks
 
Yes, there was a change for clearing or retaining the main asset. It is now a parameter of the UnityEditor's SaveUnity3d function.

UnityEditor . SaveUnity3d(bool keepBackup, string backupExtension, bool background, bool clearMainAsset, int pathIDsMode = -1)

In your case:

unityEditor.SaveUnity3d(keepBackup=False, backupExtension=".unit-3d", background=False, clearMainAsset=True, pathIDsMode=1)

Debugging scripts can be done with an open Command Prompt:
ScriptErroef32.jpg
So you know what failed. With this information you can search for the function:
Main menu Options / Plugins. Select UnityPlugin.dll and search in the list on the right hand side.
ScriptErro61d0.jpg
 
i see, thank you very much , enimaroah

May i ask what does the color of animator mean in "Animator" tab ?
for example in FemaleLower_02_00.unity3d (playclub)
animator FemaleLower_02_00 has purple color
cf_socks_02 has black color
Thanks in advance
 
@enimaroah

I remember you posted a script to export projects from Unity Editor so that they can be perfectly opened in SB3UGUI. Do you still have it around or is it somewhere in the glossary?

Also, do you know what steps must be taken to directly import a shader from HS into Unity Editor? I wanted to edit the way some shaders work but I want them to still work with the color sliders, I can't get that right.
 
@navmesh:
The purple colour indicates that it is a Virtual Animator. Such an Animator asset is not present in the file, but a computed version of an Animator. It is an auxiliary structure which allows Sb3UGS to handle the included assets of this Virtual Animator like it handles those assets of a real Animator. Sb3UGS creates Virtual Animators in AssetBundle files only.

In some AssetBundle files Sb3UGS doesn't find those Virtual Animators and you need to create them, but that's a rare case. HS files seem to be completely browsable by Sb3UGS without manual creating.



@roy12:
The script integrates some entries in the menu for creating AssetBundle files. It needs to be put into {project}\Assets\DeployAB\Editor\{name of you choice, e.g. MenuAB}.cs.
Code:
using UnityEngine;
using UnityEditor;

public class CreateAssetBundles
{
	[MenuItem ("Assets/Build AssetBundles - Uncompressed")]
	static void BuildAllAssetBundlesUncompressed()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.UncompressedAssetBundle,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem ("Assets/Build AssetBundles - ChunkBasedCompression")]
	static void BuildAllAssetBundlesChunkBasedCompression()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.ChunkBasedCompression,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem ("Assets/Build AssetBundles - None")]
	static void BuildAllAssetBundlesCompressed()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.None,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem("Assets/Build AssetBundle From Selection - Track dependencies")]
	static void ExportResource ()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		// Bring up save panel
		string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
		if (path.Length != 0)
		{
			// Build the resource file from the active selection.
			Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
			BuildPipeline.BuildAssetBundle
			(
				Selection.activeObject,
				selection,
				path,
				BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets,
				BuildTarget.StandaloneWindows64
			);
			Selection.objects = selection;
		}
	}
}
Sb3UGS can use normal game files for Copy & Paste operations as well, but then you have to care for the Type definitions yourself. So copying from an AssetBundle file is more convenient.

I had seen your question about shaders, but I am afraid I cant answer it. There were one or two mods in HF which came with special custom shaders for imitating fur and extra colours. But one of them was made from a Chinese modder. So it might complicated to contact him in English, but I haven't tried.
 
@roy12:
The script integrates some entries in the menu for creating AssetBundle files. It needs to be put into {project}\Assets\DeployAB\Editor\{name of you choice, e.g. MenuAB}.cs.
Code:
using UnityEngine;
using UnityEditor;

public class CreateAssetBundles
{
	[MenuItem ("Assets/Build AssetBundles - Uncompressed")]
	static void BuildAllAssetBundlesUncompressed()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.UncompressedAssetBundle,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem ("Assets/Build AssetBundles - ChunkBasedCompression")]
	static void BuildAllAssetBundlesChunkBasedCompression()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.ChunkBasedCompression,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem ("Assets/Build AssetBundles - None")]
	static void BuildAllAssetBundlesCompressed()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		BuildPipeline.BuildAssetBundles
		(
			"Assets/AssetBundles",
			BuildAssetBundleOptions.None,
			BuildTarget.StandaloneWindows64
		);
	}

	[MenuItem("Assets/Build AssetBundle From Selection - Track dependencies")]
	static void ExportResource ()
	{
		EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows64);
		// Bring up save panel
		string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
		if (path.Length != 0)
		{
			// Build the resource file from the active selection.
			Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
			BuildPipeline.BuildAssetBundle
			(
				Selection.activeObject,
				selection,
				path,
				BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets,
				BuildTarget.StandaloneWindows64
			);
			Selection.objects = selection;
		}
	}
}
Sb3UGS can use normal game files for Copy & Paste operations as well, but then you have to care for the Type definitions yourself. So copying from an AssetBundle file is more convenient.

I had seen your question about shaders, but I am afraid I cant answer it. There were one or two mods in HF which came with special custom shaders for imitating fur and extra colours. But one of them was made from a Chinese modder. So it might complicated to contact him in English, but I haven't tried.

Amazing, thanks a lot enimaroah, now I can start making use of the Unity Editor.
 
Thank you for the detailed info, i really appreciate it
I also have a problem with latest version SB3UG 1.5.27
I tried converting socks mods to use in pantyhose (lower) section of PlayClub
(convert FemaleSocks_05 to use in lower section)
it works fine with SB3UG 1.0.51
however, there is a problem when i using latest version 1.5.27 ,as you can see in the image
DEN_zps0kv5izfh.jpg


Here is the mods
https://drive.google.com/file/d/0B2bkpV-Ei_dFcGJjT0pUbTVmZnM/view?usp=sharing
"original" folder contains the original file
"1.0.51" and "1.5.27" folder is the result using the corrresponding version of SB3UG (1.0.51 and 1.5.27)
link to SB3UG 1.0.51
https://mega.nz/#!zNFxkJBI!rNdigM9KTqC8r2gFEYAM0ZapLXX5I4mmIc7Tr00yEoU
 
Hello again enimaroah.

Is there any reason why SB3UGUI keeps merging meshes named with underscores into a single one with many submeshes?

I tested the file and it retains the correct mesh names in Unity Editor.

Apologies if this has been fixed already. Or maybe I'm doing something wrong when exporting from Blender.

This is the file by the way: http://www19.zippyshare.com/v/W2kBWvAt/file.html

EDIT: Worth mentioning, if I rename the objects to something with no underscores, this doesn't happen (for example, replacing the underscores with a dot).
 
Last edited:
Hello, Mr. enimaroah.

I have an issue. I am using both V1.0.54 and V1.5.28. I found that I could no longer adjust the translation, rotation and size for SBPR studio items and accessories with V1.5.28, if those items and accessories were imported. But the V1.0.54 worked fine. The V1.5.22 didn't have this issue, either. However, I haven't known where to get the V1.5.22 since Hongfire was down.

I don't know if someone reported it before, or I am the only one who has this issue.
 
Last edited:
@navmesh:
Sorry, couldn't find the problem or the difference in the files. But since I dont have PC I cant test this either.

What would be the result of using the textures exported with the other version? With that test you could find out if the problem lies in the textures or elsewhere.



@roy12:
In FBX there are no submeshes, but you could have several meshes in one frame. In order to support submeshes most conveniently the number following the underscore is used as submesh index.



@RyuuChiSen:
Too many updates between these versions. The last times I heard the very same issue was when people had forgotten to Convert the SkinnedMeshRenderer into a MeshRenderer after replacement.

I have reuploaded SB3UGS_v1.5.28 to 1fichier.
 
Last edited:

Users who are viewing this thread

Latest profile posts

walls. wrote on Otokonoko's profile.
reupload please RJ01024113 RJ01108764 RJ01010114 RJ386849 RJ01050049
xorthalndor wrote on Ryzen111's profile.
Hi Ryzen!
Can you please up
戦巫女ホノカ ―コンプリートパック―
to the latest 1.0.7? Thanx!
Deladela2000 wrote on Ryzen111's profile.
Hello, Ryzen.
Can you reup this game?
Deladela2000 wrote on Shine's profile.
Hello, Shine. Can you reup RJ081433?
ヨコシマ wrote on Shine's profile.
こんにちはshineさん
ラボスイーパー~ドロシーの秘密研究記録~ https://www.dlsite.com/maniax/work/=/product_id/RJ01282013.html
新しいバージョン 1 .04 が公開されました
更新をよろしくお願いいたします