다양한 피부색을 생성하는 간단한 알고리듬과 색 공간
요약
캐릭터 생성 및 디지털 아트를 위해 TUV 색 공간과 구면 방정식을 활용하여 포괄적인 피부색을 생성하는 알고리즘을 제안합니다. RGB 색상을 PCA로 분석하여 명도, 홍조, 온도를 조절하는 매개변수로 변환하며, 기술적 구현과 사회적 포용성을 동시에 다룹니다.
핵심 포인트
- TUV 색 공간을 통해 피부색의 밝기, 홍조, 온도를 직관적으로 조절 가능
- PCA와 구면 방정식을 활용하여 RGB에서 피부색 범위를 효율적으로 근사
- R² 매개변수로 생성 범위의 현실성과 다양성을 조절
- 디지털 도구 내 피부색 표현의 사회적 맥락과 포용성 중요성 강조
- 캐릭터 생성기와 디지털 아트에서 포괄적인 피부색을 쉽게 선택·생성할 수 있도록, RGB의 그럴듯한 피부색 범위를
TUV 색 공간과 구면 방정식으로 근사함 - RGB 색상을 수작업으로 분류한 뒤
**주성분 분석(PCA)**으로 축을 정렬하고, 구가 데이터 형태에 맞도록 함수를 육안으로 조정해 RGB↔XYZ↔TUV 변환식을 만듦 - T·U·V는 각각
짙음/옅음, 홍조/황토색, 차가움/따뜻함을 조절하며, HSL·HSV의 명도·색조·채도와 비슷해 보여도 정확히 일치하지 않음 - 단일 매개변수
R²로 생성 범위를 조절함. 1.5는 현실성을 유지하며 폭넓게 변하고, 2.0은 간헐적인 이상치가 섞일 수 있으며, 2.5는 사용자가 직접 색을 고르는 선택기 UI에 유용함 - 피부색은 신체 부위·조명·디스플레이·생물학적 조건에 따라 달라지고 데이터 분류와 함수 적합도 주관적이므로, 이 결과는 단순화된 인물 표현을 위한
출발점이지 권위 있는 기준이 아님
포괄적인 피부색 범위가 필요한 이유
-
제한된 팔레트는 많은 사람이 자신을 정확히 표현하지 못하게 하거나 의도치 않게 배제할 수 있음
-
이모지는 만화풍 노란색 외에 5개 색조를 제공하고, 화장품 브랜드는 약 50개를 제안할 수 있으며, 캐릭터 생성기는 RGB의 16,777,216개 색을 모두 열어두기도 함
-
현실의 한 사람도 단일 색으로 환원되지 않지만, 디지털 도구에는 수백만 개보다 작고 몇 개보다 넓은 실용적 범위가 필요함
-
목표는 RGB에서 피부색으로 볼 수 있는 가장 폭넓은 범위를
간단한 방정식으로 정의해 캐릭터 생성기, 디지털 아트, 절차적 생성에 활용하는 것임 - 방정식은 의도적으로 “충분히 좋은” 수준을 지향하며, 결과를 정확하거나 권위 있는 피부색 체계로 취급해서는 안 됨 -
디지털 아트의 피부색 차트나 게임의 일반 색상 선택기보다 처음부터 더 나은 후보를 제공하는 도구를 지향함
단일 RGB 값으로 표현할 때의 한계
-
실제 피부색은 하나의 RGB 값보다 훨씬 복잡하며 신체 부위마다 다르고 여러
생물학적 과정의 영향을 받음- 혈류와 멜라닌 농도, 피부층을 통과하는 빛의 복잡한 산란이 지각되는 색을 바꿈 -
백반증, 주근깨, 과다색소침착, 흉터 등 흔한 변이도 단일 기본색으로 표현할 수 없음
-
건강 상태에 따라 일반적인 피부색 범위 밖의 색이 나타날 수 있음
-
은피증(argyria)은 피부를 청회색으로 만들 수 있음
-
높은 빌리루빈 수치는 피부를 노란색이나 녹색에 가깝게 만들 수 있음
-
색상 분류와 함수 조정은 한 개인의
주관적 시각 판단에 의존하며, 전문 연구자가 수행한 연구가 아님 - 같은 RGB 값도 디스플레이와 관찰 환경마다 다르게 보이고, 사람의 피부 역시 조명에 따라 크게 달라짐 -
따라서 주된 적용 대상은 사람을 단순화해 생성하거나 묘사하는 용도이며, 다른 맥락에서는 이러한 제약이 더 큰 문제가 될 수 있음
피부색 표현을 둘러싼 사회적 맥락
- 기술은 사회적 맥락과 분리되지 않으며, 밝은 피부색은 역사적으로나 현재에도 우선시된 반면 어두운 피부색은 소외되고 부정적으로 취급돼 왔음
- 인종차별과
**색조차별(colorism)**은 여러 문화에서 노골적이거나 미묘한 형태로 구조적으로 나타남 -
피부색 표현과 화장품 산업
-
Nyma Tang의 The Darkest Shade는 여러 화장품 브랜드의 가장 어두운 색조를 검토함
-
Kat Blaque의 Youthforia's Blackface Foundation은 실제로 유용한 피부색보다 훨씬 어두운 검은색 파운데이션을 출시한 사례를 다룸
-
Vox의 How beauty brands failed women of color은 미용 산업의 차별 역사와 어두운 색조 제품의 제한된 가용성을 다룸
게임과 시각 기록
-
Austin Walker의 Me, On The Screen: Race in Animal Crossing: New Leaf는 게임에서 자신과 닮은 모습을 찾기 어려웠던 경험과 유사한 캐릭터가 인종차별적 전형에 갇히는 문제를 다룸
-
Angélica Dass의 Humanae는 인종에 붙은 백·적·흑·황이라는 라벨 대신 Pantone 색조로 인류의 실제 피부색을 기록하는 사진 프로젝트임
개념과 표현
- Tee Noir의 It's not a Coincidence. It's Colorism.은 색조차별의 정의와 현대 대중문화에서 나타나는 방식을 다룸
- Writing With Color는 다양한 배경의 인물을 글로 표현하는 자료와 독자 질문을 제공함
- Words for Skin Tone | How to Describe Skin Color는 피부색을 묘사하는 단어 선택을 다룸
RGB 데이터 수작업 분류
-
첫 단계는 RGB 색상을 보고 그럴듯한 피부색인지
수작업으로 라벨링하는 작업임 - 전용 웹 UI에서 색을 입힌 얼굴을 예와 아니요 영역 사이로 옮기며 많은 색을 분류함 -
처음에는 단순한 색상 사각형을 사용했으나, 얼굴에 색을 적용하자 실제 사람을 상상하며 더 빠르게 판단할 수 있었음
-
분류한 데이터를 그래프로 그리면
(0, 0, 0)
과(255, 255, 255)
사이를 휘는바나나 형태가 나타남- 곡선은 빨간색 방향에 더 가깝고 파란색에서는 멀어짐
- 볼록 껍질, 회귀, 4차 다항식 등을 시도했으나 다루기 쉬운 식을 얻지 못해 데이터 형태 자체를 변환하는 PCA를 선택함
PCA로 좌표축 정렬
**주성분 분석(PCA)**은 데이터의 주요 변화 방향이 좌표축을 따르도록 데이터 집합을 회전하고 늘리는 방법임- 공간에 떠 있던 바나나 형태의 RGB 데이터를 바닥에 놓은 것처럼 축에 맞추고 대칭적으로 정렬함
-
약간의 확대·축소도 적용되지만 핵심은 데이터 방향을 축에 맞추는 데 있음
-
PCA는 변환된 데이터뿐 아니라 RGB 점을 새 공간으로 옮기는
변환 행렬도 산출함 - 이 변환 결과를 PCA 공간 또는 변수 이름을 따른 XYZ 공간이라고 부름
구면 방정식을 데이터에 맞추는 과정
- 전체 절차는
데이터 라벨링 → PCA → 구면 방정식 적합
으로 구성됨 - XYZ 공간의 조밀한 점 집합은 표면을 식으로 정의한 뒤 등식을 부등식으로 바꾸면 내부까지 포함할 수 있음
- 예를 들어
x² + y² + z² = 2
를x² + y² + z² ≤ 2
로 바꾸는 방식임
- 예를 들어
함수 적합 단계
R² = t² + u² + v²
인 구에서 시작함t
,u
,v
를x
,y
,z
의 함수로 정의함- 구가 목표 데이터 형태에 맞게 늘어나도록 세 관계식을 수정함
- 관계를 역산해
x
,y
,z
를t
,u
,v
의 함수로 만듦
- Desmos 3D에서 함수가 데이터 구름에 맞을 때까지
추측·검사와 육안 판단을 반복했으며 회귀는 사용하지 않음 - PCA가 RGB↔XYZ 변환을, 수동 방정식이 XYZ↔TUV 변환을 제공하므로 두 변환을 연결해 TUV↔RGB 함수를 얻음 - 더 좋은 학습 데이터와 기호 회귀를 이용한 엄밀한 방법이 바람직하지만, 수작업 데이터의 품질이 제한적이어서 직접 조정하는 방식을 선택함
TUV 선택기의 세 축
- 일반 색상 선택기의 RGB 또는 색조·채도·명도처럼 TUV 선택기도 세 개의 독립 값을 조절함
| 선택기 조작 | 조절되는 특성 | 변수 |
|---|---|---|
| 사각형 위·아래 | 짙음·옅음 | T |
| 사각형 왼쪽·오른쪽 | 홍조·황토색 | U |
| 슬라이더 왼쪽·오른쪽 | 차가움·따뜻함 | V |
- 각 축의 의미는 미리 정한 분류가 아니라
PCA 결과에서 나타남. 데이터의 의미 있는 변화가 각 축에 최대한 배치된 결과임 - T와 U는 HSL·HSV의 명도와 색조처럼 보이지만 정확히 일치하지 않음 - 가장 큰 차이는 V와 채도 사이에 있음
- V는 파란색에서 주황색 방향으로 변함
- 채도는 회색에서 주황색 방향에 더 가까움
- 일부
(T, U)
값에서는 비슷해 보여도 전체적인 상관관계는 일치하지 않음
R²로 다양성과 현실성 조절
R²는 TUV 피부색 공간에서 사용하는 구의 반지름 매개변수로, 하나의 값만으로 샘플링 범위를 조절함
| R² | 생성 범위 |
|---|---|
| 0.1 | 거의 변화가 없음 |
| 0.5 | 작은 변화만 있음 |
| 1.0 | 무작위 선택에서 적당한 다양성을 얻기 위한 최소값 |
| 1.5 | 현실성을 유지하면서 좋은 다양성을 제공함 |
| 2.0 | 만화처럼 보일 수 있고 무작위 생성에서 가끔 이상치가 나옴 |
| 2.5 | 예상 밖의 값이 나올 수 있지만 선택기 UI에는 유용함 |
| 10 | 판타지 설정에 사용할 만한 범위임 |
- 샘플 생성 함수는
R² = 2
를 기본값으로 사용하며, 색 공간 개발 과정에서도 이 범위로 폭넓은 피부색을 생성함 - 그럴듯하지 않은 결과가 많다면 값을 낮춰 변화 폭을 줄일 수 있음
- 구가 반지름 전체를 따라 균일하게 축소되므로 R²를 낮춰도 짙거나 옅은 피부색만 잘려 나가지 않음
- 짙음·옅음, 홍조·황토색, 차가움·따뜻함의 변화 폭이 함께 줄어듦
R² = 0
인 원점은 중립적이고 모호한 피부색이어야 하며, 특정 방향으로 치우치면 공간 매핑에편향이 있어 추가 조정이 필요함- 사용자가 부적절한 색을 무시할 수 있는 선택기에서는 R²를 높일 수 있지만, 자동 생성에서는 이상치를 피하도록 더 낮은 값이 필요할 수 있음
- 모든 맥락에 맞는 하나의 이상적인 값은 없지만, 단일 매개변수만 조정하면 용도별 범위를 쉽게 바꿀 수 있음
선택기와 절차적 생성 구현
- 페이지는 JavaScript 기반 사용자 정의 선택기와 Python 절차적 생성 예제를 제공하며, JavaScript 구현은 페이지 소스에 포함됨
- 두 가지
select_point
예제가 구 내부의 점을 균일하게 선택함- 하나는 구면 좌표와 난수를 이용해 점을 직접 계산함
-
다른 하나는 정육면체에서 점을 뽑고 구 밖의 점을 버리는
거부 샘플링을 사용함 -
선택된
(t, u, v)
를to_rgb
에 전달하면 TUV→XYZ 관계와 PCA 기반 선형 변환을 거쳐 정수 RGB 값이 반환됨 - 결과물에는 색 공간, 선택기, 절차적 생성 알고리듬뿐 아니라 기존 공간을 수정하거나 새 공간을 만드는 방법도 포함됨
데이터와 방정식을 개선하는 방법
-
현재 공간을 구체적인 방정식과 R² 값으로 고정하면 일부 색을 배제하거나 소외시킬 위험이 있음
-
반대로 정밀한 정의가 있으므로 어떤 영역이 부족한지 구체적으로 비판하고
정확히 개선할 수도 있음- 여러 사람이나 전문가가 데이터를 라벨링하고 결과를 더 정밀하게 측정하는 방식이 가능함 -
기본 피부색에 변형을 적용해 황달, 은피증, 창백함을 단순화해 모델링할 수 있음
-
주근깨, 백반증, 흉터, 과다색소침착, 튼살이 기본색과 어떤 관계를 갖는지도 탐구 대상임
-
수동으로 찾은 방정식 형태에 더 좋은 학습 데이터와
기호 회귀를 적용하면 색 공간 정의를 개선할 수 있음 - 현재 방정식은 폭넓은 독자가 읽기 쉽도록 작성됐지만, 일부 단계는 행렬 곱셈으로 다시 써 특정 환경에서 최적화할 수 있음 -
PCA와 방정식 적합 전에 데이터를 다른 색 공간으로 변환하면 더 단순하거나 대표성 높은 식을 얻을 가능성이 있음
-
구를 사용하므로 기반 색 공간의 표면 형태가 유지되고 주로 R²에 따라 크기가 조절됨
-
이 접근의 예시는 저장소의 graph.py에서 확인할 수 있음
-
코드를 정리해 프로젝트 저장소에 공개하고 재현과 반복 개선을 쉽게 만들 계획이며, 피드백은 이슈 페이지에서 받음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기