LUT Cycler — 설명서
최초 작성: 2026-04-06 대상 버전: Unity URP (Universal Render Pipeline)
개요
Volume의 Color Lookup (LUT) 텍스처를 빠르게 탐색·비교·즐겨찾기 할 수 있는 에디터 도구 및 런타임 컴포넌트 세트.
- 에디터 모드: LUT Browser 윈도우에서 썸네일 클릭으로 즉시 Volume에 적용
- 플레이 모드: 스크롤 휠(또는 방향키)로 LUT 순환
- 즐겨찾기: 마음에 드는 LUT를 ★ 표시로 저장, 필터링
폴더 구조
Assets/YAMO/LutCycler/
├── LUTs/ ← LUT 텍스처 파일을 여기에 배치
├── Prefabs/
│ ├── LUT Controller.prefab ← 씬에 드롭해서 사용하는 프리팹
│ └── LUT_Profile.asset ← Volume이 참조하는 VolumeProfile
├── Scripts/
│ └── LutCycler.cs ← 런타임 컴포넌트
└── Editor/
└── LutBrowserWindow.cs ← 에디터 전용 창
의존성 및 환경 요건
| 항목 | 내용 |
|---|---|
| 렌더 파이프라인 | URP (Universal Render Pipeline) |
| Input System | New Input System 패키지 필요 (UnityEngine.InputSystem) |
| Unity 최소 버전 | 2021.x 이상 권장 |
| 네임스페이스 | YAMO.LutCycler (런타임), YAMO.LutCycler.Editor (에디터) |
주의: Input System 패키지가 설치되어 있지 않으면 런타임에서
InvalidOperationException이 발생한다. Package Manager →Input System설치 후 Player Settings의 Active Input Handling을Input System Package (New)또는Both로 설정할 것.
파일별 설계 및 역할
Scripts/LutCycler.cs
런타임 MonoBehaviour. Volume 컴포넌트와 함께 동작한다.
인스펙터 필드
| 필드 | 설명 |
|---|---|
lutTextures |
순환할 LUT 텍스처 목록 |
currentIndex |
현재 적용 중인 인덱스 (읽기 참고용) |
favorites |
즐겨찾기한 텍스처 목록 |
useScrollWheel |
스크롤 휠로 순환 (기본 ON) |
useArrowKeys |
좌우 방향키로 순환 (기본 OFF) |
주요 공개 메서드
| 메서드 | 설명 |
|---|---|
CycleNext() |
다음 LUT로 이동 |
CyclePrevious() |
이전 LUT로 이동 |
ApplyAt(int index) |
특정 인덱스의 LUT 적용 |
ApplyCurrent() |
현재 인덱스 LUT를 Volume에 강제 반영 |
ToggleFavorite(Texture2D) |
즐겨찾기 추가/제거 토글 |
IsFavorite(Texture2D) |
즐겨찾기 여부 반환 |
GetCurrentTexture() |
현재 LUT 텍스처 반환 |
GetCurrentIndex() |
현재 인덱스 반환 |
컨텍스트 메뉴 (인스펙터 우클릭)
Load LUTs from Folder—Assets/YAMO/LutCycler/LUTs폴더에서 텍스처 자동 로드Clear Favorites— 즐겨찾기 전체 초기화
내부 동작 흐름
Awake → Volume에서 ColorLookup 참조 획득
Start → ApplyCurrent() 호출 (0번 LUT 적용)
Update → 입력 감지 → CycleNext / CyclePrevious
→ ApplyCurrent() → EnsureColorLookup() → ColorLookup.texture.value 갱신
Input System 분기 처리
#if ENABLE_INPUT_SYSTEM 컴파일 심볼로 New/Old Input System을 자동 분기.
New Input System 사용 시 Mouse.current.scroll, Keyboard.current API를 사용.
Editor/LutBrowserWindow.cs
에디터 전용 EditorWindow. 메뉴 YAMO 아래에 등록된다.
메뉴 항목
| 메뉴 | 동작 |
|---|---|
YAMO/LUT Browser |
LUT Browser 윈도우 열기 |
YAMO/Create LUT Controller |
씬에 LUT Controller GameObject 생성 및 프리팹 저장 |
Create LUT Controller 동작 순서
Prefabs/LUT_Profile.asset이 없으면 새로 생성 (ColorLookup Override 포함)- 씬에
LUT ControllerGameObject 생성 Volume컴포넌트 추가 (isGlobal = true, profile = LUT_Profile)LutCycler컴포넌트 추가 후LoadFromFolder()호출Prefabs/LUT Controller.prefab으로 저장
LUT Browser 윈도우 구성
[ ↻ Refresh ] [ 크기 슬라이더 ] [ ★ 즐겨찾기만 ] [ 검색창 ] ← 툴바
[ 현재 LUT 이름 | 전체 N개 | ★ M개 ] ← 상태바
┌──────┐ ┌──────┐ ┌──────┐ ← 썸네일 그리드
│ 썸네일 │ │ 썸네일 │ │ 썸네일 │ (창 너비에 따라 열 수 자동 계산)
│ 이름 ☆│ │ 이름 ★│ │ 이름 ☆│
└──────┘ └──────┘ └──────┘
썸네일 카드 동작
- 썸네일 클릭 →
ApplyLutToScene()호출- 플레이 모드:
LutCycler.ApplyAt()경유 - 에디터 모드:
VolumeProfile에 직접Undo기록 후 적용
- 플레이 모드:
☆/★버튼 클릭 →LutCycler.ToggleFavorite()호출- 현재 적용 중인 LUT는 파란 테두리로 강조
- 즐겨찾기 LUT는 썸네일 좌상단에
★오버레이
씬에 LutCycler가 없을 경우
상태바에 경고 표시. 썸네일 클릭 시 씬의 첫 번째 Volume에 직접 적용. 즐겨찾기 기능은 동작하지 않음.
사용 방법
초기 세팅
Assets/YAMO/LutCycler/LUTs/폴더에 LUT 텍스처 파일 복사- 유니티 메뉴 YAMO → Create LUT Controller 실행
- 씬에
LUT Controller오브젝트가 생성되고 프리팹으로 저장됨 - LUTs 폴더의 텍스처가 자동으로
lutTextures리스트에 등록됨
- 씬에
- 메뉴 YAMO → LUT Browser 로 브라우저 창 열기
LUT 탐색 (에디터 모드)
- 브라우저 창에서 썸네일 클릭 → 씬 뷰에 즉시 반영
↻ Refresh→ LUTs 폴더 재스캔- 검색창에 이름 입력 → 필터링
- 크기 슬라이더로 썸네일 크기 조절
LUT 순환 (플레이 모드)
- 스크롤 휠 위/아래로 다음/이전 LUT 전환
- 인스펙터에서
Use Arrow Keys체크 시 좌우 방향키도 사용 가능 - 현재 인덱스는 인스펙터
Current Index필드에서 확인
즐겨찾기
- 브라우저 창의
☆버튼 클릭으로 즐겨찾기 등록/해제 ★ 즐겨찾기만토글로 즐겨찾기 LUT만 표시- 즐겨찾기 목록은
LutCycler컴포넌트의Favorites리스트에 저장됨 (프리팹에 직렬화) - 인스펙터 우클릭 →
Clear Favorites로 전체 초기화
LUT 텍스처 추가
Assets/YAMO/LutCycler/LUTs/에 파일 복사- 브라우저 창에서
↻ Refresh클릭 (브라우저 목록 갱신) - LutCycler 인스펙터 우클릭 →
Load LUTs from Folder(런타임 순환 목록 갱신)
유지보수 메모
- LUT 폴더 경로를 변경하려면
LutCycler.cs의LoadFromFolder()상수와LutBrowserWindow.cs의LUT_FOLDER상수를 함께 수정할 것. - 즐겨찾기 데이터는
LutCycler컴포넌트에 직렬화된다. 프리팹을 삭제하면 즐겨찾기가 초기화되므로 주의. VolumeProfile(LUT_Profile.asset)은Create LUT Controller실행 시 자동 생성된다. 이미 존재하면 재사용한다.EditorStyles.toolbarLabel은 Unity에 존재하지 않는 스타일 —EditorStyles.miniLabel을 사용할 것.