드로잉, Art Layer, Subart¶
Harmony의 드로잉은 하나의 이미지가 아니다. 네 개의 쌓인 레이어 — Underlay, Colour Art, Line Art, Overlay — 이고, OSA는 그중 어디로든 아트를 겨냥하고, 하나 위에 여러 이미지를 쌓고, 그것을 노출별로 할 수 있게 해준다.
네 개의 art layer¶
Harmony가 그리는 순서대로, 위에서 아래로:
| 레이어 | 태그 | 보통 담는 것 | |
|---|---|---|---|
| Overlay Art | OL |
모든 것 위에 칠하는 효과 | |
| Line Art | LA |
드로잉의 선 — 기본값 | |
| Colour Art | CA |
플랫과 채색 | |
| Underlay Art | UL |
러프, 가이드, 채색 아래 들어가는 모든 것 |
art layer 태그가 없는 아트는 Line Art로 간다. 그 기본값은 수집기, Inspector, 스택 로직이 모두 읽는 단 하나의 상수다. 그래서 "태그 없는 아트는 어디에 안착하는가?"에 대한 답은 정확히 하나뿐이다.
테이블 읽기¶
Inspector의 Art Layers 테이블은 하나의 드로잉에 대한 진실이다:
| 열 | 말해주는 것 |
|---|---|
| Art Layers | 네 개의 레이어와, 그 아래 중첩된 subart |
| Type | Vector 또는 Bitmap — 드로잉별이 아니라 레이어별 |
| Frames | 그 레이어에 실제로 아트가 있는 노출의 수 |
하나의 드로잉이 벡터 이면서 비트맵일 수 있다
Line Art는 벡터, Colour Art는 비트맵 — Harmony에서 합법이고, OSA는 그것을 저작한다. 그래서 Type은 드로잉의 설정이 아니라 이 테이블의 열이다. 종류는 각 레이어의 것이며, 거기에 착지하는 아트가 정한다. 컨테이너에 스위치 하나를 두면 그중 절반에 대해서는 반드시 틀린 말이 된다.
각 행에는 자기 버튼이 있다:
| 버튼 | 하는 일 |
|---|---|
+ |
이 레이어에 아트 추가 — 파일 하나, 또는 시퀀스 전체 |
⟳ |
있는 것을 교체 |
✕ |
레이어 비우기 |
Subart layer: 하나의 art layer, 여러 이미지¶
art layer는 한 장보다 많은 이미지를 담을 수 있다. 그 여분의 이미지들이 subart layer이고, 스택으로 읽힌다.
Overlay Art ← the layer
└── Subart-000 ← a track on it
이미지 하나는 계층 비용을 내지 않는다. 어떤 레이어에 처음 도착한 시퀀스는 art layer 행 자체에 평평하게 놓인다 — 펼칠 트랙이 없다. 아직 정렬할 것이 없기 때문이다.
두 번째는 그 아래로 들어가고, 첫 번째는 그대로 있는다. art layer는 자기 아트를 그대로 유지하고, 새로 온 것이 스택 맨 아래의 자식이 된다. 손 밑에서 움직이는 것은 없다. 방금 임포트한 행은 놓아둔 그 자리에 있다.
이것은 취향이 아니라 모델에서 따라 나온다. 여기서 슬롯은 아트를 지니면서 동시에 자식을 가진다 — Photoshop이 레이어를 다루는 방식 그대로이고, 수집기가 읽는 방식 그대로다. 첫 이미지를 다른 데로 밀어내는 것은, 이미 하고 있던 말을 하려고 트리를 다시 배열하는 일이다.
승격은 그것이 꼭 필요한 단 하나의 경우를 위해 여전히 존재한다: 레이어 자신의 아트 위에 트랙을 놓는 경우다. 레이어 행보다 위에는 인덱스가 없으므로, 거기로 슬롯을 끌어다 놓으면 그 아트가 트랙 안으로 내려가고 새로 온 것이 맨 위를 차지한다. 제스처는 드래그뿐이고, 컨텍스트 메뉴는 같은 말을 글로 한다 — "Move this layer's artwork into the stack".
트리 순서가 스택 순서다: 첫 자식이 맨 위다. 수집기는 정확히 그것을 읽으므로, 트리에서 보는 것이 Harmony에서 합성되는 것이다.
왜 평평한 형제가 아니라 중첩인가
같은 art layer를 주장하는 두 형제는 이 앱에서 오류다 — OSA는 둘 다 빨갛게 칠하고 작업을 거부한다. 중첩은 불변식을 지킨다: 프레임 위의 Overlay는 여전히 정확히 하나이고, 스택은 그 내용이다.
이름은 당신 것이고, 깊이에는 천장이 없다¶
Subart-000은 새 트랙이 태어날 때 갖는 기본 이름일 뿐이다 — Octo Vector Bridge가 패스를 명명할 때 쓰는 것과 같은 기본값이다. 두 도구 어느 쪽에서든, 샷이 부르는 이름으로 바꿔라. 그 문자열에 의존하는 것은 아래쪽에 하나도 없다. OSA는 트랙 폴더를 구조로 읽는다. 번호가 붙은 것(01_contour, 02_detail)을 번호 순서로, 번호 없는 것을 그다음에 알파벳 순서로 가져온다. rim_light로 이름을 바꾼 패스도 그대로 둔 패스와 똑같이 임포트된다.
폴더 이름이 반드시 말해야 하는 것은 art layer다. OSA는 Underlay, Colour Art / Color Art, Line Art, Overlay, 그리고 힌트 ink와 line, 약자 UL / CA / LA / OL을 온전한 단어로 읽는다 — OVB가 쓰는 것과 같은 문법이라, 그쪽 export가 그대로 들어온다. (온전한 단어인 것은 의도적이다: Fola라는 폴더가 글자를 품었다는 이유로 Line Art가 되어서는 안 된다.)
그리고 스택에는 천장이 없다. 트랙은 트랙을 담을 수 있고, 원하는 만큼 여러 단계로 갈 수 있다 — 어느 행의 +든 그 행 안에 시퀀스를 추가하고, 폴더 임포트는 중첩된 트랙 폴더를 재귀적으로 읽으며, 트리에서 끌어다 놓는 것도 마찬가지다. 아무리 깊어져도 끝에 있는 단 하나의 art layer로 전부 평탄화된다. 깊이는 당신이 생각하는 방식대로 정리하라고 있는 것이지, Harmony가 언젠가 보게 될 무언가가 아니다.
각 트랙은 자신이 어떤 종류의 데이터인지 말한다¶
subart 행은 설정이 아니라 소스 파일에서 읽은 콘텐츠 타입의 아이콘을 단다:
| 의미 | |
|---|---|
벡터 — 네이티브 스트로크로 쓰인 .svg, 또는 .tvg |
|
| 래스터 — PNG, TGA, TIFF, JPEG 또는 PSD 레이어 |
둘은 한눈에 구별되도록 그려졌다. 14픽셀에서는 세부가 아니라 모양을 읽기 때문이다.
- 벡터는 곡선 위의 앵커 포인트다 — 옅은 S자 곡선이 통과하는 자리에 놓인 진한 파란 사각형. 모든 드로잉 프로그램이 보여 주는 베지에 핸들이다. 수학으로 정의된 선 위의, 붙잡을 수 있는 점.
- 래스터는 체커보드다 — 회색 테두리 안에 밝고 어두운 사각형이 2×2로 놓인 격자. 픽셀 격자이며, 모든 이미지 편집기가 "이것은 형태가 아니라 샘플이다"라고 말할 때 쓰는 바로 그 체커다.
하나는 아직 편집할 수 있는 곡선이고, 다른 하나는 값의 격자다. 두 포맷의 차이가 그것 전부이고, 두 아이콘의 차이도 그것 전부다.
하나의 art layer는 벡터와 래스터를 섞을 수 없다
Harmony의 art layer는 둘 중 하나다. 같은 Colour Art에 .svg와 .png를 쌓으면 둘 다 기록될 수 없다.
맨 위 트랙이 레이어의 타입을 정하고, 다른 종류의 트랙은 건너뛴다 — 임포트 리포트에 하나씩 이름이 적힌다:
vector and bitmap in one art layer: the top track is vector, so 2 bitmap track(s) were skipped (flats.png, shadow.png)
이것은 실패가 아니라 노트다: 빌드는 일어났고, 다만 전부는 아니었다. 그리고 건너뛴 트랙은 스테이징 트리에 남는다 — OSA는 실제로 안착한 것만 평탄화하므로, 스택을 잃었다는 이유로 당신이 저작한 것이 삭제되지는 않는다. 다른 art layer로 옮기거나 변환하면 다음번에 안착한다.
한 레이어에 벡터 트랙이 둘 이상인 것은 괜찮다: 나란히 살면서 바닥부터 위로 그려지고, 마지막에 그려진 것이 맨 위에 온다.
아트를 이리저리 옮기기¶
여기서 일방통행인 것은 없다. 두 개의 컨텍스트 메뉴가 이동을 담당하며, 둘은 서로 다른 질문에 답한다.
트리에서: 한 레이어를 다른 레이어로 보내기¶
스테이징 트리에서 art layer
를 우클릭하면 서브메뉴 세 개가 나타나고, 각각이 네 개의 레이어를 나열한다:
| 동사 | 하는 일 |
|---|---|
| Move to | 아트가 이 레이어를 떠나 저 레이어에 착지한다 |
| Copy to | 저기에 착지하면서 동시에 여기에도 남는다 |
| Swap with | 두 레이어가 내용을 맞바꾼다 |
그래서 Line Art로 들어온 플랫을 아무것도 다시 임포트하지 않고 Colour Art로 보낼 수 있고, 뒤바뀌어 들어온 한 쌍은 Swap 한 번으로 바로잡힌다.
각 목적지는 여러분이 보기 전에 계획으로 결정된다. OSA는 네 레이어 각각에 무슨 일이 일어날지 계산해서, 할 일이 있는 것만 활성화한다. 불가능한 목적지는 사라지는 대신 회색으로 남고 툴팁에 이유가 적힌다 — 미리보기가 없는 앱에서, 말없이 죽은 항목은 버그처럼 읽힌다.
컨테이너에서는 모든 프레임에 적용된다
레이어 하나 대신 드로잉
을 우클릭하면 같은 세 동사가 그 컨테이너의 모든 프레임에 한꺼번에 적용된다. 같은 계획, 같은 동작에 컨테이너의 이동 가능한 레이어 전부를 넘기는 것이다 — 프레임 백 개를 제스처 하나로 옮기고, Ctrl+Z 한 번으로 되돌린다.
Art Layers 패널에서: 컨테이너 ⇄ 스택¶
Inspector의 Art Layers 패널에서 행을 우클릭하면, 그 행이 할 수 있는 이동을 메뉴가 제시한다:
아이콘은 패널 자신의 것입니다. 드로잉 행은 frame 아이콘을, 각 레이어는 자기 칩을 달고 — 트랙은 파일에서 읽어 낸 데이터 종류(벡터 또는 비트맵)를 답니다. 위의 두 트랙 행이 같은 비트맵 아이콘을 보여 주는 것은 그저 예시 트랙 하나이기 때문입니다: 두 항목은 종류가 무엇이든 모든 트랙에 존재합니다.
드래그하지 않고 "이게 맨 위로" 라고 말할 때 쓰는 것이 바로 이 한 쌍이다. 컨테이너의 아트를 스택 안으로 밀어 내리고, 원하는 트랙을 그 자리로 끌어올리면 된다.
거절은 숨기지 않고 문장으로 말한다. 항목이 회색이 되면서 어느 경우인지 알려 준다:
- "this slot carries no artwork" — 옮길 것이 없다;
- "this slot has slots inside it — its children would be left with no parent";
- "
<Layer>already has its own artwork — move that one into the stack first".
마지막 것이 이 패널 전체가 기대고 있는 불변식이다: 한 행에 하나의 아트. 두 이미지가 같은 슬롯에 조용히 내려앉으면 누군가의 드로잉을 덮어쓰게 되고, 승격이 존재하는 이유가 바로 그것을 막기 위해서다.
시퀀스는 드로잉이 아니라 레이어에 안착한다¶
Colour Art에 120개 파일 시퀀스를 떨어뜨리면 OSA가 프레임 단위로 안착을 계산한다. 아무것도 하기 전에 알려준다:
- 그 시퀀스가 강제하는 새 프레임이 몇 개인지 (컨테이너보다 길 때),
- 그 레이어에 아트가 없는 채로 남는 기존 프레임이 몇 개인지 (더 짧을 때),
- 어떤 art layer가 컨테이너로 승격되는지.
시퀀스가 더 길든 더 짧든 오류가 아니다. 둘 다 말해줄 뿐이다.
컨테이너가 여전히 아트를 지닐 수 있는 이유¶
트리가 계속 제기하는 질문이고, 답은 개념에 있는 것과 같다:
모든 행은 같은 행이다. 다른 것은 어떤 체크박스가 켜져 있느냐뿐이다.
평평한 PNG로 도착한 드로잉은 당신이 그 위에 무언가를 끌어다 놓는 순간 컨테이너가 될 수 있다. 부모가 되는 것이 아트를 잃는 것을 뜻한다면, 모든 드래그가 드로잉을 조용히 파괴할 기회가 된다. 그래서 컨테이너는 가지고 있던 것을 지키고, 아트는 자식들에게 대체되는 대신 자식들의 동료로 앉는다.
그래서 다음을 보게 되고, 그것이 맞다:
- 자기 아트를 가진 프레임과 그 아래의 art layer들,
- 자기 이미지를 가진 art layer와 그 아래의 subart layer들.
아트를 지니는 행은 그 둘뿐이다. 드로잉 노드는 지니지 않는다 — 그것은 엘리먼트를 가리키는 Read이고, Harmony에서 픽셀은 언제나 노출된 셀에 산다. 구조 노드, 제너레이터, 이펙트도 마찬가지다.
그래서 아트를 지닌 행이 드로잉 노드가 되면, 아트는 사라지지도 않고 그 자리에 머물지도 않는다: OSA가 내재적 Frames 폴더를 만들고 그 안에 frame 1을 두어, 아트가 아래로 이주한다. 집은 하나, 절대 둘이 아니다 — 사본이 둘이면 수집기가 같은 소스를 두 번 읽고, 기록기는 두 번째 읽기를 손실로 남긴다.
무엇이 아트를 지니고 무엇이 지니지 않는지에 대한 전체 표는 개념을 보라.
조합은 무언가를 버리는 것이 아니라 Assemble 시점의 병합 정책으로 해결된다:
| 상황 | Assemble이 하는 일 |
|---|---|
| 프레임이 자기 아트 와 art layer를 함께 가짐 | 프레임의 아트가 그것이 가리키는 art layer 위로 병합된다 |
| art layer가 여러 트랙을 가짐 | 트리 순서대로, 위부터, 하나의 이미지로 평탄화된다 |
| 컨테이너가 이미 아트가 있는 레이어를 가리킴 | 가리켜진 레이어가 받는다. 다른 것은 건드리지 않는다 |
| 아트를 지닌 행이 드로잉 노드가 됨 | Frames 폴더와 frame 1이 나타나고, 아트가 그 프레임으로 이동한다 |
스택은 OSA 안에만 존재합니다¶
이 부분은 아주 분명히 해 둘 가치가 있습니다. 조립 이후 Harmony에서 무엇을 보게 될지에 대한 기대를 바꾸기 때문입니다.
Harmony에는 subart layer가 없습니다. 그곳의 드로잉은 정확히 네 개의 내부 레이어 — Underlay, Colour Art, Line Art, Overlay — 를 가지며, 그것이 어휘의 전부입니다. 트리에서 쌓는 스택은 authoring 구조입니다. "이 다섯 장은 모두 Overlay에, 이 순서로" 라고 말하는 방법이지, 미리 손으로 합쳐 둘 필요가 없게 해 주는 것입니다.
Assemble 시점에 스택은 소진됩니다. 스택의 모든 이미지는 겨냥한 하나의 art layer로, 스택 순서대로 합성되어 내려가고, Harmony에 도착하는 것은 평범한 Overlay를 가진 평범한 드로잉입니다. 씬의 어떤 것도 트랙이 다섯 개였다는 사실을 기억하지 않습니다 — 그 기억은 여러분의 스테이징 트리와, OSA가 저장하는 세션에 있습니다.
순서, 위에서 아래로¶
무엇이 무엇을 덮는지는 세 규칙이 결정하며, 이들은 서로 겹쳐 적용됩니다:
- 프레임 자신의 아트는 언제나 맨 위 — 그 프레임의 art layer들이 담은 모든 것 위에 놓입니다. 프레임의 Target Layer가 가리키는 레이어에 착지합니다. 따라서 Line Art를 가리키는 프레임은 Line Art 컨테이너 자신의 이미지 와 그 모든 트랙을 덮습니다.
- 컨테이너는 자식들 위에 있습니다. 자기 이미지도 있고 아래에 subart layer도 있는 art layer는, 자기 이미지를 자기 스택의 맨 위에 놓습니다.
- 트리 순서가 스택 순서이며, 첫 자식이 위입니다 — art layer들 사이에서도, 한 art layer의 트랙들 사이에서도.
Line Art를 가리키는 프레임을 한 장의 그림으로 읽으면:
4번 행이 잠시 멈춰 읽을 만한 부분이다. 이것은 벡터 레이어 위의 비트맵 트랙이고, Harmony에는 그것을 놓을 자리가 없다. art layer는 둘 중 한 종류다. 스택의 맨 위가 결정한다 — 여기서는 맨 위가 벡터이므로 비트맵은 빠지고, 임포트 리포트에 이름이 적히며, 여러분의 트리에는 그대로 남는다. 옮기거나, 변환하거나, 스택을 다시 정렬해 다시 시도할 수 있도록.
같은 비트맵을 Colour Art로 옮기면 잃는 것이 없다. 거기서는 그것이 맨 위이기 때문이다:
같은 드로잉의 나머지 art layer들도 같은 방식으로, 각자 자기 레이어에 만들어진다 — Underlay, Colour Art, Line Art, Overlay는 서로 섞이지 않는다.
그래서 트리를 지킬 가치가 있습니다
Harmony가 스택을 담을 수 없기 때문에, 스테이징 트리는 그 분해가 살아남는 유일한 장소입니다. OSA를 다시 열면 세션이 트랙 그대로 돌아옵니다. 조립된 씬만으로는 무엇이 무엇으로 합쳐졌는지 알 수 없습니다.
Assemble 이후, 노드는 더 이상 새것이 아니다¶
Assemble을 누르면 두 가지가 동시에 일어나는데, 두 번째는 놓치기 쉽다. 노드가 Harmony에 만들어지고, 그것을 만든 슬롯은 새것
이기를 그치고 기존 것
이 된다 — Inspector의 상태 표식이다. 그때부터 그 행은 실제로 바깥에 존재하는 것에 대한 서술이다.
평탄화도 바로 그 순간에 일어난다. 스택이 무엇이었든, 이제 각 art layer는 Harmony에서 하나의 이미지를 담는다 — 그것이 Harmony가 담을 수 있는 전부다.
그래서 씬에서 다시 읽어 온 드로잉은 평평하게 들어온다. 어제 조립한 씬에서 OSA를 다시 열든, Node View에서 기존 드로잉을 끌어오든, 여러분이 받는 것은 실제로 아트가 있는 프레임들과 그 안에 채워진 art layer들이며 — subart layer는 없다. 바깥에 보고할 것이 없기 때문이다. Original Bitmap에서는 art layer도 없다. 아트는
프레임에 놓인다.
그 위에서 하던 작업은 그대로 이어갈 수 있다:
- 컨테이너 안의 아트를 꺼내 트랙으로 만들고(우클릭 → Move this layer's artwork into the stack), 그 위에 더 쌓는다;
- 새 트랙을 추가하고, 순서를 바꾸고, 대상 레이어를 바꾼다;
- 다시 Assemble을 누른다 — 기존 노드는 처음부터 다시 만드는 대신 바뀐 것을 더하고 뺀다.
씬의 아트를 지우는 것은 사고가 아니라 결정이다
씬에서 온 아트는 OSA에서 지운다고 사라지지 않는다. 그 행은 예정된 제거로 표시된다 — 호박색 테두리와 함께, "will be removed from the scene on the next Assemble" 이라는 툴팁이 붙는다 — 그리고 컨텍스트 메뉴는 Revert to original sequence를 제공한다.
즉, 그 삭제는 조립하는 순간까지 되돌릴 수 있고, 그때에야 비로소 씬을 건드린다. 이 간격이 핵심이다. Node View에서 드로잉을 끌어왔다가 마음을 바꾸는 데 대가가 있어서는 안 되고, 그 아트가 남의 것일 때 한 세션 안에서만 존재하는 undo로는 충분하지 않다.
Target Layer¶
Target Layer는 컨테이너가 "내 아트는 여기로 간다"고 말하는 것이다.
그것은 드로잉이 자기 아트에 대해 내놓는 답이다. 그 위에 나열된 art layer들은 자식들의 일이다. 프레임이 아트를 직접 지닐 때, 트리의 Details 열이 그것이 안착할 레이어([Overlay], [Colour Art]…)를 보여주므로, 하나도 선택하지 않고 백 개의 프레임을 읽을 수 있다.
Original Bitmap 모드에는 art layer가 아예 없고, Details 열은 대신 [Original Bitmap]이라고 말한다 — 거기서 레이어 이름을 대는 것은 거짓말이 된다. Original Bitmap을 보라.
Frame, Start / End, Z-Depth¶
테이블 아래의 세 필드는 컨테이너 자신의 아트에 적용된다:
| 필드 | 의미 |
|---|---|
| Frame (Start / End 포함) | 이 아트가 차지하는 노출. Start ≠ End 이면 홀드 |
| Z-Depth | 이 드로잉을 합성 순서에서 앞이나 뒤로 민다 |
| Target Layer | 어느 art layer가 그것을 받는가 |
Z-Depth는 이름에 태그로 바로 쓸 수도 있다: Z0.1, 0.5F, 10B.
트리 안의 여러 트랙¶
레이어가 트랙을 둘 이상 담으면 트리의 Details 열이 그것을 말한다:
Overlay Art [Overlay] 3 tracks
트랙이 하나면 아무것도 알리지 않는다 — 그것이 정상적인 평평한 상태다. 둘부터는 개수가 나타난다. 그러지 않으면 거기 아트가 쌓였는지 알 방법이 행을 펼치는 것뿐이기 때문이다.

