![]() 2023-05-19 00:06
조회: 12,358
추천: 17
분석정보) 커스터마이징 시스템과 파일의 분석입니다.지난번에 올렸던 글과 더불어 오늘은 어제 만들은 프로그램의 정확성을 보완하기 위해 하루종일 커스터마이징 파일을 분석하는데에 모든 시간을 보냈습니다. 그리고 정확성 보완은 힘들것이라는 결론을 내렸습니다.
결론부터 말씀드리자면, 파일을 분석해서 커스터마이징 슬라이더값(아래 사진의 슬라이더값)을 구하고, 그값의 편차를 프로그램이나 함수를 통해서 수치상으로 바로 보여주는것은 불가능에 가깝습니다. ![]() 저는 암호학같은것을 전혀 모르기 때문에 커스터마이징 부위별로 하나씩 값을 1픽셀씩 이동하여 그에 따른 파일 코드의 변화를 관찰했습니다. 펄어비스 개발자빼고는 원리를 모를것입니다. 커마 코드의 변하는 과정에서 제가 겪은 당혹감은 아래의 불규칙한 패턴들에서 비롯되었습니다. 97 AA 99 4C D9 D1 D6 A9 DC ED F0 D3 52 03 6E E3 F6 73 77 0C DC DB 4E A4 7F 8C 60 CA 11 B5 8B 01 1C 6F 75 70 1E 61 48 7F 6F 0F 1D 6B CA 85 A6 A0 이게 각각 무슨 차이가 있는지 분석할 수 있다면 당신은 높은확률로 펄어비스 개발자입니다! (커마 슬라이더값들을 1픽셀씩 증가시켜가며 조사해서 그중에 코드가 변하는 부분만 순서대로 적은겁니다) 우선 제가 알아낸 커마 파일의 규칙중 그나마 가장 확실하다고 여겨지는 것들부터 보겠습니다. 1 - 커마 슬라이더값은 상대적이고, 불규칙성이 있다. 아래의 사진 세장은 각각 코, 눈, 이마의 기본커마상태의 슬라이더 값의 상태입니다. ![]() ![]() ![]() 보시다시피 위치를 표시하는 슬라이더의 값들이 다 다른 것을 볼 수 있는데요.. 그러나 이는 코드를 뜯어보면 " 41 EF 58 6A F7 CA 4F 0E "가 반복되는 형태로 되어 있습니다 여기서 저는 추측할 수 있었습니다. 1. 저 여덟자리의 16진법 코드(헥스코드라고 하겠습니다)는 커스터마이징에서 얼만큼의 가중치를 줄지를 의미한다고 생각합니다. 2. 1이 맞다면 8자리의 헥스코드에서 각각 xyz로 얼만큼 가중치 변환을 주냐에 대한 정보가 담겨 있을겁니다. 3. 한 커마 부위당 16자리의 헥스코드가 있으며, 처음오는 8자리와 마지막에오는 8자리 두 파트로 나뉘는 것으로 추측됩니다. 이유는, 위치, 회전값 만 변형시키게 되었을때 처음오는 8자리만 변했기 때문이고, 모종의 이유로 크기값만 건드릴 시에는 마지막 8자리가 변했기 때문입니다. 4. 3번의 이유로 위치와 회전값은 가중치를 줄때 모델링의 폴리곤이 어느방향으로 어떻게 움직일지를 나타낼 것이고, 다만 크기를 변형시키는 경우에는 모델링의 주변 폴리곤의 정렬뿐만 아니라 그 폴리곤들의 거리들이 바뀌고 그에 따라서 폴리곤을 매끄럽게 이어주는 함수들도 약간씩은 값을 보정해야 하기 때문에 8자리의 헥스코드를 따로 지정해준듯 싶습니다. 5. 위의 모든 가정이 맞다면 커스터마이징 시스템은 기본 폴리곤에 가중치를 줘서 크기, 회전, 위치등을 나타내게됩니다. 그렇기에 파일을 분석해서 슬라이더값을 유추하는것은 불가능합니다.(값 하나당 하나씩 대응되는 코드를 작성하고, 분석할때 대입하기엔 경우의 수가 몇백억가지가 나오기 때문에 코드짜는게 불가능합니다.) 6. 위의 가정이 모두 틀렸다면 슬라이더값들을 16자리 헥스(4바이트정도)에 생길 수 있는 모든 경우의 수를 무작위 바이너리 코드에 대응시키는 시스템일 수도 있습니다(바보같게도 제가 처음에 했던 생각입니다). 이경우 4바이트의 코드에서 나타낼 수 있는 모든 경우의 수는 2^64=18,446,744,073,709,551,616이며, 슬라이더는 세파트로 나뉘고 각 파트당 세개의 슬라이더가 존재하고, 이들을 대충 슬라이더당 50개의 값을 가진다고 가정을 해보면 50^9=1,953,125,000,000,000으로 가능은 합니다. 그러나 1~5번까지가 더 신빙성있다고 생각합니다. 2 - 커마 슬라이더값을 픽셀단위로 미세컨트롤 해서 바꾸는것은 해골물일 가능성이 있다. 실험을 하면서 알게된 사실이 있습니다. 각 슬라이더 값들을 제 모니터 FHD 화질 기준으로 1픽셀씩 이동시키면서 코드 의 변화과정을 보려는 것이 원래 목적이였습니다. 1,2,3 픽셀을 움직일때는 안움직이는것과 동일하게 커마파일이 저장되었습니다. 4픽셀이 되어서야 바뀌었죠. 여기서 알 수 있는 사실이 있었습니다. 1. 사실 슬라이더값들은 우리가 눈에 보이는것과 다르게 훨씬 제한적인 값들일 가능성이높다. 1,2,3픽셀씩 움직일때 제 눈으로 캐릭터의 코가 커지는것은 볼 수 있었습니다. 그러나 저장후 로드하는 과정에서 그것이 기록이 남지 않습니다. 근삿값으로 통일되는 것이라고 생각됩니다. 그말은, 약간씩 디테일이 손실될 수 있다는 것입니다. 2. 문신이나 주름같은 옵션을 보면 1~100까지의 정수가 모두 존재하는 것은 아니다. 실제로 제가 미세 컨트롤을 해서 조사한 결과 1,2,3,5,7,10,11,13....식으로 중간에 숫자가 몇개씩 빠지는 구조로 되어 있었습니다. 커마 부위 컨트롤에도 똑같이 적용되는 알고리즘인지는 모르겠습니다. 1번과2번을 토대로 결론을 내리면, 실제로 각 슬라이더당 경우의수는 많아도 60가지 일것입니다. 이경우, 각 커마 부위 옵션 n개당 {100^n- (60~80)^n}만큼의 경우의 수가 차이가 나게됩니다. 그러니깐 많은 조합가능한 커마의 갯수가 줄어드는 결과가 있을거란 주장입니다. 펄어비스가 커스터마이징 한계를 조금 완화해서 자유도를 높여야 한다는 주장의 근거로 쓰면 괜찮을 듯 한 조사결과였습니다. 3 - 커마 부위별 연결된 커마 파일 코드들을 분석해봤습니다. ![]() 이상입니다. 긴글 읽어주셔서 감사합니다.
EXP
66,713
(94%)
/ 67,001
|
인벤 공식 앱
댓글 알람 기능 장착! 최신 게임뉴스를 한 눈에 보자