이 페이지에서
값과 표현식
모델 asset·module 단위에 적용되는 문서입니다. 스프라이트·사운드는 별도의 리터럴 문법을 사용합니다.
토큰과 구두점
이름은 대소문자를 구분하는 ASCII 식별자 [A-Za-z_][A-Za-z0-9_]*입니다. 작성하는 이름에는 밑줄을 쓰세요. parent-origin 같은 하이픈 키워드는 언어가 정의하며 표현식의 하이픈은 뺄셈입니다. 워크스페이스 export ID에는 별도 소문자 규칙이 있습니다.
공백·줄바꿈은 선언을 끝내지 않습니다. 대입·import·매개변수·포트·check·동작 키 뒤에 ;를 쓰세요. component use는 };, 일반 선언 블록은 }로 끝납니다. //와 중첩되지 않는 /* … */ 주석을 지원합니다.
문자열은 큰따옴표와 한 줄을 사용하며 모델·스프라이트 lexer는 이스케이프 따옴표·역슬래시(\", \\)만 허용합니다. 색은 # 뒤 정확히 여섯 16진수이며 alpha는 텍스처 속성입니다.
숫자는 4, 0.5, .5 같은 십진수와 선택적 단위를 사용합니다. 음수는 단항 -입니다. 과학 표기·NaN·Infinity는 모델 숫자가 아닙니다. 괄호는 표현식 그룹·튜플이고 대괄호도 벡터를 만듭니다. 벡터 성분 수는 기대값과 맞아야 합니다.
닫힌 값 타입
design, component param, surface slot에 사용할 수 있는 타입입니다. 임의의 제네릭 타입 생성자는 없습니다.
| 타입 | 예제 | 의미 |
|---|---|---|
integer |
16 |
정확한 무차원 정수 |
unit |
4u |
모델 거리 |
texel |
16px, 16tx |
텍스처 거리. 픽셀 배치는 정수 |
degree |
15deg |
회전각 |
second |
0.5s |
동작 시간 |
ratio |
0.5ratio |
명시적 타입을 갖는 무차원 비율 |
bool |
true |
true 또는 false |
color |
#c94f2a |
RGB 색 |
vec2<unit> |
(2u, 3u) |
모델 거리 두 값 |
vec3<unit> |
(2u, 3u, 4u) |
위치·크기 |
vec3<degree> |
(0deg, 15deg, 0deg) |
오일러 회전 |
vec3<ratio> |
(1ratio, 1ratio, 1ratio) |
크기·정렬 비율 |
vec2<texel> |
(0px, 8px) |
아틀라스·면 픽셀 위치 |
texel-rect |
(0px, 0px, 4px, 4px) |
texel 네 성분 |
API 경계에는 단위를 명시하세요. 지원되는 타입 문맥에서 일반 정수 리터럴이 필드의 기대 숫자 단위를 받을 수 있지만 명시적으로 호환되지 않는 단위는 거부됩니다. 일반적인 단위 변환이 아닙니다.
연산자
아래는 높은 우선순위부터 나열하며 같은 행의 이항 연산자는 왼쪽부터 결합합니다. 괄호로 의도한 그룹을 드러내세요.
| 연산자 | 규칙 |
|---|---|
| 멤버 접근·호출 | 대응 벡터의 .x, .y, .z, 내장 호출만 허용 |
단항 +, - |
숫자 부호 |
*, /, % |
곱셈의 차원 있는 스칼라는 최대 하나. 나눗셈은 무차원 제수 또는 같은 단위. 나머지는 정수 |
+, - |
단위 일치, 벡터 덧셈·뺄셈은 형태 일치 |
<, <=, >, >= |
호환 단위 숫자를 비교해 bool 반환 |
==, != |
동등·비동등, bool 반환 |
벡터 크기 조정은 무차원 스칼라를 사용합니다. 정확한 유리수 산술이므로 1u / 2는 유효하지만 1 / 2는 integer로 표현할 수 없습니다. 4u / 2u는 정수 2이며 2u * 3u로 면적 타입을 만들 수 없습니다. 0으로 나누거나 나머지를 구하면 실패합니다. &&, ||, !, 삼항식, 암묵적 반올림은 없습니다. 조건마다 별도 이름 있는 check를 쓰세요.
내장 함수
| 함수 | 인자와 결과 |
|---|---|
abs(x) |
숫자 하나, 단위 유지 |
min(a, …), max(a, …) |
같은 단위 숫자 하나 이상 |
clamp(x, lower, upper) |
같은 단위 숫자 셋, 순서 있는 구간 작성 |
vec2(a, b), vec3(a, b, c) |
지원되는 공통 벡터 단위의 숫자 |
texels(length, density) |
음이 아닌 unit, 양의 정수 단위당 픽셀. 반올림 없이 정수 texel |
mirror_x(point, plane) |
vec3<unit> 점과 unit 평면, X 반사. mirror_y, mirror_z도 지원 |
box_origin(anchor, size, alignment) |
vec3<unit>, 양의 vec3<unit>, [0,1]의 vec3<ratio>. 성분별 anchor - size * alignment |
반사 함수는 점만 계산하며 형상 복제·관절 프레임 변경·텍스처 반사는 하지 않습니다.
Design과 의존성
모델 단위 안의 조각입니다.
export design Dimensions {
width: unit = 4u;
height: unit = 4u;
depth: unit = 4u;
size: vec3<unit> = (Dimensions.width, Dimensions.height, Dimensions.depth);
netWidth: texel = texels(Dimensions.width * 2 + Dimensions.depth * 2, 1);
check positiveWidth = Dimensions.width > 0u;
check fitsAtlas = Dimensions.netWidth <= 32px;
}
같은 design 안에서도 Dimensions.width로 참조합니다. 공개 import는 alias.Dimensions.width, 벡터 성분은 Dimensions.size.x입니다. 전방 참조는 허용하며 순환·중복 이름·네임스페이스 가림은 거부합니다. 모든 check는 bool로 평가되고 true여야 컴파일됩니다.
design은 불변 값·단언의 집합입니다. check는 렌더 모델을 측정하거나 부품을 옮기지 않습니다. 컴포넌트 매개변수로 값을 전달해 형상을 재사용하세요. 1픽셀 눈을 유지하며 형상·UV를 바꾸는 완전한 정밀 예제를 참고하세요.