물리 연산 설정 (머리카락 흔들림)

물리 연산을 설정하기 위한 과정

1.물리연산 클래스
a. 인스턴스 생성
b. 물리 연산 설정
c. 모델에 적용


1-a. 인스턴스 생성

물리 연산을 적용하기 위해서 PhysicsHair클래스를 이용합니다.
설정하고 싶은 부위 하나당 하나의 인스턴스를 준비합니다.
PhysicsHair physicsHairFront = new PhysicsHair(); // 앞 머리
PhysicsHair physicsHairSide = new PhysicsHair(); // 옆 머리
PhysicsHair physicsHairBack = new PhysicsHair(); // 뒷 머리

1-b. 물리 연산 설정

a에서 생성한 인스턴스에 물리 연산에 필요한 인수들을 설정합니다.
설정은 크게 세 가지로 나뉩니다.
・물체 속성 설정
・입력 파라미터 설정
・출력 파라미터 설정


・물체 속성 설정
setup함수를 호출하여 설정합니다.
이 함수는 현재 물리 연산을 하는 것이 어떤 물체인지에 대해 설정합니다.
physicsHairFront->setup (
                        0.17f, // 길이 : 단위는 미터, 흔들리는 주기(빠르기)에 영향
                        0.5f, // 공기저항 : 0~1사이의 값, 기본값은 0.5. 흔들림이 감쇠하는 속도에 영향
                        0.1f ) ; // 질량 : 단위는 kg 


・입력 파라미터 설정
addSrcParam함수를 호출하여 설정합니다.
이 함수는 어떤 파라미터가 움직였을 때 물리연산을 수행하는지 여부를 설정합니다.
PhysicsHair::Src srcX = PhysicsHair::Src::SRC_TO_X; // 가로 흔들림
PhysicsHair::Src srcZ = PhysicsHair::Src::SRC_TO_G_ANGLE; // 처짐

physicsHairFront->addSrcParam(srcX, "PARAM_ANGLE_X", 0.005f, 1); // "PARAM_ANGLE_X" 파라미터가 변할 때 0.005배만큼의 영향을 받아 가로로 흔들림
physicsHairFront->addSrcParam(srcZ, "PARAM_ANGLE_Z", 0.8f, 1); // "PARAM_ANGLE_Z" 파라미터에 맞춰 0.8배에 영향을 받아 처짐


・출력 파라미터 설정
addTargetParam함수를 호출하여 설정합니다.
이 함수는 위에서 지정한 입력에 따라 어느 부위에 물리 연산 영향을 줄지를 설정합니다.
PhysicsHair::Target targetA = PhysicsHair::Target::TARGET_FROM_ANGLE; //

physicsHairFront->addTargetParam(targetA, "PARAM_HAIR_FRONT", 0.025f, 1); // "PARAM_HAIR_FRONT"에 0.025배의 가중치를 적용해 연산 결과를 반영함
physicsHairBack->addTargetParam(targetA, "PARAM_HAIR_BACK", 0.025f, 1); // "PARAM_HAIR_BACK"에 0.025배의 가중치를 적용해 연산 결과를 반영함

1-c. 모델에 설정

update함수를 호출하여 모델의 물리 연산을 적용합니다.
이 함수는 매 프레임 모델 클래스의 update함수가 호출되기 전에 호출합니다.
long time = UtSystem::getTimeMSec() - startTimeMSec; // 실행 직후 경과 시간

// 물리 연산 결과를 모델에 적용
physicsHairFront->update(live2DModel, time);
physicsHairBack->update(live2DModel, time);


























Comments