ShaderCache?
변경 목록
사이트 맵
로그인
추적:
•
대문
이 문서는 읽기 전용입니다. 내용을 볼 수는 있지만, 수정할 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하십시오.
====== ShaderCache? ====== * 클라이언트나 에디터 실행시 프로그램 로드 속도를 올리기 위해 보유중인 Contents들의 shader를 compile 한 후에 이것을 저장해 두는 녀석이다. * 아래 페이지에서 개괄적인 내용을 볼 수 있으며... * [[https://udn.epicgames.com/Three/ShaderHome#Shader Caches]] * 위 문서의 짤막한 내용 중 가장 중요한 것은 아래 문장이다. * "On PC, global shaders are always read from the local shader cache only, so deleting the local shader cache will force a recompile of all global shaders" * 즉, PC 플랫폼에서는 GlobalShader가 LocalShaderCache의 내용만 읽어들인다는 것이다. * **실제로 RefShaderCache를 모두 지우고 테스트 해 보았으나, 프로그램 구동에는 아무런 문제가 없었다.** * 하지만, UDN에 따르면 이것은 구동에만 문제가 없는 것이지 바람직하진 않다고 한다. 과연??? * **RefShaderCache**와 **LocalShaderCache**에 대한 내용은 아래 페이지에 자세히 수록되어 있다. * https://udn.epicgames.com/Three/ReferenceShaderCache * 즉, RefShaderCache는 팀 단위 그룹에서의 ShaderCache의 Seed 역할을 한다고 생각하면 된다. * 다음 시나리오를 보면 이해가 쉬울 것이다. * DailyBuild 시스템이 갖추어진 머신에서 매일 RefShaderCache가 갱신되고 이것이 팀원들에게 분배된다. * RefShaderCache에 포함되지 않은, local machine의 유니크한 쉐이더들만 다시 LocalShaderCache로 컴파일되어 저장된다. * 즉, 각자의 머신에서 새로 컴파일되어야 할 녀석들이 최소화될 수 있다는 얘기다. * **하지만, 실제로 RefShaderCache 관련하여 테스트 해 본 결과는? ** * 위에서 정리한 내용은 UDN의 것을 바탕으로 한 정리이다. * 실제로 cmdlet을 이용하여 테스트 해 본 결과는 다음과 같다. * XXGame precompileheaders platform=xenon -refcache -unattend -skipmaps 로 수행을 해도 * LocalShaderCache만 생성되지 RefShaderCache는 생성되지 않았다. * 읭?! 뭐지?! ====== ShaderCache & Bootup Time ====== * 2011년 2월 4일 현재 내 개발망 PC의 간략한 spec은 다음과 같다. * Intel i5-750 @ 2.67GHz * 4GB RAM * Geforce 9800GT * 이 상황에서 ShaderCache가 제대로 되지 않을 때와 제대로 될 때의 Bootup time의 차이는 생각보다 크다. * ShaderCache가 제대로 되지 않을 때 * 클라이언트 : 70~80 secs * 에디터 : 110~130 secs * **ShaderCache가 제대로 동작할 때** * **클라이언트 : 7~8 secs** * **에디터 : 18~25 secs** ====== ShaderCache가 제대로 되지 않았던 이유 ====== * 아주 간단한 <del>두 가지</del> 이유 때문이었다. * <del>첫번째, RefShaderCache가 오래되어 LocalShaderCache로 재컴파일되어야 할 것이 많았고,</del> * 두번째, 컴파일된 쉐이더를 LocalShaderCache 파일에 저장을 해야 하는데, 이것이 퍼포스에 check-in 된 녀석이었다. * 따라서, read-only 상태였기 때문에 GetLastError=5(Access denied)가 발생했기 때문이다. * 즉, 이 파일은 **writable** 해야 한다. * 그렇지 않으면 매번 실행시마다 LocalShaderCache와 다른 부분에 대해 Shader compiling이 발생하기에, 그토록 실행시간이 길었던 것이다. ====== 정리 ====== * 올바른 ShaderCache 사용을 위해 다음 <del>두 가지</del>를 잘 지키면 된다. * <del>RefShaderCache는 daily build / distribute 되게 할 것.</del> * LocalShaderCache는 언제나 writable 속성을 보장할 것.
문서 보기
|
이전 버전
|
출력 화면