게임즐기기/Civil FLT━

[P3D] Radeon HD6800 시리즈 그래픽카드의 Prepar3D 쉐이더 로딩 문제

반쪽날개 2015. 12. 15. 20:25

 

 

홍스다님이 제작하신 높은 퀄리티의 김포/김해공항 덕분에 좀 더 미려한 디테일의 국내공항을 구경하며 비행하는 재미가 쏠쏠합니다.

 

이 시너리는 FS2004와 FSX 용으로 제작되었고 FSX 용 시너리의 경우 Prepar3D에서도 사용할 수 있어,

Prepar3D용 국내 시너리를 별도로 구하거나 제작하지 않아도 됩니다.

 

 

 

 

 

하지만 얼마 전에 김포공항 PAPI light 및 ALS (활주로 접근등) 미표시 문제가 이슈화되었는데,

이 문제는 가장 최근에 발표된 FSX 용 김포공항 시너리 v1.11에 한정된 것으로,

AFCAD에 ALS 및 PAPI light가 설정되지 않아 발생한 문제였고 이는 ADE를 통해 간단하게 수정할 수 있습니다.

 

 

 

 

 

이번 이슈(?)를 놓고 wave 님과 이야기하는 도중, 우연히 유도로 외곽 등화 및 주기장 조명 이펙트에 대한 주제로 넘어가게 되었는데,

wave 님의 Prepar3D v3와 저의 Prepar3D v3에 이펙트가 서로 다르게 표시된다는 것을 알게 되었고,

그 원인과 해결 방법을 찾아내기 위해 다양한 테스트를 하게 됩니다.

 

 

그 과정을 설명드리기 전에, 홍스다님의 김포/김해공항 시너리는 별도의 인스톨러를 이용해 시너리를 설치하는 방식으로,

애드온 시너리 설치에 익숙지 않은 유저분들도 클릭 몇 번만으로 손쉽게 설치할 수 있습니다.

 

하지만 FS 경로가 레지스트리에 등록되어있지 않거나, FS를 설치하지 않은 상태에서 Prepar3D만 설치한 경우,

이펙트 파일은 지정한 위치가 아닌 FS 기본 설치 경로인 'C:\Program files\Microsoft Games\Microsoft Flight Simulator X' 에 설치됩니다.

 

제 경우, FSX는 설치하지 않고 F드라이브에 P3D만 설치해놓았는데, 홍스다님의 시너리를 설치하면 이펙트만 C드라이브에 들어가 있는 것을 확인할 수 있었고,

엉뚱한 위치에 설치된 이펙트를 P3D가 설치된 폴더로 다시 옮겨주어야 했습니다.

이런 식으로, FSX를 설치하지 않은 상태에서 P3D만 설치한 후 김포/김해공항 시너리를 설치하는 경우 이펙트가 정상적으로 표시되지 않을 수 있습니다.

 

 

그럼 여기서 퀴즈입니다.

앞서 말씀드린 작업을 통해 정상 경로에 이펙트를 모두 넣었음에도, 유도로 외곽 등화 및 주기장 조명이 나오지 않는다면 무엇이 잘못된 것일까요?

 

분명 제 위치에 이펙트 파일을 모두 넣었음에도 P3D에서 해당 이펙트가 보이지 않길래

단지 시너리에 포함된 이펙트가 P3D를 지원하지 않아 발생하는 문제인줄 알고 대수롭지 않게 넘겼지만,

wave 님의 P3D에서는 정상적으로 표시되는걸 본 뒤부터는 뭔가 심상치 않은 문제가 있다는 것을 알게 되었습니다.

 

 

먼저 이펙트가 표시되지 않는 문제를 파악하기 위해 시도해본 방법은 다음과 같습니다.

Prepar3D 재설치(...)

김포/김해공항 시너리 재설치

일부 오브젝트를 Prepar3D용 SDK로 다시 컴파일

 

 

 

 

 

이런저런 시도를 해보았지만 결과는 마찬가지였고, 혹시나 해서 Prepar3D 오류 리포트 파일을 열어보았는데 뭔가 수상한 메시지를 발견하게 됩니다.

 

error=Shader cache failed to compile or create shader.

   source-file: F:\Flight Simulator\Prepar3D v3\ShadersHLSL\ParticleCS.fx

   cache-file: C:\Users\halfwing\AppData\Local\Lockheed Martin\Prepar3D v3\Shaders\

   v3010_sm110_ParticleCS.fx_CSBitonicSortInitialPass_0000000027000000_0050000000000009.cso

 

쉐이더 로딩... 그중에서 ParticlesCS.fx 파일을 제대로 로드하지 못했다는 문구를 보았는데,

ParticlesCS.fx는 특수효과.. 즉 이펙트를 제작하거나 로드할 때 사용하는 SDK 파일 중 하나입니다.

 

이 파일을 불러오는데 문제가 생겼으니 이펙트 파일이 로드되지 않는건 당연한 일일테고,

해당 파일을 SDK에 들어있는 파일로 교체해주었음에도 문제가 해결되지 않아 결국 그래픽카드를 교체해보기로 합니다.

 

총 세 개의 그래픽카드를 이용해 테스트 해보았고, 그래픽카드 종류는 다음과 같습니다.

Radeon HD5870 D5 1G

Radeon HD6850 D5 1G

GeForce GTX460 D5 1G

 

그래픽카드를 바꿔가며 테스트 해본 결과 전혀 예상치 못 했던 광경을 보게 되었으니...

아래 스크린샷을 한번 보시지요.

 

 

 

 

 

Radeon HD6850

김포공항

 

 

 

 

 

Radeon HD6850

김해공항

 

위 스크린샷은, Radeon HD6850을 장착한 후 P3D에서 김포공항과 김해공항을 로드한 것입니다.

활주로 등화는 기본 이펙트인 만큼 잘 나오지만, 커스텀 이펙트인 유도로 외곽 등화와 주기장 조명은 전혀 표현되지 않음을 확인할 수 있습니다.

 

 

 

 

 

Radeon HD5870 / GeForce GTX460

김포공항

 

 

 

 

 

Radeon HD5870 / GeForce GTX460

김해공항

 

Radeon HD5870과 GeForce GTX460을 장착한 후에는, 별다른 작업을 해주지 않았음에도 유도로 외곽 등화 및 주기장 조명이 정상적으로 표시됨을 확인하였습니다.

단지 그래픽카드만 바꿨을 뿐인데 이펙트가 표시됐다 안됐다 하는걸 보니 이럴 수도 있는 건가 하는 생각이 들더랍니다.

 

 

 

 

 

서로 다른 그래픽카드를 설치한 후 ContentErrorLog.txt 에 기록된 내용을 불러와 보았습니다.

 

위쪽은 Radeon HD5870 및 GeForce GTX460 을 장착했을 때의 오류 메시지이고

아래쪽은 Radeon HD6850 을 장착했을 때의 오류 메시지입니다.

 

PMDG777 관련 오류 메시지는 Panel.cfg에 달아놓은 주석을 말하는듯 싶은데 딱히 큰 문제는 아니니 신경쓰지 않아도 되고,

error.1의 Shader cache failed to compile or create shader. 라는 오류는 HD6850에서만 발생하는 걸로 볼 때,

이펙트가 표시되지 않는 문제는 결국 쉐이더 로딩이 원인이지 않을까 하는 결론을 낼 수 있었습니다.

 

 

실제로, 이 문제의 원인을 찾기 위해 해외 포럼을 돌아다녀본 결과,

HD6800 시리즈에서 이런 쉐이더 오류 문제가 발생한다는 P3D 유저들의 글들을 접할 수 있었고,

쉐이더 오류가 발생하지만 딱히 비행하는데 지장 없으니 그냥 무시하고 비행하라... 는게 대부분의 유저들이 제시해준 해결 방법이었습니다.

 

 

 

 

 

마지막으로, 대부분의 상용 시너리나 일부 공개용 시너리들은 별도의 이펙트를 제작해 BGL로 통합하여 배포하는데,

이런 이펙트들은 VisualFXTool.dll SDK를 이용하지 않는 건지 쉐이더 로드 에러 발생 여부와 관계없이 정상 표시됨을 확인할 수 있습니다.

 

시너리를 제작할 때 이 방법을 이용하면 좋겠지만, 이런 제작 기법들은 거의 알려져 있지 않아 제작이 쉽지 않네요...

 

 

여하튼,

FSX, Prepar3D v2 혹은 v3를 구동하시는 분들 중,

Radeon HD6800 시리즈가 장착된 PC에서 홍스다님의 김포/김해공항 시너리의 유도로 외곽 등화 및 주기장 조명 이펙트가 정상적으로 표시되거나,

HD6800 시리즈 이외의 그래픽 카드에서 이펙트가 정상적으로 표현되지 않는 증상이 있는 분들은 댓글을 통해 서로 해결 방법 등의 정보를 공유했으면 좋겠습니다.

 

이번 문제 해결을 위해 여러가지로 도움 주시고 신경 써주신 wave 님께 감사 말씀드립니다.