3D 프롭 Convex Collider AI 자동 피팅 툴 만들기: Unity PhysX 최적화 가이드
인게임 3D 프롭의 Convex Collider를 수작업으로 맞추는 비용을 줄이는 AI 자동 피팅 툴의 설계법을 다룹니다. Unity 2022.3 LTS와 C#을 기준으로 후보 생성, 오차 평가, PhysX 검증, LOD와 런타임 성능 최적화까지 단계별로 설명합니다.

핵심 요약
렌더링 메시를 MeshCollider에 그대로 사용하면 단순 콜라이더보다 처리 오버헤드가 커질 수 있고, 게임플레이에 맞지 않는 충돌 형태가 될 수도 있습니다. Convex Collider AI 자동 피팅 툴은 메시의 기하학적 특징을 추출한 뒤 여러 충돌체 후보를 생성하고 표면 오차, 침투 깊이, 접촉 안정성, 콜라이더 복잡도를 종합해 조건에 맞는 후보를 선택합니다.
Unity 2022.3 LTS의 MeshCollider.convex 설정과 Mesh Collider 제한, PhysX 쿠킹 결과를 최종 검증 대상으로 삼습니다. AI는 후보 생성과 파라미터 예측에 사용하고 게임 플레이에 필요한 예외 처리는 규칙 기반으로 유지하는 설계를 검토합니다.
Convex Collider는 왜 수작업 피팅이 어려운가?
메시가 복잡한 프롭이라도 물리 충돌에는 렌더링 메시의 모든 디테일이 필요하지 않을 수 있습니다.
콜라이더를 설계할 때 다음 문제를 점검할 수 있습니다.
| 문제 | 원인 | 결과 |
|---|---|---|
| 충돌 판정 비용 증가 | 렌더 메시를 직접 사용 | 단순 콜라이더보다 처리 오버헤드가 커질 수 있음 |
| 틈새에 물체가 끼임 | 너무 정밀한 오목한 형상 | 플레이어와 물체의 이동이 불안정해짐 |
| 공중에 뜬 것처럼 보임 | 콜라이더가 바닥 접점을 포함하지 않음 | 배치와 물리 반응의 신뢰도 저하 |
| 아트 수정 때 재작업 | 메시 형태가 바뀔 때마다 수동 조정 | 아티스트와 테크니컬 아티스트의 반복 작업 증가 |
| 빌드별 결과 확인 | 플랫폼과 쿠킹 설정이 다를 수 있음 | 에디터와 대상 빌드에서 결과를 각각 검증 |
Unity 2022.3의 Convex MeshCollider는 구멍이나 입구를 표현하지 못하며 255개 삼각형 제한이 있습니다. 한 개의 convex hull로 오목한 프롭을 감싸면 내부가 과도하게 채워질 수 있습니다. 따라서 가구·바위·파이프처럼 언더컷이나 구멍이 있는 모델은 여러 convex hull 또는 Box, Capsule, Sphere 조합을 검토할 수 있습니다.

AI 자동 피팅 툴은 어떻게 구현할까?
권장 구조는 AI 모델이 모든 결과를 직접 확정하는 방식이 아니라 특징 추출 → 후보 생성 → 점수 계산 → PhysX 검증 → 아티스트 승인으로 나누는 것입니다.
flowchart LR
A[프롭 FBX 또는 Prefab 입력] --> B[스케일 정규화와 특징 추출]
B --> C[AI의 콜라이더 유형과 파라미터 예측]
C --> D[Box Capsule Sphere Convex 후보 생성]
D --> E[표면 오차와 접촉 안정성 평가]
E --> F[PhysX 쿠킹과 시뮬레이션 검증]
F --> G[자동 승인 또는 아티스트 리뷰]
1. 메시를 정규화하고 기하학적 특징을 추출한다
피팅 전에 로컬 좌표계와 스케일을 통일해야 합니다. FBX 임포트 설정이나 프리팹의 부모 스케일이 서로 다르면 같은 모델이라도 AI 입력과 오차 평가 결과가 달라집니다.
기본 전처리 항목은 다음과 같습니다.
- 월드 변환을 적용해 로컬 메시를 기준으로 만든다.
- 바운딩 박스의 최소점과 최대점을 구한다.
- 표면에서 균일하게 샘플 포인트를 추출한다.
- PCA로 주축 3개와 각 축의 분산을 계산한다.
- 메시 부피, 표면적, 바운딩 박스 부피를 계산한다.
- 연결된 메시 파트와 비매니폴드 영역을 표시한다.
- 바닥 방향과 대표 접촉 영역을 추정한다.
AI 모델에 전달할 수 있는 특징 벡터 예시는 다음과 같습니다.
| 특징 | 의미 | 피팅에 미치는 영향 |
|---|---|---|
| AABB 크기 | X, Y, Z 방향의 전체 크기 | Box와 Capsule 후보의 초기값 |
| PCA 주축 | 모델이 길게 뻗은 방향 | 회전된 콜라이더의 방향 |
| 축별 분산 | 형상의 편평함과 길이 | Box, Capsule, Sphere 선택 |
| 볼록도 비율 | Convex Hull 부피 대비 원본 부피 | 단일 hull 또는 분해 필요성 |
| 연결 파트 수 | 분리된 메시 덩어리 개수 | 다중 콜라이더 생성 여부 |
| 바닥 접촉 후보 | 가장 낮은 표면 영역 | 안정적인 지지면 생성 |
볼록도 비율은 다음과 같이 정의할 수 있습니다.
이 비율은 메시가 닫힌 2-manifold 표면으로 둘러싸인 부피를 정의할 수 있을 때만 의미가 있습니다. 열린 표면이나 비매니폴드가 있으면 먼저 메시를 보정하거나 이 특징을 사용하지 않습니다. R_convex가 1에 가까우면 단일 볼록 껍질이 부피를 덜 과장할 가능성이 있지만, 접촉면과 플레이어 통과 공간도 함께 검토해야 합니다.
2. AI는 콜라이더 유형과 파라미터를 예측한다
입력 특징에서 다음 결과를 예측하도록 분류 모델과 회귀 모델을 구성할 수 있습니다.
- 추천 콜라이더 유형: Box, Sphere, Capsule, Convex
- Convex hull 개수
- 각 hull의 회전과 중심 위치
- 크기와 팽창값인 inflation
- 우선 보존할 접촉 영역
- 정밀 피팅과 성능 피팅 중 목표 프로파일
초기 프로토타입은 분류기와 회귀기의 조합으로 시작할 수 있습니다. 예를 들어 기존 프로젝트에서 아티스트가 승인한 Collider 데이터를 학습 데이터로 사용하고 메시 특징을 입력해 kind, hullCount, inflation을 예측할 수 있습니다.
Unity 에디터에서의 모델 경계는 다음처럼 분리할 수 있습니다.
using System;
using UnityEngine;
public enum ColliderKind
{
Box,
Sphere,
Capsule,
Convex
}
[Serializable]
public struct FitFeatures
{
public Vector3 boundsSize;
public Vector3 principalAxis;
public float convexityRatio;
public int connectedPartCount;
public float surfaceArea;
public float volume;
}
[Serializable]
public struct FitCandidate
{
public ColliderKind kind;
public int hullCount;
public float inflation;
public float predictedError;
}
public interface IFitPredictor
{
FitCandidate Predict(FitFeatures features);
}
실제 추론은 ONNX Runtime 같은 C# 추론 엔진이나 프로젝트에서 사용하는 Unity용 추론 런타임에 연결할 수 있습니다. Unity 프로젝트에서는 선택한 패키지가 에디터와 대상 빌드 플랫폼을 지원하는지 확인해야 합니다. 중요한 점은 모델을 교체해도 후보 평가와 PhysX 검증 코드는 그대로 유지되도록 인터페이스를 분리하는 것입니다.
3. 여러 후보를 생성하고 점수를 계산한다
AI가 추천한 후보 하나만 적용하면 특정 프롭에서 오류가 커질 수 있습니다. 추천값 주변에 회전, 크기, inflation을 조금씩 변화시킨 후보를 추가로 생성한 뒤 점수 기반으로 후보를 비교하는 방식을 사용할 수 있습니다.
후보 점수는 다음처럼 구성할 수 있습니다.
각 항목은 다음을 의미합니다.
E_surface: 메시 표면과 콜라이더 표면 사이의 평균 거리E_penetration: 콜라이더가 금지된 내부 영역을 침범한 정도E_contact: 바닥, 벽, 플레이어와의 대표 접촉점 오차E_complexity: hull 개수, 삼각형 수, 런타임 검사 비용에 대한 패널티w_s,w_p,w_c,w_k: 게임 장르와 프롭 유형에 따른 가중치
닫힌 콜라이더 표면에서 부호 있는 거리를 계산할 수 있다면 표면 샘플 p_i로 오차를 정량화할 수 있습니다. 열린 표면처럼 내부와 외부를 안정적으로 구분할 수 없는 경우에는 부호 없는 거리나 별도의 판정 방법을 사용합니다.
여기서 d(p_i)는 샘플 포인트와 콜라이더 표면의 거리이며 ρ는 큰 이상치가 전체 점수를 지배하지 않도록 제한하는 손실 함수입니다. 게임플레이에서 발판이나 엄폐물의 역할이 중요한 프롭이라면 표면 오차보다 E_contact의 가중치를 높이는 것이 좋습니다.
using UnityEngine;
public struct FitWeights
{
public float surface;
public float penetration;
public float contact;
public float complexity;
}
public static class FitScore
{
public static float Evaluate(
float surfaceError,
float penetrationError,
float contactError,
int hullCount,
int triangleCount,
FitWeights weights)
{
float complexityError = hullCount + triangleCount * 0.01f;
return weights.surface * surfaceError
+ weights.penetration * penetrationError
+ weights.contact * contactError
+ weights.complexity * complexityError;
}
}
이 코드는 최종 점수의 뼈대만 보여주는 예시입니다. 0.01f와 각 점수 가중치는 프로젝트별 예시값이며, hull·삼각형 수는 실제 런타임 비용의 직접 측정값이 아닙니다. 거리 계산과 침투 검사는 메시 샘플링 방식, PhysicsScene 분리 여부, 프롭의 게임플레이 용도에 맞춰 구현합니다.
Unity PhysX에서 자동 생성 결과를 어떻게 검증할까?
콜라이더 메시를 만들었다고 해서 피팅이 끝난 것은 아닙니다. MeshCollider.sharedMesh에 메시를 할당한 뒤 convex 설정과 실제 물리 장면에서의 접촉 결과를 확인해야 합니다.
using UnityEngine;
public static class ConvexColliderApplier
{
public static void Apply(MeshCollider target, Mesh colliderMesh)
{
target.sharedMesh = null;
target.convex = true;
target.sharedMesh = colliderMesh;
}
}
검증 단계에서는 다음 항목을 자동으로 기록하는 것이 좋습니다.
- PhysX convex mesh 쿠킹 성공 여부
- 콜라이더의 삼각형 수와 hull 개수
- 바닥 접촉점의 높이 오차
- 대표 방향에서의 레이캐스트 누락 여부
- 겹침 테스트에서 발생한 최대 침투 깊이
- Rigidbody와 함께 시뮬레이션했을 때의 회전과 튀김 현상
- 에디터와 플레이 모드에서의 결과 차이
프롭 종류에 따라 검증 기준도 달라져야 합니다.
| 프롭 유형 | 우선 평가 항목 | 권장 방식 |
|---|---|---|
| 바닥 장식물 | 바닥 접촉과 낮은 침투 | Box 또는 낮은 해상도의 Convex |
| 바위와 폐허 | 외곽 형상과 안정적인 지지면 | 다중 Convex Hull |
| 파이프와 난간 | 플레이어 통과 공간과 길이 방향 | Capsule과 Box 조합 |
| 상자와 가구 | 모서리 접촉과 회전 안정성 | Box 우선 |
| 작은 소품 | 비용과 간단한 충돌 | Sphere 또는 Capsule |

Convex Decomposition은 언제 사용하는가?
단일 Convex Collider가 원본 형상을 지나치게 채우면 Convex Decomposition을 사용합니다. 이때 목표는 원본 메시와 똑같이 복원하는 것이 아니라 게임플레이에 중요한 외곽과 접촉면을 보존하는 것입니다.
대표적인 파라미터는 다음과 같습니다.
maxHulls: 생성할 최대 hull 개수maxVerticesPerHull: hull 하나에 허용할 최대 정점 수concavity: 분할을 허용하는 오목함의 기준resolution: voxel 또는 샘플링 해상도minimumVolumePercentError: 작은 파트 제거 기준inflation: 수치 오차와 끼임을 줄이기 위한 표면 팽창값
아래 파라미터 이름은 개념 예시이며, 실제 필드명과 의미는 분해 라이브러리마다 다릅니다. 특히 inflation은 Unity MeshCollider의 일반 설정으로 가정하지 말고 선택한 구현에서 제공하는지 확인해야 합니다. 해상도를 높이면 분해 후보의 세밀도와 처리 비용이 달라질 수 있으므로 실제 쿠킹 시간과 런타임 비용을 대상 플랫폼에서 측정합니다. 프롭의 크기와 용도에 따라 정밀도 프로파일을 선택할 수 있습니다.
다음은 구현에 따라 구성할 수 있는 프로파일 예시입니다.
| 프로파일 | 대상 | 특징 |
|---|---|---|
| Gameplay | 플레이어가 직접 밟거나 밀 수 있는 오브젝트 | 접촉 오차와 침투 오차에 높은 가중치 |
| Background | 배경 장식물 | hull 수와 삼각형 수를 강하게 제한 |
| Destruction | 파괴 전후 형태가 중요한 오브젝트 | 파트별 콜라이더와 교체 가능성 우선 |
| Trigger | 상호작용 영역 | 실제 형상보다 안정적인 탐지 범위 우선 |
AI 피팅 결과를 아티스트 워크플로에 연결하는 방법
자동화 툴은 정확도만큼 수정 가능성과 추적성이 중요합니다. 생성 결과를 즉시 덮어쓰기보다 다음 정보를 에셋 메타데이터에 저장하는 방식이 좋습니다.
- 입력 메시의 GUID와 임포트 버전
- 모델 버전과 추론 날짜
- 사용한 피팅 프로파일
- 후보별 점수와 탈락 사유
- 최종 hull 수와 삼각형 수
- 아티스트의 수동 수정 여부
- PhysX 쿠킹 검증 결과
아티스트는 Scene 뷰에서 원본 메시와 콜라이더를 동시에 보고 샘플 포인트와 침투 영역을 색상으로 확인할 수 있어야 합니다. 또한 특정 영역을 보존, 무시, 분리로 태깅할 수 있으면 문 손잡이, 난간, 바닥면처럼 게임플레이에 중요한 부분을 안정적으로 관리할 수 있습니다.
자동 승인 기준도 수치로 정의해야 합니다. 예를 들어 표면 오차와 침투 깊이가 임계값보다 작고 PhysX 쿠킹이 성공했으며 복잡도 예산을 넘지 않은 경우에만 승인합니다. 기준을 통과하지 못한 결과는 실패가 아니라 리뷰 큐로 보내야 합니다.
런타임 성능과 메모리는 어떻게 최적화할까?
Convex Collider 생성은 가능한 경우 에디터 또는 에셋 빌드 단계에서 수행하고, 런타임에는 미리 쿠킹된 결과를 사용합니다. 런타임에 쿠킹해야 한다면 로딩 구간과 프레임 예산을 따로 측정하고, Unity Physics.BakeMesh 사용 여부와 호출 시점을 관리합니다.
실무적인 최적화 기준은 다음과 같습니다.
- 피팅 결과를 에셋으로 직렬화한다.
- 동일한 콜라이더 메시를 공유한다.
- 작은 배경 프롭은 단일 Box 또는 Sphere로 제한한다.
- Rigidbody가 없는 장식물은 필요한 경우 MeshCollider 대신 단순 콜라이더를 사용한다.
- 게임플레이 중요도와 접촉 정밀도 요구에 따라 Collider LOD를 둔다.
- 물리 레이어 매트릭스로 불필요한 충돌 쌍을 차단한다.
Physics.BakeMesh같은 프로젝트의 베이크 파이프라인과 충돌체 생성 시점을 분리해 관리한다.
콜라이더 수를 줄이는 것이 항상 최선은 아닙니다. 단일 hull이 오목한 영역을 과도하게 채우면 접촉 오차와 플레이어 끼임이 증가할 수 있습니다. 따라서 최종 기준은 콜라이더 개수가 아니라 충돌 품질 대비 비용이어야 합니다.
자주 묻는 질문 FAQ
Convex Collider AI가 렌더링 메시를 그대로 사용하면 안 되는 이유는 무엇인가?
렌더링 메시에는 물리적으로 불필요한 디테일이 많거나 오목한 형상이 포함될 수 있습니다. 단순화된 Convex Collider나 여러 개의 primitive 조합은 충돌 요구를 충족하면서 처리 비용을 낮추는 선택지가 될 수 있으므로, 실제 장면에서 결과를 검증합니다.
AI가 만든 콜라이더를 사람의 검수 없이 사용해도 되는가?
작은 배경 프롭은 자동 승인할 수 있지만 플레이어가 밟는 발판, 엄폐물, 파괴 오브젝트는 리뷰가 필요합니다. 표면 오차, 침투 깊이, 접촉 안정성, PhysX 쿠킹 결과를 함께 확인해야 합니다.
단일 Convex Hull과 Convex Decomposition 중 무엇을 선택해야 하는가?
볼록도 비율이 높고 오목한 영역이 적으면 단일 hull이 적합합니다. 구멍, 언더컷, 분리된 파트가 많거나 플레이어 접촉이 중요한 모델은 여러 hull로 분해하는 편이 안전합니다.
정리
3D 프롭 Convex Collider AI 자동 피팅 툴의 핵심은 AI 모델 자체보다 평가 기준과 검증 파이프라인에 있습니다. Unity 2022.3 LTS와 PhysX 환경에서는 메시 특징을 기반으로 콜라이더 후보를 생성하고 표면 오차와 침투 깊이뿐 아니라 접촉 안정성과 복잡도까지 함께 점수화해야 합니다.
가장 실용적인 구성은 AI가 유형과 파라미터를 추천하고 후보 탐색과 PhysX 검증은 결정론적인 코드가 담당하며 예외적인 결과만 아티스트가 수정하는 형태입니다. 이렇게 구성하면 자동화율을 높이면서도 게임플레이에 직접 영향을 주는 충돌 품질을 통제할 수 있습니다.



