Engine

게임 엔진입니다. 씬 그래프, 컴포넌트, 스크립팅, 물리, PBR 파이프라인, 월드 에디터, 그리고 데스크톱과 모바일을 위한 네이티브 빌드까지 다룹니다.

In one line#

브라우저 안의 완전한 게임 엔진입니다: 씬을 만들고, 행동을 부여하고, 플레이 버튼을 누르고, 웹이나 네이티브 데스크톱/모바일 바이너리로 내보내세요.

aukimi에서 단연 가장 큰 스튜디오입니다. 이 페이지는 기능을 알파벳순으로 나열하는 대신, 인터페이스가 하는 방식 그대로, 각 패널이 속한 서랍을 기준으로 지도를 그립니다.

The layout#

Engine, 씬 그래프, 뷰포트, 인스펙터, 콘솔

Menu barFile · Edit · View · Windows · Run · Plugins
Toolbar프로젝트 이름, undo/redo, 뷰포트 모드 전환(3D · 2.5D · 2D · TXT), 씬 선택기, 네 개의 패널 버튼, FX Master, HUD, 해상도 상자, 트랜스포트(재생, 일시정지, 정지), Build
왼쪽아이콘 레일, 씬 그래프, 목록, 오디오, 콘솔, 그리고 그것이 여는 패널
가운데자체 기즈모 바(translate, rotate, scale, world/local, grid, snapping, framing)와 품질 선택기가 있는 뷰포트
오른쪽선택한 엔티티를 위한 인스펙터
아래나란히 있는 ConsoleProfiler
Status bar모드, 뷰포트 크기, 엔티티 수, 그리드 상태

The four panel buttons#

Engine 툴바: 씬 이름, undo, 뷰포트 모드 전환, 네 개의 패널 버튼, 트랜스포트

이 네 버튼은 모두 같은 방식으로 동작하지 않으며, 무언가를 찾아 나서기 전에 그 차이를 알아둘 가치가 있습니다:

버튼동작
Systems서랍을 엽니다
Tools같은 서랍을 엽니다. Systems와 Tools는 서로를 닫습니다
Assets계속 유지되는 독을 켜고 끕니다
Scripts모달을 엽니다

Systems와 Tools는 의도적으로 하나의 슬롯을 공유합니다. 그것이 눈에 보이도록 나란히 배치되어 있습니다.

Systems#

엔진 자체의 서브시스템입니다: 씬으로 만드는 것이 아니라, 씬이 가지고 있는 것들입니다.

그룹패널
Plugins플러그인 브라우저
RenderingRendering · Rendering Pipeline · Look Presets · Shader Lab · Render Style · Shadows · Mesh LOD · Post Process Volumes
GameplayMultiplayer room · Physics · AI & Navigation · Gameplay Zones
WorldScene Graph · Level Streaming · Baking · Light Probes · Decals

Rendering#

툴바의 FX Master 스위치는 클릭 한 번으로 전체 후처리 파이프라인을 켜고 끕니다: 그것이 얼마나 비용을 잡아먹는지 보는 가장 빠른 방법입니다. 개별 항목으로는 bloom, depth of field, SSR, SSAO, GTAO, SSGI, temporal AA, FXAA, motion blur, volumetric fog, contact shadows, colour grading, film grain, chromatic aberration, vignette, tonemapping, 그리고 Nanite 방식의 지오메트리와 Hi-Z occlusion이 있습니다.

Look Presets는 위 항목들을 전부 묶은 구성입니다. Render Style은 사실적인 것에서 스타일화된 것으로 등록을 바꿉니다. Shader Lab은 직접 셰이더를 작성하는 곳입니다. Mesh LODPost Process Volumes는 큰 씬에서 본전을 뽑는 두 가지입니다: mesh별 level-of-detail, 그리고 볼륨 안에서만 적용되는 후처리입니다.

렌더러는 Babylon.js입니다. WebGL로 시작해서 브라우저가 지원하면 WebGPU로 스스로 전환하고, 그마저 실패하면 다시 스스로 되돌아갑니다.

Gameplay systems#

Physics는 3D 솔버(Havok)와 2D 솔버를 모두 다룹니다. AI & Navigation은 navmesh와 그 위의 에이전트입니다. Gameplay Zones는 행동이 붙어 있는 트리거 볼륨입니다. Multiplayer room은 씬을 Colyseus 서버에 연결합니다(아래 참고).

World systems#

Level Streaming은 플레이어가 이동함에 따라 레벨의 일부를 불러오고 내립니다. Baking은 라이팅을 미리 계산하고, Light Probes는 공간 속 지점들에서 간접광과 리플렉션을 캡처합니다. Decals는 지오메트리를 추가하지 않고 표면에 디테일을 투영합니다.

Tools#

직접 만드는 데 쓰는 것들입니다.

그룹패널
EditorsScripts · Blueprint Editor · UI Editor · Tilemap
WorldSky Studio · Terrain · Water · Tree Generator · Plant Generator · Rock Generator · Kitbash
GameplayInventory · Data tables · Dialogue Trees
AnimationTimeline · Cinematic Sequencer · Camera Tools
AudioAudio Manager
DebugProfiler

World generators#

Terrain, water, sky, 그리고 네 개의 콘텐츠 제너레이터인 나무, 식물, 바위, kitbash 조각입니다. 아래에 별도의 챕터가 있습니다.

Gameplay authoring#

Inventory, Data tables(Tools → Data), Dialogue Trees는 게임이 코드 안에 살지 않는 콘텐츠를 가질 수 있게 해 주는 세 개의 에디터입니다. 아래에서 자세히.

Animation#

엔티티 애니메이션을 위한 Timeline, 샷을 위한 Cinematic Sequencer, 프레이밍을 위한 Camera Tools입니다. 애니메이션과 카메라를 참고하세요.

월드 에디터#

Tools → World 아래에 있는 일곱 개의 패널입니다. 씬을 빠르게 채우는 방법이며, 레벨이 모델링 세션으로 시작할 필요가 없는 이유입니다.

Terrain#

하나의 씬은 여러 개의 terrain을 가질 수 있습니다. 각각은 Terrains 목록의 한 행이며, 128²(빠름), 256²(균형), 512²(정밀) 중 하나의 해상도로 만들어집니다.

패널에는 열 개의 모드가 있으며, 공통점이 하나 있습니다: Masks에서 칠한 mask가 그 모두를 제한한다는 것입니다.

모드하는 일
Sculptheight field 위의 열일곱 개 브러시
Paint두 개의 splatmap에 걸친 최대 여덟 개의 텍스처 레이어
Generate노이즈, 자동 텍스처링, 실제 지형 고도 가져오기
Sketch능선과 계곡을 그리면 그에 맞춰 terrain을 합성
Masks다른 모든 모드를 표면의 일부로 제한
Water해수면, terrain water와 FFT ocean 중 선택
Paths지면에 구워 넣는 베지어 도로
Vegetation브러시 또는 규칙 기반 스캐터링
SDFmesh가 아니라 렌더링되는, 레이마치된 terrain
Biomes흙, 식물, 나무, 바위를 한 번에

Sculpt. Raise 1, Lower 2, Smooth 3, Flatten 4, Pinch 5, Inflate 6, Noise 7, Sharpen 8, Stamp 9, Terrace 0, Erode E, Fill F, Clone C(Alt-클릭으로 소스 지정), Blur B, Ramp R에 더해, 두 개의 물 도구가 있습니다: River는 물길을 그리고, Lake는 한 지점을 채웁니다.

브러시 자체는 다이내믹스를 가집니다: pressure curve, lazy mouse, falloff, symmetry, pattern, 그리고 크기와 강도 모두에 대한 jitter입니다. Stamp는 여섯 개의 모양을 담고 있습니다: crater, mountain peak, plateau, river valley, dome, noise hill. 침식은 두 가지 형태로 옵니다: E 브러시는 국소적이고, Adjustments는 terrain 전체에 걸쳐 hydraulic, thermal, wind 침식을 실행합니다.

Paint. 여덟 개의 레이어입니다. 두 개의 RGBA splatmap이 각각 네 개의 채널을 담기 때문입니다. 머티리얼 라이브러리는 카테고리별로 정렬됩니다: grass, dirt, forest, rocks, roads and surfaces, cliffs, sand, snow, volcanic, wetland, fantasy, 그리고 직접 만든 것. 각 레이어는 UV scale, displacement, detail map, surface relief(bump strength와 parallax depth)를 갖습니다. **Break texture tiling (cell bombing)**은 반복되는 바닥 텍스처가 격자처럼 보이지 않게 막아 주는 설정입니다.

Generate는 노이즈로부터 만들어 내고, 그다음 Generate Textures가 높이와 경사에 따라 머티리얼을 배정하며, 남북 음영 변화와 물가의 모래 또는 자갈 해안선도 함께 처리합니다. Real World는 공개된 NASA/USGS 고도 타일을 가져옵니다: 랜드마크를 고르거나 좌표를 입력하고, 줌을 선택하면 패널이 가져온 고도 범위를 보고합니다.

Sketch는 또 다른 진입 방법입니다. 2D 맵 위에 능선과 계곡 스트로크를 그리고, 최대 세 개의 실제 소스 지형을 고르면, terrain이 스케치에 맞춰 합성됩니다. 선택적으로 이미 있는 것에 블렌딩되며, 같은 과정에서 자동 텍스처링과 침식도 처리됩니다.

Masks는 브러시로 칠한 다음 전체적으로 편집합니다: clear, invert, blur, grow, shrink. smart masks는 terrain 자체로부터 높이, 경사, 레이어, 또는 cavity 기준으로 마스크를 유도해 냅니다.

Paths. 클릭해서 컨트롤 포인트를 놓으면 부드러운 커브가 그것들을 지나갑니다. 호박색 포인트를 드래그하면 이동하고, 청록색 핸들을 드래그하면 커브가 휩니다. Bake Path는 그 아래 지면을 평평하게 만들고, 텍스처를 칠하고, 둑을 세웁니다.

Vegetation은 두 부분으로 이루어집니다. 브러시는 손으로 인스턴스를 배치하고 제거하며, scatter rules는 조건, 레이어 가중치, 시드, 최소/최대 스케일, 각 에셋이 허용하는 높이와 경사 범위에 따라 배치합니다. 풀과 꽃은 설정 가능한 draw distance를 넘어서면 서서히 사라지며, Export to Scene은 인스턴스를 씬 오브젝트로 바꿉니다.

Biomes는 위 모든 것을 클릭 한 번으로 처리하는 버전입니다: biome을 고르고, 원하는 카테고리(흙, 나무, 식물과 풀, 꽃, 물가의 이끼, 바위)를 체크하고, 밀도를 설정한 다음, Apply Biome이 지면을 칠하고 모든 것을 흩뿌리며 각각 몇 개씩 배치했는지 보고합니다. 나무의 age variety는 같은 나무를 어디에나 찍어 내는 대신 묘목부터 고목까지 섞어 줍니다. *ground blend (RVT)*는 각 바위 밑동을 그 아래 terrain 색상에 녹여 넣습니다.

SDF는 다른 도구가 아니라 다른 렌더러입니다: terrain은 distance field로부터 레이마치되며, 형태는 octaves, lacunarity, persistence로, 텍스처링은 grass/rock/snow에 snow line과 slope threshold를 더해서 이루어지고, 자체적인 soft shadows, ambient occlusion, fog를 갖습니다.

큰 terrain에는 skirt geometry(레벨 사이의 틈을 메우는 역할)를 가진 LOD system, 부드러운 레벨 전환, frustum culling, stats overlay가 있습니다. Heightmap은 16비트 PNG, 8비트 PNG, RAW 16비트로 가져오고 내보내며, splatmap은 하나의 RGBA PNG 또는 레이어당 하나의 파일로, terrain 전체나 그 설정만은 프리셋으로 가져오고 내보낼 수 있습니다.

Sky Studio#

대기입니다. solid, gradient, HDRI, 그리고 Rayleigh와 Mie scattering, Mie absorption, ozone, ground albedo, turbidity, planet radius, atmosphere thickness를 가진 physical atmosphere까지 네 가지 하늘 타입이 있습니다.

모든 것은 스스로 순환할 수 있는 time of day에 달려 있습니다: 태양은 elevation, azimuth, intensity와 자체 shadow intensity로, 달은 phase로, 별은 twinkle과 함께, 그리고 오로라까지입니다. Volumetric clouds는 thickness, erosion, noise scale, curl distortion을 가지며, absorption, scatter, ambient, powder term을 통해 빛을 받습니다. cirrus와 Belt of Venus는 별도입니다. Aerial perspective는 거리에 따라 짙어지며 먼 지오메트리를 지평선으로 흐려지게 만드는 안개로, 풍경을 크게 읽히게 만드는 설정입니다.

시작점으로 삼을 열 개의 프리셋: clear day, dawn, sunset, dusk, night, overcast, stormy, desert, arctic, space입니다.

Water#

두 개의 탭: 먼바다를 위한 Ocean (FFT), 그 밖의 모든 것을 위한 Shore & lakes입니다.

⚠️ 물은 Terrain 에디터에서 만들어집니다: river와 lake 도구, 또는 Show Water를 통해서이며, 조정은 여기서 합니다. 물이 없는 씬에서 이 패널을 열면 적용할 대상이 없는 설정만 보게 됩니다.

Shore water는 colour, opacity, wave strength와 speed, choppiness, foam width, Fresnel을 가지며, screen-space reflections와 refraction blur도 있습니다. 그 아래에는 WGSL 셰이더 자체가 있습니다: 각자 스크롤 방향과 속도를 가진 두 개의 normal scale, foam threshold와 softness, refraction strength와 index of refraction, 그리고 물속의 빛인 absorption, turbidity, scattering, translucency입니다.

Tree Generator#

TreeTrunk 두 모드입니다. 나무는 낙엽수이거나 상록수이며, 묘목부터 고목까지의 나이를 가지고, 살아 있거나, 죽었거나, 고사목이거나, 쓰러진 통나무일 수 있습니다. 모든 것이 시드로 결정되므로, Randomize seed가 같은 성격을 가진 다른 나무를 얻는 가장 빠른 방법입니다.

형태는 가지 레벨별로 결정됩니다: children, length, radius, taper, gnarliness, twist, sections, segments, angle, start height에 더해 자연스러운 변화, 그리고 phototropismgravitropism입니다: 각각 나무가 빛 쪽으로 기울고 제 무게로 처지게 만드는 두 요소이며, 자체 강도를 가진 전역 힘도 있습니다. 밑동에는 root flare(lobes와 height)와 buttress가 있습니다.

잎은 billboard이며, 단면 또는 양면이고, count, size, angle, variance, clump, curl, droop, sheen, rounded normals를 갖습니다. 나무껍질은 여섯 가지 스타일이 있습니다: ridged, aspen, pine, birch, smooth, palm이며, relief, moss, damp base, sun bleach, canopy ambient occlusion, autumn turn을 가집니다. 사계절이 전체 모습을 한 번에 바꿉니다.

Forest는 한 번에 여러 그루를 흩뿌립니다: count, spread radius, scale variance, age mix(single, natural, young, old, even)입니다. Add age progression은 다섯 생애 단계를 모두 한 줄로 배치하는데, 나란히 놓고 비교하는 가장 빠른 방법입니다. 나무는 씬 엔티티나 GLB로 나가며, 어떤 설정이든 프리셋으로 저장할 수 있습니다.

Plant Generator#

다섯 가지 종류인 flower, cluster, herb, fern, grass는 stem(count, height, thickness, curve, colour)과 leaves(count, size, width, angle)를 공유합니다. Fern은 leaflet pairs, leaflet sweep, frond arch를 더하고, grass는 blade count와 arch를 더합니다.

꽃은 그중 무엇에든 선택적으로 붙일 수 있습니다: petals, petal rows, length, width, curl, tip sharpness, bloom, centre size, 그리고 petal, petal tip, centre의 세 가지 색상이며, 빛이 잎을 통과하는 방식을 위한 translucency와 roughness도 있습니다. 씬에 하나를 추가하거나, 여러 개를 흩뿌리거나, GLB로 내보낼 수 있습니다.

Rock Generator#

rock, stone, cliff 세 가지 종류가 있으며, realistic, toon, 또는 윤곽선이 있는 low poly의 세 가지 스타일로 만들 수 있습니다.

형태는 구 위의 노이즈입니다: scale, strength, octaves, persistence, warp와 ridged 옵션에 더해, 자체 frequency를 가진 strata, 각진 돌을 위한 depth와 sharpness를 가진 facet cuts가 있습니다. Radius, detail, flatten, shape variance, flat bottom이 실루엣을 결정하며, fresh, weathered, natural, eroded의 네 가지 침식 프리셋이 이 모두를 한 번에 움직입니다.

표면은 colour variation, mineral veins, lichen과 moss, tiling과 strength를 가진 detail texture, triplanar blending, parallax relief를 갖습니다. 기본으로는 번들에 포함된 Stone 머티리얼을 사용하며, 이를 재정의하려면 Matter에서 머티리얼을 Engine으로 보내세요.

Kitbash, Sculpt와 같은 라이브러리#

Kitbash는 Sculpt와 공유됩니다: 이 패널과 Sculpt의 Edit Forge는 하나의 라이브러리를 읽습니다. 그쪽에서 만든 조각을 여기에 배치할 수 있고, 여기서 칠한 조각을 다시 그쪽에 저장할 수도 있습니다.

씬이 저장하는 것은 정점이 아니라 그 부품과 치수입니다. 그래서 kitbash로 만든 건물은 파일에서 거의 비용이 들지 않으며, 나중에 원본에서 업데이트할 수 있습니다.

카탈로그에서 조각을 장전하면 왼쪽 클릭마다 배치됩니다. 세 가지 스냅 모드가 어디에 놓일지 정합니다: on terrain(조각이 그 아래 지면 높이를 따라감), on water(빌드 평면이 수면에 놓임), snap to sockets는 배치된 조각의 연결 지점을 겨냥하면 새 조각이 거기에 맞춰 돌아갑니다. 체인은 자유단에서 자라나고, 이미 사용된 소켓은 후보에서 빠지며, 클릭마다 독립된 실행 취소 단계가 됩니다. Ctrl/Cmd는 선택용으로, Alt는 회전용으로 계속 예약되어 있습니다. 컬렉션은 자신의 소스와 버전을 유지하므로, 원본이 바뀌면 인스턴스도 업데이트할 수 있습니다.

그 밖의 에디터#

월드 에디터가 씬을 채운다면, 이것들은 씬에 인터페이스, 맵, 콘텐츠 테이블, 그리고 비용을 확인하는 도구를 부여합니다.

HUD 에디터#

Tools → Editors → UI. 여섯 개의 탭 Templates, Elements, Layers, Preview, Style, Script가 있으며, 세 가지 디바이스 크기, desktop 960×540, tablet 768×432, mobile 375×667 사이를 전환하는 프리뷰 위에 있습니다.

Elements는 세 그룹(Display, Data, Input)으로 오며 중첩될 수 있습니다: panelflex는 자식을 담을 수 있어서, Layers 탭은 평평한 목록이 아니라 진짜 트리입니다. History는 50단계 깊이입니다.

⚠️ Style 탭은 CSS와 비슷할 뿐이며, 이 차이가 중요합니다. HUD는 캔버스 위에 Babylon의 GUI로 그려지며, 진짜 CSS는 거기에 닿지 않습니다. 여기서 작성하는 규칙은 GUI 속성에 매핑됩니다. 셀렉터는 요소 하나에는 #name을, 종류에는 .type(.text, .panel)을, 전체에는 *를 씁니다.

Script 탭은 또 다른 제작 방법입니다: ui.* API, createText, createPanel, createProgress, createButton이며, 실행하는 방법은 두 가지입니다. Build Layoutdesign-time에 실행되어 손으로 조정할 수 있는 진짜 엘리먼트를 남기고, Run Live는 게임 안에서 실행합니다.

바깥으로 향하는 두 가지 연결이 있습니다: HUD 아트워크는 복사되는 대신 Inkwell이나 Vectra에서 열려 다시 연결되며, Vectra 문서는 HUD 엘리먼트로 가져올 수 있습니다. minimap 엘리먼트는 독자적인 것으로, range, grid, 그리고 player, enemies, allies, items, objectives를 위한 마커를 갖습니다.

타일맵 에디터#

brush, eraser, fill, rectangle, select, eyedropper, stamp, autotile, prop, zone, path의 열한 개 도구가 있으며, orthogonal, isometric, staggered isometric, hexagonal의 네 가지 맵 투영에서 사용할 수 있습니다.

Autotiling은 네 개의 템플릿을 기본 제공하며, 이름 속 숫자는 필요한 타일 수를 뜻합니다: Blob 47(전체 모서리와 가장자리), Wang 16(가장자리 기반), Simple 4(NSEW), RPG Maker A2(48개 타일, 그곳에서 만든 맵과 호환)입니다.

타일 자체 위에 두 개의 레이어가 있습니다. Zones는 게임플레이의 의미를 칠합니다: buildable, water, forest, road, farm, residential, commercial, blocked이며, props는 카테고리별로 오브젝트를 배치합니다: trees, rocks, buildings, vegetation, water, paths. 맵은 브라우저 자체의 데이터베이스에 저장되므로, 저장하지 않은 맵도 새로고침에서 살아남습니다.

인벤토리, 데이터 테이블, 다이얼로그#

게임이 코드 안에 살지 않는 콘텐츠를 가질 수 있게 해 주는 세 개의 에디터입니다.

Inventory는 카탈로그를 편집해서 씬에 적용합니다. 아이템은 액션을 가지고, 액션은 trigger입니다: use, equip, unequip에 더해, 여덟 개의 types 중 하나입니다: message, heal, damage, grant, remove, event, toast, scene. 패널 자체는 세 개의 레이아웃(grid, list, compact), 세 개의 외관 프리셋(graphite, midnight, warm), 그리고 제대로 다시 그리기 위해 다른 모듈에서 열리는 네 개의 비주얼 슬롯인 background, slot, equipment, tooltip을 갖습니다.

Data tables는 타입이 있습니다: 열은 text, number, bool, ref 중 하나입니다. CSV로 들어오고 나갑니다. 모든 편집은 순수 함수를 거치는데, 이것이 내보내기가 쓰는 테이블과 빌드가 읽는 테이블을 항상 동일하게 유지해 주는 이유입니다.

Dialogue trees는 화자와 대사를 가진 노드입니다. 노드는 하나의 next로 이어지거나, 각각 자신의 텍스트와 목적지를 가진 choices로 분기하며, 이 분기 토글이 에디터에서 유일한 구조적 결정입니다.

애니메이션과 카메라#

Cinematic Sequencer는 duration과 loop 플래그, 엔티티당 하나의 트랙, 그리고 플레이헤드에서 캡처되는 키프레임으로 시퀀스를 만듭니다. Add Key는 값을 직접 입력하게 하는 대신 엔티티의 현재 값을 가져다 씁니다. 그 아래의 graph editor는 시간 대 진행률을 보여주며, easing을 위한 둥근 핸들이 있습니다: 기울기가 곧 속도입니다. 샷은 자체 duration을 가지며, letterbox를 위한 Cinemascope 프레이밍(1.422:1)도 쓸 수 있습니다.

Camera Tools는 FOV, position, target, mode, speed를 다루며, 계속 돌아오게 되는 시점을 위한 bookmarks와 camera layers도 있습니다.

오디오#

Audio Manager는 audio events, tracks, 그리고 channels와 categories를 가진 mixer를 담고 있습니다. 소스별 이펙트로는 low-pass, high-pass, reverb send가 있습니다. random 모드는 여러 클립 중에서 골라서 반복되는 소리가 루프처럼 들리지 않게 합니다. 스크러빙은 플레이헤드를 드래그하는 동안 오디오를 재생합니다.

프로파일러#

프레임 카운터가 아니라 프레임 분석입니다: camera render, mesh evaluation, particles, sprites, shader compilation이 각각 실측인지 추정인지 표시되어, 측정에서 나온 숫자가 모델에서 나온 숫자로 오해받는 일이 없습니다. 그 옆에는 meshes와 active meshes, lights, cameras, physics bodies 카운터가 있습니다.

기록은 명시적으로 시작하며, 해석해야 하는 그래프가 아니라 Issues 목록으로 끝납니다: 설정한 목표 프레임 레이트 대비 low FPS, high draw calls, high triangles, high memory입니다.

씬 만들기#

엔티티#

Engine 뷰포트, 선택한 엔티티 위의 기즈모

새 씬은 Main Camera, Directional Light, Skybox, Ground Plane과 함께 시작됩니다.

씬 그래프, 새 씬이 시작할 때 갖는 네 개의 엔티티

추가할 수 있는 것: Empty, Cube, Sphere, Cylinder, Plane, Light, Camera, Script, Mesh에 더해, 미리 연결된 채로 도착하는 두 개의 계열이 있습니다:

  • Characters: Third-Person, First-Person (FPS), Top-Down, Platformer, Basic.
  • Props: Pickup(heal)과 Hazard(damage).

씬 그래프는 검색, 타입별 필터링이 가능하고, 추가, 복제, 삭제도 할 수 있습니다. 엔티티는 중첩되며, 재부모화는 드래그로 합니다. 배치에는 스냅핑과, 지면을 빠르게 채우기 위한 scatter brush가 있습니다.

인스펙터#

Transform(position, rotation, scale), Enabled 스위치, 그리고 엔티티의 components입니다: 여기서 추가, 설정, 제거하며 아래쪽에 Add Script가 있습니다. 여러 엔티티를 선택하면 인스펙터가 일괄 편집으로 전환되어, 필드 하나를 바꾸면 전부에 적용됩니다.

콘솔#

단순한 로그가 아닙니다. 레벨별로 필터링하고(all, logs, info, warning, error), 메시지를 그것을 만들어 낸 엔티티로 다시 연결하며, expression prompt를 갖습니다: 표현식을 입력하고 Enter를 누르면 살아 있는 씬에 대해 실행되고, 방향키로 기록을 오갈 수 있습니다.

행동 부여하기#

세 가지 경로가 있으며, 서로 공존합니다.

스크립트#

라이프사이클 훅을 가진 JavaScript이며, 별도의 레퍼런스가 있습니다:

function start() {}                     // once, when the entity starts
function update(dt) {}                  // every frame
function fixedUpdate(dt) {}             // fixed timestep, for physics
function onCollisionEnter(other) {}     // first frame of contact
function onCollisionStay(other) {}      // every frame while touching
function onCollisionExit(other) {}      // contact just ended
function onTriggerEnter(other) {}       // entered a trigger volume
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // entity-to-entity messaging
function onAnimationEvent(name, data) {}
function onDestroy() {}

충돌과 트리거는 2D와 3D 모두에서 발생하며, 양쪽 모두 자신만의 contact normal을 받습니다: other.contact.normal다른 엔티티로부터 이 엔티티를 향합니다. 이것이 스크립트가 "내가 그 위에 착지했다"와 "그것이 내 위에 떨어졌다"를 구분할 수 있게 해 주는 방법입니다: 플랫포머의 스톰프는 other.contact.normal.y > 0.5로 읽습니다.

스크립트 에디터#

F2, 또는 엔티티의 Add Script입니다. 탭이 있는 Monaco 에디터이며, 여러 스크립트를 동시에 열 수 있고, 각각 프로젝트 파일이 아니라 브라우저 자체의 데이터베이스에 보관되므로 저장하지 않은 버퍼도 새로고침에서 살아남습니다.

다섯 개의 방언, 하나의 프로그램. 언어 전환은 JavaScript, BASIC, Python, C#, Rust를 제공합니다. 겉보기와 실제 동작은 다릅니다: JavaScript가 진실의 원천이며, 나머지 넷은 저장된 JS로부터 트랜스파일된 입니다. Python에서 Rust로 전환해도 Python을 번역하는 것이 아니라, 그 Python이 생성되어 나온 원래 JS로 돌아가서 그것을 번역합니다. 프로그램을 망가뜨리는 것은 다단계 번역이며, 에디터는 그것을 거부합니다.

다섯 개 카테고리에 걸친 열세 개의 templates가 있으며, 각각 난이도로 표시됩니다:

카테고리템플릿
Basics라이프사이클 스텁만 있는 빈 스크립트
Movementauto-rotate · WASD · 축 기반 3D 이동 · 지면 감지가 있는 physics jump · third-person 카메라 팔로우
Gameplaytrigger zone · damage와 heal이 있는 health bar · timed spawner
AI플레이어 근접 경보가 있는 patrol
AdvancedVerse 스타일 async 컷신 · structured concurrency · 전체 API 표면 테스트

캐릭터 컨트롤러 프리셋과 게임 시작용 props(pickup, hazard)도 같은 목록에 나타나며, 이것이 가져온 캐릭터에 작동하는 컨트롤러를 붙이는 실용적인 방법입니다.

실행과 디버깅. F5는 실행하고, F9는 breakpoint를 설정합니다. 디버거는 한 줄에서 멈추고, 프레임 하나씩 진행할 수 있으며, watch expression을 통해 실시간 값을 보고합니다. Script Lab은 엔티티를 전혀 붙이지 않고 프로그램을 실행합니다. 오브젝트의 컴포넌트가 아니라 API를 위한 스크래치패드입니다.

코드 곁에는 API reference, 열린 파일의 심볼 목록, 즐겨찾기와 최근 항목이 있는 스니펫 라이브러리가 있습니다. Ctrl+S는 저장, Ctrl+F는 찾기, Ctrl+H는 바꾸기이며, 에디터는 여덟 개의 테마를 기본 제공합니다.

블루프린트와 행동#

비주얼 그래프, 미리 만들어진 행동의 라이브러리, 그리고 행동 스택 위에 얹힌 상태 머신입니다.

그래프는 스물두 개 그룹에 걸쳐 267개의 노드를 담고 있습니다: Math, Scene, Entity, Animation, Flow Control, String, Events, Physics, UI, Array, Vector, Transform, Debug, Input, Utility, Game, Boolean, Camera, Tween, Variables, Audio, 그리고 2D와 3D 계열입니다. 세 가지 속성이 이들을 구분하며, 이것이 그래프를 이루는 재료입니다: 17개의 event node는 실행을 시작하고, 117개의 pure node는 부작용도 실행 핀도 없이 값을 계산하며, 9개의 latent node는 나중에 끝납니다. 바로 이 노드들이 자신만의 상태 머신 없이도 지연이나 tween을 표현할 수 있게 해 줍니다.

네 개의 도구입니다: select V, pan H, comment C, reroute R이며, 미니맵과 함께 0.1×에서 3×까지 확대되는 캔버스 위에 있습니다. Variable은 여섯 가지 타입입니다: boolean, integer, float, string, vector3, object. 모든 노드의 설명은 툴팁에 있으며, 이 정도 규모의 라이브러리가 스스로를 설명할 수 있는 유일한 곳입니다.

상태 머신#

자신만의 패널이며, Animator의 것과는 의도적으로 다릅니다: Animator의 조건은 케이스마다 손으로 작성한 UI가 있는 평면적인 enum이지만, 여기 것들은 구조화되어 있고 world에 대해 이야기합니다.

일곱 개의 조건이 있으며, 각각 씬에 대한 질문입니다: sees(범위 안의 태그된 대상, 선택적으로 각도와 시야 안에서), lost(N초 동안 대상 없음), 임계값 대비 distance, health, message received, timer(현재 상태에서 보낸 시간), 그리고 공유 blackboard의 값인 flag입니다. 두 개의 결합자 andor가 모두 나열되어 있는데, or는 이미 암묵적으로 존재했기 때문입니다: 같은 상태로의 두 전이는 곧 or이지만, "나를 보고 있고 AND 아직 체력이 남아 있다"는 표현할 방법이 전혀 없었습니다.

⚠️ Health는 절대값이 아니라 항상 최댓값에 대한 비율로 비교됩니다. "30 HP 미만" 같은 임계값은 밸런스 조정을 거치면 무너지지만, "0.3 미만"은 살아남습니다.

상태에 들어가거나 나갈 때, 네 가지 효과가 있습니다: 메시지를 send, blackboard 키를 set, 애니메이션 클립을 play, 또는 named effect를 실행하는 것입니다. 이 중 어느 것도 무언가를 움직이지는 않습니다. 움직임은 계속 행동(behaviour)들의 몫이며, 머신은 어느 행동이 활성화되는지를 결정합니다.

전이는 *, 즉 어떤 상태에서든 시작할 수 있습니다. 검증기는 첫 번째 문제에서 예외를 던지는 대신 문제 목록 전체를 돌려주므로, 절반만 작성된 머신도 계속 그려지고 잘못된 것을 한눈에 다 볼 수 있습니다. 노드 위치도 데이터의 일부입니다: 레이아웃이 씬 밖에 저장되는 그래프는 다음에 여는 사람에게 뒤섞인 채로 돌아옵니다.

BASIC#

TXT 뷰포트 모드는 데모 프로그램이 번들로 포함된 클래식 BASIC 환경이며, 이 언어에는 별도의 레퍼런스가 있습니다. 여기서는 장난감이 아니라 진짜 언어입니다: 다중 파일 모듈(#INCLUDE), 타입이 있는 수치(부호 있는/없는 8/16/32/64비트, float32, float64), 중첩 레코드, SELF를 쓰는 오브젝트 메서드, 참조(REF/BYREF), 구조화된 TRY/CATCH/FINALLY, 조건부 컴파일, 코루틴, 타입이 있는 핸들, 그리고 storage buffer와 원시 WGSL을 쓰는 WebGPU compute까지 있습니다.

OPTION EXPLICIT는 선택 사항입니다. 클래식한 암묵적 변수가 여전히 기본값이므로 가져온 프로그램도 계속 실행됩니다.

플레이와 출시#

플레이#

Play, Pause, Stop. 정지하면 배너가 세션이 무엇을 바꿨는지 알려주므로, 플레이 모드에서의 편집이 조용히 유지되거나 조용히 사라지는 일이 없습니다. 세션은 버그 리포트로 기록하고 재생할 수 있으며, scenario bookmarks로 레벨 중간에서부터 플레이테스트를 시작할 수 있습니다.

빌드#

Build는 게임 타입(씬에서 감지되거나 직접 설정: sidescroller/ platformer, first/third person, text-based)과 타겟을 받습니다.

  • Web: WebGL 폴백이 있는 WebGPU, 선택적인 WebXR(VR/AR), minification, FPS 카운터, 그리고 파일 하나로 만들어 주는 embed assets 옵션입니다.
  • Desktopmobile: 네이티브 빌드입니다. 씬은 데이터(scene.glb + scene.json)로 내보내지고, 생성된 Bevy(Rust) 프로젝트를 거쳐 컴파일됩니다. 스크립트는 그곳에서 내장된 QuickJS 런타임 위에서 변경 없이 그대로 실행됩니다.

압축은 algorithm, textures, meshes 각 축마다 설정할 수 있으며, 이를 하나로 묶는 품질 프리셋도 있습니다. 빌드는 크기(원본 대 압축본)와 함께 기록에 보관되며, 나중에 다시 다운로드할 수 있습니다.

네이티브 빌드에는 익스포터가 내보내는 방법을 아는 것만 담깁니다. glTF는 커스텀 셰이더, thin instance, 프로시저럴 하늘, 후처리를 담지 못하므로, Bevy 쪽으로 이식되지 않은 런타임 시스템은 웹에서는 완벽해 보여도 데스크톱이나 모바일 빌드에서는 빠지게 됩니다. 의존하기 전에 네이티브 빌드를 직접 확인하세요.

멀티플레이어#

Multiplayer room 패널은 씬을 Colyseus 게임 서버에 연결합니다. 계정도 설정도 필요 없는 무료 공유 테스트 서버를 쓸 수 있으며, 프로젝트에 전용 서버를 붙일 수도 있습니다. 룸은 직접 간직하거나 나눠 줄 수 있는 공유 코드로 식별됩니다.

Files it reads and writes#

Native format.engine
Imports.glb, .gltf, .obj, .fbx, .png, .svg, .mp4, .webm, .mov, .scene
Exports웹 빌드, 네이티브 데스크톱/모바일 빌드, scene.glb + scene.json

Sending work to other studios#

받아들이는 것: Sculpt, Retopo, Pigment의 mesh, Render의 씬 전체, pixel art, animation, Matter의 PBR material set, 2D rig, video project, image, vector art, Vectra objects.

만들어 내는 것: 2D rig.

Vectra의 화면 목업은 그림이 아니라 구조로 도착합니다. Engine이 배치하고 스크립트를 붙일 수 있는 HUD 계층 구조가 되는데, 이것이 직접 연결할 수 있는 디자인과 그것을 찍은 스크린샷 사이의 차이입니다.

단축키#

Cmd/Ctrl + K는 팔레트에서 전역 명령과 함께 Engine 자체의 명령에 닿습니다. Engine에는 자신만의 설정 안에 전용 검색 가능한 키보드 단축키 패널도 있습니다. 단축키 페이지에 다 담기에는 훨씬 많은 양입니다.

Limits and common snags#

  • 빈 뷰포트는 대체로 씬이 아니라 브라우저 탓입니다. Engine에는 WebGL 2가 필요하니, 하드웨어 가속이 켜져 있는지 확인하세요.
  • Systems와 Tools는 하나의 서랍을 공유합니다. 패널이 "사라졌다면" 대체로 다른 쪽에 있는 것입니다.
  • 콘솔은 마지막이 아니라 가장 먼저 봐야 할 곳입니다: 에러를 그것을 일으킨 엔티티로 연결해 줍니다.
  • 플레이 모드에서 추가한 컴포넌트는 정지 후에 남지 않을 수 있습니다. 정지할 때 나타나는 배너를 읽으세요.
  • Physics는 스크립트 콜백은 같아도 솔버는 2D와 3D 사이에 다릅니다. 2D에서 정지 접촉은 2mm의 skin으로 감지되는데, 솔버가 감지가 실행되기 전에 침투를 정확히 0으로 만들기 때문입니다.
</content>