본문으로 건너뛰기

빌드 시 자동 최적화가 어떻게 동작하나

이 페이지는 설명입니다. 지금 업로드하려면 VRChat을 보세요.

한 줄 요약​

자동 최적화는 기본으로 켜져 있습니다. 여러분이 할 일은 없습니다.

업로드·빌드 복사본을 가볍게 만들고, 작업용 재질은 편집 가능한 상태로 되돌립니다.

변환 마법사가 만든 MingToon 복사본에도 이 처리는 그대로 걸립니다. 마법사 끝에 따로 켤 것은 없고, 올리는 대상은 원본이 아니라 복사본입니다.

제대로 걸렸는지 확인하기​

  1. Console의 C#·셰이더 오류를 0개로 만듭니다.
  2. StudioRaming > MingToon > Validate Project로 환경 조건을 확인합니다.
  3. 빌드 로그에서 후보 수·스왑 수·얼굴 노멀 베이크 수를 확인합니다.
  4. 프로젝트 폴더 옆 StudioRaming/MingToonOptimizeReport.txt를 엽니다.
  5. VRChat이면 본인 화면·미러·Photo Camera를 각각 확인합니다.

VRChat 프로젝트에서는 Console에 [MingToon] VRChat build hook compiled and registered. 가 세션당 한 번 나옵니다.

MingToon Manager의 가볍게 탭에서 업로드 자동 최적화 설정 카드가 보이는 화면

어디서 켜고 끄나​

MingToon Manager의 가볍게 탭 업로드 자동 최적화 설정 카드에 세 가지가 모두 있습니다.

항목기본값하는 일
빌드/업로드 시 자동 최적화 (전체 공통)켜짐이 기능 전체를 켜고 끕니다. 캐릭터 하나가 아니라 에디터 전체에 걸린 스위치라서, 여기서 끄면 다른 캐릭터의 업로드에서도 꺼집니다
플레이 모드에서도 빌드·셰이더·메시 훅 허용 (옵트인)꺼짐Play 모드에서도 빌드·셰이더·메시 처리 훅을 돌립니다
업로드 시에도 텍스처 재작성 (옵트인)꺼짐검토된 텍스처 재가공을 추가로 허용합니다

첫 번째를 끄면 아래 두 옵트인 토글은 카드에서 접힙니다. 켜야 다시 나옵니다.

시작 탭의 업로드 준비 섹션에는 같은 스위치의 현재 상태(켜짐/꺼짐)만 나오고 바꾸는 토글은 없습니다. 바꾸려면 그 옆의 가볍게 탭에서 바꾸기를 누르세요.

아바타마다 방식도 고릅니다. 이 아바타의 빌드·업로드 최적화 방식 은 가볍게 탭 맨 위 카드에 있습니다.

방식언제
FastUpload (권장)기본값입니다. 공유 셰이더를 써서 업로드 시간을 줄입니다
Legacy GPU 정밀 최적화재질마다 따로 굽는 예전 방식이 필요할 때만

손으로 하는 베이크(업로드 미리보기)의 방식은 별개로, 꾸미기 탭 경량 셰이더 베이크 (에디터 전용) 에서 고릅니다. → 수동 Bake와 복원

무슨 일이 일어나나​

  1. 출하 대상 Renderer와 AnimationClip이 참조하는 MingToon 재질을 모읍니다.
  2. 실제로 쓰는 기능과 애니메이션되는 값을 분석합니다.
  3. 고정 기능을 상수로 접은 경량 셰이더를 만들거나 캐시에서 꺼냅니다.
  4. 출하 동안만 재질의 셰이더를 경량본으로 바꿉니다.
  5. 플랫폼별 추가 처리를 실행합니다.
  6. 끝나거나 실패하거나 도메인 리로드가 나면 원래 상태로 되돌립니다.

생성 셰이더는 편집용과 같은 프로퍼티 계약을 유지합니다.

빌드 중에만 바뀌는 값은 상수로 굳히지 않습니다. 성공한 빌드는 생성 프로필과 소스 캐시를 기억해, 같은 아바타의 다음 빌드에서 재사용합니다. 캐시가 따뜻해진 뒤의 체감 차이는 씬·셰이더 캐시 환경마다 다릅니다.

서로 다른 재질은 어디까지 공유하나​

**FastUpload (권장)**의 공유 계획은 현재 빌드에 포함된 재질을 기준으로 합니다. 렌더 상태와 필요한 패스가 맞는 그룹을 만들고, 그 그룹에서 값이 같고 외부 접근에도 안전한 항목만 공통 상수로 접습니다. 서로 다른 색·텍스처·설정은 남겨 두므로 아바타마다 값이 달라도 필요한 차이를 보존합니다.

이 공유는 한 빌드에서 결정됩니다. 따로 업로드한 다른 아바타의 셰이더까지 자동으로 한 벌이 되는 뜻은 아닙니다. 이질적인 아바타 군중에서 GPU 시간·드로우 수·메모리가 얼마나 줄어드는지는 별도 실측이 필요합니다.

VRChat 아바타에서 추가되는 처리​

  • 깊이 가용성 값을 그대로 둡니다. Auto는 Auto로 출하됩니다.
  • 얼굴 노멀을 업로드 복사본 Mesh의 UV7에 굽습니다.
  • Face SDF가 UV7을 쓰는 Renderer는 같은 결과를 위해 Live 경로를 유지합니다.
  • 슬롯 종류별 텍스처 해상도 상한을, 합치거나 패킹해서 만든 출력에 적용합니다.
  • VRC Light Volumes 변형을 자동으로 켭니다.
  • 수동 베이크와 업로드 전에 마스크 입력 영수증을 미리 준비하고, 준비되지 않은 입력은 해당 마스크 최적화만 건너뜁니다.
  • MingToon 런타임 컴포넌트를 IEditorOnly로 표시합니다. 삭제는 보장되지 않습니다.

얼굴 노멀 업로드 산출물은 편집용 메시 베이크와 다른 경로를 씁니다. 편집용 Mesh를 덮어쓰지 않습니다.

애니메이션되는 값은 건드리지 않습니다​

분석기는 AnimationClip과 Animator Controller, 컴포넌트의 중첩 필드를 따라갑니다. 런타임에 켤 기능은 인스펙터의 옵트인을 켜야 상수로 접히지 않습니다.

  • FX 애니메이터로 깊이 효과 전환
  • FX 메뉴로 그림자 투영 전환
  • VRC 런타임 제어 사용

옵트인은 전환 가능성을 남기는 대신 관련 코드도 남깁니다. 실제로 바꿀 재질에만 켜세요.

VRChat 깊이 Auto 계약​

Auto는 카메라마다 깊이 텍스처와 Photo Camera 상태를 직접 읽습니다. 업로드 훅은 이 값을 다시 쓰지 않으므로 Auto는 Auto로 출하됩니다.

깊이가 필요한 아바타에는 깊이 라이트를 대신 싣습니다. 재질 값은 바꾸지 않습니다. → VRChat 깊이 라이트

미러 차단은 별개입니다. Force On이어도 미러에서는 깊이 모듈이 꺼집니다. → 깊이 효과가 어디까지 보장되나

텍스처 해상도 상한​

가볍게 탭의 텍스처 용량 줄이기 섹션에 텍스처 해상도 상한 (업로드 시) 이 있습니다. 이 설정은 프로젝트가 아니라 Unity 에디터 전체에서 공유됩니다. 씬이나 프리팹이 아니라 Editor 환경설정에 저장되므로, 같은 PC의 다른 Unity 프로젝트와 모든 캐릭터에 똑같이 적용됩니다.

베이스·노멀·맷캡·마스크처럼 슬롯 종류마다 최대 해상도를 정합니다. 제한 없음은 출력 크기를 그대로 둡니다. 원본 텍스처의 최대 해상도와 압축 임포트 설정은 바꾸지 않고, 합치거나 패킹해서 새로 만드는 메인·노멀·마스크 같은 출력에 상한을 적용합니다. 그대로 쓰이는 원본 텍스처는 이 설정으로 줄어들지 않습니다. 빌드·업로드 중의 자동 처리는 위 빌드/업로드 시 자동 최적화 (전체 공통) 이 켜져 있을 때만 걸립니다.

텍스처 재작성 옵트인​

업로드 시에도 텍스처 재작성 (옵트인) 은 기본 꺼짐입니다. 켜면 표면·노멀 평탄화와 검토된 마스크 재패킹을 허용합니다.

켰다면 전후를 눈으로 비교하세요

읽기, 색 공간, mip, 플랫폼 압축 때문에 픽셀이 달라질 수 있습니다.

이 옵션이 꺼져 있어도 수학적으로 손실 없는 중복 제거는 계속 적용됩니다.

그래서 생기는 제약​

복구 가능한 실패는 격리하고 치명적 실패는 빌드를 멈춥니다​

재질 하나의 분석 실패처럼 복구 가능한 오류는 그 재질만 편집용으로 되돌리고 경고를 남깁니다. 결과 정합성을 보장할 수 없는 오류는 빌드를 중단합니다.

저장은 MingToon이 바꾼 에셋에만 적용합니다. 관련 없는 에셋을 함께 저장하지 않습니다.

에디터가 빌드 도중 종료됐다면​

셰이더 스왑과 텍스처 재작성은 디스크 저널에 남습니다. 다음 도메인 리로드에서 자동으로 복구하며, 그래도 안 되면 Console의 항목별 실패를 확인하세요.

남은 복구 저널은 아래 메뉴로 버립니다.

StudioRaming > MingToon > Advanced > Discard Pending Generated Shader Recovery Journal

이 명령은 복구 정보만 버립니다

중단된 베이크가 남긴 생성 셰이더는 되돌리지 않습니다. 다음 베이크가 다시 만듭니다.

언제 수동 Bake가 필요한가​

상황자동 최적화수동 Bake
VRChat 업로드충분합니다필요 없습니다
WARUDO 모드 빌드충분합니다필요 없습니다
baked 재질 에셋을 직접 전달안 됩니다필요합니다
씬에서 결과를 비교하며 승인안 됩니다필요합니다

플랫폼별 진입점​

플랫폼진입점
VRChat 아바타VRC SDK 빌드 콜백
WARUDO 모드UMod 빌드 프로세서
일반 PlayerUnity 빌드 전처리 콜백

VRChat에서는 작업이 여러 단계로 나뉩니다. MA(Modular Avatar) 전에 빌드 복사본의 입력 소유권을 분리하고, MA가 생성한 결과를 받은 뒤 AAO(Avatar Optimizer) 전에 메시·텍스처를 물리적으로 준비합니다. 최종 변형이 끝난 뒤 애니메이션 의존성과 셰이더를 분석합니다.

따라서 모든 전처리가 MA 전에 끝나는 것은 아닙니다. 준비 결과는 빌드 복사본에 남으며 작업용 메시·재질을 덮어쓰지 않습니다.

관련 페이지​

  • 생성 셰이더 캐시 정리: 가볍게 탭 만들어진 임시 파일 정리 또는 StudioRaming > MingToon > Advanced > Clean Build Optimization Output
  • 마법사로 복사본 만들기: 변환 마법사
  • 고정 배포 에셋: 수동 Bake와 복원
  • 플랫폼 체크리스트: VRChat · Warudo
  • 오류가 있으면: 문제 해결