- Live2D Cubism SDK's Original Workflow
- V3 부터 부족한 기능을 컴포넌트 으로 자연스럽게 제공함.
- Should Import As Original Workflow : 체크한 상태에서 모델 데이터를 가져오면, OW 지원 모델이 생성됨.
- Should Clear Animation Curves : 모션을 다시 가져오면서, 기존 AnimationClip Opacity(?) Curve 을 덮어쓸꺼냐?
- CubismUpdateController : 해당 Prefab의 각 컴포넌트 실행 순서 제어.
- CubismParameterStore : 파라미터 및 파츠값 저장 및 복원.
- CubismPoseController :
- .pose3.json 에 기술된 파츠를 관리하는 기능.
- 특정 모습 및 옷 선택
- // TODO : ...
- CubismExpressionController (.exp 및 .expressionList 추가됨)
- "현재 파라미터값" <- "표정 파라미터값" 을 가산 or 곱셈
- (Cubism UpdateController 및 ParameterStore 필요)
- [.expressionList.asset] 만들기 -> [.exp3.asset] 추가
- ...
- CubismMotionController
- CubismFadeController (.fade 및 .fadeMotionList 추가됨)
- Unity의 Mecanim에서 스테이트 머신을 구성하지 않고도, 애니메이션을 재생가능!
- (CubismFadeController 및 Unity Animator 필요)
- [프로세스]
- (1)PlayableGraph 생성
- (2)CubismMotionLayer 생성
- (3)애니메이션 재생/정지
- [.fadeMotionList]를 만들고 -> [.fade.asset] 추가
- AnimationClip의 instanceID 저장
- ...
- V3 부터 부족한 기능을 컴포넌트 으로 자연스럽게 제공함.
;
- EyeBlinkController
- model3.json 의 Groups 에 "EyeBlink 파라미터" 가 안지정 되있으면...
- 직접 해당 Parameter 에 "EyeBlinkParameter 컴포넌트" 를 추가 해도 됨!
- "Blend Mode" 를 'Multiply' (곱하기) 으로해야? 그 파람인스펙터 랑 충돌의 피할수 있다?
- EyeBlinkParameter
- EyeL, EyeR
- AutoEyeBlinkInput
- Max값적용 및 깜빡속도랜덤화
-
# CubismAutoEyeBlinkInput.cs 코드 수정 public float Timescale = 10f; public float MinTimescale = 2.0f; public float MaxTimescale = 20.0f; private CubismEyeBlinkController Controller { get; set; } private float MaxEyeOpening = 1.0f; private void Start() { Controller = GetComponent<CubismEyeBlinkController>(); MaxEyeOpening = Controller.EyeOpening; } private void LateUpdate() { ... if (CurrentPhase == Phase.Idling) // 뜬채로 가만히 있는 상태 { T -= Time.deltaTime; // Mean(+-Deviation) 만큼 대기 if (T < 0f) // 뜬채로 있다가... 이제 감으려고 하는 상황 { T = (Mathf.PI * -0.5f); LastValue = MaxEyeOpening; // 뜬채의 최대값이 MaxEyeOpening 임 CurrentPhase = Phase.ClosingEyes; Timescale = Random.Range(MinTimescale, MaxTimescale); // 깜빡속도 자연스럽게 } else { return; } } // Timescale 은 깜빡속도 그리고 0.0 < value < 1.0 그리고 LastValue 는 방금값 T += (Time.deltaTime * Timescale); var value = Mathf.Abs(Mathf.Sin(T)); // MaxEyeOpening 를 만들어서, 내가정한 EyeOpening계수 최대치를 넘지안도록 하게한다. if (value > MaxEyeOpening) { value = MaxEyeOpening; } // 감는 중이였고, 이제 다 감아서~ 뜨려고 하는 상황 if (CurrentPhase == Phase.ClosingEyes && value > LastValue) { CurrentPhase = Phase.OpeningEyes; } // 트는 중이였고, 이제 다 터서~ 감으려고 하는 상황 else if (CurrentPhase == Phase.OpeningEyes && value < LastValue) { value = MaxEyeOpening; CurrentPhase = Phase.Idling; T = Mean + Random.Range(-MaximumDeviation, MaximumDeviation); } Controller.EyeOpening = value; LastValue = value; }
- MouthController
- model3.json 의 Groups 에 "LipSync 파라미터" 가 안지정 되있으면...
- 직접 해당 Parameter 에 "MouthParameter 컴포넌트" 를 추가 해도 됨!
- "Blend Mode" 를 'Override' 으로해서~ 그냥 무조건 직접 컨트롤 하는게 좋을듯~
- MouthParameter
- MouthOpenY
- AudioMouthInput
- .wav 립씽크 = AudioSource 미리 연결 해두고 -> audioSource.play() 만 제어해도 될듯.
- Gain=3.2 , Smoothing=0.12
- HarmonicMotionController
- 적용하고자 하는 Parameter 에 "HarmonicMotionParameter 컴포넌트" 를 추가 해야 됨!
- "Blend Mode" 를 'Additive' 으로 함... (적당히 +- 하는게 젤 자연스러울듯?)
- HarmonicMotionParameter
- Angle X : center, 0.5, 0.1, 3.1
- Angle Y : center, 0.5, 0.1, 7.2
- Angle Z : center, 0.5, 0.1, 2.3
BrowRY : right, 0.4, 0.2, 5.1BrowLY : left, 0.4, 0.2, 5.2BrowRA : right, 0.3, 0.3, 5.3BrowLA : left, 0.3, 0.3, 5.4- BodyAngle X : center, 0.5, 0.1, 2.4
- BodyAngle Y : center, 0.5, 0.1, 6.5
- BodyAngle Z : center, 0.5, 0.1, 3.6
- Breath : center, 0.5, 0.5, 0.5
- P : center, 0.5, 0.5, 3.0
- PhysicsController
- Rig.Gravity 및 Rig.Wind 값을 조절하면... 자연스러운? 헤어 효과???
- Fps 도 알맞게 셋팅???
- Sub Rigs 에 해당되는 Elements 잡아 줘야 하는듯!!!
- // TODO : ...
-
# CubismPhysicsController.cs 에 아래의 메소드 추가 public CubismPhysicsRig GetRig() { return _rig; } # 메인코드.cs 에서 아래와 같이 적용 private Live2D.Cubism.Framework.Physics.CubismPhysicsController cubismPhysicsController; private Live2D.Cubism.Framework.Physics.CubismPhysicsRig cubismPhysicsRig; void Start() { cubismPhysicsController = GetComponent<Live2D.Cubism.Framework.Physics.CubismPhysicsController>(); cubismPhysicsRig = cubismPhysicsController.GetRig(); } void Update() { cubismPhysicsRig.Wind = new Vector2(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f)); }
- ...
-끝-
'게임' 카테고리의 다른 글
unity4 (0) | 2023.05.22 |
---|---|
unity3 (0) | 2023.03.15 |
Live2D Cubism SDK (0) | 2022.10.28 |
Live2D Cubism (0) | 2022.08.28 |
Ready Player ME (0) | 2022.08.27 |