ã¯ããã«
ãã®èšäºã¯VTuber Tech #1 Advent Calendar 2018ã®1æ¥ç®ã®èšäºã§ãã
ããã«ã¡ã¯ã@nkjzmã§ãã
ä»åã¯UnityãšLive2Dã䜿ã£ãVTuberé
ä¿¡ã·ã¹ãã ã®äœãæ¹ã玹ä»ããŸãã
Unityã«åããŠè§Šã人ã§ãåãããããäžå¯§ã«æžããŠããã®ã§ããã²è²ã
ãªæ¹ã«ã芧ããã ãããã§ãã

äœæã§ããã·ã¹ãã ã®ã€ã¡ãŒãž
çŸç¶ãLive2Dã§ã®VTuberé ä¿¡ã¯FaceRigãšããã¢ããªã±ãŒã·ã§ã³ãçšããããããšãå€ããšæããŸããå°å ¥ããã°ããã«ã¢ãã«ãåããããšãã§ããããéåžžã«äŸ¿å©ãªã®ã§ãããåé¢ãã£ã©ã¯ã¿ãŒãšããŠã®è¡šçŸã远æ±ããéã«å¶çŽãšãªãå ŽåããããŸãã
ããã§ãæ¬èšäºã§ã¯Unityãçšããããšã§æ¡åŒµããããVTuberé
ä¿¡ã·ã¹ãã ã®äœãæ¹ã玹ä»ããŸãã
ãµã³ãã«ãšããŠå®æãããžã§ã¯ããçšæããŸããã®ã§ãé©å®åèã«ããªããèªã¿é²ããŠãã ããã
ãã®èšäºã§æ±ãããš
- UnityãšLive2Dã䜿ã£ãã·ã¹ãã æ§ç¯
- OBSã䜿ã£ãé ä¿¡æ¹æ³
ãã®èšäºã§æ±ããªãããš
- Live2Dã¢ãã«ã®äœãæ¹
å¿ èŠãªç°å¢
- 以äžã®ããããã®OS
- macOS High Sierra (10.13.6ã«ãŠåäœç¢ºèªæžã¿)
- Windows 10
-
Unity
- 2017.4.x~ / 2018.2.x~ (2018.2.11f1ã«ãŠåäœç¢ºèªæžã¿)
- Live2D Cubism 3 SDK for Unity
-
OVRLipSync
- 1.28.0ã«ãŠåäœç¢ºèªæžã¿
VTuberKitã«ã€ããŠ
nkjzm/VTuberKit
https://github.com/nkjzm/VTuberKit
ä»å玹ä»ããæ¹æ³ã®å®æãããžã§ã¯ãã§ãã
äž»ã«Assets/VTuberKit/Examples/Koharu/以äžã®ã·ãŒã³ãåèã«ãªããšæããŸãã
MITã©ã€ã»ã³ã¹ã§é åžããŠããã®ã§ããã®ãããžã§ã¯ããåºç€ã«ã·ã¹ãã ãäœã£ãŠããã ããŠã倧äžå€«ã§ãã
â»ãã ãããã€ãã®SDKã®å©çšãåæãšããŠãããããããããã®ã©ã€ã»ã³ã¹ã«ã¯åŸã£ãŠãã ããã
ç¹ã«Live2Dã®ãæ¡åŒµæ§ã¢ããªã±ãŒã·ã§ã³ãã«è©²åœããªããã©ããã¯ãã¡ããšç¢ºèªããŠãã ããã
æ¡åŒµæ§ã¢ããªã±ãŒã·ã§ã³ã®ãªãªãŒã¹ã©ã€ã»ã³ã¹ã«ã€ããŠ
å©ç𿹿³ã«ã€ããŠã¯ãªããžããªã®README.mdãã芧ãã ããã
質åã«ã€ããŠ
èšäºäžã§åãããªãããšãããã°@nkjzmãŸã§ãé£çµ¡ãã ããïŒè»œã質åã§ããã°ãçãããŸãïŒããŸããæé¡å¶ã®ã¡ã³ã¿ãŒãµãŒãã¹ã§éçºãµããŒããããŠããã®ã§ã詳ããæããŠã»ããæ¹ã¯ãã¡ãããå©çšãã ãããã
https://menta.work/plan/1115
é ä¿¡ã·ã¹ãã åºç€ã®äœæ
ããããã¯VTuberé
ä¿¡ã·ã¹ãã ã®å
·äœçãªäœææé ã玹ä»ããŸãã
åãããªãç¹ãããã°ãé©å®VTuberKitãåèã«ããŠãã ããã
Unityãããžã§ã¯ãã®æ°èŠäœæ
Unityã®ã€ã³ã¹ããŒã«ãæžãã§ããªãæ¹ã¯ããã¡ãããã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŸããUnityHubãå©çšãããšè€æ°ããŒãžã§ã³ã®Unityã管çåºæ¥ãã®ã§ãªã¹ã¹ã¡ã§ãã
å ·äœçãªæé ã¯ä»åã¯å²æããŸããç»é¢ã«åŸã£ãŠã€ã³ã¹ããŒã«ãé²ããŠãã ããã
UnityHub(ãããã¯Unity)ãèµ·åããŸãã
å³äžã®ãæ°èŠããã¯ãªãã¯ããŠãã ããã
- Project Nameãå ¥å
- Templeteã
2Dã«å€æŽ
äžèšã®ããã«å ¥åããŠãCreate projectããã¯ãªãã¯ããŠãã ããã
ãããžã§ã¯ããäœæãããUnityãšãã£ã¿ãšåŒã°ããç»é¢ãéããšæããŸãã
Live2Dã¢ãã«ãUnityã«çµã¿èŸŒã¿
ããããã¯å®éã«Live2Dã®ã¢ãã«ãUnityäžã«çµã¿èŸŒãã§è¡ããŸãããã
Live2D SDKã®ã€ã³ããŒã
Unityã§Live2Dãæ±ãããã®SDKãã€ã³ããŒãããŸãã
é
åžããŒãžã«ã¢ã¯ã»ã¹ãããšãå©çšã«ããã£ãŠã®ã©ã€ã»ã³ã¹ã衚瀺ãããŸããã©ã€ã»ã³ã¹ã«åæããäžã§ãå°ãäžã®æ¹ã«ãããDownload Live2D Cubism 3 SDK for Unity R10ãã®ãªã³ã¯ãã¯ãªãã¯ããŠãã ãããããŠã³ããŒããéå§ããŸãã
次ã«ãããŠã³ããŒãããCubism3SDKforUnity-9.unitypackageãšãããã¡ã€ã«ãããã«ã¯ãªãã¯ããŠãã ããã
ãã®ãããªç»é¢ãéããšæããŸãã
(äžèšã®æäœã§ç»é¢ãéããªãå Žåã¯ãUnityãšãã£ã¿äžã«ãã©ãã°ã¢ã³ãããããããæäœã詊ããŠã¿ãŠãã ããã)
ãã¹ãŠãã§ãã¯ããŒã¯ãå ¥ã£ãŠããããšã確èªããŠãå³äžã®ã€ã³ããŒããã¿ã³ãæŒããŠãã ããã
ãã®ããã«åèµ·åãä¿ãã¡ãã»ãŒãžã衚瀺ãããã®ã§ããokããã¯ãªãã¯ããŸããã€ã³ããŒãçµäºåŸã«åèµ·åãããŠãã ããã
åèµ·åã®æé ãšããŠã¯ããŸãUnityãçµäºãããŸããUnityãéžæããç¶æ
ã§ãMacãªãCommand(â) + QããWindowsãªãAlt + F4ãæŒããŠãã ããã
次ã«UnityHubã¢ããªãèµ·åãããããžã§ã¯ãã®äžããå çšäœæãããããžã§ã¯ããéžæããŠãã ããã
ããã§Live2D SDKãèªã¿èŸŒã¿ã¯å®äºã§ãã
ã§ã¯æ£åžžã«èªã¿èŸŒããŠããã確èªããŠã¿ãŸããããSDKã«ã¯ããã€ãã®ãµã³ãã«ãå«ãŸããŠããŸãããã®äžã®äžã€ãéããŠã¿ãããšæããŸãã
â Unityãšãã£ã¿äžã®Projectãã¥ãŒããã[Asset]>[Live2D]>[Cubism]>[Samples]>[Animation]ãšèŸ¿ã£ãŠãããâ¡Animationãšããã·ãŒã³ãã¡ã€ã«ãããã«ã¯ãªãã¯ããŠãã ãããâ¢Gameãã¥ãŒã«ãã£ã©ã¯ã¿ãŒã衚瀺ãããŸããâ£æåŸã«åçãã¿ã³ãæŒããŠãã ããã
Gameãã¥ãŒã®ãã£ã©ã¯ã¿ãŒããã®ããã«ã¢ãã¡ãŒã·ã§ã³ããŠããããšã確èªã§ãããšæããŸãã
ã¢ãã«ã®ã€ã³ããŒã
ä»ã®ã¢ãã«ãã€ã³ããŒãããæé ã玹ä»ããŸãã
ä»åã¯å
¬åŒã®ãæ¡ç¬ã²ããããšãããµã³ãã«ã¢ãã«ãäŸã«èª¬æããŸãã
èªäœã¢ãã«ãå©çšããå Žåãªã©ã¯ãé©å®èªã¿æ¿ããŠé²ããŠãã ããã
ãµã³ãã«ã¢ãã«éãããæ¡ç¬ã²ãããã®ãFreeããŠã³ããŒãããã¯ãªãã¯ããŠãã ãããå©çšã®éã«ã¯ãç¡åæäŸãããªã¢ã«ã®äœ¿çšèš±è«Ÿå¥çŽæžãã確èªããŠãããŠãã ããã
zipãã¡ã€ã«ãããŠã³ããŒãåºæ¥ãã®ã§ãããã«ã¯ãªãã¯ãªã©ã§è§£åããŠãããŠãã ããã
Live2D Cubism 3ã®ã¢ãã«ããŒã¿ã¯.cmo3ãšããæ¡åŒµåã§ä¿åãããŠããŸããããããUnityã«ã€ã³ããŒãããéã«ã¯.moc3ãšããæ¡åŒµåã®çµèŸŒã¿çšãã¡ã€ã«åœ¢åŒãçšæããå¿
èŠããããŸãã
ä»åå©çšãããæ¡ç¬ã²ãããã¯.cmo3圢åŒã®ã¿ã®é
åžãªã®ã§ã.moc3圢åŒã«æžãåºãæ¹æ³ã説æããŸãã
çµèŸŒã¿çšãã¡ã€ã«ã®æžãåºãã«ã¯Cubism Editorã䜿çšããŸãã
ãã¡ãããCubism Editorãã€ã³ã¹ããŒã«ããŸãããã
å©çšèŠçŽã«åæããåŸãã¡ãŒã«ã¢ãã¬ã¹ãå ¥åããææ°çãããŠã³ããŒãããã¯ãªãã¯ããŠãã ãããããŠã³ããŒããããã¡ã€ã«ãããã«ã¯ãªãã¯ããæé ã«åŸã£ãŠã€ã³ã¹ããŒã«ããŠãã ããã
ã€ã³ã¹ããŒã«ãå®äºããŸããã
次ã«ã以äžã®ããŒãžã«åŸã£ãŠ.moc3ãã¡ã€ã«ãæžãåºããŠãã ããã
moc3ãã¡ã€ã«ã®æžãåºã | Live2D Manuals & Tutorials
http://docs.live2d.com/cubism-editor-manual/moc3-file/
(2020.07.27远èš)äžèšURLããªã³ã¯åãã«ãªã£ãŠããŸãããæãã以äžã®æé ã§å€§äžå€«ã§ãããæªç¢ºèªã§ãã
çµã¿èŸŒã¿çšããŒã¿ | Live2D Manuals & Tutorials
https://docs.live2d.com/cubism-editor-manual/export-moc3-motion3-files/
æžãåºãããã¡ã€ã«ã¯ãäžèšã®ããã«äžã€ã®ãã©ã«ãã«ãŸãšããŠãããŠãã ããã
çµèŸŒã¿çšãã¡ã€ã«ãUnityã«ã€ã³ããŒãããŠãããŸããå çšã®ãã©ã«ããUnityãšãã£ã¿ã®Projectãã¥ãŒäžã«ãã©ãã°ã¢ã³ãããããããŸãã
ã€ã³ããŒããçµãããšããã®ããã«ãã¬ãããã¡ã€ã«ãçæãããŸãã
ãã¬ãããã¡ã€ã«ãæ£åžžã«çæãããªãæã¯ïŒ
- Live2D SDKã®ã€ã³ããŒãåŸã«Unityã®åèµ·åã¯ããŸãããïŒ
- æžãåºãçšãã¡ã€ã«ã«äžè¶³ã¯ãããŸãããïŒ
ã¢ãã«ãã·ãŒã³äžã«é 眮ãã
ã€ã³ããŒãããã¢ãã«ãUnityã§è¡šç€ºããŠã¿ãŸãããã
Projectãã¥ãŒäžã§å³ã¯ãªãã¯ãããŠã[Create]>[Scene]ãéžæããŠãã ããã
Mainãšå
¥åããŠãã ããã
äœæããã·ãŒã³ãããã«ã¯ãªãã¯ã§éããŠãã ããã
ãã以äžã®ãããªãŠã£ã³ããŠã衚瀺ããããã[Don't Save]ãæŒãã°å€§äžå€«ã§ãã

Projectãã¥ãŒãããçæããããã¬ãããéžæããHierarchyãã¥ãŒã«ãã©ãã°ã¢ã³ãããããããŸãã
以äžã®ãããªç¶æ ã«ãªãã°OKã§ãã
Sceneãã¥ãŒã«ã¯ã¢ãã«ã衚瀺ãããŠããŸãããGameãã¥ãŒã«ã¯å°ãã衚瀺ãããŠããŸã£ãŠããŸããã«ã¡ã©ã®èšå®ã倿ŽããŠã倧ãã衚瀺ãããããã«èª¿æŽãããŸãã
Hierarchyãã¥ãŒã§Main CameraãéžæããŠãã ããã
Inspectorãã¥ãŒã«ã«ã¡ã©ã®èšå®ã衚瀺ãããã®ã§ã以äžã®ããã«å€æŽããŠãã ããã
- Transformã®Position yã
0.4ã«å€æŽ - Backgroundã
(R,G,B)=(0,255,0)ã«å€æŽ - Cameraã®Projectionã
Orthographicã«ãªã£ãŠããããšã確èªãã - Sizeã
0.2ã«å€æŽ
Backgroundã®èšå®
Gameãã¥ãŒã«ãã®ããã«è¡šç€ºãããããã«ãªããŸããã
ã¡ãã¥ãŒãã[File]>[Save Scenes]ãã¯ãªãã¯ããŠãã·ãŒã³ãä¿åããŠãããŸãããã
ã§ã¯æåŸã«ãUnityäžã§ã¢ãã«ãåãããŠã¿ãŸãããã
Hierarchyãã¥ãŒããã¢ãã«ãéžæããŠã¿ãŠãã ããã

(ã¬ã€ã¢ãŠããå€ããŠããŸã)
Inspectorãã¥ãŒã«Cubism Parameters Inspecotr (Script)ãšããã³ã³ããŒãã³ãã衚瀺ããããšæããŸããããããã®é
ç®ãã¢ãã«ã®åãã©ã¡ãŒã¿ãšå¯Ÿå¿ããŠããŸããèªç±ã«è²ã
ãšåãããŠã¿ãŸãããã
ãã®ããã«é£åããŠã¢ãã«ãåãããšã確èªã§ããŸãã
ãªãã倿Žãããã©ã¡ãŒã¿ã¯ãå³äžã®ãResetããã¿ã³ã§ãªã»ããããããšãã§ããŸãã
ãã¬ãŒã³ã¹ãäžãã
ããŠãããããã¯Live2Dã¢ãã«ããã£ã©ã¯ã¿ãŒãããæ¯ãèãããã®èšå®ãããŠãããŸãã
å£ãã¯ã®å®è£
ãŸãã¯èªåã®å£°ã«åãããŠãã£ã©ã¯ã¿ãŒãå£ãã¯ãããããã«ããŠã¿ãŸãããã
Unityã§ãã€ã¯é³å£°ãååŸããé³å£°ã®å€§ããããã£ã©ã¯ã¿ãŒã®å£ã®ééã«åæ ãããããšã§å®çŸãããŸãã
Projectãã¥ãŒäžã§å³ã¯ãªãã¯ãããŠã[Create]>[C# Script]ãã¯ãªãã¯ããŠãã ããããã¡ã€ã«åã«ã¯SimpleLipSyncerãšå
¥åããŠãã ããã
SimpleLipSyncerãããã«ã¯ãªãã¯ããŠãšãã£ã¿ãéããŸãã以äžã®ã¹ã¯ãªãããã³ããŒã¢ã³ãããŒã¹ãããä¿åããŠãã ããã
using UnityEngine;
using Live2D.Cubism.Core;
/// <summary>
/// å£ãã¯ãè¡ãã¯ã©ã¹
/// </summary>
[RequireComponent(typeof(AudioSource))]
public class SimpleLipSyncer : MonoBehaviour
{
AudioSource audioSource = null;
[SerializeField]
CubismParameter MouthOpenParameter = null;
float velocity = 0.0f;
float currentVolume = 0.0f;
[SerializeField]
float Power = 20f;
[SerializeField, Range(0f, 1f)]
float Threshold = 0.1f;
void Start()
{
// 空㮠Audio SourceãååŸ
audioSource = GetComponent<AudioSource>();
// Audio Source ã® Audio Clip ããã€ã¯å
¥åã«èšå®
// åŒæ°ã¯ãããã€ã¹åïŒnull ãªãããã©ã«ãïŒãã«ãŒããäœç§åããããµã³ããªã³ã°åšæ³¢æ°
audioSource.clip = Microphone.Start(null, true, 1, 44100);
// ãã€ã¯ã Ready ã«ãªããŸã§åŸ
æ©ïŒäžç¬ïŒ
while (Microphone.GetPosition(null) <= 0) { }
// åçéå§ïŒé²ã£ãå
ããåçãã¹ããŒã«ãŒããåºåãããšããŠãªã³ã°ããŸãïŒ
audioSource.Play();
audioSource.loop = true;
}
private void LateUpdate()
{
float targetVolume = GetAveragedVolume() * Power;
targetVolume = targetVolume < Threshold ? 0 : targetVolume;
currentVolume = Mathf.SmoothDamp(currentVolume, targetVolume, ref velocity, 0.05f);
if (MouthOpenParameter == null)
{
Debug.LogError("MouthOpenParameterãèšå®ãããŠããŸãã");
return;
}
// CubismParameterã®æŽæ°ã¯LateUpdate()å
ã§è¡ãå¿
èŠãããç¹ã«æ³šæ
MouthOpenParameter.Value = Mathf.Clamp01(currentVolume);
}
float GetAveragedVolume()
{
float[] data = new float[256];
float a = 0;
audioSource.GetOutputData(data, 0);
foreach (float s in data)
{
a += Mathf.Abs(s);
}
return a / 255.0f;
}
}
Hierarchyãã¥ãŒäžã§å³ã¯ãªãã¯ãããŠãCreate EmptyãéžæããŠãã ãããäœæããGameObjectãéžæããç¶æ
ã§ãAdd Componentãã¯ãªãã¯ããŠãã ããã
SimpleLipSyncãæ€çŽ¢ããæ±ºå®ããŸãã
ãã®ã¹ã¯ãªããããã€ã¯é³å£°ãååŸãã圹å²ãæãããŸãã
次ã«ååŸããé³å£°ãå£ã®ééã«åæ ãããããã®èšå®ãè¡ããŸãã
å
çšã®GameObjectãéžæããç¶æ
ã§ãSimple Lip Syncerã®Mouth Open Parameterã®å³ç«¯ã®âãã¯ãªãã¯ããŸãããŠã£ã³ããŠã衚瀺ãããã®ã§ãParameterMouthOpenYãæ€çŽ¢ããŠéžæããŸãã
ãã®ç¶æ ã§Playãã¿ã³ãæŒããŠåçããããŠãã€ã¯ã«åãã£ãŠåã£ãŠã¿ãŸãããã
ãã£ã©ã¯ã¿ãŒãèªåã®å£°ã«åãããŠå£ãã¯ããããã«ãªããŸããã
ãªãããã®æ¹æ³ã ãšãã€ã¯é³ãPCãã鳎ã£ãŠããŸãç¹ã«æ³šæããŠãã ããã
(åé¡ãããå Žåã¯ãåŸè¿°ã®AniLipSync-live2dãªã©ã䜿çšããŠãã ãããå£ã®åœ¢ãäžã€ã ãã§ã5ç®æã«èšå®ããŠããŸã£ãŠå€§äžå€«ã§ãã)
ãŸã°ãããä»ãã
åè: èªåãŸã°ããã®èšå®
ã·ãŒã³äžã®ã¢ãã«ã«ä»¥äžã®ã¹ã¯ãªãããAddComponentããŸãã
-
CubismEyeBlinkController-
BlendModeãOverrideã«èšå®
-
CubismAutoEyeBlinkInput
ãŸã°ãããããããã©ã¡ãŒã¿(=ç®ã®ééãã©ã¡ãŒã¿)ã«CubismEyeBlinkParameterãAddComponentããŸãã
察象ã¯ä»¥äžã®2ã€ã§ãã
ã¢ãã«/Parameters/ParamEyeLOpenã¢ãã«/Parameters/ParamEyeROpen
`ParamEyeROpen`ãåæ§ã«èšå®ããŠãã ããã
èšå®åŸãåçããŠã¿ããšãŸã°ããããããšã確èªã§ãããšæããŸãã
åŒåžã¢ãŒã·ã§ã³
åè: ãã©ã¡ãŒã¿ãåšæçã«åäœãããæ¹æ³
ã·ãŒã³äžã®ã¢ãã«ã«ä»¥äžã®ã¹ã¯ãªãããAddComponentããŸãã
-
CubismHarmonicMotionController-
BlendModeãOverrideã«èšå®
-
åŒåžã«åãããŠåãããããã©ã¡ãŒã¿ã«CubismHarmonicMotionParameterãAddComponentããŸãã
ä»åã¯ä»¥äžã®2ã€ã«è¿œå ããŠã¿ãŸãããã
ã¢ãã«/Parameters/ParamBodyAngleYã¢ãã«/Parameters/ParamBreath
ããããã®ã³ã³ããŒãã³ãã«ãäžèšã®ãããªå€ãèšå®ããŠãã ããã
èšå®åŸãåçããŠã¿ããšåŒåžã¢ãŒã·ã§ã³ã確èªã§ãããšæããŸãã
é ãšèŠç·ãåãã
ããŠã¹ã®åãã«åãããŠãã£ã©ã¯ã¿ãŒãç®ã§è¿œãããã«ããŠã¿ãŸãããã
Projectãã¥ãŒäžã§å³ã¯ãªãã¯ãããŠã[Create]>[C# Script]ãã¯ãªãã¯ããŠãã ããããã¡ã€ã«åã«ã¯GazeControllerãšå
¥åããŠãã ããã
GazeControllerãããã«ã¯ãªãã¯ããŠãšãã£ã¿ãéããŸãã以äžã®ã¹ã¯ãªãããã³ããŒã¢ã³ãããŒã¹ãããä¿åããŠãã ããã
using Live2D.Cubism.Core;
using UnityEngine;
/// <summary>
/// ç®ç·ã®è¿œåŸãè¡ãã¯ã©ã¹
/// </summary>
public class GazeController : MonoBehaviour
{
[SerializeField]
Transform Anchor = null;
Vector3 centerOnScreen;
void Start()
{
centerOnScreen = Camera.main.WorldToScreenPoint(Anchor.position);
}
void LateUpdate()
{
var mousePos = Input.mousePosition - centerOnScreen;
UpdateRotate(new Vector3(mousePos.x, mousePos.y, 0) * 0.2f);
}
Vector3 currentRotateion = Vector3.zero;
Vector3 eulerVelocity = Vector3.zero;
[SerializeField]
CubismParameter HeadAngleX = null, HeadAngleY = null, HeadAngleZ = null;
[SerializeField]
CubismParameter EyeBallX = null, EyeBallY = null;
[SerializeField]
float EaseTime = 0.2f;
[SerializeField]
float EyeBallXRate = 0.05f;
[SerializeField]
float EyeBallYRate = 0.02f;
[SerializeField]
bool ReversedGazing = false;
void UpdateRotate(Vector3 targetEulerAngle)
{
currentRotateion = Vector3.SmoothDamp(currentRotateion, targetEulerAngle, ref eulerVelocity, EaseTime);
// é ã®è§åºŠ
SetParameter(HeadAngleX, currentRotateion.x);
SetParameter(HeadAngleY, currentRotateion.y);
SetParameter(HeadAngleZ, currentRotateion.z);
// çŒçã®åã
SetParameter(EyeBallX, currentRotateion.x * EyeBallXRate * (ReversedGazing ? -1 : 1));
SetParameter(EyeBallY, currentRotateion.y * EyeBallYRate * (ReversedGazing ? -1 : 1));
}
void SetParameter(CubismParameter parameter, float value)
{
if (parameter != null)
{
parameter.Value = Mathf.Clamp(value, parameter.MinimumValue, parameter.MaximumValue);
}
}
}
Hierarchyãã¥ãŒã®ã¢ãã«ã®äžã§å³ã¯ãªãã¯ããã[CreateEmpty]ãéžæãAnchorãšããååã«ããŠãã ãããEditorãã¥ãŒäžã§çéã®äœçœ®ã«Anchorãç§»åãããŸããããã²ããã¢ãã«ã®å Žåã¯ã(x,y,z)=(0,0.45,0)ã®äœçœ®ã§ãã
ã¢ãã«ã«å¯ŸããŠå
çšã®ã³ã³ããŒãã³ããã¢ã¿ããããŸãã
以äžã®ããã«èšå®ããŠãã ããã察å¿ãããã©ã¡ãŒã¿ãååšããªãå ŽåãããããšæããŸãããããåã ãã§å€§äžå€«ã§ãã
ãã®ç¶æ ã§åçãããããŠã¹ãåãããŠèŠãŠãã ããã
ããŠã¹ã®å ã远ãããã«é ãåããšæããŸãã
ãŸããReversedGazingã«ãã§ãã¯ãå
¥ããŠã¿ããšä»¥äžã®ããã«ãªããŸãã
ä»åºŠã¯åžžã«æ£é¢ãèŠã€ããç¶æ ã§é ãåãããã«ãªããŸããã
衚æ ãä»ãã
ãã¡ãã®èšäºãåèã«ããŠãã ããã
衚æ
ã»ããŒãºãåãæ¿ãã
å¿çšç·š
ããããã¯å¿çšç·šã§ããããã€ãã®ãããé åçã«ãªã衚çŸãã玹ä»ããã®ã§ããã²åèã«ããŠã¿ãŠãã ããã
ãªããããã¢ãã¡ã®ãããªãªããã·ã³ã¯ãå®è£ ãã
Live2Dã§ã¢ãã¡èª¿ã®ãªããã·ã³ã¯ãå®çŸã§ããAniLipSync-live2dãšããã©ã€ãã©ãªã䜿ã£ãäŸã§ãã

ãããŒããŒããŒããŒããŒããããªæãã§ããªããã·ã³ã¯ãã§ããŸãïŒã
å¥ã®èšäºã§å°å
¥æ¹æ³ã玹ä»ããŠããã®ã§ãåèã«ããŠã¿ãŠãã ããã
Live2Dã§ã¢ãã¡èª¿ã®ãªããã·ã³ã¯ãå®çŸãããAniLipSync-live2dãã®äœ¿ãæ¹
ãã€ã¹ãã§ã³ãžã£ãŒ
VTuberãšããŠæŽ»åãããšããèŠãç®ãšå£°ãåã£ãŠããªãå ŽåããããšæããŸãã
ãã®å Žåã¯ãã€ã¹ãã§ã³ãžã£ãŒã䜿ã£ãŠãªã¢ã«ã¿ã€ã ã«å¥ã®å£°ã«å€æãããšããéžæè¢ããããŸãã
Windowsã§ã¯ããªãŒãœããã®æå£°ã䜿ã£ãããæ¹ããæè»œã§ããMacãªãGarageBandã§ä»£æ¿åºæ¥ããšæããŸãã
ãŸããVT-4ãªã©ãã€ã¹ãã©ã³ã¹ãã©ãŒããŒãšåŒã°ããæ©åšãçšããŠå£°ã®å€æãè¡ãããšããããŸããæ¯é調ã¹ãŠã¿ãŠãã ããã
ãã£ãŸãã ãé ããšå šç¶éãâŠç¥èŠã ⊠pic.twitter.com/JKK0Je8kds
â Nakaji Kohki (@kohki_nakaji) 2018幎7æ14æ¥
ARKitã䜿ã£ã衚æ èªè
iPhone X以éã®FaceIDãä»ãã端æ«ã§å©çšã§ããARKitã®Face Trackingãšããæ©èœã䜿ããšããã®ããã«é«ã粟床ã§é¡èªèãããŠè¡šæ ãªã©ãå€ããããšãåºæ¥ãŸãã
iPhone X+ARKit+Live2Dãã©ããªæãã«åããã®ãµã³ãã«
â ð¯ (@mzyy94) 2017幎11æ16æ¥
(é³å£°ã¯PCã§åçããŠããã€ãé²é³ãããã®)
ãŸã 衚æ ã®ãã©ã¡ãŒã¿ãŒã¯åŒããããããæã pic.twitter.com/xNQZcQhsTY
OpenCVforUnityã䜿ã£ãå®è£
ARKitã®Face Trackingã䜿ããªãé¡èªèã ãšããã®ãããªéžæè¢ããããŸãã
å°ãé«é¡ãªææã¢ã»ãããå¿
èŠã§ãããå°å
¥ãããããšæããŸãã
OBSã䜿ã£ãåç»ã®åé²ã»é ä¿¡
ãã£ã©ã¯ã¿ãŒãåããããã®é ä¿¡ã·ã¹ãã ã¯æäœéã§ãããšæãã®ã§ã次ã¯å®éã«é ä¿¡ããæé ã玹ä»ããŸãã
é ä¿¡ã¢ããªã®æžãåºã
ãŸãã¯å çšã®ã·ã¹ãã ããé ä¿¡ã«äœ¿ããããããã«ã¢ããªãšããŠæžãåºããŸãã
PlayerSettingsã®èšå®
ã¡ãã¥ãŒããã[Edit]>[Project Settings]>[Player]ãéžæããŸãã
Inscpectãã¥ãŒã§[ã¹ã¿ã³ãã¢ãã³ã¿ã]>[Resolution and Presentation]ãéããRun In Backgroundã«ãã§ãã¯ããããã
BuildSettingsã®èšå®
ã¡ãã¥ãŒããã[File]>[Build Settings]ãéžæããŸãã
Add Open ScenesãéžæããMainã·ãŒã³ãScenes In Buildã«è¿œå ãããããšã確èªããŠBuildãã¿ã³ãæŒãã
é©åœãªååãä»ããŠãSaveããã¿ã³ãæŒãã
ãã®ããã«ç¡äºã¢ããªãæžãåºãããããã«ãæåã§ãã
Windowsã®æ¹ã¯é©å®èªã¿æ¿ããŠãã ããã
.dllåšãã§ãšã©ãŒãåºãå ŽåãUnityãåèµ·åããŠããäžåºŠè©ŠããŠã¿ãŠãã ããã
ã¢ããªã®èµ·å確èª
ãã«ããããã¡ã€ã«ãããã«ã¯ãªãã¯ã§å®è¡ããŸãã
Windowedã«ãã§ãã¯ãå
¥ããŸãã
ãã®ä»ã®èšå®ã¯ããŸããã§è¯ãã§ãããLive2DãOVRLipSyncã¯ããããè² è·ãé«ãã¢ããªãªã®ã§ãåäœãéããªãããã§ãããäœãã«ãããšè¯ãããšæããŸãã
ä»»æã®èšå®ãå®äºããããPlay!ããã¿ã³ãæŒããŸãã
ã¢ãã«ãåŒåžãªã©ã®ã¢ãã¡ãŒã·ã§ã³ãããŠããããšããªããã·ã³ã¯ãæ£åžžã«åãããšãªã©ã確èªããŠãã ããã
OBSã®èšå®
é
ä¿¡ã«ã¯Open Broadcaster Software (OBS)ãšããã¢ããªã±ãŒã·ã§ã³ãå©çšããŸãã
Windows, Mac, LinuxããµããŒãããŠãããªãŒãã³ãœãŒã¹ã®é
ä¿¡ãœãããŠã§ã¢ã§ãã
ãã¡ãã®ããŠã³ããŒãããŒãžãéããã䜿ãã®OSã«å¯Ÿå¿ããã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŠãã ããããŸãããã®ãŸãŸã€ã³ã¹ããŒã«ãé²ããŠãã ããã
ã€ã³ã¹ããŒã«ãå®äºãããOBSãèµ·åããŸããååèµ·åæã«ããããèšå®ãé©çšãããèããããããããŸããããããšãã倿Žã§ããã®ã§ã©ã¡ãã§ã倧äžå€«ã§ãã
ãã®ãããªç»é¢ã衚瀺ãããŸãã
ãœãŒã¹ã®èšå®
ãœãŒã¹ã®ã+ããããŠã£ã³ããŠãã£ããã£ãéžæ
æ°èŠäœæãéžæãããç¶æ ã§ä»»æã®ååãå ¥åããOKãæŒããŸããååã¯ãã®ãŸãŸã§ã倧äžå€«ã§ãã
ãªã¹ãã®äžããæžãåºããã¢ããªãéžæããã
èµ·åäžã®ã¢ããªã®ã¿ããªã¹ãã«è¡šç€ºãããç¹ã«æ³šæããŠãã ããã
æ£ããéžæã§ãããšäžèšã®ããã«æžãåºããã¢ããªã®æ åã衚瀺ãããã®ã§ããã®ç¶æ ã§OKãæŒããŸãã
ãœãŒã¹ãããå
çšè¿œå ãããŠã£ã³ããŠãã£ããã£ã®äžã§å³ã¯ãªãã¯ããããã£ã«ã¿ãéžæããŸãã
ãšãã§ã¯ããã£ã«ã¿ããã¯ããããŒãéžæ
ããã©ã«ãã§ç·ã«ãªã£ãŠããã®ã§ããã®ããã«èæ¯ãééãããŸãã
ããUnityåŽã§å¥ã®è²ãèæ¯è²ã«èšå®ããŠããå Žåãªã©ã¯ãé©å®èšå®ã倿ŽããŠãã ããã
(Macã®ã¿)ãŠã£ã³ããŠã®æ ãåãæããŸãããšãã§ã¯ããã£ã«ã¿ããã¯ããã/ããããéžæããŠãã ãããç»åã®ããã«å€ã調æŽããŠãã ããã
èšå®ãå®äºããããå³äžã®ãéããããã¿ã³ãæŒããŠãã ããã
æåŸã«ãèµ€æ ããã©ãã°ããŠãµã€ãºãšäœçœ®ã調æŽããŠãã ããã
ç«¯ã®æ¹ã¯è£æ£ãå¹ãã®ã§åããããããšæããŸãã
èæ¯ã®èšå®
èæ¯ãèšå®ããŸããä»åã¯ç»åãå©çšããŸãããäŸãã°åç»ãã¡ã€ã«ããã¹ã¯ããããã²ãŒã ç»é¢ãªã©ãèæ¯ã«ããŠã倧äžå€«ã§ããèäœæš©ãªã©ã«ã¯ååã«æ³šæããŠãã ããã
ä»åã¯ãã¡ãã®ç»åã䜿çšãããŠããã ããŸããã
ãœãŒã¹ã®ã+ãããç»åãéžæããæ°èŠäœæããä»»æã®ååãä»ããŠOKãæŒããŸãã
ãåç
§ããã¯ãªãã¯ãããã¡ã€ã©ãŒããä»»æã®ç»åãéžæããŸãã
äžèšã®ããã«ãªã£ããããOKããã¯ãªãã¯ããŸãã
èµ€æ ããã©ãã°ããŠãµã€ãºãäœçœ®ã®èª¿æŽãè¡ããŸãã
èæ¯ããã£ã©ã¯ã¿ãŒãããäžã«è¡šç€ºãããŠããã®ã§ãéãªãé ãå
¥ãæ¿ããŸãã
ãœãŒã¹ããç»åãã¯ãªãã¯ããŠããVããã¯ãªãã¯ããŸãã
ãœãŒã¹ã§ã¯é çªãäžã®ãã®ã»ã©æåã«è¡šç€ºãããã®ã§ã以äžã®ããã«æ£ããéãªãé ã«ãªããŸããã
ããã§æ åã®æºåã¯å®äºããŸããã
é³å£°ã®èšå®
æåŸã«é³å£°ã®èšå®ãããŸãã
ãœãŒã¹ã®ã+ããããé³å£°å ¥åãã£ããã£ããéžæããæ°èŠäœæããä»»æã®ååãæã£ãŠOKãæŒããŸãã
ããã€ã¹ã®ãªã¹ããããæ¢å®ããéžæããŸããããå ¥åãããé³å£°ãœãŒã¹ãããå Žåãããã€ã¹ãã§ã³ãžã£ãŒãªã©ã䜿ã£ãŠããŠä»®æ³é³å£°ãœãŒã¹(Soundflowerç)ã䜿ãããå Žåãªã©ã¯ããã¡ããèšå®ããŠãã ããã
éžæãããOKãæŒããŸãã
èšå®ããé³å£°ã«äœµããŠã²ãŒãžãåå¿ããããšã確èªåºæ¥ããšæããŸãã
ããã ãã§ãè¯ãã®ã§ãããOBSã§ã¯æ åã®ãã£ããã£æã«å°ãé
å»¶ããããŸãã
æžãåºããã¢ããªãOBSã䞊ã¹ãŠå£ãã¯ãããŠã¿ããšãå
ã¢ããª(å³)ã®å£ãåããŠããOBS(å·Š)ã®å£ãåããŸã§ã«ã¯ã³ãã³ãé
ããŠããããšãåãããšæããŸãã
ããã§ããã€ã¹ã®åé²ãæ åã®é
å»¶ã«äœµããŠå°ãé
ãããèšå®ãããŸãã
ãããµãŒã®å³ã®æ¯è»ã¢ã€ã³ã³ãã¯ãªãã¯ããããªãŒãã£ãªã®è©³çްããããã£ããéžæããŠãã ããã
ãã€ã¯ã®åæãªãã»ããã«å€ãå ¥åããŠãã ãããç°å¢æ¯ã«é å»¶æéãç°ãªãã®ã§ã調æŽããŠã¿ãŠãã ããã
å®äºãããéãããæŒããŠãã ããã
ããã§æ åãšé³å£°ã®æºåãåºæ¥ãŸããã
åç»ã®é²ç»
å³äžã®ãèšå®ããããåºåã¿ãã®ãé²ç»ãã©ãŒãããããmp4ãmovãªã©ã«å€æŽããŠãã ããã
(ããã©ã«ãã®flvã ãšæ±ãã¥ãããšæãã®ã§)
é²ç»éå§ãã¿ã³ã§é²ç»éå§ãé²ç»çµäºãã¿ã³ã§é²ç»çµäºã§ãã
ãªãããªããã·ã³ã¯ã®åå¿ãæªãæã¯ãæžãåºããã¢ããªãéžæããç¶æ ã§åé²ãè¡ã£ãŠãã ãã(é²ç»éå§ãã¿ã³ãæŒããçŽåŸã«ãæžãåºããã¢ããªã®ãŠã£ã³ããŠãã¯ãªãã¯ããã°OKã§ã)ããŠã£ã³ããŠãéžæããŠããªãç¶æ ã ãšèªèãã¥ããåé¡ãããããã§ãã
é²ç»ãçµäºãããšãMacã ãšMovieãã©ã«ããªã©ã«åºåãããŸãã
åºåå Žæã¯ããèšå®ãããåºåã¿ããéžã³ããé²ç»ãã¡ã€ã«ã®ãã¹ãã«ãŠç¢ºèªã»å€æŽããããšãåºæ¥ãŸãã
åç»ãåçããæ åãé³å£°ããã¡ããšåé²ãããŠããããšã確èªããŠãã ããã
ããšã¯TwitterãYouTubeã«ã¢ããããŒãããã°ãèŠäºVTuberããã¥ãŒã§ãïŒ
ãã®ä»
OBSã«ã¯YouTubeãªã©ã®çé
ä¿¡ãè¡ãæ©èœããé³å£°ã®ãã€ãºãé€å»ããæ©èœãªã©ãæ§ã
ãªæ©èœãä»ããŠããŸãã
ããããããšãããã°ãæ¯é調ã¹ãŠææŠããŠã¿ãŠãã ããã
æåŸã«
ä»åæ±ã£ãå
容ã¯åºæ¬çãªããšã°ããã§ãã
è²ã
ãªæè¡ãçµã¿åãããŠãã²é
åçãªãã£ã©ã¯ã¿ãŒãçã¿åºããŠãã ããïŒ
ææ¥ã¯ãããŒãã£ã«ã¢ãŒã·ã§ã³ãã£ããã£éçºè
ã® @sh_akira ããã«ããUniVRM+SteamVR+Final IKã§å§ããVTuberã§ãã
VTuber Tech #1 Advent Calendar 2018
VTuber Tech #2 Advent Calendar 2018
é¢é£
ããµããŒã¿ãŒãºCoLabå匷äŒãUnity+Live2Dã§å§ããVTuberå
¥éãã³ãºãªã³ - ãµããŒã¿ãŒãºCoLab
https://supporterzcolab.com/event/568/
äœã¹ããã¯PCã§Vtuberã«ãªãããã€ãã®æ¹æ³ - Qiita
https://qiita.com/Hirosaji/items/83777124823683766d96










