캐스트의 목표는 모델, 애니메이션, 재질 및 게임 세계에 사용하기 쉬운 형식을 만드는 것입니다. 또한 캐스트는 모든 3D 소프트웨어에서 동일한 장면을 생성할 수 있어야 합니다.
Autodesk Maya(2012+): 릴리스
블렌더(3.0+): 릴리스
.NET Framework(참조): 라이브러리/DotNet
.NET 프레임워크(Scobalula 제작): Cast.NET
Python: 라이브러리/Python
CastModelViewer(echo000 작성): Github
캐스트를 위한 무손실 변환기: SECast
참고: 도구에서 직접 캐스트로 내보내기를 지원하는 경우에는 항상 더 좋습니다.
자주 묻는 질문: FAQ
모든 파일은 캐스트 헤더로 시작합니다.
struct CastHeader{ uint32_t 매직; // char[4] 캐스트 (0x74736163)uint32_t 버전; // 0x1uint32_t 루트노드; // 필요한 경우 다양한 하위 노드를 포함하는 루트 노드 수uint32_t Flags; // 필요한 플래그나 패딩용으로 예약되어 있습니다.};
캐스트 파일은 기본적으로 일반 노드 그룹입니다. 노드에는 고유한 등록 ID가 부여되어 로더에게 데이터가 무엇인지, 이를 처리하는 방법을 알려줄 수 있습니다.
캐스트 헤더 다음에는 CastId::Root 유형이어야 하는 노드 컬렉션이 있습니다.
노드는 다음과 같습니다:
구조체 CastNodeHeader{ CastId 식별자; // 이 노드가 어떤 클래스를 사용하는지 나타내는 데 사용됩니다.uint32_t NodeSize; // nodeuint64_t NodeHash 이후의 모든 데이터와 하위 데이터의 크기; // 노드를 서로 연결하는 데 사용되는 ID와 같은 고유 해시uint32_t PropertyCount; // 속성 개수uint32_t ChildCount; // 직계 자식 노드 수// 노드 크기에 도달할 때까지 읽어야 하며, 이는 완료되었음을 의미합니다.// 노드는 스택 레이아웃이므로 로드하기 쉽습니다. FILO 순서입니다.};
사용 가능한 여러 등록된 캐스트 ID가 있습니다.
열거형 클래스 CastId : uint32_t{ 루트 = 0x746F6F72, 모델 = 0x6C646F6D, 메쉬 = 0x6873656D, BlendShape = 0x68736C62, 스켈레톤 = 0x6C656B73, 뼈 = 0x656E6F62, IKHandle = 0x64686B69, 제약 조건 = 0x74736E63, 애니메이션 = 0x6D696E61, 곡선 = 0x76727563, CurveModeOverride = 0x564F4D43, 알림 추적 = 0x6669746E, 재질 = 0x6C74616D, 파일 = 0x656C6966, 인스턴스 = 0x74736E69, 메타데이터 = 0x6174656D, };
노드 다음에는 [Node.PropertyCount] 속성 목록이 있으며, 속성은 다음과 같습니다.
CastPropertyHeader 구조체{ CastPropertyId 식별자. // 이 속성의 요소 유형uint16_t NameSize; // 이 속성의 이름 크기uint32_t ArrayLength; // 이 속성에 포함된 요소 수(단일 경우 1)// 다음은 UTF-8 문자열 소문자, 이름 크기 크기, null로 끝나지 않음// Cast_property[ArrayLength] 데이터 배열};
속성의 경우 캐스트에는 여러 내장 유형이 있습니다.
열거형 클래스 CastPropertyId : uint16_t{ Byte = 'b', //Short = 'h', // Integer32 = 'i', // Integer64 = 'l', // Float = 'f', // <플로트> 더블 = 'd', // <더블> String = 's', // Null로 끝나는 UTF-8 문자열 Vector2 = 'v2', // 부동 정밀도 벡터 XY Vector3 = 'v3', // 부동 정밀도 벡터 XYZ Vector4 = 'v4'// 부동 정밀도 벡터 XYZW};
캐스트 파일을 읽으려면 루트 노드와 그 하위 노드를 순회하면 됩니다. 속성은 항상 노드 하위 항목보다 먼저 옵니다. 각 노드에는 자체 및 모든 하위 노드의 전체 크기가 있으므로 프로세서가 노드 ID를 이해하지 못하는 경우 전체 노드를 건너뛰고 계속 읽을 수 있습니다.
Cast ID는 직렬화 및 역직렬화를 더 빠르게 하기 위해 정수로 저장됩니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 스켈레톤, 메쉬, 머티리얼 | 진실 | 거짓 |
조상 | 뿌리 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 모델 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
정점 위치 버퍼(vp) | 벡터 3(v3) | 진실 | 진실 |
정점 법선 버퍼(vn) | 벡터 3(v3) | 진실 | 거짓 |
정점 탄젠트 버퍼(vt) | 벡터 3(v3) | 진실 | 거짓 |
정점 색상 버퍼(c%d) | 정수 32(i) | 진실 | 거짓 |
정점 UV 버퍼(u%d) | 벡터 2(v2) | 진실 | 거짓 |
정점 가중치 뼈 버퍼(wb) | 정수 32(i), Short(h), 바이트(b) | 진실 | 거짓 |
정점 가중치 값 버퍼(wv) | 플로트(f) | 진실 | 거짓 |
페이스 버퍼(f) | 정수 32(i), Short(h), 바이트(b) | 진실 | 진실 |
색상 레이어 수(cl) | 정수 32(i), Short(h), 바이트(b) | 거짓 | 컬러 레이어가 있으면 True, 그렇지 않으면 False |
UV 레이어 수(ul) | 정수 32(i), Short(h), 바이트(b) | 거짓 | UV 레이어가 있으면 True, 그렇지 않으면 False |
최대 중량 영향(mi) | 정수 32(i), Short(h), 바이트(b) | 거짓 | 가중치가 있으면 True, 그렇지 않으면 False |
스키닝 방법 (sm) | 문자열(들) [선형, 쿼터니언] | 거짓 | 거짓 |
Material(CastNode:Material의 해시)(m) | 정수 64(l) | 거짓 | 거짓 |
참고 사항 :
Face Buffer
현재 메시 정점 데이터 버퍼에 대한 인덱스입니다. 여기서 (0, 1, 2)는 이 메시의 처음 세 정점입니다.
Face Buffer
CCW(오른손) 감기 순서를 따르며 이는 인덱스를 다시 매핑해야 할 수 있는 다른 API에서는 다를 수 있습니다.
얼굴에 두 개 이상의 인덱스가 동일한 잘못된 인덱스 조합 (0, 1, 1), (0, 1, 0), (0, 0, 0)
포함되어 있는 경우 사용자가 이러한 얼굴을 다음과 같이 처리하는 것이 허용됩니다. 메쉬를 적절하게 렌더링하려면 이를 무시하십시오. 이런 일이 발생했다는 경고를 사용자에게 표시하는 것이 현명할 것입니다.
각 정점 설명자 버퍼에는 동일한 수의 요소가 포함되어야 합니다. 예: 정점이 16개인 경우 법선이 있으면 16개, 버퍼가 있으면 색상이 16개 있어야 합니다. 그렇지 않으면 기본값/건너뛴 것으로 가정됩니다.
가중치는 추가됩니다. 즉, 0.5
와 0.5
의 동일한 뼈대를 가지면 결국 그 뼈대가 1.0
영향을 미치게 됩니다.
기본 스키닝 방법은 linear
입니다. quaternion
으로 설정하면 듀얼 쿼터니언 스키닝이 사용됩니다.
새로운 사항 2024년 8월 18일 : 정점 색상 사양이 변경 되었습니다. 여러 색상 레이어를 지원하기 위해 UV Layer Count (ul)
속성을 모방하는 새로운 Color Layer Count (cl)
추가되었습니다.
이전 버전과 호환되기 위해서는 캐스트 프로세서가 cl
확인하고 이를 새로운 c%d
레이어 속성과 함께 기본적으로 사용해야 합니다.
cl
속성이 없으면 프로세서는 유일한 색상 레이어인 레거시 vc
속성을 확인해야 합니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 모델 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 진실 |
기본 모양(CastNode:Mesh의 해시) (b) | 정수 64(l) | 거짓 | 진실 |
대상 모양 정점 색인(vi) | 바이트(b), Short(h), 정수 32(i) | 진실 | 진실 |
대상 모양 정점 위치(vp) | 벡터 3(v3) | 진실 | 진실 |
목표 체중계(ts) | 플로트(f) | 진실 | 거짓 |
참고 사항 :
Base Shape
기존 캐스트 메시여야 합니다.
Target Shape Vertex Indices
와 Target Shape Vertex Positions
함께 쌍을 이루므로 길이가 동일해야 합니다.
Target Shape Vertex Positions
Base Shape
의 해당 정점을 무시하고 변경된 각 정점 위치의 최종 값입니다.
Target Weight Scale
대상 모양이 변형될 수 있는 최대값을 나타내며 기본값은 1.0
입니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 뼈대, IKHandle, 제약조건 | 진실 | 거짓 |
조상 | 모델 | 거짓 | 진실 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 해골 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 진실 |
상위 지수(p) | 정수 32(i) | 거짓 | 거짓 |
세그먼트 규모 보상(ssc) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
로컬 위치(lp) | 벡터 3(v3) | 거짓 | 거짓 |
로컬 회전(lr) | 벡터 4(v4) | 거짓 | 거짓 |
월드 포지션 (wp) | 벡터 3(v3) | 거짓 | 거짓 |
세계 회전(wr) | 벡터 4(v4) | 거짓 | 거짓 |
규모(들) | 벡터 3(v3) | 거짓 | 거짓 |
참고 사항 :
Segment Scale Compensate
지정되지 않은 경우 기본값이 True
로 설정되어야 합니다.
Scale
항상 현재 뼈에 국한됩니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 해골 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
뼈 해시 시작(sb) | 정수 64(l) | 거짓 | 진실 |
끝 뼈 해시(eb) | 정수 64(l) | 거짓 | 진실 |
대상 뼈 해시(tb) | 정수 64(l) | 거짓 | 거짓 |
극점 벡터 뼈 해시(pv) | 정수 64(l) | 거짓 | 거짓 |
극본 해시(pb) | 정수 64(l) | 거짓 | 거짓 |
대상 회전 사용(tr) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
참고 사항 :
Use Target Rotation
지정되지 않은 경우 기본값이 False
로 설정되어야 합니다.
Pole Bone
체인의 비틀림에만 영향을 주어야 하며 일반적으로 Pole Bone
또는 Pole Vector Bone
있습니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 해골 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
제약 유형(ct) | 문자열(들) [pt, 또는, sc] | 거짓 | 진실 |
제약조건 뼈 해시(cb) | 정수 64(l) | 거짓 | 진실 |
대상 뼈 해시(tb) | 정수 64(l) | 거짓 | 진실 |
오프셋 유지(월) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
X 건너뛰기(sx) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
건너뛰기 Y(sy) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
Z 건너뛰기(sz) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
참고 사항 :
제약 유형 값은 다음에 해당합니다.
번역에 적용되는 pt
Point Constraint입니다.
or
회전에 적용되는 방향 제약 조건입니다.
sc
스케일 제약조건. 스케일에 적용됩니다.
유지 오프셋은 지정되지 않은 경우 기본적으로 False
로 설정되어야 합니다.
Skip X, Skip Y 및 Skip Z는 지정되지 않은 경우 기본값 False
로 설정되어야 하며 제약 조건에서 해당 축 무시를 참조해야 합니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 파일 | 진실 | 거짓 |
조상 | 모델 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 진실 |
유형(t) | 문자열(들) | 거짓 | 진실 |
알베도 파일 해시(알베도) | 정수 64(l) | 거짓 | 거짓 |
분산 파일 해시(확산) | 정수 64(l) | 거짓 | 거짓 |
일반 파일 해시(일반) | 정수 64(l) | 거짓 | 거짓 |
반사 파일 해시(반사광) | 정수 64(l) | 거짓 | 거짓 |
방출 파일 해시(방출) | 정수 64(l) | 거짓 | 거짓 |
광택 파일 해시(광택) | 정수 64(l) | 거짓 | 거짓 |
거칠기 파일 해시(거칠기) | 정수 64(l) | 거짓 | 거짓 |
주변 폐색 파일 해시(ao) | 정수 64(l) | 거짓 | 거짓 |
캐비티 파일 해시(캐비티) | 정수 64(l) | 거짓 | 거짓 |
이방성 파일 해시(aniso) | 정수 64(l) | 거짓 | 거짓 |
추가(x) 파일 해시(추가%d) | 정수 64(l) | 거짓 | 거짓 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | Cast노드 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
경로(p) | 문자열(들) | 거짓 | 진실 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 뼈대, 곡선, CurveModeOverride, NotificiationTrack | 진실 | 진실 |
조상 | 뿌리 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
프레임 속도(fr) | 플로트(f) | 거짓 | 진실 |
루핑(lo) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 생기 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
노드 이름(nn) | 문자열(들) | 거짓 | 진실 |
주요 속성 이름(kp) | 문자열(들) [rq, tx, ty, tz, sx, sy, sz, bs, vb] | 거짓 | 진실 |
키 프레임 버퍼(kb) | 바이트(b), Short(h), 정수 32(i) | 진실 | 진실 |
키 값 버퍼(kv) | 바이트(b), Short(h), 정수 32(i), 부동(f), 벡터 4(v4) | 진실 | 진실 |
모드(m) | 문자열(들) [덧셈, 절대, 상대] | 거짓 | 진실 |
첨가제 혼합 중량(ab) | 플로트(f) | 거짓 | 거짓 |
참고 사항 :
모든 곡선 키프레임은 개체/노드 공간에 있습니다.
Mode
는 각 곡선 키프레임이 노드에 적용되는 방식을 결정합니다.
additive
: 노드 속성의 현재 장면 프레임 값에 키프레임이 추가됩니다.
absolute
: 키프레임은 주어진 프레임의 정확한 값입니다.
relative
: 노드 속성의 나머지 위치 값에 키프레임이 추가됩니다.
속성 값은 다음에 해당합니다.
=0
= 숨김.
>=1
= 표시됩니다.
rq
Rotation Quaternion이며 v4
값이 필요합니다.
tx
'X'를 번역하고 f
값을 기대합니다.
ty
'Y'를 번역하고 f
값을 기대합니다.
tz
'Z'를 번역하고 f
값을 기대합니다.
sx
'X' 크기를 조정하고 f
값을 기대합니다.
sy
스케일 'Y'를 설정하고 f
값을 기대합니다.
sz
Scale 'Z' 및 f
값을 기대합니다.
bs
BlendShape Weight 및 f
값을 예상합니다.
vb
가시성이며 b
, h
또는 i
값이 필요합니다.
tx
, ty
, tz
, sx
, sy
, sz
, bs
, vb
속성은 선형으로 보간되어야 합니다.
rq
속성은 쿼터니언 slerp로 보간되어야 합니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 생기 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
노드 이름(nn) | 문자열(들) | 거짓 | 진실 |
모드(m) | 문자열(들) [덧셈, 절대, 상대] | 거짓 | 진실 |
변환 곡선 무시(ot) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
회전 곡선 재정의(또는) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
스케일 곡선 재정의(os) | 바이트(b) [참, 거짓] | 거짓 | 거짓 |
참고:
각 Mode
값의 정의는 위의 Curve
참고 사항을 참조하세요.
지정되지 않은 경우 Override Translation Curves
기본적으로 False
로 설정되어야 합니다.
Override Rotation Curves
지정되지 않은 경우 기본적으로 False
로 설정되어야 합니다.
Override Scale Curves
지정되지 않은 경우 기본적으로 False
로 설정되어야 합니다.
재정의 노드와 그 모든 자식은 곡선 모드를 새 모드로 재정의해야 합니다.
자식 뼈가 자손인지 여부를 결정하려면 처리 시 재정의 노드가 있어야 합니다.
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 생기 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 진실 |
키 프레임 버퍼(kb) | 바이트(b), Short(h), 정수 32(i) | 진실 | 진실 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 파일 | 진실 | 거짓 |
조상 | 뿌리 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
이름(명) | 문자열(들) | 거짓 | 거짓 |
참조 파일(CastNode:File의 해시)(rf) | 정수 64(l) | 거짓 | 진실 |
포지션(p) | 벡터 3(v3) | 거짓 | 진실 |
회전(r) | 벡터 4(v4) | 거짓 | 진실 |
규모(들) | 벡터 3(v3) | 거짓 | 진실 |
필드 | 유형 | IsArray | 필수의 |
---|---|---|---|
어린이들 | 없음 | 진실 | 거짓 |
조상 | 뿌리 | 거짓 | 진실 |
속성(ID) | 유형 | IsArray | 필수의 |
---|---|---|---|
저자 (a) | 문자열(들) | 거짓 | 거짓 |
소프트웨어 | 문자열(들) | 거짓 | 거짓 |
위쪽 축(위쪽) | 문자열(들) [x, y, z] | 거짓 | 거짓 |
참고:
Author
및 Software
단지 캐스트 파일에 태그를 지정하기 위한 것이며 메타데이터 외에는 사용되지 않습니다.
Up Axis
특정 위쪽 축과 일치하도록 장면을 조정하는 소프트웨어에 대한 힌트로 사용할 수 있습니다.
캐스트 파일에는 메타 노드가 얼마든지 있을 수 있지만 힌트용으로 설계된 속성은 첫 번째 메타데이터 노드 인스턴스만 사용해야 합니다.
커뮤니티의 의견을 바탕으로 DTZxPorter가 디자인한 형식입니다.
Smashicons의 아이콘