scaleform.minarto.com

Scaleform 에서의 텍스처 로드 본문

Core

Scaleform 에서의 텍스처 로드

미나토 2011. 12. 21. 14:53


플래시에서 이미지를 불러오는 방법이야 간단합니다...

var loader:Loader = new Loader();
var info:LoaderInfo = loader.contentLoaderInfo;
info.addEventListener(Event.COMPLETE, onComplete);
var request:URLRequest = new URLRequest();
request.url = 경로;
loader.load(request);

function onComplete($e:Event):void{
        var info:LoaderInfo = $e.target as LoaderInfo;

var bm:Bitmap;  = Bitmap(info.content);
addChild(bm);
}


as2 라면 다음과 같겠죠...

var loader:MovieclipLoader =  new MovieClipLoader();
loader.addListener(this);

var content:MovieClip = createEmptyMovieClip("content", 0);
loader.loadClip(경로, content);

function onLoadInit($content:MovieClip ):Void{
trace($content)




하지만, 스케일폼에서는 일반 데스크탑 자원이나 http 프로토콜에 있는 이미지를 불러오는 것이 아닙니다...
위와 같이 웹앱을 만들 때처럼 그냥 스케일폼 플레이어에서 돌려보면 이미지가 잘 불러지지만, 정작 udk에 통합된 ui 내에서는 이미지가 열리지 않습니다


언리얼 엔진이면 UPK 패키지 안에 있는 지도나 아이템 텍스처일 것이고... 스타면...mpq일까요? 아마 그러할 것입니다...


그런데 그 경로는 결국 클라이언트가 지정해줘야 하는 것이겠죠... UI개발자가 아니고요... 어쨌든 udk와 통신을 해서 그 경로를 받았다고 치죠. 하지만 일반웹앱처럼 텍스처가 그냥 불러지지 않습니다.

스케일폼에서는 img태그를 사용해서 게임의 텍스처를 불러올 수 있도록 되어있습니다.

http://udn.epicgameskorea.com/Three/ScaleformTechnicalGuideKR.html#이미지 로딩 

위와 같습니다...

주의해야 할 것은 다음과 같습니다.

1. "img://경로" 가 바로 텍스쳐 경로인 셈입니다... 확장명은 없습니다...

2. img 태그를 쓰지 않아도 리소스는 불러올 수 있지만 swf 리소스만 가능하고, 이미지 리소스는 불러올 수 없습니다.

3. udk 에서는 upk 패키지에서 새롭게 가상의 절대경로가 package 라는 이름으로 생성됩니다...(메인 swf 기준으로)
하지만 직접 절대경로를 이용해 불러오는 (/를 이용해서) 방식은 문제가 있습니다

4. 스케일폼 3.x대에서는 Bitmap.smoothing 을 사용할 수 없습니다... flash player 9 에서 지원하는 MovieClip.forceSmoothing 은 스케일폼에서 지원하지 않습니다.

마찬가지로 as2를 지원하는 3.x 대에서는 이미지를 불러온 후 MovieClipLoader.unloadClip 를 통해서 gc를 할 수 있으나,



(프로파일러로 확인한 제가 이미지 로드 & gc 적용전 우리 회사 UI 의 참담한 모습... 붉은색이 메모리 ㅠㅠ) 




(프로파일러로 확인한 loadClip과  unloadclip 를 적용한 후의 이미지 로드 & gc)


as3를 지원하는 4.x 대에서는 Bitmapdata.dispose() 를 지원하지 않기 때문에 dispose 를 이용한 gc를 할 수가 없습니다. (dispose 말고 다른 방법으로 해제하던가요? as3 한지가 한 1년쯤 지났더니 기억이 안나서...)
저도 다른 방법을 생각 중입니다.
 

5. 큰 이미지를 불러왔는데 아주 작은 이미지를 확대시켜놓은 것마냥 뿌옇게 나타나는 경우가 있습니다.
이는 텍스쳐를 밉맵으로 불러왔기 때문입니다. udk의 경우 upk 패키지를 열었을 때(fully load), 텍스처를 더블클릭해서 열어보면 맨밑의 Mip Gen Settings 를 NoMipmaps 로 선택해두면 해결됩니다.
udk의 경우 이러한 건데... 다른 엔진은 잘 모르겠습니다....(다른 엔진 사주시면 찾아봐드릴게요 ㅎㅎㅎ)
 

6. JPG 형식의 포맷은 압축포맷이기에 메모리에 올라가면서 압축이 해제되어 메모리가 4배이상 늘어납니다... png나 tga 같은 비압축 포맷 또는 dxt같은 게임텍스처용 파일로 작업할 것을 권합니다




이미지 로드 & gc 에서 보았듯이 개발이라는 것이 누가 어떻게 개발하느냐에 따라서 그 결과물은 0~xxx 배까지 차이가 난다고 생각합니다.
당연히 저보다 뛰어난 개발자가 만들면 더욱더 최적화 될겁니다

UI 라는 것이 그냥 UI 디자이너에게 금방 할 수 있다고 사기쳐서 만들 수 있는 것도, 다른 일 할 것도 많은 클라팀에게 무조건 떠넘길 일도 아니란거죠...


r&d와 투자없이 스케일폼을 적용해봤자 스케일폼은 애물단지일 뿐입니다...