Skip to content

Commit

Permalink
Merge pull request #4 from creativeIKEP/develop
Browse files Browse the repository at this point in the history
v1.1.0
  • Loading branch information
creativeIKEP authored Feb 12, 2023
2 parents 5bfe207 + fdc1698 commit dcb25c4
Show file tree
Hide file tree
Showing 12 changed files with 1,414 additions and 151 deletions.
1,389 changes: 1,261 additions & 128 deletions Assets/Scenes/Main.unity

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion Assets/Scripts/CameraMove.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ public class CameraMove : MonoBehaviour
[SerializeField] CanvasGroup controlCanvas;
[SerializeField] Camera PredictionCamera;

bool isDragging = false;
bool isUiShow = true;

public void OnClick(BaseEventData data)
Expand Down
109 changes: 103 additions & 6 deletions Assets/Scripts/VisualizeCtrlUI.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using HolisticMotionCapture;
Expand All @@ -13,6 +14,7 @@
public class VisualizeCtrlUI : MonoBehaviour
{
[SerializeField] Visuallizer visuallizer;
[SerializeField] Dropdown vrmSelectDropdown;
[SerializeField] Texture defaultTexture;
[SerializeField] RawImage backGroundTexture;
[SerializeField] Dropdown backTextureSelect;
Expand All @@ -23,9 +25,14 @@ public class VisualizeCtrlUI : MonoBehaviour
[SerializeField] Toggle isUpperBodyOnlyToggle;
[SerializeField] Toggle lookCameraToggle;

readonly string loadedVrmsPath = "/VrmFiles";
string defaultVrmPath;
readonly string avatarPlayerPrefsKey = "SelectedVrmFileName";
readonly string loadedImagePath = "/LoadedImages";
readonly string defaultTextureName = "Default";
readonly string backOffName = "None";
readonly string backImagePlayerPrefsKey = "SelectedBackgroundImageFileName";


void Awake()
{
Expand All @@ -44,14 +51,65 @@ void Awake()

void Start()
{
backGroundTexture.texture = defaultTexture;
backGroundTexture.texture.name = defaultTextureName;

defaultVrmPath = Application.streamingAssetsPath + "/DefaultSampleAvatar.vrm";
CreateVrmDropdownOptions();
CreateImageOptions();
CaptureSwitched();
CreateHolisticMocapTypeOptions();
ChangeIsUpperBodyOnly();
ChangeLookCamera();

var lastOpenVrm = PlayerPrefs.GetString(avatarPlayerPrefsKey);
var initVrm = string.IsNullOrEmpty(lastOpenVrm) ? defaultVrmPath : lastOpenVrm;
ChangeVrmFromFileName(initVrm);
for (int i = 0; i < vrmSelectDropdown.options.Count; i++)
{
var option = vrmSelectDropdown.options[i];
if (option.text == initVrm)
{
vrmSelectDropdown.value = i;
vrmSelectDropdown.RefreshShownValue();
break;
}
}

var lastOpenbackImage = PlayerPrefs.GetString(backImagePlayerPrefsKey);
var initBackImage = string.IsNullOrEmpty(lastOpenbackImage) ? defaultTextureName : lastOpenbackImage;
ChangeBackTextureFromFileName(initBackImage);
for (int i = 0; i < backTextureSelect.options.Count; i++)
{
var option = backTextureSelect.options[i];
if (option.text == initBackImage)
{
backTextureSelect.value = i;
backTextureSelect.RefreshShownValue();
break;
}
}
}

void OnDestroy()
{
PlayerPrefs.SetString(avatarPlayerPrefsKey, vrmSelectDropdown.options[vrmSelectDropdown.value].text);
PlayerPrefs.SetString(backImagePlayerPrefsKey, backTextureSelect.options[backTextureSelect.value].text);
}

void CreateVrmDropdownOptions()
{
if (!Directory.Exists(Application.persistentDataPath + loadedVrmsPath))
{
Directory.CreateDirectory(Application.persistentDataPath + loadedVrmsPath);
}
var vrmPathes = Directory.GetFiles(Application.persistentDataPath + loadedVrmsPath, "*.vrm");

var vrmSelectOptions = new List<string>();
vrmSelectOptions.Add(Path.GetFileNameWithoutExtension(defaultVrmPath));
foreach (var path in vrmPathes)
{
vrmSelectOptions.Add(Path.GetFileNameWithoutExtension(path));
}
vrmSelectDropdown.ClearOptions();
vrmSelectDropdown.AddOptions(vrmSelectOptions);
}

void CreateImageOptions()
Expand Down Expand Up @@ -103,6 +161,31 @@ public void ChangeLookCamera()
visuallizer.SetMainCameraLook(lookCameraToggle.isOn);
}

public void ChangeVrmFromDropdownUi()
{
var filename = vrmSelectDropdown.options[vrmSelectDropdown.value].text;
ChangeVrmFromFileName(filename);
}

private async Task ChangeVrmFromFileName(string filename)
{
var path = Application.persistentDataPath + loadedVrmsPath + "/" + filename + ".vrm";
if (filename == Path.GetFileNameWithoutExtension(defaultVrmPath))
{
path = defaultVrmPath;
}
await ChangeVrmFromPath(path);
}

private async Task ChangeVrmFromPath(string path)
{
var instance = await VrmUtility.LoadAsync(path);
instance.ShowMeshes();
var animator = instance.GetComponent<Animator>();
visuallizer.SetAnimator(animator);
Camera.main.transform.position = animator.GetBoneTransform(HumanBodyBones.Head).position + Vector3.forward * 0.8f;
}

public void VrmFileLoad()
{
var extensions = new[]{
Expand All @@ -118,15 +201,28 @@ public void VrmFileLoad()
var extension = Path.GetExtension(path).ToLower();
if (extension != ".vrm") return;

var instance = await VrmUtility.LoadAsync(path);
instance.ShowMeshes();
visuallizer.SetAnimator(instance.GetComponent<Animator>());
await ChangeVrmFromPath(path);

var filename = Path.GetFileNameWithoutExtension(path) + ".vrm";
var savePath = Application.persistentDataPath + loadedVrmsPath + "/" + filename;
File.Copy(path, savePath, true);

var option = new Dropdown.OptionData();
option.text = Path.GetFileNameWithoutExtension(path);
vrmSelectDropdown.options.Add(option);
vrmSelectDropdown.value = vrmSelectDropdown.options.Count - 1;
vrmSelectDropdown.RefreshShownValue();
});
}

public void ChangeBackTexture()
{
var filename = backTextureSelect.options[backTextureSelect.value].text;
ChangeBackTextureFromFileName(filename);
}

private void ChangeBackTextureFromFileName(string filename)
{
if (filename == defaultTexture.name)
{
backGroundTexture.texture = defaultTexture;
Expand Down Expand Up @@ -173,6 +269,7 @@ public void NewImageLoad()
option.text = filename;
backTextureSelect.options.Add(option);
backTextureSelect.value = backTextureSelect.options.Count - 1;
backTextureSelect.RefreshShownValue();
});
}

Expand Down
8 changes: 8 additions & 0 deletions Assets/StreamingAssets.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/StreamingAssets/DefaultSampleAvatar.vrm
Binary file not shown.
7 changes: 7 additions & 0 deletions Assets/StreamingAssets/DefaultSampleAvatar.vrm.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Packages/HolisticMotionCapture/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
### [1.1.0] - 2023-02-12

- Add sample VRM avatar.
- Save vrm files once loaded.
- Open the previously saved VRM and background files when the application is restarted.
- Fix bug that disapper UI text when window resize.
- Fix bug that not move avatar's iris.

### [1.0.0] - 2023-01-10

This is the first release of HolisticMotionCapture!
16 changes: 10 additions & 6 deletions Packages/HolisticMotionCapture/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,21 @@ HolisticMotionCapture can be downloaded from [release page](https://github.com/c

### For Windows

Download installer(`HolisticMotionCapture-1.0.0setup.exe` file) from [1.0.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.0.0) and execute it.
Download installer(`HolisticMotionCapture-1.1.0setup.exe` file) from [1.1.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.1.0) and execute it.

### For Mac OS

Download installer(`HolisticMotionCapture_Installer.dmg` file) from [1.0.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.0.0) and execute it.
Download installer(`HolisticMotionCapture_installer.pkg` file) from [1.1.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.1.0) and execute it.

## Usage HolisticMotionCapture application

### Load your VRM file
### Select your VRM file

Push the `Load VRM` for loading your VRM file.
- You can change to your vrm avatar from pull down.
- Images are loaded from and save to `C:/Users/<user name>/AppData/LocalLow/IKEP/HolisticMotionCapture/VrmFiles` directory in Windows.
- Images are loaded from and save to `/Users/<user name>/Library/Application Support/IKEP/HolisticMotionCapture/VrmFiles` directory in Mac OS.
- You can load new vrm avatar from the `New VRM` button.
- You can continue to use the vrm file is loaded once, if application is restarting.

### Image Device

Expand Down Expand Up @@ -90,7 +94,7 @@ To the `scopedRegistries` section:
To the `dependencies` section:

```
"jp.ikep.holistic-motion-capture": "1.0.0"
"jp.ikep.holistic-motion-capture": "1.1.0"
```

Finally, the manifest file looks like below:
Expand All @@ -110,7 +114,7 @@ Finally, the manifest file looks like below:
}
],
"dependencies": {
"jp.ikep.holistic-motion-capture": "1.0.0",
"jp.ikep.holistic-motion-capture": "1.1.0",
...
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace HolisticMotionCapture
partial class HolisticMotionCapturePipeline
{
VRMBlendShapeProxy proxy;
VRMLookAtHead vrmLookAtHead;
int faceCounter;
List<LowPassFilter> face_lpfs;
List<Tuple<int, Vector4>> lpfedFaceBuffers;
Expand All @@ -31,6 +32,7 @@ partial class HolisticMotionCapturePipeline
void FaceInit()
{
proxy = avatar.GetComponent<VRMBlendShapeProxy>();
vrmLookAtHead = avatar.GetComponent<VRMLookAtHead>();

face_lpfs = new List<LowPassFilter>();
lpfedFaceBuffers = new List<Tuple<int, Vector4>>();
Expand Down Expand Up @@ -113,12 +115,13 @@ void FaceRender(HolisticMocapType mocapType, float faceScoreThreshold, Transform
BlinkRender();
if (lookTargetWorldPosition != null)
{
avatar.GetComponent<VRMLookAtHead>().Target = lookTargetWorldPosition;
vrmLookAtHead.Target = lookTargetWorldPosition;
var headTransform = avatar.GetBoneTransform(HumanBodyBones.Head);
headTransform.LookAt(lookTargetWorldPosition);
}
else
{
vrmLookAtHead.Target = null;
PupilRender();
}
MouthRender();
Expand Down
4 changes: 2 additions & 2 deletions Packages/HolisticMotionCapture/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "jp.ikep.holistic-motion-capture",
"displayName": "HolisticMotionCapture",
"description": "Motion capture for avatar holistic body with only a camera.",
"version": "1.0.0",
"version": "1.1.0",
"unity": "2020.3",
"unityRelease": "11f1",
"keywords": [
Expand All @@ -23,4 +23,4 @@
},
"license": "Apache-2.0",
"repository": "github:creativeIKEP/HolisticMotionCapture"
}
}
2 changes: 1 addition & 1 deletion ProjectSettings/ProjectSettings.asset
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ PlayerSettings:
16:10: 0
16:9: 1
Others: 0
bundleVersion: 1.0.0
bundleVersion: 1.1.0
preloadedAssets: []
metroInputSource: 0
wsaTransparentSwapchain: 0
Expand Down
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,21 @@ HolisticMotionCapture can be downloaded from [release page](https://github.com/c

### For Windows

Download installer(`HolisticMotionCapture-1.0.0setup.exe` file) from [1.0.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.0.0) and execute it.
Download installer(`HolisticMotionCapture-1.1.0setup.exe` file) from [1.1.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.1.0) and execute it.

### For Mac OS

Download installer(`HolisticMotionCapture_Installer.dmg` file) from [1.0.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.0.0) and execute it.
Download installer(`HolisticMotionCapture_installer.pkg` file) from [1.1.0 release page](https://github.com/creativeIKEP/HolisticMotionCapture/releases/tag/v1.1.0) and execute it.

## Usage HolisticMotionCapture application

### Load your VRM file
### Select your VRM file

Push the `Load VRM` for loading your VRM file.
- You can change to your vrm avatar from pull down.
- Images are loaded from and save to `C:/Users/<user name>/AppData/LocalLow/IKEP/HolisticMotionCapture/VrmFiles` directory in Windows.
- Images are loaded from and save to `/Users/<user name>/Library/Application Support/IKEP/HolisticMotionCapture/VrmFiles` directory in Mac OS.
- You can load new vrm avatar from the `New VRM` button.
- You can continue to use the vrm file is loaded once, if application is restarting.

### Image Device

Expand Down Expand Up @@ -90,7 +94,7 @@ To the `scopedRegistries` section:
To the `dependencies` section:

```
"jp.ikep.holistic-motion-capture": "1.0.0"
"jp.ikep.holistic-motion-capture": "1.1.0"
```

Finally, the manifest file looks like below:
Expand All @@ -110,7 +114,7 @@ Finally, the manifest file looks like below:
}
],
"dependencies": {
"jp.ikep.holistic-motion-capture": "1.0.0",
"jp.ikep.holistic-motion-capture": "1.1.0",
...
}
}
Expand Down

0 comments on commit dcb25c4

Please sign in to comment.