핵심 요약
- 언리얼 엔진 실행 시 셰이더 소스 해싱에 불필요하게 무거운 암호화 알고리즘인 SHA1이 쓰이고 있던 것이 발견되었습니다.
- 엔진 내부에 있던 빠른 비암호화 해시인 xxHash로 교체하자 해시 처리 CPU 시간이 12.9초에서 1.59초로 약 8배 단축되었습니다.
- 작성자가 제출한 풀 리퀘스트는 에픽게임즈의 코드 개선 작업을 거쳐 정식 수락되었습니다.
요약 한 개발자가 언리얼 엔진 에디터의 실행 속도를 프로파일링하던 중 셰이더 컴파일 과정에서 병목을 일으키던 엉뚱한 원인을 찾아내 개선한 과정을 공개했습니다.
보통 셰이더 컴파일은 에픽게임즈의 뛰어난 엔지니어들이 이미 최적화해 두었을 거라 생각해 넘기기 쉬운 영역입니다. 하지만 작성자가 고배율 프로파일러로 함수 호출 흐름을 파헤쳐 보니, 셰이더 소스 코드를 해싱하는 작업에 무려 과거 NSA가 만든 암호화 해시 알고리즘인 'SHA1'이 사용되고 있었습니다. 이미 암호학적으로 취약점이 드러난 데다 암호화 안전성 때문에 본래 연산 속도가 느린 알고리즘인데, 보안이 전혀 필요 없는 주석과 저작권 문구까지 포함된 방대한 셰이더 텍스트를 처리하는 데 그대로 쓰이고 있었던 것입니다.
작성자는 굳이 보안 해시를 쓸 이유가 없다는 판단하에 언리얼 엔진 내부에 이미 구현되어 있던 고속 비암호화 해시인 'xxHash'로 교체했습니다. 이후 언리얼의 샘플 프로젝트인 'Electric Dreams'를 열어 에디터 실행 성능을 측정한 결과, 전체 CPU 시간 기준으로 기존 SHA1 업데이트에 소요되던 12.90초가 xxHash 적용 후 1.59초로 급감해 약 8배의 속도 향상을 기록했습니다. 또한 해시 저장 크기도 기존 20바이트에서 8바이트로 줄어드는 부수적 이점도 얻었습니다.
작성자가 이 변경 사항을 에픽게임즈에 풀 리퀘스트(PR)로 제출하자 불과 며칠 만에 수락되었습니다. 에픽게임즈 리뷰어는 향후 다른 알고리즘으로의 교체가 쉽도록 구조체(FShaderHash)로 감싸고, 에디터 전용 빌드 외 일반 빌드에서 발생하던 컴파일 오류까지 다듬어 메인 브랜치 병합을 준비 중인 것으로 알려졌습니다.
Sponsored · 광고