2009.03.20 11:14

실버라이트 3의 신기능

얼마전 라스베가스에서 열린 MS의 MIX09 컨퍼런스에서 실버라이트3의 디테일이 발표되었다.
두근두근 기대했던 것도 있었고 자세히 차근차근 살펴보자.


익스프레션 블랜드 3로 업데이트 되면서 XAP파일의 압축기능이 향상되었다.
그리고 이클립스에서 실버라이트를 지원하게되면서 맥에서도 실버라이트 개발을 할 수 있다.

컨트롤
많은 UI 컨트롤들이 추가됨

  • DockPanel
  • DataGrid
  • WrapPanel
  • TreeView
  • Label
  • Expander
  • ViewBox
  • AutoCompleteBox
  • HeaderedItemsControl
  • HeaderedContentControl

DataForm
여러 데이터를 보여주기 위한 유연한 컨트롤(아마도 커스터마이징하기 편할듯함)

DataPager
데이터가 많을 때 페이징 기능을 제공하기 위한 컨트롤

Navigation Framework
Frame과 Page 기능을 가지고 있는 컨트롤. 각 뷰를 XAML파일에 쪼개서 작성하고
이 프레임웍을 사용해서 마치 웹페이지 처럼 네비게이션 할 수 있다.(브라우저의 뒤로가기, 히스토리 기능같은것)

툴킷 컨트롤
실버라이트 툴킷에 추가된 컨트롤들

  • DomainUpDown
  • TimePicker
  • Accordion
  • ChildWindow
  • 차트 컴포넌트 기능 향상

미디어
미디어 기능은 실버라이트의 최강점 중 하나. 이 부분에서는 실버라이트 유저들의 피드백을 받아
H.264나 AAC인코딩 포멧을 추가하고 또한 RAW 오디오/비디오 처리 기능을 제공해서 서드파티가
독자적인 코덱을 구현할 수 있도록 함.

그래픽

Perspective 3D
오브젝트를 3D처리할 수 있음 (플래시 플레이어 10의 3D API와 비슷)

Pixel Shader API
그림자 효과나 블러 효과같은 이펙트 필터를 사용자가 직접 제작할 수 있음(플래시의 픽셀 벤더와 비슷)

에니메이션 Easing
여러가지 에니메이션을 부드럽게 처리하기 위한 API

Cached Composition(GPU지원)
정확히 내부구조가 어떻게 되어있는지 모르겠지만 이것역시 플래시의 비트맵 캐쉬와 GPU composing(아래글)
과 비슷한거 같음--;

비트맵 API
비트맵 데이터를 픽셀 by 픽셀로 다룰 수 있는 로레벨 API

텍스트 기능 향상
폰트나 텍스트 필드 처리에 관한 기능 향상. (베타엔 없지만 정식버전엔 클리어타입 지원함)

UI 바인딩 기능 지원
플렉스 MXML에서 사용되는 바인딩 기능과 비슷

로컬 커넥션 API
실버라이트 어플리케이션 끼리 서로 통신할 수 있도록 하는 API(플래시의 로컬커넥션과 비슷)

OOB(Out of browser Experience)
실버라이트 어플리케이션을 데스크탑에서 실행시킬 수 있는 기능(물론 크로스 플랫폼)
(이부분은 어도비 AIR와 비슷하다고 생각했으나 약간 차이가 있는듯)

어도비 에어와의 자세한 차이점

지금까지 굴직한 기능들에 정리해봤고 그 이외에도 몇가지 자잘하게 변경된 부분이 있었음.
(딥줌 업데이트, 바이너리 XML, 네트워크 모니터링, 어셈블리 캐싱, 리소스관리 등등)


p.s :
사실 이번에 실버라이트 3에 대한 기대를 많이했는데 너무 어도비 플래시를 따라가는거 같아서
좀 아쉽다. 실버라이트 만의 특화된 기능을 제공해줬음 했는데 아무래도 어도비나 MS나 RIA라는
같은 곳을 바라보고 있기 때문에 어쩔 수 없는거 같다.

자동차 레이싱 용어 중 '슬립스트림' 이란 것이 있다. 일반적으로는 다른 경쟁차량들을 추월해
선두에 나서는 것이 상식이지만 선두차량 뒤에 딱 달라 붙어서 주행을 하면 공기저항을 앞차가
막아 줄뿐만 아니라  앞차와의 사이에서 일어나는 터뷸런스가 오히려 더 끌어주는 역할을 한다.
따라서 이렇게 '슬립스트림'으로 주행을 하다가 마지막에 남을 힘을 다해 추월해서 경기를 이긴다는
전략이다.

이번 실버라이트3를 보면서 MS도 일종의 '슬립스트림' 전략을 취하고 있는거 같고
정말 마지막 랩에서 어떤 결과가 나올지 기대가 된다 :)




Trackback 0 Comment 2
  1. 지돌스타 2009.03.20 20:26 address edit & del reply

    말그대로 슬립스트림 전략을 쓰고 있다면~ MS가 어떤 로드맵으로 나갈지 궁금해지네요.

  2. 개인의 취향 2009.04.06 22:46 신고 address edit & del reply

    아...질문이 있는데요

    실버라이트에서 동영상 재생 시 배속기능 적용하는것이 가능할까요?

2009.03.19 09:16

PapervisionX - the next version of pv3d

http://blog.papervision3d.org/

그동안 플래시 3D 엔진으로 가장 많이 사랑받아온 페이퍼비전이 차기 버전에 대한 내용을 살짝 공개했네요
살짝 기대가 되는데요^^

1. CS4 브랜치는 PapervisionX와는 다르다.

pv3d 소스에 보면 cs4 버전용 브랜치 파일이 있는데 이는 PapervisionX와는 상관없다.
이 버전은 기존 PV2.0에 렌더러만 플래시10용 API를 쓸 수 있게 살짝 바꾼것이다. 따라서 이 버전은
페이퍼비전의 공식적인 버전은 아니다.

2. 그럼 도대체 PapervisionX란 무엇인가?

PapervisionX는 Papervision3D의 공식적인 차기 버전 이름이다. 앞서 말한 CS4 브랜치와는 다르게
플래시10의 3D API를 사용해서 코어부분 부터 재작성되었다. 현재 랄프와 팀이라는 페이퍼비전 멤버가
코어부분을 개발하고 있는 중이다.
PapervisionX(이하 PVX) 버전 부터는 이전과 다르게 beta라는 버전명을 사용하지 않고 숫자버전표기법을
사용할 것이다.

3. 왜 PapervisionX를 만들었나?

플래시10에는 몇가지 3D API가 추가되었다. 이 기능들의 혜택을 보려면 pv3d를 다시 설계해야만 했다.
따라서 가능한한 API 형태는 유지하면서 플래시 플레이어 10의 3D API의 장점을 살릴수 있도록 했다.
플래시10의 3D기능을 사용하면 퀄리티, 속도, 파일 사이즈 등 여러가지 장점을 얻을 수 있다.
어쨋든 이러한 것을 위해서 엔진을 전체적으로 재작성하고 있으며 이 과정에서 차기 플래시버전의 기능이나
알케미 같은 것을 사용할 수 있도록 유연하게 설계하고 있다.

4. 그럼 이제 PV2.0 은 어떻게 되는가?

2.0 지원을 아직까지는 중단하지 않을 것이다. 플래시 플레이어 10의 보급률이 어느정도 올라가기 전까진
아직 시간이 필요하고 그때까지 2.0에 추가되는 기능이 계속 있을 것이다. 몇 가지 기능들은 PVX에서 거꾸로
PV2.0버전으로 포팅될 수도 있다. 실제로 팀 전체가 PVX를 개발할 수 있을 때까지 2.0에 대한 지원도 계속될
것이다.

5. PVX는 언제 쯤 공개되어 사용할 수 있나?

아직 까지 PVX는 초기 개발 단계다. 지금은 코어 아키텍쳐 설계에 집중하고 있기 때문에 지금 날짜를 말하기는
좀 이르다. 그러나 얼마나 많은 사람들이 PVX를 사용하고 싶어하는지 우리는 잘 알고 있기 때문에 앞으로 진행과정에 대해서는 계속 블로그 업데이트를 할 것이다.


Trackback 1 Comment 2
  1. 지돌스타 2009.03.20 09:21 address edit & del reply

    PVX가 나온다면 Flash Player 10의 보급율에 맞추어 사용하면 좋겠네요.

  2. 검쉰 2009.03.20 10:35 신고 address edit & del reply

    오호 +_+

2009.03.14 10:08

플래시에서 고속 그래픽 처리

 플래시 플레이어에는 크게 두 가지 방식의 렌더러가 지원된다. 전통적으로는 플래시의 벡터기반 그래픽을 처리하기 위한 벡터 렌더러가 대부분 사용되었다. 벡터 렌더러는 유려한 벡터기반의 그래픽과 에니메이션 처리를 위하여 설계되었기 때문에 고속의 화면처리에는 적합하지 못하며 태생적으로 CPU의 자원을 많이 사용하게 되었다. 따라서 플래시에서는 종종 그래픽에 의한 퍼포먼스 문제가 많이 제기되었다.

 플래시 7까지만 해도 플래시에서 과도한 그래픽처리는 금기 사항이었지만 플래시8 버전부터 BitmapData라는 비트맵 리소스를 직접 핸들링 할 수 있는 API가 제공되면서 이전보다 훨씬 향상된 성능을 보여줄 수 있게 되었다. 특히 플래시로 게임제작을 하고 있는 개발자들에게 BitmapData 클래스의 copyPixel이라는 함수는 많은 최적화 가능성을 보여주었다.

플래시 8버전에서는 BitmapData를 직접 핸들링하는 방법이 가장 빠른 방법으로 여겨졌지만 벡터기반의 무비클립을 비트맵 캐싱할 수 있는 기능을 사용하면 그리고 작년에 플래시 플레이어 10이 출시되면서 비트맵 영역에서는 많은 부분이 개선되었다.

 

플래시 플레이어 10에서 달라진 비트맵

 

픽셀 벤더를 이용한 고속 비트맵 처리 기능과 커스텀필터 그리고 현재 비트맵 크기 제한을 뛰어넘은 4096x4096의 대형비트맵 지원 등 그 이외의 향상된 그래픽 API가 지원된다.

 

플래시 플레이어 10 GPU가속

 

이 부분도 플래시 플레이어 10이 처음 공개되었을 때 뜨거운 감자였던 부분 중 하나인데 이번 기회를 통해 자세히 알아보도록 하겠다. 플래시 플레이어 10에는 픽셀 벤더라는 툴을 통해 커스텀 필터를 만들 수 있는 기능이 추가되었다. 그리고 픽셀 벤더라는 툴은 c언어 기반의 OpenGL 쉐이딩 언어를 사용하며 GPU를 사용하여 가속하고 있다. 하지만 아쉬운 점은 현재 버전까지의 플래시 플레이어에서는 오로지 CPU만 사용되고 있다는 것이다. 아마도 추후에 업데이트를 통해서 개선되리라 예상된다.

 플래시 플레이어는 wmode라는 파라미터를 통해 window, opaque, transparent 3가지 모드를 지원했었다. 이미 알고있는 개발자도 많겠지만 window모드를 제외한 나머지 모드는 독자적인 윈도우를 가지고 있지 않고 부모(브라우저)의 윈도우에 결과를 표시하는 방식이다.

플래시 플레이어 10에서는 direct, gpu 두가지 모드를 추가적으로 지원하는데 이는 그래픽카드의 GPU가속을 사용하고 있다.

이에 대한 어도비의 공식적인 가이드는 아직 없지만 플래시 플레이어 개발자인 TINIC URO의 블로그 글을 통해 자세한 구조를 유추해 볼 수 있었다.

 

http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html

 

direct 모드

이 모드는 플래시 플레이어의 렌더러가 화면에 렌더링 할 수 있는 가장 빠른 방법을 찾아서 그린다. 윈도우 기반의 OS에서는 DirectX DirectDraw 함수를 사용하며 OSX나 리눅스 기반의 OS에서는 OpenGL을 사용한다. 이 모드는 주로 동영상 재생용으로 사용하면 된다

 

gpu 모드

이 모드는 OSX나 윈도의 비스타의 데스크탑 매니져와 비슷한 방식으로 동작한다. , 여러 개의 레이어를 하나로 합성하는 과정까지 그래픽 카드에서 개입을 한다는 것이다. direct모드와 마찬가지로 DirectX OpenGL을 사용하며 아직 MovieClip이나 Sprite안의 내용을 그리는 과정에서는 여전히 소프트웨어 래스터라이져를 사용해서 CPU가 그려지지만 차기버전에서는 이 과정 또한 GPU에서 처리하도록 개선될 것이다. 그리고 최신 플래시 플레이어 릴리즈 문서에 따르면 이 모드는 다이렉트X 9.0 OpenGL 2.0을 지원하는 최신 그래픽카드에서만 동작하며 아직 알파, 지우기, 빼기 등 블랜드 모드와 벡터 그래픽에는 최적화 되어있지 않다

 

DirectX or OpenGL(GPU)

Software Rasterizer

direct

gpu

window

Draw

On screen

Software Rasterizer

Sprite

 

하드웨어 가속 사용시 주의할 점

 

1. GPU가속을 사용한다고 모든 플래시 컨텐츠가 빨라지는 것은 아니다. 대부분의 경우 오히려 느려질 것이다. 이 부분에 대해서는 어도비에서 공식 가이드가 아직 안나와있지만 필자가 몇 가지 테스트를 거친 결과 과도한 벡터 그래픽을 사용할 경우에는 오히려 더 느려지는거 같다. 따라서 GPU 가속의 효과를 보려면 순수 비트맵을 사용하거나 벡터그래픽을 자제하고 Sprite 클래스의 cacheAsBitmap 파라미터를 통해서 결과를 미리 비트맵 캐싱해두면 더욱 효과가 좋다.

 

2. 반드시 DirectX 9.0 이상을 지원하는 그래픽 카드가 필요하다. 지원하는 그래픽 카드 리스트는 어도비 사이트에 명시가 되어있으며 지원하지 않는 그래픽 카드에서는 gpu모드로 설정을 해도 cpu를 통해서 렌더링 된다. (불행히도 대부분 노트북에서 사용되는 인텔기반의 온보드 그래픽카드는 지원하지 않는다)

 

DirectX 9 이상, Pixel Shader 2.0 이상, 사용 가능한 128MB VRAM

ATI 카드 DXCapsViewer 드라이버: XP – 버전 x.x.x.6752,Vista – 버전 x.x.x.0560

NVIDIA 카드 DXCapsViewer 드라이버(XP Vista) – 버전 x.x.11.7519

   OpenGL 2.0 이상, OS X 버전10.4.11

 

3. GPU 모드에서는 사용하는 그래픽 카드에 따라서 픽셀이나 컬러가 조금 달라 보일 수 있다. 이 부분은 추후에 개선될 것이다.

 

4. 초당 프레임률을 화면 프레임률 이상으로 설정해도 효과가 없다. , 60프레임 이상으로 프레임률을 설정해도 별 소용없다.

 

5. gpu모드를 사용하면 cpu나 메모리 같은 자원을 많이 사용한다. 따라서 반드시 동영상 같은 풀모션 컨텐츠만 사용하고 배너나 플렉스 컴포넌트 제작된 어플리케이션에는 사용을 자제해야 한다. (필자의 경험에 의하면 특히 풀 벡터 컨텐츠에는 쥐약이다)

 

6. 현재 gpu가속모드를 사용하고 있는지 확인이 안될 때에는 다음과 같은 세팅을 통해서 가속여부를 알 수 있다. 디버그 버전의 플래시 플레이어를 설치한 뒤에 mm.cfg 파일에 DisplayGPUBlend =1이라는 플래그를 추가해주면 direct 모드를 사용할 경우에는 왼쪽 상단에 빨간색 사각형이 gpu모드는 녹색 사각형이 나타난다.

 

플래시 기술을 발전 속도는 날이 갈수록 빨라지고 있다. 특히 이제는 벡터그래픽과 CPU의 한계를 뛰어넘어 GPU가속을 사용해서 고속 그래픽처리를 할 수 있기 때문에 앞으로 영역이 단지 RIA를 위한 플랫폼이 아니라 HD급 화질 동영상나 게임 같은 멀티미디어 컨텐츠를 개발할 수 있는 최적의 플랫폼이 되지 않을까 한다.

플래시 플레이어의 GPU 지원은 초기 수준이고 버그도 많기 때문에 아직까지는 상용프로젝트에 사용할 정도는 아니지만 앞으로 안정화 과정과 개선을 거치고 아직 개척되지 않은 3D그래픽과 모바일 영역까지 지원한다면 정말 플래시 플랫폼에 날개를 달아줄 중요한 포인트가 되지 않을까 한다.


p.s :
참고로 gpu지원의 차이를 알 수 있는 예제를 하나 공개합니다.

Trackback 0 Comment 4
  1. 블루메탈 2009.03.14 10:12 신고 address edit & del reply

    개인적인 소감으로는 모든 케이스를 GPU가속하기에는 예외상황이 너무 많기 때문에 아직 너무 소극적으로 접근하고 있는거같네요. 차라리 OpenGL ES처럼 제한된 형태로 gpu를 직접 핸들링할 수 있는 라이브러리를 제공하는 방법도 괜찮을꺼같은데..

  2. okgosu 2009.03.14 10:57 신고 address edit & del reply

    오랜만이네...
    언제 이렇게 멋진 글을....
    땡큐...

    with okgosu

  3. 지돌스타 2009.03.20 09:22 address edit & del reply

    매우 훌륭한 글!