팔다리가있는 렌더링 문자 (Java / OpenGL의 블렌더 모델)


10

분리 가능한 팔다리를 만들려면 캐릭터 애니메이션 및 렌더링 클래스를 만들 때 어떤 측면을 고려해야합니까? 나는 신경계에 이르기까지 모든 것을 정의 할 수있는 상세한 신체 시스템을 개발했습니다. 난쟁이 요새에서 발견 된 피해 수준과 비슷한 것을 목표로하고 있습니다. 예를 들어, 캐릭터가 윗팔에 손상을 입으면 신경이 손상되어 팔 전체가 비활성화 될 수 있습니다. 아니면 팔을 완전히 잃을 수도 있습니다.

이 데이터 부분을 처리하기 위해 작성된 시스템이 있습니다. 각 캐릭터에는 부속 장치와 내부 부품이있는 트렁크가 있습니다. 각 부속 장치에는 하위 부속 장치와 내부 부품이있을 수도 있습니다. 부모 추가가 비활성화 / 제거 된 경우 하위 추가는 비활성화 / 제거됩니다. 비활성화 / 제거 된 부속 장치 또는 내부 부품이 수명 동안 필요한 경우 캐릭터가 곧 사망합니다.

내가 지금하고있는 것은 이것의 그림 / 애니메이션 부분입니다. 신체의 현재 상태 (팔 / 다리 누락)가 허용되는 애니메이션을 알기 위해 애니메이션을 어떻게 정의합니까? 누락 된 팔다리를 그리지 않도록 드로잉 시스템을 어떻게 설정합니까? 각 팔다리 / 부록은 자체 모델이어야합니까 (지반에 부속 장치를 잘라 내고 싶습니다)?

내가 전환하고있는 간단한 시스템 (테스트 용으로 작성)은 애니메이션의 모든 키 프레임을 전체 모델로 VBO로 가져옵니다 (키 프레임이 시작 / 중지되는 버텍스 수와 함께). 블렌더에 정의 된 본을 가져 오거나 활용하지 않으며 프레임간에 보간하지 않습니다.

이것은 꽤 큰 질문 일 가능성이 있으므로, 내가 가야 할 곳을 얻을 수있는 리소스를 찾고 있습니다.

편집하다

필요한 사지가없는 경우 대체 애니메이션을 수행하도록 설정했기 때문에 애니메이션이 적용되는 사지를 알고있는 애니메이션에 대해 묻습니다. 그것에 대해 생각한 후에 애니메이션을 활성화하기 전에 해당 확인을 수행하고 그 시점에 적절한 애니메이션을 활성화한다고 생각합니다.

답변:


7

나는 현재 비슷한 시스템에서 일하고 있습니다. 절차 애니메이션 + 해체 등

신체의 현재 상태 (팔 / 다리 누락)를 허용하는 애니메이션을 알기 위해 애니메이션을 어떻게 정의합니까?

팔다리가 없으면 볼 수 없기 때문에 애니메이션이 적용되는지 여부를 신경 쓰는 사람은이 비트를 따르지 않습니다.

각 팔다리 / 부록은 자체 모델이어야합니까 (지반에 부속 장치를 잘라 내고 싶습니다)?

정점 본 가중치를 사용하여 동적으로 빌드합니다. 품질은 아마도 손으로 모든 사지를하는 것보다 약간 낮을 수 있지만 한 번 한 번 한 번 해본 후에는 모든 모델에 적용 할 수 있기 때문에 노력이 덜 듭니다.

다음 섹션의 깔끔한 접근 방식을 사용하면 각 팔다리에 자체 모델이 있습니다.

나는 전체 실체의 손에 완전한 모델을 가지고 있었을 것입니다.

누락 된 팔다리를 그리지 않도록 드로잉 시스템을 어떻게 설정합니까?

2 가지 주요 선택 중 가장 간단한 방법은 단순히 팔다리를 따로 그리는 것입니다. 그리고 팔다리가 합쳐지는 곳은 일반적으로 팔다리를 제거 할 때 볼 수있는 "원시 살"텍스처로 숨겨져있는 추가면이 있습니다.

두 번째 선택은 즉석에서 동적으로 수행하는 것입니다. 이는 비교적 간단한 모델에서만 작동합니다. 이 방법은 기본 모델을 가져 와서 제거하려는 팔다리에 가중치를 부여하는 정점을 찾는 것입니다. 열려있는 섹션을 알 수 있도록 정점을 제거하고 연결된 정점을 기록하십시오. 그런 다음 "raw flesh"텍스처가있는 삼각형으로 열린 섹션을 동적으로 닫습니다. 제정신 소프트웨어 개발자의 관점에서 볼 때,이 접근 방식은 좋은 방법 (런타임 모델 변형)이 아니며 "평평한"성능 특성은 적지 만, 나는 그 방식이 좋습니다.

첫 번째 방법은 더 많은 그리기 호출을 생성하지만 조금 더 접근하기 쉽습니다.

나는 개인적으로 두 번째로 상대적인 성공을 거두지 만 모든 모델은 폴리가 매우 낮으므로 모델을 동적으로 자르고 프레임 내에서 VBO를 다시 업로드하는 것이 가능합니다.

블렌더에 정의 된 본을 가져 오거나 활용하지 않으며 프레임간에 보간하지 않습니다.

이것은 어떤 정점이 어떤 관절에 속하는지 어떻게 알기 때문에 절차 적 방법으로 해체를 실제로 어렵게 만듭니다. 정점 뼈 무게와 해체가 잘 맞아서이 비트를 다시 생각하는 것이 좋습니다.

또한 보간에 투자하는 것이 좋습니다. 이것이 없으면 애니메이션 속도를 높이거나 낮출 수 없으며 프레임 속도와 연결됩니다. 즉, 애니메이션을 최대한 활용할 수 없습니다. 예를 들어 누군가가 정지 할 때 도보 애니메이션을 느리게 할 수 없습니다.


감사합니다 @Michael. 보간을 가져오고 뼈를 가져 오는 것이 결국 필요하다는 것을 알았지 만 아직 뼈가 없습니다. 당신이 말한 것에서, 그 시점에 도달하면 어떻게해야할지 알 것 같습니다. 아마도 부속물 또는 부속물 그룹을 뼈와 연관시킬 것입니다. 뼈 가져 오기에 대해 별도의 질문을하겠습니다.
MichaelHouse

비슷한 일을하고 있기 때문에이 관련 질문에 대한 자세한 정보가 있습니까? gamedev.stackexchange.com/q/20931/7191
MichaelHouse

5

최선의 선택은 팔다리를 잘라 상처의 현재 상태에 따라 여러 하위 모델을 사용하는 것입니다. 키 프레임 당 VBO를 사용하는 방법은 너무 과도합니다. 스켈 레탈 애니메이션 시스템을 사용하고,받는 데미지에 따라 (한 쪽 다리 절개, 두 다리없이 크롤링 등) 다른 애니메이션을 재생합니다.

Valve 는 L4D2에서 상처와 해부에 관해 좋은 슬라이드를 발표했습니다 . 나는 기관과 뼈에 모델을 사용하고 컷, 총성 등의 텍스처 투영을 기반으로 "스킨"모델을 클리핑하는 접근 방식을 정말 좋아합니다.


흥미 롭군 그 슬라이드는 좋아 보인다. 이것은 전체 부속기에 영향을 미치지 않은 손상에 효과가있는 것 같습니다.
MichaelHouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.