Search

fOSC로 Face Cap 라이브 연결하기

요약
Face Cap 데이터 특성에 맞춰 fOSC 수정하기
분류
plugin
태그
python
작성일
2020/11/16
1 more property
Face Cap 의 live 는 OSC 를 사용하기때문에 fOSC를 이용하면 Face Cap 과 C4D를 라이브로 연결하는 것이 가능하다. 데이터 형식에 따라 조금의 수정이 필요할 뿐이다.
CINEMA4D 에서 fOSC 사용하기 를 먼저 따라하고 진행해주세요.

Moves by Maxon

Face Cap 을 다루기전에 Moves by Maxon 을 잠시 알아보자.
CINEMA 4D는 Moves by Maxon 이라는 플러그인이 있다. 처음에는 페이셜 캡쳐만 가능했던 앱이 이제는 body 캡쳐도 가능하다.
ARKit 을 이용하는 Facial 캡쳐는 결과물이 비슷하다. 아주 드라마틱 하지는 않지만, 가볍게 사용하기 좋다. 그리고 캐릭터 세팅에 따라 차이가 있겠지만, 비교적 밝고 웃는 표정은 잘 연출되는 편이다.
Moves by Maxon 은 녹화를 하고 그 데이터를 C4D 로 불러오는데 라이브 기능도 있었으면 좋겠다.
다음 업데이트에는 라이브 기능이 추가되길 바려며, 지금은 fOSC 와 Face Cap 을 이용하여 구현해보자.
I love Maxon.

Face Cap

특징

52개의 표정 데이터를 0 과 1 로 출력한다.
Head tracking
eye tracking
go Live (free : 5 second , $ 59.99 : unlimited)

data

{ name, type, value }
먼저 데이터의 형식을 보면 head 와 eye 는 { "/HR", "fff", -9.938, 21.658, -5.062 } 이런 모습이고 fOSC 가 잘 알아듣는 형태이다.
f 는 float 라는 뜻으로 쓰이고, float 3개가 들어오고 그 값은 x, y, z 에 맵핑된다.
head rotation data
blendshape 데이터도 크게 다르지 않다. { "/W", "if", 51, 0.072 } 그러나 여기서 문제가 발생한다.
/W : null 오브젝트의 이름
if : integer, float
51 : tongueOut 의 index 번호
0.072 : value
표정 데이터는 P.X 에 0~51 까지 숫자가 차례로 들어왔다가 나간다. 최종적으로 51 같은 어떤 숫자만 남게된다. 그러다보니 나머지 51개의 표정 데이터가 사라지게 된다.
그래서 /W 로 시작하는 데이터를 처리할 수 있도록 수정이 필요하다.
blendshape data

code

198 line 에 다음의 code 를 추가한다.
# format: [#bundle, timetag, msg...] if decoded[0] == "#bundle" : msgs = decoded[ 2 : ] for i in msgs: write( i[0] , i[ 2 : 8 ] , osc_dict ) else: # add -------------------------------------------------------------- # if decoded[0] == "/W" : decoded = [decoded[0]+str(decoded[2]), decoded[1], decoded[3]] # ------------------------------------------------------------------ # write( decoded[0] , decoded[ 2 : 8 ] , osc_dict )
Python
복사
이름에 /W 이 있다면 i 에 해당하는 숫자를 합쳐주고 f 에 해당하는 값은 position x 에 넣어주는 형태로 변경하게된다. (너무 간단하다. 간단해도 너무 간단하다. ㅠ ㅠ)
null의 이름과 P.X 값이 잘 매칭되어 분리되었다.

XPresso or Script setting

그림처럼 이제 남은 것은 저 값을 이용하여 몰프 타겟과 연결하거나 Head, Eye 오브젝트를 연결해주는 세팅과정이 남았다.. 이제부터 진짜 작업이 시작되는 느낌일 것이다. 상당히 많은 시간이 필요할 것이고, 52개의 morph target을 연결해주는 것 역시 쉬운 일이 아닐것이다. 반복을 줄이기위해 반복적인 작업을 먼저 진행되어야 하지만, 나를 따라 움직이는 캐릭터를 보고있으면 일하는 것인지 노는 것인지 잠시 잊고 있을지도 모른다.
지금까지 설명한 부분들만 수정하면 플러그인 작동은 잘 될것이다. 수정된 파일은 저작권 부분을 확인 않아 올리지 않았다. 내용이 많지 않으니 직접 고쳐보는 것도 좋은 경험이 될것이다.
질문은 언제나 환영하니 편하게 연락주세요.
끝~
question : jeongseok.td@gmail.com