VRChat 마이너 갤러리 저장소

제 목
정보 BC7 암호화가 어려운 EU를.araboza
글쓴이
MilkTank
추천
8
댓글
37
원본 글 주소
https://gall.dcinside.com/vr/5827821
  • 2026-07-09 03:27:12


7fe8837fbd8169f03fe9e9b313d7773e1ae7a3d97337b6e9ebdc0b6b3af5025ff317907213b56e0666a4b4d8f721b72f86ada39b5884b1fa9de191a77af6d33b


지금의 ShellProtector는 VRChat 아바타 텍스쳐를 그대로 뜯어가도 정상적으로 보이지 않게 하는 도구임.


쉽게 말하면, 아바타 옷이나 피부 텍스쳐를 업로드 전에 암호화해서 망가진 그림처럼 바꿔두고, VRChat 안에서는 전용 셰이더가 비밀번호를 이용해 다시 정상 이미지처럼 보이게 하는 방식이야.


전체구조는 대충 이래.


1. 유니티에서 아바타에 ShellProtector를 붙인다.

2. 보호할 마테나 옵젝을 고른다.

3. 비번 정한다.

4. 암호화 한다.

5. 원본은 건들지 않고 암호화된 사본을 만든다.

6. 업로드하면 서버에 암호화된 텍스쳐가 올라간다.

7. 게임에서는 키를 받아 복호화한다.


쉽게 비유하면 사진 파일을 자물쇠가 걸린 퍼즐 조각으로 바꿔서 업로드하고, 게임 안에서만 맞는 열쇠로 다시 맞춰 쓰는거야.


지금 암호화는 뭘 쓰냐면

Chacha8이랑 XXTEA 두개거든?

Chacha8은 빠른 스트림 암호 계열 방식이고

XXTEA는 블록 암호 방식이야


자세히는 알 필요 없고


암호화된 텍스쳐가 런타임에서 어케 보이는지를 보자.


암호화된 텍스쳐는 그냥 보면 깨진 이미지인데, ShellProtector가 만든 쉐이더는 픽셀을 그릴때 이런 작업을 수행해.


1. 현재 픽셀 위치를 확인한다.

2. _Key0부터 _Key15까지의 키 값을 읽는다.

3. 암호화된 텍스쳐에서 데이터를 가져온다.

4. 암호화 방식으로 복호화한다.

5. 복호화된 색을 출력한다.


그래서 사용자는 정상 아바타로 보이는데, 텍만 뜯어가면 암호화된 이미지만 얻을 수 있는 거임.





그래서 DXT1/DXT5는 왜 가능하냐?


이 둘은 게임에서 흔히 쓰는 방식인데, 내부 구조가 단순해.


간단히 말하면 한 블록 안에

- 기준색 2개

- 각 픽셀이 기준 색을 어떻게 섞을지 알려주는 번호

가 들어있어


툴은 이 구조를 써서 기준 색만 암호화해서 따로 저장하고, 번호 정보는 GPU가 읽을 수 있게 남겨둬. 그러면 쉐이더가 기준 색을 복호화 한 뒤에 남은 번호를 이용해 원래 색을 다시 만드는거지.


즉, DXT는 구조가 단순해서, "일부만 암호화하고 나머지는 힌트로 사용하는 방식"이 가능해.





그래서 BC7은 왜 안되는데?


BC7도 압축 텍스쳐 형식이긴 한데, DXT보다 훨씬 복잡해.


DXT가 단순한 번호표라면, BC7은 여러 규칙이 섞인 고급 압축 방식이야.

블록마다 내부 모드가 다를 수 있고, 색 정보와 번호 정보가 고정된 위치에 있지 않아.


BC7 안에는 이런 요소가 들어가.

- 어떤 압축 모드를 쓰는지

- 색 기준점이 몇 개인지

- 영역을 몇 개로 나누는지

- 픽셀이 어느 영역에 속해있는지

- 알파 정보가 있는지

- 색 번호가 몇 비트인지

- 보정용 p-bit가 있는지


그래서 DXT처럼 "이 부분이 기준 색이니까 여기만 암호화 하자"라고 단순처리가 어려운거야.


또 중요한 문제는, 쉐이더는 보통 BC7의 원본 압축 데이터를 볼 수 없어.

GPU가 먼저 BC7을 풀고, 쉐이더에는 최종 색만 줘.

원본 압축 블록의 128비트 데이터를 보려면 별도 텍스쳐에 raw data로 저장해야해고, 쉐이더에서 BC7 해석기를 직접 만들어야해.


그러면 쉐이더가 할 일이 크게 늘지


- BC7 모드 분석

- 비트 단위 데이터 추출

- 영역 분할 계산

- 색 기준점 복원

- 픽셀별 색 보간

- 그 위에 암호화 복호화까지 실행


VRChat 쉐이더에서 이 작업은 성능과 호환성 면에서 부담이 큰거야.



















결론


BC7 지원이 어려운 이유는 암호화 알고리즘 때문이 아니라, BC7 압축 구조를 쉐이더에서 다시 해석해야하기 때문이다.


현실적으로는 DXT5로 변환해서 품질이 떨어지는걸 감안하고 쓰기나, RGBA32로 풀어서 품질은 유지하지만 용량과 메모리를 크게 늘려서 쓰거나임


진짜로 BC7 복호화 쉐이더는 구현할 수 있는데, 난이도, 성능 비용, 유지보수 비용이 커짐




Q.E.D.

ㅇㅇ1 무슨소린지모르겠어한줄로설명해줘 211.235 2026.07.09 03:28:13
멜구 2026.07.09 03:28:26
듀라니스 요약하면 전전전주딱이 무능하다는거지? 2026.07.09 03:28:27
먀먀나나 구구단이 아니라 미적분 해야해서 힘든거구나 2026.07.09 03:28:28
MilkTank 맨 밑 읽어 2026.07.09 03:28:51
MilkTank ㅠㅠ 2026.07.09 03:28:55
ㅇㅇ 짤녀때문에글내용이기억안나우으 2026.07.09 03:29:06
노그 2026.07.09 03:29:11
MilkTank BC7 지원이 가능은 한데 많이 무거워짐 2026.07.09 03:29:12
레이실 2026.07.09 03:29:12
ㅇㅇ1 QED 211.235 2026.07.09 03:29:15
한낮 3줄요약좀 2026.07.09 03:29:22
레이실 그냥 암호화 안하고 브챳 안할게요 2026.07.09 03:29:24
ㅇㅇ2 결국은 브챗이 핵을 못막아서 그런것 112.156 2026.07.09 03:29:24
MilkTank 심지어 구구단은 구구단 표가 있었는데 미적분은 계산기를 내장시켜야 하기까지 함 2026.07.09 03:29:41
MilkTank 에우 2026.07.09 03:29:47
ㅇㅇ 2026.07.09 03:29:51
MilkTank 2026.07.09 03:29:57
MilkTank 으에우ㅠ 2026.07.09 03:30:02
MilkTank 맨 밑에 해놧잔아 2026.07.09 03:30:09
MilkTank ㄹㅇ 2026.07.09 03:30:13
쓰레기쟝 듀... - dc App 2026.07.09 03:30:21
멜구 @MilkTank 일단 어려운거란걸 이해하고 개추눌렀엉 2026.07.09 03:30:55
제로콜라 그럼 나중에 나올 ntc 같은건 아예 못하겠네 - dc App 2026.07.09 03:31:01
MilkTank 혹시 구현 도움 준다고 하면 기여자 참여 가능함? 2026.07.09 03:31:11
MilkTank ㅠㅠ 2026.07.09 03:31:14
MilkTank 빡세지지 2026.07.09 03:31:17
레인 완벽히 이해했어 - dc App 2026.07.09 03:32:14
MilkTank 나이스 ㅋㅋ 근데 이해한거 맞지? 2026.07.09 03:32:29
레인 @MilkTank (모름) - dc App 2026.07.09 03:32:45
ㅇㅇ 맘대로 기여하고 풀리퀘 넣으삼 2026.07.09 03:33:26
MilkTank @ㅇㅇ ㅇㅋ 2026.07.09 03:33:55
잔물결 일단 1+1이 3이라는거까지는 이해해써! 2026.07.09 03:35:01
MilkTank ㅋㅋㅋㅋㅋㅋㅋ 2026.07.09 03:35:21
MilkTank @ㅇㅇ 지금 생각해둔게, BC7이 모드가 8개잖아. 그중에서 모드 6가 1 subset에 RGBA endpoint 2개 4비트 index 16개로 가장 단순하니까 유니티에서 원본 텍을 읽어서 직접 BC7 Mod 6 블록으로 인코딩 한 다음에 16바이트 BC7 블록 암호화한 뒤에 RGBA32 보조 텍스쳐에 저장하는거임 2026.07.09 03:38:23
MilkTank @ㅇㅇ 런타임 쉐이더는 보조 텍에 암호화된 16바이트 블록을 읽고 복호화 한 다음에 Mode 6 디코더만 실행하는거지 2026.07.09 03:38:46
MilkTank @ㅇㅇ 이러면 2K 기준으로 원본 BC7이랑 같은 볼록 저장양을 유지하는데, GPU 연산은 좀 증가할듯 2026.07.09 03:39:27
번호 분류 제목 글쓴이 날짜 추천
5829704 일반 카스 졸라게 재밌네 ㅇㅅㅇㅋ 6 Meow 2026-07-09 0
5829703 일반 시발팡팡카운트선물10개준비했다 18 실고밍 2026-07-09 0
5829702 일반 반가워요 오늘은 제 생일이에요 22 ㅇㅇ 2026-07-09 11
5829701 일반 구멍이 없는데팡팡카운터 어께함 10 파란색맛 2026-07-09 0
5829700 일반 페그오에 쓴 돈 환불해 줘 4 라뷰닌 2026-07-09 0
5829699 일반 팡팡카운터 부위별로 표시 가능함? 12 새이렌 2026-07-09 0
5829698 일반 킹녀짱기 2기가 이번분기에 나오는거였네 7 졸커땡컨 2026-07-09 0
5829697 일반 팡팡 카운터 넣어도 짤녀는 0임 3 맨홀구멍에낀쥐 2026-07-09 0
5829696 일반 이번에도 눈텍에 돈 날렸네 15 유리달빛 2026-07-09 0
5829695 일반 팡팡카운터는구매인증어케해야함?? 11 실고밍 2026-07-09 0
5829694 일반 교미카운터7자리브븡이누구임 5 보추 2026-07-09 0
5829693 일반 나의 엄청난 귀여움을 보아라 14 둥굴레차 2026-07-09 0
5829692 일반 던파랑 작혼에 쓴 돈 환불받고싶음 6 초코맛새우튀김 2026-07-09 0
5829691 일반 팡팡 카운터가 머야? 8 파란색맛 2026-07-09 0
5829690 일반 지금 먹는 저녁.. 6 막심마르친케비치 2026-07-09 0
5829689 일반 담배피는 고양이 애니말고 확 끌리는게 없는듯 3 ㅇㅇ 2026-07-09 0
5829688 일반 팡팡 카운터 못 넣겠던데 5 루루쉐 2026-07-09 0
5829687 일반 팡팡카운터가머죠 8 계섬월 2026-07-09 0
5829686 일반 새로나온 공각기동대 리메이크 봤는데 2 ㅇㅇ 2026-07-09 0
5829685 일반 역시 겜월드해야 브챗할맛난다 3 통고무 2026-07-09 0
5829684 일반 근데 팡팡카운터 라이트에 반응하는거임? 22 멈블 2026-07-09 0
5829683 일반 ㄴ 엉덩이에 팡팡카운터 있음 2 ㅇㅇ 211.36 2026-07-09 0
5829682 일반 유니티만 하는 브붕이는 머임 7 그래도살아간다 2026-07-09 0
5829681 일반 와 신작애니보다가 충격적인걸 발견함 4 무료로해줌 2026-07-09 0
5829680 일반 자짤찍엇으니 자야지 15 샤뱌 2026-07-09 0
5829679 일반 월투갈가 2 초코맛새우튀김 2026-07-09 0
5829678 일반 여름이니 수영복 넣어야하나 3 Ch5 2026-07-09 0
5829677 일반 팡팡카운터소매넣기ㅅㅂㅋㅋㅋㅋㅋ 4 닝닝즈 2026-07-09 0
5829676 일반 똥마렵네 4 강도다 2026-07-09 0
5829675 사진/영상 내가 정상위에 서겠다. 2 쯔뱅 2026-07-09 1
5829674 일반 브갤을 파괴하고 싶니? 3 ㅇㅇ 125.180 2026-07-09 0
5829673 일반 어흐 수영복.. 10 고래토리7 2026-07-09 0
5829672 일반 요즘 브챗접속하는 유일한낙 생김 3 ㅇㅇ 118.235 2026-07-09 0
5829671 일반 오늘은 잔업 안할래 2 뤂탑 2026-07-09 0
5829670 일반 밤사 2 냐하링 2026-07-09 0
5829669 일반 ㄴ 오나홀임 ㅇㅇ 211.36 2026-07-09 0
5829668 일반 사실 착한말을 해주는게 좋아요 14 롯체 2026-07-09 0
5829667 일반 6시 기상...싫어어... 2 파란색맛 2026-07-09 0
5829666 일반 ㅇㅋ 26 멈블 2026-07-09 0
5829665 일반 ㄴ 얘한테 이거 줌 8 냉채 2026-07-09 0
념글 삭제글 갤러리 랭킹