본문으로 건너뛰기

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

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

한 줄 요약​

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

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

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

  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. 가 세션당 한 번 나옵니다.

밍툰 매니저의 최적화 탭에서 업로드 자동 최적화 설정 그룹이 보이는 화면

어디서 켜고 끄나​

밍툰 매니저 최적화 탭의 업로드 자동 최적화 설정 에 세 가지가 모두 있습니다. 맨 위 토글은 시작하기 탭 4. 빌드 · 업로드 자동처리 에도 나옵니다.

항목기본값하는 일
빌드/업로드 시 자동 최적화 (전체 공통)켜짐이 기능 전체를 켜고 끕니다. 에디터 환경 전체에 적용됩니다
플레이 모드에서도 빌드·셰이더·메시 훅 허용 (옵트인)꺼짐Play 빌드 복사본에서도 훅을 돌립니다
업로드 시에도 텍스처 재작성 (옵트인)꺼짐검토된 텍스처 재가공을 추가로 허용합니다

아바타마다 방식도 고릅니다. 이 아바타의 빌드·업로드 최적화 방식 이 두 탭 모두에 있습니다.

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

무슨 일이 일어나나​

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

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

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

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이어도 미러에서는 깊이 모듈이 꺼집니다. → 깊이 효과가 어디까지 보장되나

텍스처 해상도 상한​

텍스처 해상도 상한 (업로드 시) 는 프로젝트 전체 설정입니다. 씬이나 프리팹이 아니라 Editor 환경설정에 저장되고, 이 프로젝트의 모든 캐릭터에 적용됩니다.

베이스·노멀·맷캡·마스크처럼 슬롯 종류마다 최대 해상도를 정합니다. 업로드 복사본만 줄이고 원본 파일과 임포트 설정은 바꾸지 않습니다.

텍스처 재작성 옵트인​

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

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

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

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

그래서 생기는 제약​

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

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

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

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

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

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

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

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

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

언제 수동 Bake가 필요한가​

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

플랫폼별 진입점​

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

VRChat 훅은 늦게 실행됩니다. Modular Avatar나 VRCFury가 재질을 처리한 뒤의 최종 상태를 분석합니다.

관련 페이지​