명령줄

pxr은 앱과 같은 스프라이트를 렌더링하며(같은 프로젝트는 같은 픽셀), 빌드 스크립트와 일괄 작업에 알맞습니다. pxr help는 모든 명령과 옵션을, pxr help COMMAND는 명령 하나와 그 옵션을, pxr --version은 버전을 출력합니다. 읽을 수 없는 명령줄을 받으면 무엇이 잘못됐는지, 그 명령을 어떻게 쓰는지 알려 주고 pxr help COMMAND를 보라고 안내합니다.

자주 하는 작업

# One sprite, 64 px, three-quarter view
pxr render knight.glb -o knight.png

# Every clip, 8 sides, 12 fps, all export formats
pxr render knight.glb --clip all --ring 8 --export all -o out/knight.png

# Two clips, hand-picked frames for the attack
pxr render knight.glb --clip walk --clip attack --keys 0,0.2,0.35,0.6 -o out/knight.png

# A different look
pxr render knight.glb --preset selout --view isometric --light -30,50 --bands 4 --aa 1 -o knight.png

# Your palette
pxr render knight.glb --palette my-palette.hex -o knight.png

# Save the settings as a project, then render it again later (or open it in the app)
pxr render knight.glb --clip all --ring 8 --export aseprite -o out/knight.png --save-project knight.pixor
pxr render knight.pixor

# A whole folder, every clip of every model, with a report
pxr batch models/ --recursive -o out/ --ring 8 --export all

프로젝트는 그 자체로 레시피입니다. 렌더링할 때 룩과 장면을 프로젝트에서 읽고, 명령줄에서는 파일이 갈 곳(-o, --export, --names, --scale, --anim-scale, --no-recipe, --debug), 추가 레이어(--paper-doll, --piece, --parallax, --haze), 백엔드, 쓸 에셋 파이프라인만 받습니다. 그 밖의 플래그는 아무것도 바꾸지 못하므로 경고에 이름이 나옵니다. pxr project set으로 프로젝트에 설정하세요.

어느 에셋 파이프라인인지. pxr render project.pixor는 프로젝트의 첫 번째 에셋 파이프라인을 씁니다. 앱의 내보내기 창이 거기서 고른 파이프라인(처음에는 헤더의 것)을 쓰는 것과 같습니다. --pipeline NAME은 다른 파이프라인을, --pipeline all은 전부를 씁니다. 어느 것을 쓰든 파일 이름은 같으므로, --pipeline all은 파이프라인을 하나씩 쓸 때와 정확히 같은 파일을 씁니다. pxr names, pxr watch, pxr run도 --pipeline을 받습니다.

파일이 가는 곳. -o PATH(또는 --out PATH. 모든 명령이 둘 다 받습니다)는 명령이 쓰는 위치입니다. 파일 하나를 쓰는 명령 — render, stylize, effect, voxels, tiles, shapes, rebake, project blueprint, project set(프로젝트의 시트) — 에서는 그 파일이며, 경로가 /로 끝나거나 이미 있는 폴더면 파일이 자기 이름으로 그 폴더에 들어갑니다. pxr render knight.glb -o out/는 out/knight.png를 씁니다. -o로 렌더링한 프로젝트는 모든 파일을 그 폴더에 씁니다(D51). 프로젝트의 시트 폴더(기본값 out/)가 그 폴더가 되고, 그 아래 경로는 아래 위치를 그대로 유지하며, 다른 경로는 마지막 부분만 씁니다 — 압축 파일, 애니메이션, 아이콘 포함. 앱의 내보내기 창은 열려 있는 상태 그대로의 프로젝트 사본(저장 여부와 무관, 프로젝트 이름으로)에 정확히 pxr render PROJECT --pipeline NAME -o FOLDER를 실행합니다. --recipe-project FILE.pixor(제목 없는 프로젝트는 none)는 사본의 레시피가 사본 대신 가리킬 이름입니다. 파일을 여러 개 쓰는 명령 — batch, golden, gbuffer, stages, icons, run --jobs — 은 폴더를 받습니다.

모델 옆에 <model>@<clip>.<ext> 이름으로 있는 클립 파일은 자동으로 추가됩니다. 같은 스켈레톤을 쓰는 다른 파일은 --anim FILE로 추가할 수 있습니다.

명령

명령 조건
pxr render MODEL | PROJECT.pixor 스프라이트 하나, 또는 클립, 방향, 액션을 요청하면 시트. 프로젝트는 함께 프레임을 잡는 카메라 그룹마다 시트 하나를 씁니다
pxr stages MODEL -o DIR 파이프라인 모든 단계의 이미지(albedo, normals, depth, coverage, light, bands, edges, lines, cleanup, lint…), 일부만은 --only edges,lines. --node N은 대신 스타일 그래프 노드 N이 만드는 것을 KIND.still.png(CRT의 화면)로 씁니다. 스프라이트나 시트가 아닌 정지 이미지입니다
pxr batch FOLDER -o DIR 폴더 안의 모든 모델(.gltf, .glb, .fbx, .obj, .vox. 하위 폴더는 --recursive). 실패한 모델은 보고하고 건너뜁니다. DIR/report.json. --blueprint B.pixorblueprint는 각 모델을 블루프린트 하나로 처리합니다. --cache DIR는 바뀌지 않은 모델을 캐시에서 내줍니다(라이브러리 참고). 앱에서는 폴더를 창에 끌어 놓으세요
pxr run BLUEPRINT.pixorblueprint --in model=M 입력을 채운 블루프린트(장면 그래프 참고). --set NODE.SETTING=VALUE는 설정 하나를 바꾸고, --set PIPELINE/NODE.SETTING=VALUE는 파이프라인 하나에서만 바꿉니다(--set hold.times=4는 모든 에셋 파이프라인의 Hold 노드). --jobs TABLE.csv -o DIR은 표의 행 하나마다 렌더를 한 번 실행합니다. --pipeline NAME|all은 render와 같습니다
pxr rebake SHEET.aseprite 칠한 시트에 프로젝트를 다시 렌더링하되, 레이어와 편집은 유지(Aseprite 참고)
pxr cache stat|gc DIR 캐시에 든 것. gc --keep 20GiB는 크기가 맞을 때까지 가장 오래 쓰지 않은 렌더를 지웁니다
pxr golden CASES.txt 테스트 케이스를 렌더링해 저장된 이미지와 비교합니다(아래 참고). --only TEXT는 이름에 그 텍스트가 든 케이스만 실행하고, --tolerance F는 다른 픽셀이 F 비율까지 허용하며, -o DIR(기본값 target/golden)은 결과가 갈 곳입니다. --graph는 대신 룩의 노드 그래프(프리셋의 그래프를 기본 제공 Pixelate 그룹으로)로 렌더링하고, --flat은 같은 그래프의 모든 그룹을 기본 노드로 펼쳐 렌더링합니다. 둘 다 같은 이미지와 일치해야 합니다. --cache DIR은 각 케이스의 스프라이트를 캐시를 거쳐 --out에 쓰고, 캐시에서 내줬든 렌더링했든 그 파일을 비교합니다. --no-cache는 캐시 없이 같은 파일을 씁니다
pxr bench MODEL tests/budgets.txt의 모든 예산을 측정해 met 또는 MISSED로 알립니다. --rounds N(기본값 10)은 N번 실행한 시간을 평균하고, --from INFO.json은 앱이 측정한 것을 더합니다
pxr import MODEL --report 렌더링하지 않고 가져올 때 파일에 일어나는 일: 찾은 것, 고친 것과 이유, 제안, 빠진 것, 스프라이트 픽셀당 삼각형 수. 일괄 처리에서 깨진 파일을 먼저 찾으려면 --json
pxr reference SPRITE.png 가진 스프라이트에서 읽어 낸 설정: 팔레트, 크기, 외곽선, 띠, 색조 이동, 디더링과 각각의 이유. pxr project set P --match-sprite S.png로 적용합니다
pxr voxels MODEL -o OUT.vox 모델을 룩의 팔레트로 된 높이 --height(1~256)의 복셀로: MagicaVoxel 파일. --stack은 스프라이트 스택도 씁니다(복셀과 스프라이트 스택 참고)
pxr nodes [--graph G] [--json] 이 Pixor에 있는 네 그래프(스타일, 액션, 장면, 에셋)의 모든 노드: 하는 일, 입력과 출력, 각 설정의 범위와 기본값. 도구용은 --json(웹사이트의 노드 레퍼런스가 이것으로 만들어집니다)
pxr inspect FILE Pixor가 가져오는 모든 파일에서 임포터가 찾은 것(형식, pxr help inspect에도 있음): 모델은 오브젝트, 재질, 본, 클립, 경고. .vdb는 격자와 크기. 이미지는 크기. 팔레트는 색
pxr gbuffer MODEL -o DIR 버그 보고용 원시 렌더 타깃. 룩이 메시 모서리를 그리면 .pxrg 덤프가 그 모서리를 담습니다
pxr stylize DUMP.pxrg 저장된 렌더에 와이어프레임을 포함한 픽셀 처리를 실행
pxr diff OLD NEW 내보내기 폴더 두 개(또는 시트 두 개): 어느 파일이 새것이거나 없어졌거나 다른지, 몇 픽셀 다른지, 그리고 각 파일의 레시피로 어떤 설정이나 입력 때문인지. --all은 같은 파일도 나열하고, --exact는 변경이 있으면 종료 코드 1로 끝납니다. .pxrg 덤프 두 개는 타깃별로 비교합니다(--depth-tolerance EPS, --samples N)
pxr adapters Pixor가 쓸 수 있는 GPU
pxr doctor 이 컴퓨터가 렌더링에 쓸 수 있는 것, 그리고 GPU 결과가 CPU 기준과 일치하는지
pxr project new|set|show PROJECT.pixor 스크립트와 도구에서 프로젝트를 만들고, 바꾸고, 출력합니다. --name NAME으로 이름을 정합니다(파일 이름이 아니라 헤더의 이름. show가 나머지와 함께 출력)
pxr project key PROJECT.pixor TARGET CHANNEL Pixor에서 만든 클립의 키 하나(--clip, --frame, --value, --how, --remove…). 스크립트로 클립을 만들 수 있습니다
pxr project bake PROJECT.pixor CLIP 모델 자체의 클립을 모든 프레임에 모든 본의 키를 넣은 Pixor 클립으로(--as NAME, --fps F)
pxr project scene PROJECT.pixor [NODE] 장면 그래프를 노드 하나씩: ring, row, grid, scatter, look-at, vary…를 체인 끝에 추가하며, 각 노드의 옵션은 설정 이름을 따릅니다(--count, --radius, Vary의 --size, Scatter의 --box, 미터 단위인 Displace의 --bumps와 Height field의 --hills, Subdivide의 --times, Select의 --how). 아무것도 받지 않는 노드(object, import)는 맨 가져오기 대신 체인을 시작하고, 더 긴 체인 옆에 놓여 병합됩니다. 노드를 주지 않으면 그래프를 출력합니다
pxr project blueprint PROJECT.pixor -o B.pixorblueprint 프로젝트를 블루프린트로. 모델, 팔레트, 소품, 볼륨 파일을 이름 붙은 슬롯으로 빼냅니다
pxr style new KIT --from PROJECT 프로젝트의 첫 스타일을 스타일 키트로 저장
pxr kit show FILE.pixorkit 키트에 든 것: 노드 그룹, 스타일, 프리셋, 파이프라인
pxr names PROJECT.pixor [--names T] [--pipeline NAME|all] 렌더링하지 않고 프로젝트가 쓸 이름과 모든 프레임의 ID를, 렌더마다 파일을 자체 경로로 보여 줍니다. 한 이름에 두 프레임, 한 파일에 두 렌더(would be written twice), 한 경로에 두 파일(페이퍼 돌 바탕과 조명 키트, 팔레트 변형과 레이어)은 나중에 파일을 잃는 대신 여기서 오류가 됩니다
pxr graph list|set|add|drop|wire|save|swap|flatten|extra FILE --which scene|action|style|asset 스크립트에서 네 그래프 중 무엇이든 다룹니다. --pipeline NAME이 대상을 고릅니다. 이름으로 지정한 액션, 스타일 또는 에셋 파이프라인이며, 이름이 없으면 첫 번째입니다. 출력하고, 설정 하나를 바꾸고, 체인에 노드를 넣고(또는 --alone으로 옆에 두고 --in SLOT=NODE로 다른 노드를 연결), 노드를 빼고, wire --from N --to M --slot S로 둘을 잇고, 키트로 저장하고(save -o KIT.pixorkit: 스타일 그래프는 통째로, 장면·액션·에셋 그래프는 노드 하나로, --as-pipeline은 다른 프로젝트가 pxr project set --use-pipeline으로 쓰는 에셋 파이프라인 전체), 노드 키트를 그룹으로 넣거나(add --kit KIT) 노드 대신 넣고(swap --kit KIT), 그룹을 펼친 그래프를 쓸 수 있습니다. extra --node N --name LAYER는 스타일 노드의 이미지를 내보내기의 레이어로도 만들고, --drop은 이를 멈춥니다. --node(그리고 pxr run의 --set NODE.SETTING)는 노드를 번호, 종류, 그룹 이름, Called에 적힌 것(Image file, Sheet), 또는 앱에서 붙인 이름(F2)으로 지정합니다. object 노드는 모델(of=model)이고, 아이템, 도형, 이미지는 각각 별도 노드입니다. 에셋 그래프의 sprites, frame-range, hold 노드도 다른 노드처럼 설정합니다(--node sprites --set action=walk,Static. action=every-one-except-static이 새 노드의 기본값이고, action=은 Static을 포함한 모든 액션입니다. --set smart=6, --node frame-range --set from=2 --set to=5, --node hold --set times=2). 액션의 노드(clip, bob, spin, merge…)는 종류나 번호로 지정하며, --alone 없이 추가한 노드는 기존 것과 병합되어 바로 재생됩니다. 스타일 그래프에서는 노드가 아무 데도 연결되지 않은 채 들어가며, --in SLOT=NODE와 wire로 연결합니다. 그래프를 실행할 수 없게 만드는 편집은 거부되고 파일은 그대로 남습니다(장면 그래프, 에셋 그래프, 노드 참고)
pxr shapes [PROJECT] -o OUT.glb 앱에서 만든 도형을 모델러나 엔진용 지오메트리로 쓰기
pxr icons MODELS... -o DIR 크기마다 아틀라스가 있는 인벤토리 아이콘. 희귀도는 각 파일 이름에서 읽고, --save는 다시 실행할 레시피를 보관합니다(내보내기 참고)
pxr audit FILE|FOLDER... [--style KIT] 내보낸 시트들이 맞는지 검사합니다: 각 파일의 레시피에서 프리셋, 조명 리그, 시점, 피치, 빛, 띠, 선, 팔레트, 미터당 픽셀을 비교하고, 스타일 키트가 있으면 모든 색이 그 팔레트에 있는지 확인합니다(아니면 종료 코드 1)
pxr watch PROJECT.pixor 프로젝트, 모델, 팔레트가 바뀔 때마다 다시 내보내기
pxr effect KIND[:FRAMES] 단독 픽셀 효과: explosion, hit-spark, slash, magic-burst, heal, portal, smoke-puff, dust, fire-loop, rain, snow, fireflies, falling-leaves
pxr console list|check SHEET.png 콘솔 모드, 또는 시트가 콘솔에 맞는지(아니면 종료 코드 1). 콘솔은 --console이나 시트의 레시피에서 가져옵니다

렌더 옵션

옵션 기본값
--view VIEW 프리셋의 측면, 쿼터뷰, 아이소메트릭, 탑다운
--pitch DEG 뷰의 것 지평선 아래 각도(도)
--yaw DEG 0 스프라이트 하나, 또는 스프라이트 하나짜리 시트의 한 방향 돌리기
--camera GENRE 게임 카메라: platformer, fighting, beat-em-up, adventure, top-down-rpg, action-adventure, isometric, tactics, strategy, racing, top-down-shooter, shmup, icon(시점, 피치, 회전. 따로 주지 않으면 크기와 방향도)
--camera-yaw DEG 0 모든 방향에서 카메라를 모델 둘레로 돌리기
--size N 64 N×N에 맞춤, 4~2048. --size 960x540은 그 너비와 높이의 캔버스에 맞춥니다(타이틀 이미지, 배경)
--pixels-per-metre F --size 대신 고정 미터당 픽셀, 0.5~4096(앱의 픽셀/m)
--up AXIS 가져올 때 결정 파일에서 위를 가리키는 축(y, z, -z, x, -x, -y): 누운 채로 내보낸 모델용
--import-scale F, --import-offset X,Y,Z 가져올 때 결정 직접 지정한 단위와 이동
--no-import-fix 아무것도 보정하지 않고 파일을 그대로 렌더링
--samples N 4 각 변을 따라 픽셀당 샘플 수, 1~8(앱의 샘플)
--light AZ,EL -45,45 카메라 기준 주광
--light-space S 카메라 월드: 빛이 카메라를 따라가지 않고 장면에 고정됩니다
--fill F 프리셋의 보조광 세기, 0~1
--no-shadow 드리운 그림자 없음
--bands N 프리셋의 명암 띠, 1~4
--palette P .hex, .gpl, .png 파일, 또는 내장 팔레트: pixor-16, pixor-8, dusk-12, forest-12, desert-12, ice-10, mono-8
--aa N 0 안티에일리어싱: 0 끄기, 1 실루엣, 2 모든 선
--match-space S oklab 고정 팔레트에서 가장 가까운 색을 찾는 방식: oklab, srgb, weighted
--dither-pattern P bayer bayer(격자 무늬) 또는 blue-noise(고르게 흩어짐). 어느 쪽이든 모델이 움직여도 표면에 붙어 있습니다
--even-stairs 꺼짐 고른 계단의 곧은 실루엣 가장자리(2, 2, 2 대신 3, 1, 2)
--smear PX 0 스미어 프레임, 0~64: 이전 프레임 이후 PX 픽셀 이상 움직인 것이 뒤로 꼬리를 남깁니다
--nudge X,Y 0,0 모델을 격자 위에서 픽셀 일부만큼 이동(각각 -0.5~0.5). 샘플링만 바뀝니다
--foot-plant 꺼짐 클립의 모든 프레임에서 같은 픽셀 행에 디딘 휴머노이드의 발
--preset NAME 깔끔 clean, selout, retro4, flat, wireframe, 또는 저장한 프리셋 키트(.pixorkit)
--style KIT 스타일 키트(.pixorkit): 스타일 전체(pxr style new, 스타일의 키트 저장…)와 그 스타일 그래프, 또는 스타일 그래프만(pxr graph save --which style). 뒤에 오는 플래그로 여전히 바꿀 수 있습니다. 골든 케이스 파일에서는 그 파일 기준 상대 경로입니다. pxr icons와 pxr audit도 같은 것을 받습니다
--dither F 0 이웃한 명암 띠 사이의 오더드 디더링, 0~1
--line-colour HEX 프리셋의 Dark 선의 색, #rrggbb(자동 팔레트만)
--no-lines MATERIAL 이 재질 둘레에 선 없음(반복 가능, pxr inspect가 나열)
--crease-angle DEG 55 접힌 곳이 얼마나 날카로워야 주름 선을 그릴지, 1~179
--depth-step PX 2.5 안쪽 선을 그리는 깊이 차이(픽셀), 0.1~40(앱의 깊이 단계)
--shortest-line N 3 남길 가장 짧은 안쪽 선이나 주름 선, 0~16 픽셀(앱의 최단 선)
--no-part-lines 깊이 차이 없이 맞닿은 파츠 사이에 선 없음
--outline-inside 스프라이트 자체 가장자리의 실루엣
--convex LINE 없음 카메라 쪽으로 불룩한 주름의 밝은 선: none, dark, highlightN
--no-material-channels glTF 재질의 금속성, 거칠기, 이미시브, 무조명, 투명도를 무시하고 색만으로 음영 처리
--backend B 자동 auto, vulkan, metal, dx12, gl, webgpu, cpu(렌더러 고르기 참고)

빛과 색 옵션

옵션
--rig NAME 조명 리그: noon, dusk, torchlight, moonlight, studio
--cycle MATERIAL --colour-cycle 액션에서 이 재질의 색을 순환(반복 가능)
--team MATERIAL|#RRGGBB 팀 색: 재질 하나, 또는 그 색의 색조를 가진 모든 램프(반복 가능). --variant team:blue는 그것만 다시 칠합니다
--console C 콘솔 모드: gameboy, nes, pico8, tic80, c64(콘솔 모드 참고)

애니메이션 옵션

옵션
--clip NAME 렌더링할 클립(여러 개는 반복), 또는 all
--anim FILE FILE의 클립도 사용
--ring N 방향 수, 정면에서 반시계 방향(1~64, 기본값 1), 이름은 South, Southeast, East…: 방향마다 카메라 하나, 크기 하나를 공유하며 시트 하나에
--sides A1,A2,... 대신 각도마다 방향 하나(도, 0 = 정면, 90 = 오른쪽을 향함)
--fps F 클립 시간 기준 초당 프레임 수(기본값 12), 모든 Sprites 노드의 자르기
--keys T1,T2,... 직접 고른 클립 시간(초), 모든 Sprites 노드의 자르기
--clip lib:NAME 모델 골격에 맞춘 모션 라이브러리 클립: idle, walk, run, jump, attack, hit, death
--parallax N 스크롤 배경용으로 이미지를 깊이별 N개 레이어(2–8)로 나누기(여러 모델의 장면 참고)
--haze #RRGGBB 먼 패럴랙스 레이어가 바래 가는 색. none이면 모든 레이어가 팔레트 그대로 남습니다
--spring NODE[:S,D,G] NODE와 그 아래가 움직임에 따라 흔들립니다: 강성, 감쇠, 중력(반복 가능). 프로젝트에서는 장면 그래프의 Spring 노드
--smart-frames N 각 클립에서 포즈로 고른 N 프레임 유지(각각 다음까지 홀드), 모든 Sprites 노드의 자르기
--root-motion M keep(기본값), in-place(루트 본을 수평으로 고정), in-place-sway(클립의 순 이동만 제거)
--turntable N 모델을 한 바퀴 돌리는 N 프레임 액션 추가
--turntable-seconds S 그 회전에 걸리는 시간(기본값: --fps에서 N 프레임)
--motion M[:N[:A]] 루프 추가: spin, bob, swing, pulse, squash, flicker, N 프레임, 세기 A(spin은 루프가 도는 회전량: spin:8:0.125은 면이 여덟 개인 보석을 한 면만큼 돌려 매끄러운 루프를 만듭니다)
--colour-cycle N 순환 재질의 음영을 돌리는 N 프레임 액션 추가
--prop FILE:BONE[@at=X,Y,Z][@turn=X,Y,Z][@scale=S][@grip=NODE] 다른 모델을 본에 붙이기: 손잡이로 잡고, 본의 축을 따라 옮기고 돌림(본에 단 소품 참고)
--shape SPEC 도형 추가: [NAME=]KIND[:SIZE[:AT[:#RRGGBB[:TURN]]]], 예: box:1,0.5,1:0,0.25,0:#c86432, 또는 옆으로 누운 wheel이라는 이름의 바퀴는 wheel=cylinder:0.5,0.2,0.5:0.7,0.25,0.5:#14101c:90,0,0(반복 가능). KIND는 box, sphere, cylinder, cone, torus, plane, capsule, wedge, pyramid, prism, stairs, arch, letters 중 하나입니다(pxr help render가 플래그가 읽는 바로 그 목록에서 나열). letters는 글꼴의 픽셀을 블록으로 돌출해 PIXOR나 프로젝트의 글자를 씁니다: pxr project set --add-shape letters --words WORDS --font NAME(render는 --words를 받지 않습니다)
--volume SPEC 볼륨 추가: puff, flame, cloud, mist 또는 .vdb 경로, 이어서 [:SIZE[:AT]], 번호가 붙은 .vdb 시퀀스라면 [:FRAMES[,EVERY[,LOOP]]], 그리고 본이 들고 다니게 하려면 @BONE, N번째 효과의 방출기가 들고 다니게 하려면 @effect:N(볼륨)
--wire LINE 와이어프레임 룩: none, dark, seloutN. --wire-fill, --wire-hidden, --wire-angle(0~180), --wire-all-edges, --wire-glow MATERIAL과 함께 씁니다(설정)
--light-sweep N 조명을 움직이는 N 프레임 액션 추가
--effect KIND[:N] N 프레임의 픽셀 효과 액션 추가(pxr effect 참고). --effect-size, --effect-energy, --effect-seed, --effect-at X,Y,Z, --effect-bone BONE, --effect-clip CLIP, --effect-hit FRAME, --effect-alone과 함께 씁니다
--hitbox PART, --hurtbox PART, --socket BONE JSON에 프레임별 상자와 본 위치 기록(반복 가능, 내보내기 참고)
--paper-doll, --piece NAME:PARTS 페이퍼 돌 레이어(내보내기 참고)
--item MODEL@X,Z[,YAW,SCALE[,LAYER]][:CLIP[,PHASE]], --ground W,D[,#RRGGBB] 첫 모델 옆에 놓을 모델들. 프로젝트에서는 각각 장면 그래프의 Item 노드가 되고, 그 아래에 바닥 평면이 깔립니다(내보내기 참고)
--chunks COLSxROWS 큰 맵을 이음매가 정확한 청크로 쓰기. --chunk-margin N(기본값 8)
--max-flicker F 깜빡임 비율이 이 값을 넘으면 경고(예: 0.01). 골든 케이스에서는 실패
--require-visible OBJECT OBJECT가 어느 프레임에서든 사라지면 경고

내보내기 옵션

옵션
--export LIST 쉼표로 구분하거나 반복: png, json, aseprite, normal, depth, emission, layers, palette, godot, gif, apng, light-kit, p8, report, video, 또는 all(p8과 video를 뺀 전부. 이 둘은 이름을 지정할 때만 씁니다). PNG는 항상 씁니다(내보내기 참고). render, batch, run, watch, project set, tiles(자체 형식 포함)도 같은 방식으로 읽습니다
--layout L grid(액션과 방향마다 한 행, 기본값) 또는 strip
--padding N 칸 사이의 투명 픽셀, 0~256(기본값 0)
--extrude N 칸 가장자리를 바깥으로 N 픽셀 반복, 0~64(기본값 0)
--pot 2의 거듭제곱 시트 크기
--godot-path RES Godot가 시트를 찾을 위치(기본값 res://<png name>)
--anim-scale K GIF와 APNG 파일의 정수 배율, 1~16(기본값 1)
--video-scale K, --video-fps N, --video-background #RRGGBB 동영상을 쓰는 방식: 배율 1~16(기본값 4), 초당 1~100프레임(기본값 30), 스프라이트 뒤에 깔리는 것(기본값 검정)
--trim 각 칸을 픽셀만 남게 잘라 내기(JSON과 Godot 파일이 배치를 유지)
--dedupe 같은 프레임은 한 번만 저장
--max-width N 시트가 N 픽셀보다 넓어지기 전에 새 행 시작(0~65536. 0이면 제한 없음)
--columns N 한 행에 N프레임, 모든 클립이 앞 클립에 이어서: 밀착 인화지처럼
--max-height N N 픽셀보다 높은 시트를 페이지로 나누되, 클립은 통째로 한 페이지에(NAME_1.png, NAME_2.png. 0~65536)
--variant NAME 팔레트 변형도 내보내기(반복 가능): hit-flash나 night 같은 효과, hue:DEG, team:COLOUR(이름 또는 #rrggbb, --team 필요), 또는 palette:NAME|FILE. 인덱스 시트와 룩업 텍스처를 추가합니다
--shadow KIND name_shadow.png도 쓰기: contact 또는 drop
--names TEMPLATE 파일과 JSON 키의 이름 짓는 법: {project}, {object}, {action}, {side}, {layer}, {set}, {size}, {index}, {ext}로 된 패턴이며, {index:3}은 세 자리로 채웁니다(내보내기 참고)
--no-recipe 레시피(시트를 만든 방법)를 PNG와 .aseprite에 저장하지 않기
--scale K PNG를 K배 확대(미리보기 전용, 다른 형식과는 함께 쓸 수 없음)
--save-project FILE.pixor 이 명령줄을 프로젝트로도 저장
--debug DIR 렌더 타깃, 팔레트, 린트, 깜빡임 이미지

내 파이프라인을 위한 골든 테스트

케이스 파일은 한 줄에 렌더 하나를 나열합니다. 이름, 모델 또는 프로젝트 경로(파일 기준 상대 경로), 옵션입니다.

hero-walk   models/hero.glb --clip walk --ring 8 --max-flicker 0.02
hero-proj   hero.pixor

pxr golden cases.txt --bless는 결과를 파일 옆에 NAME.png로 저장합니다. 이후 pxr golden cases.txt는 픽셀이 하나라도 바뀌거나, 스프라이트에 린트 발견 항목(떠도는 픽셀, L자 선 모서리, 2 px 선)이 있거나, --max-flicker나 --require-visible 검사가 실패하면 실패합니다. 오류는 어느 케이스의 픽셀이 다른지(NAME.actual.png와 NAME.diff.png가 target/golden에 있습니다), 어느 케이스가 검사에 실패했는지 알려 줍니다. --bless는 검사가 실패해도 이미지를 저장하고, 그 케이스를 밝히며 1(으)로 종료합니다. 모델 변경이 스프라이트를 바꿨을 때 알아차리는 데 쓰세요.

실행이 아니라 라이브러리

램프 하나가 바뀌었다고 스튜디오는 같은 스프라이트 5천 개를 다시 렌더링합니다. 세 가지가 그것을 밤샘 작업이 아니라 결정의 문제로 만듭니다.

프로세스가 끝나도 남는 캐시. pxr batch와 pxr run의 --cache DIR는 만든 모든 렌더를 읽은 파일과 그 내용의 해시와 함께 보관합니다: 모델, 옆에 있는 클립 파일, .gltf가 가리키는 텍스처, 팔레트, 키트, 이미지, 볼륨. 다음 실행에서는 파일 해시가 그대로인 렌더는 캐시에서 내주고 나머지만 렌더링합니다.

pxr batch models/ --cache .pxrcache --out out/     # renders what changed
pxr cache stat .pxrcache
pxr cache gc .pxrcache --keep 20GiB                # least recently used go first

캐시는 결코 원본이 아닙니다. --no-cache로도 같은 바이트가 나오고, 해시가 이름과 맞지 않는 저장 파일은 그대로 내주지 않고 다시 렌더링하며, 새 Pixor 빌드는 예전 캐시를 믿지 않고 새 캐시를 시작합니다.

작업 파일. 렌더마다 한 행, 블루프린트의 슬롯마다 한 열인 표이며, 선택적으로 name(행의 폴더), out(--out 아래의 시트), NODE.SETTING 열(그 행에만 적용하는 --set)을 둘 수 있습니다:

model,name,palette,sprites.fps
heroes/knight.glb,knight,palettes/steel.hex,8
heroes/mage.glb,mage,palettes/robes.hex,

여기서 sheet.pixorblueprint는 pxr project blueprint sheet.pixor로 만든 것으로, 팔레트가 있는 heroes/knight.glb 프로젝트이므로 슬롯은 model과 palette입니다. 기사는 초당 8프레임으로 자르고, 칸이 빈 마법사는 블루프린트 자체의 속도로 자릅니다. 모든 행이 out/NAME/NAME.png를 씁니다.

pxr run sheet.pixorblueprint --jobs assets.csv --cache .pxrcache --out out/ --jobs-report report.json
pxr run sheet.pixorblueprint --jobs assets.csv --cache /shared/cache --out out/ --rows 400..   # the second machine, of 800 rows

경로는 표 기준 상대 경로입니다. 행 하나는 그 행의 --in과 --set을 붙인 pxr run과 정확히 같으므로, 잘못된 행은 따로 실행해 볼 수 있습니다. 실패한 행이 다른 행을 멈추지는 않습니다. 보고서는 모든 행을 렌더링됨, 캐시에서 가져옴, 실패와 그 이유로 나열하며, 실패한 행이 있으면 작업은 마지막에 1로 종료합니다.

플래그로 정하는 한도. --max-pixels N, --max-memory SIZE, --max-time DURATION은 렌더마다(행마다, 모델마다) 적용됩니다. 계획 단계에서 이미 아는 것(시트의 픽셀 수, 대략적인 메모리 사용량)은 그리기 전에 검사하고, 시간과 메모리는 프레임 사이에 검사합니다. 한도를 넘으면 무엇이 넘었고 어디서 멈췄는지와 함께 6(으)로 종료합니다. 작업 파일에서는 그 행만 그 이유로 실패하고 나머지는 계속됩니다.

pxr run sheet.pixorblueprint --jobs assets.csv --out out/ --max-memory 1.5GiB --max-time 5m --max-pixels 16M

긴 클립. 클립의 프레임은 먼저 그린 다음 한꺼번에 마무리합니다. 깜빡임을 막는 처리 단계가 클립 전체를 따라 살피기 때문입니다. 그 단계가 읽는 데이터는 512 MiB 안에서(--max-memory를 주면 그 절반) 몇 방향씩 보관합니다. 한 방향만으로도 너무 긴 클립은 그리는 동안 디스크(~/.cache/pixor/spill 또는 PXR_SPILL_DIR 아래)에 보관했다가 필요할 때 다시 읽습니다. 픽셀은 같고 속도만 느려지며, 렌더가 끝나면 폴더도 사라집니다.

종료 코드

코드
0 성공
1 실패한 렌더, 내보내기, 일괄 모델, 작업 행, 골든 케이스
2 사용법 오류: 메시지, 명령 사용법, see pxr help COMMAND를 stderr로
3 읽을 수 없는 입력: 모델, 프로젝트, 팔레트, 키트, 케이스 파일, 덤프
4 이름으로 요청한 백엔드가 없음
5 쓸 수 없는 출력: 파일 또는 폴더
6 --max-pixels, --max-memory, --max-time 예산 초과
7 혼자 정하지 않을 칠을 남긴 다시 굽기(--resolve keep|pixor)

GPU가 아예 없어도 오류가 아닙니다. Pixor가 자체 래스터라이저로 대신 그립니다. 오류는 어디서나 같은 방식으로 무엇이 잘못됐는지 알려 줍니다: --flag takes A to B, got X.

렌더러 고르기

--backend auto|vulkan|metal|dx12|gl|webgpu|cpu는 지오메트리를 무엇으로 그릴지 정합니다. 룩(모든 픽셀 처리 단계)은 이 값과 상관없이 CPU에서 계산합니다.

  • auto(기본값)는 컴퓨터에 있는 것을 쓰고, 작동하는 어댑터가 없으면 CPU로 돌아갑니다.
  • cpu는 Pixor 자체 래스터라이저입니다. 어댑터도 드라이버도 필요 없고 실행 파일에 들어 있으며, 어느 컴퓨터에서든 같은 픽셀을 그립니다. 에셋 팩이나 CI 빌드에 알맞은 이식성 있는 선택입니다.
  • 지정한 백엔드가 없으면 오류입니다(종료 4). 말없이 다른 곳에서 렌더링하는 것보다 그렇다고 알리는 편이 낫기 때문입니다.

모든 내보내기의 레시피는 어떤 백엔드가 그렸는지 기록합니다. pxr doctor는 찾은 어댑터, Pixor가 고를 어댑터, 드라이버 버전, 그리고 그 백엔드가 CPU 기준과 같은 그림을 그리는지 출력합니다:

adapter  NVIDIA GeForce RTX 3070 Ti (Vulkan, DiscreteGpu) driver NVIDIA 610.57.04
backend  vulkan (NVIDIA GeForce RTX 3070 Ti (Vulkan, DiscreteGpu))
agrees   vulkan vs the CPU reference: coverage 0.00%, ids 0.00%, albedo 0.00% (allowed 1.00%); normals within 0.028 deg, depth within 9.5e-7

앱에서는 같은 선택이 환경설정 › 렌더러 › CPU로 스프라이트 그리기이며, 한 세션에만 적용하려면 pxr와 같은 이름(cpu, auto, 또는 이름으로 지정한 GPU 백엔드)으로 pixor --backend B를 쓰세요. 이때 환경설정은 그대로 남습니다. 각 백엔드는 그린 것을 보관합니다. 다른 쪽으로 바꾸면 프레임을 다시 렌더링하고, 되돌아오면 장면이 바뀌지 않은 한 렌더링 없이 처음 것의 프레임을 다시 가져옵니다.

도구와 스크립트용

어느 명령에든 --json을 붙이면, 표준 출력에 한 줄에 JSON 이벤트 하나(progress, wrote, warning, error, done)가 실리고, 사람이 읽는 로그는 표준 오류로 갑니다. 쓰지 않고 읽는 명령도 출력 내용을 이벤트 하나로 줍니다: inspect, adapters, tiles --list(terrains), graph list와 graph flatten, 그리고 두 덤프의 diff.

이 페이지에서 설명하는 내용은 정식 버전에 있습니다. 무료 브라우저 데모는 기본 룩과 PNG 시트만 지원합니다.

브라우저에서 체험 Pixor 구매