ã¯ããã«
ãã®èšäºã¯VTuber Tech #1 Advent Calendar 2018ã®2æ¥ç®ã®èšäºã§ã
æšæ¥ã®èšäºã¯@nkjzmããã«ããããåå¿è
åããUnityãšLive2Dã§æ¡åŒµããããVTuberé
ä¿¡ã·ã¹ãã ãäœãæ¹æ³ã§ãã
ããã«ã¡ã¯ãããã(@sh_akira)ã§ãã
æ®æ®µã¯ããŒãã£ã«ã¢ãŒã·ã§ã³ãã£ããã£ãŒãšããVRMã¢ãã«ãæäœããã¢ããªãäœã£ãŠããŸãã
ä»åã¯ãããšã¯å¥ã®ã¢ãããŒãã§èªåã ãã®VTuberç°å¢ãäœã£ãŠã¿ãããšããèšäºã§ãã
VRæ©åšã§3Dã¢ãã«ãåãããŠãããããVTuberã®ãããªããšãåºæ¥ãããã«ãªããŸã§ã
æšæ¥ã®èšäºãšåããUnityãåããŠè§Šã人ã§ãåããããã«éçºç°å¢ã®ã€ã³ã¹ããŒã«ããå
šãŠèª¬æããŠããŸãã
ä»åã¢ãã«ã®ãã¡ã€ã«åœ¢åŒã«VRM圢åŒã䜿çšããŠããŸãã
VRM圢åŒã«ã€ããŠã¯ãVRMã®äœãããã®ïŒãšãã話 ãã¡ãã«åããããããŸãšãŸã£ãŠããŸãã®ã§ã芧ãã ããã
èšäºäžã®ãœãŒã¹ã³ãŒãã¯ãããªãã¯ãã¡ã€ã³ã§ãããã©ã°ã€ã³ã«ã€ããŠã¯åã©ã€ã»ã³ã¹ã«åŸã£ãŠãã ããã
宿å
宿å(åã蟌ã¿çš) pic.twitter.com/tz2CqTJBYr
â ðŸãããâïžïŒ VMC0.21 (@sh_akira) 2018幎12æ2æ¥
å¿ èŠãªæ©æ
- HTC Vive (Oculus/WinMRã¯ä»å説æããŸãããåºæ¬çã«æé ã¯å€ãããåãã¯ãã§ã)
- VR Ready PC (Windows 10ã§ã)
å¿ èŠãªãã©ã°ã€ã³
- UniVRM 0.45 (VRMã¢ãã«ã®èªèŸŒãããŸã)
- SteamVR plugin 2.0.1 (VRæ©åšãæ±ããŸã) *** ææ°ã ãšãšã©ãŒã«ãªãããã§ããã³ã¡ã³ãæ¬åç §ãã ãã ***
- Final IK 1.8 (ææ$90ã§ãã宿çã«ã»ãŒã«ã§åé¡ã«ãªã£ããããŸãã)
- OVRLipSync 1.28.0
- AniLipSync-VRM 1.0.0
䜿çšã¢ãã«
- ãã³ãç«äœã¡ãã(ã¢ãªã·ã¢ã»ãœãªãã)ã®VRMã¢ãã«
éçºç°å¢
- Unity 2017.4.15f
æè¿VRChatã®éçºç°å¢ããã®ããŒãžã§ã³ã«ãªã£ãã®ã§ä»åã¯åãããŒãžã§ã³ã§éçºããŸãã
éçºç°å¢æ§ç¯
Unityã®ã€ã³ã¹ããŒã«
ãŸãã¯Unityãã€ã³ã¹ããŒã«ããŸãã
ããŠã³ããŒãããŒãžããUnity 2017.xå
ã«ããUnity 2017.4.15ã®Unity ã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŸãã

ããŠã³ããŒããããUnityDownloadAssistant-2017.4.15f1.exeãå®è¡ããŠãã ããã
åºæ¬çã«ã¯ããã©ã«ãã®èšå®ã®ãŸãŸNextã§é²ãã§ããã

ã€ã³ã¹ããŒã«å
ã®æå®ã§ãã®Unityã®ããŒãžã§ã³åããã©ã«ãã«ã€ãããšè€æ°ã®ããŒãžã§ã³ã®Unityãã€ã³ã¹ããŒã«ã§ããŸãã
ä»åã¯"C:\Program Files\Unity 2017.4.15f1"ã«ããŸããã

ã€ã³ã¹ããŒã«ãå®äºãããš"Launch Unity"ã®ãã§ãã¯ãããã®ã§ããã§ãã¯ãå
¥ãããŸãŸFinishããŠUnityãå®è¡ããŸãã
ãããžã§ã¯ãã®èšå®ããã
â»åããŠã€ã³ã¹ããŒã«ããå Žåãã®æ®µéã§Unityã®ã¢ã«ãŠã³ãç»é²ããã°ã€ã³ãå¿
èŠã«ãªãå ŽåããããŸãã
ç»é¢ã®æç€ºã«åŸã£ãŠãã°ã€ã³ããŠãã ããã

Unityãèµ·åãããšãããžã§ã¯ããéãç»é¢ã衚瀺ãããã®ã§å³äžã®NewãæŒããŸãã

Project Nameã«å¥œããªãããžã§ã¯ãåãä»ããŸããä»åã¯MyVTuberãšããŸããã
è¯ããã°Create ProjectãæŒããŸãã
Unityã®ç»é¢ã衚瀺ãããŸãããåãããããããã«ã¬ã€ã¢ãŠãã倿ŽããŸãã

ç»é¢å³äžã®Defaultã2by3ã«å€æŽããŸã
çŸåšã®Scene(ã·ãŒã³)ãä¿åããŸã

ç»é¢äžå€®ã®Hierarchyå
ã«ããUntitledãå³ã¯ãªãã¯ããŠSave Scene AsãæŒããã·ãŒã³ãä¿åããŸãã

ä»åã¯ãã®ãŸãŸAssetsãã©ã«ãã«ãããžã§ã¯ãåãšåãMyVTuberãšããååãä»ããŠä¿åããŸãã
Projectå
ã«ä»ä¿åããMyVTuberãçŸããŸããããã®ãŸãŸã ãšã¢ã€ã³ã³ã倧ããèŠã¥ãããã

ç»é¢äžéšã®ããŒãäžçªå·Šã«ããŠãªã¹ãã«å€æŽããŠãããŸãã
å¿ èŠãªã¢ã»ãããã€ã³ããŒããã
SteamVR Plugin

äžéšã®Windowã¡ãã¥ãŒããAsset StoreãéããŸã

æ€çŽ¢æ¬ã«SteamVRãšå
¥åãããšåºãŠããSteamVR PluginãæŒããŸãã

ããŠã³ããŒãããŠã€ã³ããŒããæŒããŸãããããšImport Unity Packageã®ç»é¢ãåºãŸãã®ã§ããã®ãŸãŸå³äžã®ImportãæŒããŠãã ããã

ãã®åŸãã®ãããªç»é¢ãåºãå Žåã¯ãAccept AllãæŒããŸãã
Unity 2018.3.xã䜿çšããå Žåãã¡ãã¥ãŒå ã®PackageManagerããOpenVRãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãããã®æé æžéãã®ããŒãžã§ã³ã§ã¯é¢ä¿ãããŸãã
Final IK

次ã«Asset Storeã®æ€çŽ¢æ¬ã« Finalãšå
¥ãããšåºãŠããFinal IKãæŒããŸãã

æã£ãŠãªãå Žåã¯è³Œå
¥ããŠãããŠã³ããŒãããŠã€ã³ããŒããæŒããŸãããããšImport Unity Packageã®ç»é¢ãåºãŸãã®ã§ããã®ãŸãŸå³äžã®ImportãæŒããŸãã
UniVRM

UniVRMã®ãªãªãŒã¹ããŒãžããUniVRM-0.45_0c49.unitypackageãããŠã³ããŒãããŸãã

Unityäžéšã®Assetsã¡ãã¥ãŒ->Import Package->Custom Package...ãæŒããŠãããŠã³ããŒãããUniVRM-0.45_0c49.unitypackageãéããŸãã

ãããšImport Unity Packageã®ç»é¢ãåºãŸãã®ã§ããã®ãŸãŸå³äžã®ImportãæŒããŠãã ããã

以äžã§å¿
èŠãªã¢ã»ããã®ã€ã³ããŒãã¯å®äºãªã®ã§ãå·Šäžã®Sceneã¿ããæŒããŠå
ã®ç»é¢ã«æ»ããŸãã
æ£ããã€ã³ããŒãã§ããŠããã°å³åŽã®Projectå
ã®Assetsãã©ã«ãã®äžã«PluginsãSteamVRãVRMã®3ãã©ã«ããããã¯ãã§ãã
VRMã¢ãã«ãã€ã³ããŒããã

Projectå
ã®Assetsãå³ã¯ãªãã¯ããŠåºãã¡ãã¥ãŒããCreate->FolderãéžæããŠåºæ¥ãæ°ãããã©ã«ããŒã«Modelsãšååãä»ããŸãã

åºæ¥ãModelsãã©ã«ããå³ã¯ãªãã¯ããŠShow in ExplorerãæŒããŠãšã¯ã¹ãããŒã©ãéããŸãã

Assetsãã©ã«ããéãã¯ããªã®ã§ãModelsãéããŠãã ããããŸã äžèº«ã¯ç©ºã§ãã

ãã³ãç«äœã¡ãã(VRM)ã®ããŒãžããããŠã³ããŒããæŒããŠããŠã³ããŒãããzipãã¡ã€ã«ãè§£åããŸãã

Alicia_VRM\Alicia\VRMå
ã«AliciaSolid.vrmãã¡ã€ã«ãããã®ã§ãå
ã»ã©éããModelsãã©ã«ãã«ã³ããŒããŠãã ããã

Unityã«æ»ããšèªåã§ã€ã³ããŒããå§ãŸããŸããçµãã£ããModelsãã©ã«ããéããŠãã ãããAliciaSolidã®Prefab(éãç«æ¹äœã®ã¢ã€ã³ã³)ã衚瀺ãããŠããã°ã€ã³ããŒãå®äºã§ãã

VRMãã¡ã€ã«ã«ã¯ããããã©ã€ã»ã³ã¹ãèšå®ãããŠããŸããPrefabãéžæãããšInspectorå
ã®VRM Meta (Script)ã«
ã¢ãã¿ãŒã®äººæ Œã«é¢ãã蚱諟ç¯å²(Personation / Charaterization Permission)
- ã¢ãã¿ãŒã«äººæ Œãäžããããšã®èš±è«Ÿç¯å²(A person who can perform with this avatar)
- ã¢ãã¿ãŒãæäœããããšã¯ã¢ãã¿ãŒäœè ã«ã®ã¿èš±ããã(Only Author)
- æç¢ºã«èš±å¯ããã人éå®(Explictly Licensed Person)
- å šå¡ã«èš±å¯(Everyone)
- ãã®ã¢ãã¿ãŒãçšããŠæŽå衚çŸãæŒããããšã®èš±å¯(Violent acts using this avatar)
- äžèš±å¯(Disallow)
- èš±å¯(Allow)
- ãã®ã¢ãã¿ãŒãçšããŠæ§ç衚çŸãæŒããããšã®èš±å¯(Sexuality acts using this avatar)
- äžèš±å¯(Disallow)
- èš±å¯(Allow)
- åçšå©çšã®èš±å¯(For commercial use)
- äžèš±å¯(Disallow)
- èš±å¯(Allow)
- ãã®ä»ã®ã©ã€ã»ã³ã¹æ¡ä»¶(Other License Url)
- äžèšèš±è«Ÿæ¡ä»¶ä»¥å€ã®ã©ã€ã»ã³ã¹æ¡ä»¶ãããå Žåã¯ãã®ã©ã€ã»ã³ã¹ææžãžã®URLãèšè¿°
ãã®ãããªã©ã€ã»ã³ã¹æ å ±ãå ¥ã£ãŠããŸãã®ã§ãå¿ ã䜿çšããã¢ãã«ã®èŠçŽã«åŸã£ãŠãã ããã
å®éã«äœã£ãŠã¿ã
SteamVR Pluginãé 眮ãã

Projectå
ã®Assets\SteamVR\Prefabsã«ãã[CameraRig]ããã©ãã°ããŠHierarchyã®ã·ãŒã³å
ã«é
眮ããŸãã
é
眮ãããç»é¢äžéšã®â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸãã
SteamVRãç«ã¡äžãã£ãŠãHMDãèªèããŠããã°

ãã®ãããªç»é¢ãåºãŸãã®ã§YesãæŒããŸããäœåãåããããªç»é¢ãåºãã®ã§å
šãŠYesãæŒããŠãã ããã

ãããšãã®ãããªå°çªãåºãŠãããšæããŸãã®ã§ãSave and generateãæŒããŸãã

ãã°ããåŠçãããŠå
ã®ç»é¢ã«æ»ã£ããSteamVR Inputã®ç»é¢ã¯xã§éããŠæ§ããŸããã

ãããããå床ç»é¢äžéšã®â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸããHMDã«Gameã¿ããšåãç»é¢(äœããªã空éãšå€ªéœãšã³ã³ãããŒã©ãŒ)ã衚瀺ãããŠããã¯ãã§ããSteamVRã®ã¡ãã¥ãŒã衚瀺ãããå Žåãããã®ã§ãã³ã³ãããŒã©ãŒã®SteamVRã¡ãã¥ãŒãã¿ã³ã§éããŸããããã§VRã®æºåã¯å®äºã§ããããäžåºŠç»é¢äžéšã®â¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŠãã ããã
ã¢ãã«ãé 眮ãã

Projectå
ã®Assets\Modelsã«ããAliciaSolidã®Prefab(éãç«æ¹äœã¢ã€ã³ã³)ããã©ãã°ããŠã·ãŒã³äžã«é
眮ããŸãããã®é[CameraRig]ã®äžã«å
¥ããŠããŸã£ããããªãããã«æ³šæããŠãã ãããç»åã®éãã«é
眮ãããŠããã°ããã§ãã

ãŸãâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸããã¢ãªã·ã¢ãããçºããã ãVRã宿ããŸããããã°ããçºããŠæºè¶³ãããâ¶(Play)ãã¿ã³ãå床æŒããŠå®è¡ãæ¢ããŠãããŸãã
Final IKãèšå®ãã

Herarchyäžã®CameraRigã®äžã«ããController(Left)ãå³ã¯ãªãã¯ããŠCreate EmptyãæŒããŠåºæ¥ãGameObjectãå³ã¯ãªãã¯ããRenameãæŒããŠååãLeftHandã«ããŸãã
åæ§ã«Controller(Right)ã«RightHandããCameraã«Headãäœãã

LeftHandãRightHandãHeadãããããç»åã®ããã«é
眮ãããããã«ããŸãã

Hierarchyäžã®AliciaSolidãéžæããŠãInspectorãäžçªäžãŸã§ã¹ã¯ããŒã«ãããšããã«ããAdd ComponentãæŒããŠãvrikãšå
¥åãããšVR IKãåºãŠããŸãã®ã§ããããéžæããŸãã

ãããšInspectorã®äžçªäžã«VRIK (Script)ã远å ãããã®ã§ãSolverãéããSpineãšLeft ArmãšRight ArmãããããéããŠãããŸãã

éããSpineå
ã®Head Targetã«å
ã»ã©äœã£ãHeadããLeft Armã®Targetã«LeftHandããRight Armã®Targetã«RightHandããããããã©ãã°ããŠç»é²ããŸãã

ãã®æ®µéã§äžåºŠâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸããHMDã被ã£ãŠäž¡æã«ã³ã³ãããŒã©ãŒãæã£ãŠåãããŠã¿ãŠãã ãããæã®äœçœ®ã«åãããŠè
ã¯åãããé ã®äœçœ®ã«åãããŠäœãç§»åããããã«ãªã£ãŠããã¯ãã§ããåãããŠã¿ããšåãããšæããŸããããŸã è²ã
åé¡ããããŸãããŸãé ã®äœçœ®ã身é·ãšåã£ãŠãªãããèªåã®é ãèŠããŠããŸã£ãŠããŠãªãã³ãé ã®äžãèŠããŠå°ããŸããããããã³ã³ãããŒã©ãŒã®äœçœ®ã«æãæ¥ãŠããŸãããæããã«æã£ãŠããäœçœ®ãšæã®åãã§ã¯ãªãã¯ãã§ããæ¬¡ã¯ã²ãšã€ã¥ã€ãããçŽããŠãããŸããäœåºŠãèšã£ãŠããŸãããäžåºŠPlayããåŸç·šéããéã¯â¶(Play)ãã¿ã³ãå床æŒããŠå®è¡ãæ¢ããŠãããŸãã
èªåã®é ãHMDå ã«æ ããªãããã«ãã/äœãããŸã«æ¶ããã®ãçŽã
VRMã«ã¯èªåã®é ãé衚瀺ã«ããããã®VRMFirstPersonãšããã¹ã¯ãªãããä»ããŠããŸãã®ã§ããã®æ©èœã䜿ããããã«èšå®ããŸãã

ã¡ãã¥ãŒã®Edit->Project Settings->Tags and LayersãéããŸãã

User Layer 9ã«FIRSTPERSON_ONLY_LAYERãUser Layer 10ã«THIRDPERSON_ONLY_LAYERãšå
¥åããŸãã
â»ãã®9,10ã®æ°å€ãåç§°ã¯ä»åŸã®UniVRMã®æŽæ°ã§èªç±ã«èšå®å€æŽå¯èœã«ãªãå¯èœæ§ããããŸããUniVRM0.45æç¹ã§ã®ããã©ã«ãã§ãã

次ã«Hierarchyã®[CameraRig]å
ã®CameraãéžæããŠãInspectorã®Cameraå
ã«ããCulling Maskã®éžæè¢ããTHIRDPERSON_ONLY_LAYERã®ãã§ãã¯ãå€ããŸãã
ãã®Cameraã¯èªåã®HMDã§ã®èŠç¹ã«ãªã£ãŠããã«ã¡ã©ã§ããFIRSTPERSON_ONLY_LAYERãšããã®ã¯èªåç®ç·ã§è¡šç€ºããã¬ã€ã€ãŒ(é ãé€ãäœã ã)ã§ãTHIRDPERSON_ONLY_LAYERã¯ä»äººããèŠããšãã«è¡šç€ºããã¬ã€ã€ãŒ(é ãå«ã)ãªã®ã§ãTHIRDPERSON_ONLY_LAYERãå€ãããšã§èªåèŠç¹ããé ã®è¡šç€ºãæ¶ããŸãã

HierarchyããAliciaSolidãéžæããŠãInspectoräžçªäžã®Add ComponentãæŒããŠãNew ScriptãéžæããŸãã

Nameã«FirstPersonSetupãšå
¥åãCreate and AddãæŒããŸãã

远å ãããFirst Person Setup (Script)ãå³ã¯ãªãã¯ããŠEdit ScriptãæŒããŠãã¹ã¯ãªãããéããŸãã
FirstPersonSetup.csã衚瀺ãããããvoid Start(){ }å ã«
GetComponent<VRM.VRMFirstPerson>().Setup();
foreach (var renderer in GetComponentsInChildren<SkinnedMeshRenderer>(true))
{
renderer.updateWhenOffscreen = true;
}
ã远å ããŠã
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FirstPersonSetup : MonoBehaviour {
// Use this for initialization
void Start () {
GetComponent<VRM.VRMFirstPerson>().Setup();
foreach (var renderer in GetComponentsInChildren<SkinnedMeshRenderer>(true))
{
renderer.updateWhenOffscreen = true;
}
}
// Update is called once per frame
void Update () {
}
}
ãã®ããã«ãããä¿åããŠç»é¢ãéããŸãã远å ããã®ã¯VRMã®FirstPersonãåæåãã颿°ã®åŒã³åºããšãã«ã¡ã©äœçœ®ã«ãã£ãŠäœãæç»ãããªããªãã®ãé²ãããã«ãã¹ãŠã®SkinnedMeshRendererã®Update When Offscreenããªã³ã«ããåŠçã§ãã

ãã®ç¶æ
ã§ãŸãâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸããå
ã»ã©ãŸã§èªåã®é ãèŠããŠéªéã ã£ãã¯ãã§ãããè¡šç€ºãæ¶ããŠäœã ãèŠããããã«ãªã£ãŠããã¯ãã§ãã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
æã®äœçœ®ãšåããçŽã
æã®åããšäœçœ®ãä»ã®ãŸãŸã ãšééã£ãŠããã®ã§ãããçŽããŸããFinal IKã®VRIKã¯"æéŠ"ã®äœçœ®ãèšå®ãããã®ã§ãããSteamVRã®ã³ã³ãããŒã©ãŒã¯ãã³ã³ãããŒã©ãŒã®å
端äœçœ®ã瀺ããŠããã®ã§ãã®ãããªãããçããŸãããªã®ã§ã³ã³ãããŒã©ãŒåŽãæéŠã®äœçœ®ãšåãã«ãªãããã«ãªãã»ããããŠãããããšã«ããŸãã

Hierarchyå
LeftHandãéžæããInspectorã®Transformã®Positionã«-0.03,0.025,-0.12ããRotationã«-40,0,90ãå
¥åããŸãã

åæ§ã«RightHandãéžæããInspectorã®Transformã®Positionã«å·Šæãšéå転ã®0.03,0.025,-0.12ããRotationã«-40,0,-90ãå
¥åããŸãã

ãŸãâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŠã¿ãŸããæã®äœçœ®ã倧äœå®éã®äœçœ®ã«åãããã«ãªã£ãŠããã°OKã§ããã¢ãã«ã«ãã£ãŠã¯å°ãäœçœ®ãéããããããªãã®ã§æ°å€ã¯ã奜ã¿ã§èª¿æŽããŠãã ããã
ã¢ãã«ã®å€§ãããšå®éã®äœåã®ãããåããã
ä»ã®ãŸãŸã ãšã¢ãªã·ã¢ãããšèªåã®èº«é·ãè
ã®é·ããåãããç«ã€ãšèŠç¹ãé«ããªã£ãŠããããè
ã䌞ã°ãããåã«ã¢ãªã·ã¢ããã®è
ã䌞ã³ãã£ãŠããŠãæããã³ã³ãããŒã©ãŒãé¢ããŠããããã«ãªã£ãŠããŸã£ãŠãããšæããŸãããã®ããããªãã¹ãç¡ãããŠãããŸãã

â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããHierarchyãã[CameraRig]ãéžæããŠInspectorã®Transformå
ã®Scaleã®å€ã倿ŽããŸãã
ãŸãã¯XãšZã®å€ãäž¡æãåºãããšãã«ã¡ããã©ã¢ãã«ã®æãçã£çŽãã«ãªãããã«(å®éã«æããŸãããã¢ãã«ãåãããã«æ²ããããã«)ãªãæ°å€ãå
¥ããŸããPlayäžã¯å³åº§ã«åæ ãããã®ã§ã0.8ããããã0.79,0.78,0.77ã»ã»ã»ãšãã颚ã«åŸ®èª¿æŽããŠèªåã®äœåœ¢ã«åã£ãæ°å€ãæ¢ããŠãã ãããXãšZã«ã¯åãæ°å€ãå
¥ããŠãã ãããä»åã¯0.8ãå
¥ããŸããã
次ã«Yã®å€ã調æŽããŸããçã£çŽãç«ã£ãŠç»é¢äžã®ã¢ãªã·ã¢ã¡ããã®ãããšãæµ®ãããèãæ²ãããªãçšåºŠã«Yã®å€ã調æŽããŠãã ãããä»åã¯0.85ã«ããŸããã
ãã®ç¶æ
ã®ãŸãŸå
¥åããX,Y,Zã®å€ãèŠããŠãããŠãã ãããå床â¶(Play)ãã¿ã³ãæŒããŠå®è¡ã忢ããŠãå
¥åãããã®ãå
ã«æ»ã£ãŠããŸã£ãŠããã¯ããªã®ã§ãå床èŠããŠãããX,Y,Zãå
¥ããªãããŠãã ããã
ãã«è¡ãªã®ãçŽã
èŠãŠãããéããè¶³ãéãéããŠããŠããããã ããããšã²ããå€åŽã«åãããããŠå¯æããªãã§ãããããçŽããŸãã

HierarchyããAliciaSolidãéžæããInspectorã®VRIKå
ã®Left LegãRight LegãLocomotionå
ã®å€ããããã倿ŽããŸãã
ã²ãã®åããå€ããããã«
Left Legå
Swivel Offsetã15
Right Legå
Swivel Offsetã-15
æ©å¹
ãå€ããããã«
Locomotionå
ã®
Foot Distanceã0.15
Step Thresholdã0.4
Max Velocityã0.3
Velocity Factorã0.3
Root Speedã30
ã«å€æŽããŸãããã¹ãŠã®å€ã¯ç»åã確èªããŠãã ããã
æ©å¹
ãªã©ã¯èªåã®å¥œã¿ã§å€æŽããŠãã ããã
é ä¿¡çšã®ç°å¢ãäœã
ãããŸã§ã§èªåã®äœãVRæ©åšã§è¯ãæãã«åãããããã«ãªããŸãããVTuberã«ãªãããã«ã¯ãã®åããå¥ã®ã«ã¡ã©ã§æ®ã£ãŠãã®æ åãèŠããªããšãããŸããã
ãã®ããã®èšå®ãããŠãããŸãã
ã¡ã€ã³ã«ã¡ã©ã®è¡šç€ºé ãäžãã
ä»ãŸã§ã®ãŸãŸã ãšå®è¡äžã®Gameç»é¢ã«ã¯HMDãšåãæ åã衚瀺ãããŠããŸãããããå¥ã®ã«ã¡ã©ããã®æ åã«åãæ¿ããŠãã«ã¡ã©ãæ£é¢ã«æã£ãŠããããšã«ããŸãã

Hierarchyäžã®Main CameraãéžæãããŸãã¯Transformã®Positionã0,1,-2ã«èšå®ããŸãã
ããããCameraã®Depthã1ã«ãTarget EyeãNone (Main Display)ã«èšå®ããŸãã

â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããHMDã«ã¯ä»ãŸã§éãèªåã®èŠç¹ã§ã®ç»é¢ã衚瀺ãããŠãUnityåŽã®Gameç»é¢ã«ã¯é
眮ããMain Cameraã®æ åã衚瀺ãããŠããã¯ãã§ãã確èªåºæ¥ããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
èªåã®å§¿ãHMDå ã§ç¢ºèªã§ããããã«ãã
ä»ã®ãŸãŸã ãšHMDã被ã£ãŠããŸããšèªåã®å§¿ãã©ã®ããã«ã«ã¡ã©ã«åã£ãŠããã確èªã§ããªãã®ã§ãã«ã¡ã©ã®æ åã衚瀺ãããããã«ãèšçœ®ããŸãã

Projectã®Assetsãã©ã«ããå³ã¯ãªãã¯ããŠãCreate->Custom Render Textureãéžã³ãŸãã
åºæ¥ããã¡ã€ã«ã«ã¯MainCameraTextureãšååãä»ããŸãã

åºæ¥ãMainCameraTextureãéžãã§ãInspectorã®Sizeã«1920x1080ãšå
¥åããŸãã

Hierarchyäžã®Main Cameraãå³ã¯ãªãã¯ããDuplicateãéžæããŸãã

æ°ããå¢ããMain Camera(1)ãéžæããŠãå
ã»ã©äœã£ãMainCameraTextureãTarget Textureã«ãã©ãã°&ããããããŠèšå®ããŸãã

Hierarchyã®MyVTuberãå³ã¯ãªãã¯ããŠGameObject->3D Object->QuadãéžæããŸãã
åºæ¥äžãã£ãQuadãå³ã¯ãªãã¯ããŠRenameã§MonitorPanelã«ããŸãã

äœæããMonitorPanelã®Transformã®Positionã0,0.9,-2ãRotationã0,180,0ãScaleã-3.2,1.8,1ã«èšå®ããŸãã
Scaleã®Xããã€ãã¹ã«ãããšãå·Šå³ã®è¡šç€ºãå転ãããããã©ãŒè¡šç€ºãåºæ¥ãŸããèªåã®åãã確èªãããšãã«å·Šå³ãéã ãšãšãŠãæäœãã¥ããã®ã§ãã©ãŒã«ããŠããŸãã
ãããŠå
ã»ã©äœæããProjectã®Assetsãã©ã«ãã«ããMainCameraTextureãHierarchyäžã®MonitorPanelã«ãã©ãã°&ããããããŸãã

MonitorPanelã®Inspectorå
ã®äžçªäžã«ããMainCameraTextureã®ShaderãStandardããUnlit->Textureã«å€æŽããŸãã

â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããç®ã®åã«é¡ã®ããã«èªåã®å§¿ãæ ã£ãŠããã¯ãã§ããåããŠç¢ºèªããŠã¿ãŠãã ãããåãã®ã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
é«ªã®æ¯ãæ£ããæºããŠããªãã®ãä¿®æ£ãã
UniVRMãšFinal IKãåæã«äœ¿çšããå Žåãç¹ã«èšå®ãããªããšãã®å Žã§é ã ãåããããšãã«é«ªã®æ¯ãæ£ããæºããŠãããŸããããªã®ã§ãããä¿®æ£ããŸãã

Unityã®Editã¡ãã¥ãŒããProject Settings->Script Execution OrderãéããŸãã

åºãŠããScript Execution Orderã®å³äžã®ïŒãã¿ã³ãæŒããŠã

倧éã«ã¡ãã¥ãŒãåºãŠããã®ã§äžåãäžè§âŒãæŒãç¶ããŠäžçªäžãã2çªç®ã®ãVRM.VRMSpringBoneãéžã³ãŸãã

VRM.VRMSpringBoneããªã¹ãã®äžçªäžã«10400(äžçªå€§ããæ°å)ã§è¿œå ãããããšã確èªããŸãã
åæ§ã«VRM.VRMSpringBoneColliderGroupãå
¥ããŠ10500ã«ãªã£ãããå³äžã®ApplyãæŒããŠãã ããã
åºæ¥ãããã®ãŸãŸâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸãããã®å Žã§é ãå·Šå³ã«åãããŠã¿ãŠãã ãããé«ªã®æ¯ã綺éºã«æºããããã«ãªã£ãŠãããšæããŸããåãã®ã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
ãªããã·ã³ã¯ãå ¥ãã
ä»ã®ãŸãŸã§ã¯åã£ãŠãå£ãåããŸããããªããã·ã³ã¯ããããŠã¿ãŸãã
OVRLipSync 1.28.0
OVRLipSync 1.28.0ã®ããŒãžã«è¡ãã

èŠçŽã«åæããå Žåãã§ãã¯ãå
¥ããŠããŠã³ããŒãããŠãã¡ã€ã«ãå±éããŠãã ããã
Unityäžéšã®Assetsã¡ãã¥ãŒ->Import Package->Custom Package...ãæŒããŠãå±éããäžã®LipSync\UnityPlugin\OVRLipSync.unitypackageãéããŸãã

ä»ãŸã§ãšåãããã«ãImport Unity Packageã®ç»é¢ãåºãŸãã®ã§ImportãæŒããŠãã ããã
AniLipSync-VRM 1.0.0
AniLipSync-VRM 1.0.0ã®ããŒãžããAniLipSync-VRM.unitypackageãããŠã³ããŒãããŠã
Unityäžéšã®Assetsã¡ãã¥ãŒ->Import Package->Custom Package...ãæŒããŠãããŠã³ããŒãããAniLipSync-VRM.unitypackageãéããŸãã

åãããã«ãImport Unity Packageã®ç»é¢ãåºãŸãã®ã§ImportãæŒããŠãã ããã
AniLipSync-VRMã¯ãã®èšäºã®ããã«æ°ããäœããŸããã
ãªããã·ã³ã¯ã®èšå®

ãŸãProjectå
ã®Assets\Oculus\Prefabsãã©ã«ãã«ããLipSyncInterfaceãHierarchyã«ãã©ãã°ããŠé
眮ããŸãã

次ã«Assets\AniLipSync-VRM\Prefabsã«ããAniLipSync-VRMãHierarchyã«ãã©ãã°ããŠé
眮ããŸãã

Inspectorã®äžçªäžãAnim Morph Target (Script)å
ã®Blend Shape Proxyã«é
眮ããŠããVRMã¢ãã«ããã©ãã°&ããããããŠèšå®ããŸãã
以äžã§ãªããã·ã³ã¯èšå®ã¯å®äºã§ããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸãããã€ã¯ã«åãã£ãŠããããããããããšå£°ãåºããŠå£ãåãã確èªããŠãã ããã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
ãŸã°ãããå ¥ãã
ä»ã¯ãã£ãšç®ãéãã£ã±ãªãã§ç¬ããããªãã®ã§æãã§ããèªåãŸã°ãããå
¥ããŸãã

HierarchyããAliciaSolidãéžæããInspectorã®äžçªäžã®Add Componentã§blinkerãšæ€çŽ¢ãããšåºãŠããBlinkerãéžã³ãŸãã

Blinker (Script)ãèšå®ãããã®ã§å€ã奜ããªããã«å€æŽããŸãã
- Inter Val(次ã®ãŸã°ãããŸã§ã®ç§æ°ã0ç§ïœæå®ç§æ°ãŸã§ã®ã©ã³ãã ã§ãŸã°ããããŸã)
- Closing Time(éãããŸãŸã®æé)
- Opening Seconds(éãã¢ãã¡ãŒã·ã§ã³ã®æé)
- Close Seconds(éããã¢ãã¡ãŒã·ã§ã³ã®æé)
ä»åã¯ãã®ãŸãŸã«ããŠãããŸããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããæå®ç§æ°å ã§ã©ã³ãã ã«ãŸã°ããããããšã確èªããŸãã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
æéŠãããããã®ã解決ãã
HMDã§èªåã®æéŠãèŠãŠã¿ããšãéå·Ÿçµãã®ããã«ããããŠããŸã£ãŠããããã«èŠããŸããããã¯æã®å転ãæéŠã ãçªç¶åããŠããããçºçããŠããŸãã
Final IKã«ã¯ãããç·©åããããã®TwistRelaxerã¹ã¯ãªãããå
¥ã£ãŠããã®ã§ãããé©çšããŸãã

HierarchyããAliciaSolidãéžæããInspectorã®VRIK (Script)å
ã®Referencesã®äžã«ããLeft Forearmã«èšå®ãããŠããelbow_L (Transform)ãããã«ã¯ãªãã¯ããŸãã

ã²ãã®é¢ç¯éšãéžæãããã®ã§ãInspectorããAdd ComponentãæŒããŠtwistãšæ€çŽ¢ãããšåºãŠããTwist RelaxerãéžæããŸãã

æšæºã®èšå®ã ãšåŒ·åºŠãšè§åºŠã匷ãããŠãéã«ããããªå転ãããããã«ãªãã®ã§ã
Weightã0.4ãParent Child Crossfadeã1ã«èšå®ããŸãã
å
šãåãããšãVRIKå
ã®Referencesã®Right Forearmã«å¯ŸããŠãèšå®ããŸãã
äž¡èã«Twist Relaxerãèšå®ãããç¶æ
ã«ãªã£ããåã³â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããå®è¡äžã«ã奜ã¿ã®å転ã®å€ãæ¢ããŠç¢ºèªåŸã«èšå®ããªãããåºæ¥ãŸãã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
衚æ ãå€ãã
ãŸã°ãããšãªããã·ã³ã¯ãèšå®ããã®ã§ããçšåºŠé¡ã¯åãããã«ãªããŸããããVRMã¯è¡šæ
å¶åŸ¡ãè¡ãããšãã§ããŸãããªã®ã§ä»åã¯ã³ã³ãããŒã©ãŒã®ã¿ããããã(ã¹ãã£ãã¯)ã4åå²ããŠèšå®ãã衚æ
ã«å€ããããããã«ã¹ã¯ãªããã远å ããŸãã

Projectã®Assetsãå³ã¯ãªãã¯ããŠCreate->C# Scriptãéžæããåºæ¥ãã¹ã¯ãªããã®ååãControllerInputManagerã«ããŸãã
åºæ¥ãControllerInputManagerãããã«ã¯ãªãã¯ããŠã¹ã¯ãªãããéããäžèº«ãå
šãŠæ¶ããŠã
using AniLipSync.VRM;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Valve.VR;
using VRM;
public class ControllerInputManager : MonoBehaviour
{
public VRMBlendShapeProxy blendShapeProxy;
public Blinker blinker;
public AnimMorphTarget animMorphTarget;
private SteamVR_ActionSet[] actionSets;
// VRMã®è¡šæ
private Dictionary<BlendShapeKey, float> shapeValueDictionary = new Dictionary<BlendShapeKey, float> {
{new BlendShapeKey(BlendShapePreset.Neutral), 0.0f }, // NEUTRAL(æšæº)
{new BlendShapeKey(BlendShapePreset.Blink), 0.0f }, // BLINK(ç®ãéããããŸã°ãã)
{new BlendShapeKey(BlendShapePreset.Joy), 0.0f }, // JOY(åã³)
{new BlendShapeKey(BlendShapePreset.Angry), 0.0f }, // ANGRY(æã)
{new BlendShapeKey(BlendShapePreset.Sorrow), 0.0f }, // SORROW(æ²ãã¿)
{new BlendShapeKey(BlendShapePreset.Fun), 0.0f }, // FUN(楜ãã¿)
{new BlendShapeKey(BlendShapePreset.Blink_L), 0.0f }, // BLINK_L(å·Šç®éãã)
{new BlendShapeKey(BlendShapePreset.Blink_R), 0.0f }, // BLINK_R(å³ç®éãã)
{new BlendShapeKey("><"), 0.0f }, // ><(ã¢ãªã·ã¢ã¡ããå°çšè¡šæ
)
};
private List<BlendShapeKey> keyList;
private int GetKeyIndex(BlendShapePreset preset) { return keyList.FindIndex(d => d.Name == preset.ToString().ToUpper()); }
private int GetKeyIndex(string preset) { return keyList.FindIndex(d => d.Name == preset.ToUpper()); }
private BlendShapeKey GetKey(BlendShapePreset preset) { return keyList[GetKeyIndex(preset)]; }
private BlendShapeKey GetKey(string preset) { return keyList[GetKeyIndex(preset)]; }
// Use this for initialization
void Start()
{
keyList = new List<BlendShapeKey>(shapeValueDictionary.Keys);
actionSets = SteamVR_Input.actionSets;
if (actionSets == null) { actionSets = SteamVR_Input_References.instance.actionSetObjects; }
}
// Update is called once per frame
void Update()
{
if (blendShapeProxy == null) return;
var sources = SteamVR_Input_Source.GetUpdateSources();
foreach (var source in sources)
{
if (source == SteamVR_Input_Sources.Any) continue;
foreach (var actionSet in actionSets)
{
foreach (var action in actionSet.allActions) //ãã¿ã³
{
if (action is SteamVR_Action_Boolean)
{
var actionBoolean = (SteamVR_Action_Boolean)action;
if (actionBoolean.GetStateDown(source))
{
var name = actionBoolean.GetShortName();
if (name == "InteractUI") // ããªã¬ãŒååŒã
{
}
else if (name == "GrabPinch") // ããªã¬ãŒå
šåŒã
{
}
else if (name == "Teleport") // ã¿ãããããæŒã
{
}
else if (name == "GrabGrip") // ã°ãªãããã¿ã³æŒã
{
}
}
}
else if (action is SteamVR_Action_Single) //Axis
{
var actionSingle = (SteamVR_Action_Single)action;
if (actionSingle.GetChanged(source))
{
var name = actionSingle.GetShortName();
var axis = actionSingle.GetAxis(source);
if (name == "Squeeze") // ããªã¬ãŒ
{
}
}
}
else if (action is SteamVR_Action_Vector2) // Padãã¹ãã£ãã¯
{
var actionVector2 = (SteamVR_Action_Vector2)action;
if (actionVector2.GetChanged(source))
{
var name = actionVector2.GetShortName();
var axis = actionVector2.GetAxis(source);
//
// ã¿ãããããã®åº§æš(äž¡æãšã)
// (0, 1)
// (-1, 0)(0, 0)(1, 0)
// (0,-1)
//
// ã¿ããããããé¢ããæã¯(0,0)ãé£ãã§ãã
//
if (name == "TouchPad")
{
var isLeft = source == SteamVR_Input_Sources.LeftHand;
//å
šãŠã®è¡šæ
ãäžæŠç¡å¹ã«ãã
foreach (var key in keyList)
{
shapeValueDictionary[key] = 0.0f;
}
if (Mathf.Approximately(axis.x, 0.0f) && Mathf.Approximately(axis.y, 0.0f)) //äžå¿(é¢ããæ)
{
//ãŸã°ãããšãªããã·ã³ã¯ã埩掻ããã
blinker.enabled = true;
animMorphTarget.curveAmplifier = 100f;
shapeValueDictionary[GetKey(BlendShapePreset.Neutral)] = 1.0f;
}
else
{
//衚æ
ãšã¶ã€ãããªãããã«ãŸã°ãããæ¢ããŠãªããã·ã³ã¯ã匱ããã
blinker.enabled = false;
animMorphTarget.curveAmplifier = 0.1f;
if (axis.x < 0) // å·Š
{
if (axis.y > 0) // å·Šäž
{
shapeValueDictionary[GetKey(isLeft ? BlendShapePreset.Blink_L : BlendShapePreset.Blink)] = 1.0f;
}
else if (axis.y < 0) // å·Šäž
{
shapeValueDictionary[GetKey(isLeft ? BlendShapePreset.Joy : BlendShapePreset.Angry)] = 1.0f;
}
}
else if (axis.x > 0) // å³
{
if (axis.y > 0) // å³äž
{
shapeValueDictionary[isLeft ? GetKey("><") : GetKey(BlendShapePreset.Blink_R)] = 1.0f;
}
else if (axis.y < 0) // å³äž
{
shapeValueDictionary[GetKey(isLeft ? BlendShapePreset.Sorrow : BlendShapePreset.Fun)] = 1.0f;
}
}
}
//衚æ
ãé©çšãã
blendShapeProxy.SetValues(shapeValueDictionary.ToList());
}
}
}
}
}
}
}
}
ãã®ã³ãŒãã«çœ®ãæããŠãã ããã眮ãæãããäžæžãä¿åããŠãã ããã

Hierarchyã®MyVTuberãå³ã¯ãªãã¯ããŠGameObject->Create Emptyãéžã³ãåºæ¥ãGameObjectãå³ã¯ãªãã¯ããŠRenameã§ControllerInputManagerã«ããŠãã ããã

äœæããHierarchyäžã®ControllerInputManagerãéžæããŠãInspectorã®Add Componentã§controllerinputãšæ€çŽ¢ããŠåºãŠããController Input ManagerãéžæããŠãã ããã

ç»åã®ããã«Blend Shape Proxyã«AliciaSolidãBlinkerã«ãAliciaSolidãAnim Morph Targetã«AniLipSync-VRMããããããã©ãã°&ããããã§ç»é²ããŠãã ããã

次ã«ã¿ããããããSteamVRã§äœ¿ããããã«èšå®ããŸãã
Hierarchyã®[CameraRig]å
ã®Controller (Left)ãéžæããŠInspectorã®Steam VR_Behaviour_Poseã®Pose Actionã®éžæè¢ãéããAdd...ãéžæããŸãã

ãããªç»é¢ãåºãã¯ããªã®ã§ãActionsã®InåŽã®ïŒãã¿ã³ãæŒããŠã

Nameã«TouchPad(倧æåå°æåãåºå¥ãããŸãã®ã§æ£ãã)ãTypeãvector2ã«ããŠãSave and generateãæŒããŸãã

éäžãã®ãããªç»é¢ãåºããSaveãæŒããŠãã ããã
ãã°ããåºåã«æéãããã£ãåŸãåãç»é¢ã«æ»ãã®ã§ä»åºŠã¯Open binding UIãæŒããŠãã ããã

ãã©ãŠã¶ã§SteamVRã®Bindingèšå®ç»é¢ãéããŸãã®ã§ãEditãæŒããŸãã

åºãŠããç»é¢ãäžçªäžãŸã§ã¹ã¯ããŒã«ããŠå·ŠåŽã®Trackpadã®ïŒãã¿ã³ãæŒããŸãã

éžæè¢ãåºãŸãã®ã§äžçªäžã®TRACKPADãéžãã§ãã ããã

å·Šäžã«TRACKPADã远å ãããã®ã§ãã®äžã®Positionã®NoneãæŒããéžæè¢ããtouchpadãéžã³ãŸãã

äžã®Mirror Modeã«ãã§ãã¯ãå
¥ã£ãŠãªãã£ãããã§ãã¯ãä»ããŠãSave Personal Bindingãã¿ã³ãæŒããŸãã

ååãä»ãããèãããã®ã§ãã®ãŸãŸSaveãæŒããŸãã
ããã§èšå®ã¯å®äºãªã®ã§ãã©ãŠã¶ã¯éããŠæ§ããŸããã

Unityã«æ»ã£ãŠããã®ç»é¢ã¯ãã倧äžå€«ãªã®ã§å³äžã®Ããã¿ã³ã§éããŸãã
ãããŸã§æ¥ãããããã衚æ
ãåãããã¯ãã§ããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸãã
ã¿ããããããå·Šäžãå³äžãå·Šäžãå³äžãšãããã4åå²ããŠããŒãå²ãåœãŠãŠããŸããå²ãåœãŠã¯æ¬¡ã®è¡šã®ãšããã§ãã
å·Šæ
| ãŠã€ã³ã¯(å·Š) | ><(ã¢ãªã·ã¢å°çš) |
|---|---|
| åã³ | æ²ãã¿ |
| 峿 |
| äž¡ç®éãã | ãŠã€ã³ã¯(å³) |
|---|---|
| æã | 楜ãã |
確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
ãã®è¡šæ 倿Žã¹ã¯ãªããã«ã¯ã衚æ 倿޿ã«ãªããã·ã³ã¯ã§å£ãç Žç¶»ããªãããã«æå¶ããæ©èœãšãèªåãŸã°ãããäžæåæ¢ããæ©èœãå ¥ã£ãŠããã®ã§è¡šæ ã厩ããŸããã
ä»äžã
ã«ã¡ã©ã«ã³ã³ãããŒã©ãŒãæ ããªãããã«ãã
èªèº«ã®ç®ããã¯ã³ã³ãããŒã©ãŒãèŠããããã«(åãããããã®ãã)ããããé
ä¿¡ã«ã¯æ ããããªãã®ã§ã«ã¡ã©ããã¯èŠããªãããã«ããŸãã

Hierarchyã®[CameraRig]å
ã®Controller (left)ã®ModelãéžæããInspectorã®Layerã9:FIRSTPERSON_ONLY_LAYERã«ããŸãã
åæ§ã«Controller (right)ã®Modelã®LayerãFIRSTPERSON_ONLY_LAYERã«ããŠãã ããã

次ã«Main CameraãéžæããInspectorã®Culling Maskã®FIRSTPERSON_ONLY_LAYERã®ãã§ãã¯ãå€ããŸãã
åæ§ã«Main Camera(1)ã«ãåãèšå®ãããŸãã
ãã®ç¶æ
ã§â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããUnityäžã®Gameç»é¢ãšãHMDå
ã®é¡ã«ã¯ã³ã³ãããŒã©ãŒãæ ããªããªã£ãŠããã¯ãã§ããèªåã®æå
ã«ã ãã³ã³ãããŒã©ãŒãèŠããŠãããOKã§ãã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
é ä¿¡ã®åæçšã«èæ¯ãã°ãªãŒã³ããã¯ã«ãã
ãã®åŸå¥œããªèæ¯ãšåæããŠé²ç»ãããããã«èªå以å€ã®èæ¯ãGB(ã°ãªãŒã³ããã¯)ã«ããŸãã

Main Cameraã®Clear FlagsãSolid Colorã«å€æŽããBackgroundã®è²(æåã¯çŽºè²)ãã¯ãªãã¯ãããšColorããã«ã衚瀺ãããŸãã
Rã0ãGã255ãBã0ã«ããŠã°ãªãŒã³ããã¯ã«ãããColorããã«ãéããŸãã

è¶³å
ã®æ°Žè²ã®æ (ãã¬ã€ãšãªã¢è¡šç€º)ãæ¶ãããã«[CameraRig]ãéžæããŠãLayerã9:FIRSTPERSON_ONLY_LAYERã«ããŸãã

ãã®éåèŠçŽ ã倿ŽãããèãããŸããã倿Žããããªãã®ã§No, this object onlyãæŒããŠãã ããã
ãã®ç¶æ ã§â¶(Play)ãã¿ã³ãæŒããŠå®è¡ããŸããUnityäžã®Gameç»é¢ã¯ã¢ãã«ä»¥å€å šãŠç·è²ã«ãªã£ãŠããŠãHMDå ã®ç©ºéãšé¡ã¯ä»ãŸã§éãã«ãªã£ãã¯ãã§ããHMDå ãç·ã«ãããšç®ããã«ãã«ããã®ã§ãã®ãŸãŸã§å®æã§ãã確èªãããâ¶(Play)ãã¿ã³ãæŒããŠå®è¡ãæ¢ããŸãã
宿ïŒ
ã€ãã«èªåã®VTuberã·ã¹ãã ã宿ããŸãããå®è¡å¯èœåœ¢åŒã«åºåããŸãããã

Unityã®Fileã¡ãã¥ãŒããBuild Settings...ãéžã³ãŸãã

èšå®ã¯ç¹ã«å€ããã«ãã®ãŸãŸBuildãã¿ã³ãæŒããŠãã ããã

ããã€ããã¡ã€ã«ãåºåãããã®ã§ã空ã®ãã©ã«ã(ä»åã¯MyVTuber)ãäœæããŠãããã§ä¿åãæŒããŸãã

ãã«ããçµããã®ãåŸ
ã€ãšã»ã»ã»

åºåå
ã®ãã©ã«ããéããŸãããéžæãããŠããMyVTuber.exeã宿åã«ãªããŸãã
æ©éMyVTuber.exeãå®è¡ããŠã¿ãŠãã ããã

è§£ååºŠéžæç»é¢ã衚瀺ãããŸããWindowedã«ãã§ãã¯ãå
¥ããŠã奜ããªè§£å床ãæå®ãããPlay!ãæŒããŸãã

ã°ãªãŒã³ããã¯ã®ã¢ãã«ã衚瀺ãããŸããïŒã§ãã衚æ
倿Žãåºæ¥ãªãã¯ãã§ããããã¯Bindingã®èšå®ããããŠããªãããã§ãã
HMDã被ã£ãŠã³ã³ãããŒã©ãŒã®ã¡ãã¥ãŒãã¿ã³ã§SteamVRã®ã¡ãã¥ãŒãéããŠãã ããã

ãã®ãããªç»é¢ã«ãªãã®ã§ãCloseãæŒããŠEditãæŒããŸãã

äžã§1床èšå®ããã®ãšåãç»é¢ã衚瀺ãããŠããã®ã§åãèŠé ã§å床Trackpadã®èšå®ãããŸãã
ã¿ãããããããªãããšç»é¢ã¯ã¹ã¯ããŒã«ã§ããŸãã

ããããšã¯å
šãåãã§ããTrackpadã®ïŒãæŒããŠãTRACKPADãéžæããããPositionã®Noneãtouchpadã«å€ããŠãSave Personal BindingããŸãã
èšå®ãããã³ã³ãããŒã©ãŒã®ã¡ãã¥ãŒãã¿ã³ã§SteamVRã®èšå®ç»é¢ãéããŸãã
ä»åºŠã¯ã¿ããããããè§Šãã°è¡šæ
ãå€ããããã«ãªã£ãŠããã¯ãã§ãã
以äžã§VTuberã¢ããªã®èšå®ã¯å šãŠå®äºã§ããããã§ãã€ã§ãèµ·åããŠVTuberã«ãªãããšãåºæ¥ãŸãã
é²ç»ã»é ä¿¡
ã¢ããªãäœã£ãŠãé²ç»ãé
ä¿¡ãããŠèŠããŠããã®VTuberã§ããç°¡åã«é²ç»ã®èª¬æãããŸãã
é²ç»ã«äœ¿çšããã¢ããªã¯OBSã§ãã忥ã®@nkjzmããã®OBSã®èª¬æãšå°ãéè€ããŸããããã¡ãã¯Windowsçã§èª¬æãããŸãã
OBSã®ã€ã³ã¹ããŒã«
ãŸãã¯OBSã®ããŠã³ããŒãããŒãžããããŠã³ããŒã ã€ã³ã¹ããŒã©ãã¿ã³ãæŒããŠOBSãããŠã³ããŒãããŸãã
ãã®ãŸãŸå®è¡ããŠã€ã³ã¹ããŒã«ãå§ããŸããç¹ã«äœããªãNextãæŒããŠé²ããŠããã°è¯ãã§ãã

ãã®ãŸãŸFinishããŠOBSãèµ·åãããŸãã

èªåæ§æãŠã£ã¶ãŒããåºãã®ã§ã¯ããæŒããŠå®è¡ããŸãã

ãšããããé²ç»ãéžãã§æ¬¡ãž(åŸããå€ããããŸã)

è§£å床ã¯1920x1080ã®ãŸãŸæ¬¡ãž

ç§ã®ç°å¢ã§ã¯ãã®ããã«ãªããŸãããç°å¢ã«ãã£ãŠã¯éãèšå®ã«ãªãå ŽåããããŸãããã®ãŸãŸèšå®ãé©çšãæŒããŸãã

ç»é¢å³äžã®èšå®ãæŒããŸãã

åºåã®é²ç»ãã©ãŒããããmp4ã«å€æŽããŸããflvã¯æ±ãã«ããã§ãã
ãããŠé²ç»ãã¡ã€ã«ã®ãã¹ã確èªããŸãããã®ãã©ã«ãã«é²ç»ãããæ åãä¿åãããã®ã§ãèŠããŠããã奜ããªãã©ã«ãã«å€æŽããŠãã ããã
確èªåºæ¥ãããã®ãŸãŸOKãæŒããŠèšå®ãéããŸãã
èæ¯ãèšå®ãã
ä»åã¯ãã¡ãã®ç»åããåãããŸããã

OBSã®ãœãŒã¹æ¬ã«ããïŒãã¿ã³ããç»åãéžæããŸãã

ååãèæ¯ç»åã«å€æŽããŠOKãæŒããŸãã

åç
§ãã¿ã³ã§å¥œããªç»åãéžãã ãOKãæŒããŸãã
â»ç»åã®èäœæš©çã«ã¯æ³šæããŠãã ãããä»åã¯ããªãŒçŽ æã䜿çšããŠããŸãã
ã¢ãã«ãåæãã
MyVTuber.exeãèµ·åããŠãã°ãªãŒã³ããã¯ã«ã¢ãã«ã衚瀺ãããç¶æ
ã«ããŸãã

ã·ãŒã³ã®ïŒãã¿ã³ãæŒããŠã²ãŒã ãã£ããã£ãéžæããŸãã

ãã¡ãã¯MyVTuberãšåä»ããŠOKããŸãã

ã¢ãŒããç¹å®ã®ãŠã€ã³ããŠããã£ããã£ã«å€æŽãããŠã€ã³ããŠã«[MyVTuber.exe]: MyVTuberãéžæããŸããå°ãåŸ
ã€ãšç»é¢ã衚瀺ãããã®ã§ãOKãæŒããŠãã ããã

èæ¯ã®ç·ãééãããèšå®ãããŸãããœãŒã¹ã®MyVTuberãå³ã¯ãªãã¯ããŠãã£ã«ã¿ãéžæããŸãã

å·Šäžã®ïŒãã¿ã³ããã¯ããããŒãéžæããŸãã

ãã£ã«ã¿åã¯ãã®ãŸãŸã¯ããããŒã§OKããŸãã

ããã©ã«ãã§è²ããŒãç·ã«ãªã£ãŠãããèæ¯ãéæã«ãªã£ãŠããŸããé¡äŒŒæ§ãæ»ããããªã©ã¯ã¢ãã«ã«ãã£ãŠå€ããã®ã§ãé©å®èª¿æŽããŠãã ããã
ä»åã¯ç¹ã«åé¡ãªããããªã®ã§ããã©ã«ãã®ãŸãŸéãããæŒããŸãã
ãã€ã¯ã®èšå®ããã

ã¢ãã«ãåæãããã®ã確èªãããä»åºŠã¯ãã€ã¯ã®èšå®ãããŸãããããµãŒã®ãã€ã¯ã®æšªã«ããæ¯è»ãã¿ã³ãæŒããŠããããã£ãéããŸãã

ããã€ã¹ãæ¢å®ã«ãªã£ãŠããã®ã§ãå®éã«äœ¿çšãããã€ã¯(ä»åã¯HTC Vive)ãéžæããŠOKãæŒããŸãã

ãã®ç¶æ
ã§ãããŒããšå£°ãåºããŠã¿ããšããã€ã¯ã®ããŒãåããç»é¢äžã®ã¢ãã«ã®å£ã¯"ã"ã®å£ã«éãã¯ãã§ãã
ããã§èšå®ã¯å®äºã§ãïŒ
é²ç»ãã
ããšã¯é²ç»éå§ãã¿ã³ãæŒãã ãã§ãïŒæ©ãåã£ãã衚æ
ãå€ããŠã¿ããã€ã±ãŠãåç»ãæ®ã£ãŠãã ããïŒ
åºæ¥äžãã£ãã¢ããªã§æ®ã£ãåç»ã¯èšäºåé ã®å®æåã®åç»ã§ãã
ããã
ææ¥ã¯ã@broken55ããã«ãããOBSã䜿ã£ãé ä¿¡ã®åºç€ãšTipsãã§ãã
VTuber Tech #1 Advent Calendar 2018
VTuber Tech #2 Advent Calendar 2018