Silverlight 용 DeepZoom 지원 클래스들은 별도의 Wrapper가 없으면 활용성이 좋지 않기 때문에 몇달전에 만들어본 라이브러리. Container 패턴으로 되어 있어서 UIElement들을 담을 수 있으며, 담겨진 UIElement들은 DeepZoom의 Zooming Condition을 그대로 따라서 축소, 확대, 이동이 된다. 적용이 불편한 휠지원도 그냥 집어넣었고, 푸쉬핀도 별도 UIElement 하위클래스로 제작했다. 도대체, js용 DeepZoom은 푸쉬핀이 있는데 Silverlight용은 왜 없는것인지.. 결과는 생각보다 괜찮더라. 구글맵이 살아움직이는 식으로 돌아간다. 웹게임 인터페이스로 쓸려고 만들었는데, 기타 실시간 정보를 표시하는 다양한 응용이 가능하겠다. Silverlight 2 이상 개발 환경에서 돌아간다.

덧> 텍스트큡에서 Silverlight 삽입하는 플러그인이 필요하군. 일반적인 방법으로는 삽입이 안되네..

DeepZoomContainer 프로젝트 메인 바로가기

예제 보기 (Silverlight 2 플러그인 필요)
AND

iPhone 시연 소감

Personal 2007. 7. 21. 00:29
우연히 애플 스토어에서 iPhone을 시연할 기회가 있었는데,(사실은 보구 싶어서 갔다.^-^)
예상대로 대단한 부분도 있고 실망스런 부분도 있었다.

외관

생각보다 얇고 가볍다. 기존 PDA폰과는 차별화된 느낌.
전면부는 쿨한데, 뒷면은 생각보다 별로인 느낌. 기존 아이포드의 금속재질이었으면 좋았을 듯.

뒷면의 간지는 생각보다 실망스러웠다.

UI

UI는 흥미롭게도 Win CE와 반대의 느낌이다. WCE에서는 MouseMove(마우스는 없지만 이해하기 편하게 Win32의 이벤트명을 사용하겠다.)의 개념은 "Press and Move"인데, iPhone에서 MouseMove는 "Scroll without Press"다. 일단 터치를 했더라도 움직이기 시작하면 클릭으로 인식하지 않는다.

iPhone의 UI를 보면 작은 화면에 어거지로 1024x768스러운 UI를 조밀조밀 우겨넣은 느낌이 드는데, 특히 화상키보드나 문자입력창은 안스럽게 작아서 겉으로 보아선 신의 손가락을 가지지않으면 뭘 해볼 엄두가 나질 않는다.

조밀조밀의 극치. 아무것도 읽을 수 없다. 하지만 뛰어난 줌인기능을 제공하고 있다.

하지만, 화면을 누르기 시작하면 눌려진 키보드가 확대되어 보여진다. 잘못 눌렸다면 누른채로 원하는 키가 줌인될때까지 이동하여 Release하면 해당 문자가 입력된다. WCE에서 버튼은 Press지점과 Release지점이 같아야 Click으로 인식되는 것과 사뭇다르다. 보다 실용적이다!

iPhone의 화상키보드

문자입력창도 훌륭한데, 원하는 위치에 커서를 놓아야 하는 경우 입력창을 Press하고 MouseMove하면 커서 주변이 줌인되어 돋보기로 보인다. 원하는 위치에서 Release하면 돋보기가 사라지는 방식. Brilliant!

확대되는 텍스트커서 주변

두손가락 줌인아웃은 예상대로 실용적이었다. 구글맵이나 웹브라우저에서 필수 기능.

또한, 실수로 화면이 눌려지는 것을 방지하는 장치가 있는데, 바로 드래그 버튼 컨트롤이 그것이다. 언락 버튼과 Setting Option에 사용되는 이것은 클릭액션이 아니라 드래그액션으로 작동하여 실수로 주머니에서 버튼이 눌려지는 것을 방지한다.

드래그버튼. 밀어서 켜고 끈다.

마지막으로 맘에 드는 인터페이스는 스크롤부분. 뭐라 표현해야될지 모르겠지만 iPhone의 스크롤에는 역학적인 개념이 있어서 빠른 속도로 MouseMove후에 Release하면 최후 속도를 기준으로 관성 스크롤링이 된다. M$ 인터페이스에선 도저히 볼 수 없는 애매한-입력시 예상 결과를 알수 없는-인터페이스지만, 의외로 쓸모가 있는데 스크롤이 긴 리스트화면에서 대략적으로 큰 페이지 이동을 해야할 경우가 그렇다. 원하는 지점에 공을 던지는 것과 같아서 익숙해지면 원하는 곳에 근접하게 날리는 것도 가능하지 싶다.

기타 & 단점

WCE나 Palm의 UI는 저해상도시대에 적합하다면 iPhone의 UI는 높은 해상도의 소형디스플레이에 최적화되어 있는 것 같다. AT&T(구Cingular)의 요금제도도 59.99불에 Unlimited Data(email and web)은 매력적인 것 같다.(블루투스로 GSM모뎀이 된다면, 노트북용 무선모뎀으로도 활용이 가능하다.) 하지만, 단점도 많았는데 1)웹브라우저에서 플래시가 작동 안하고(YouTube는 별도 메뉴로 작동. 이게 머지?), 2)웹브라우저에서 파일업로드가 불가능하며(파일찾기가 안됨), 3)메일쓰기에 파일첨부가 안된다.(받기는 됨) 시연 사진을 iPhone으로 찍었는데 인터넷이 됨에도 불구하고 결국 업로드에 실패하였다.

아직 부족한 점이 많지만, 사람들을 놀래키기엔 충분한 요소를 갖춘 iPhone. 홈브루 어플이 활성화된다면 스마트폰시장과 휴대폰시장에서 큰 파장을 몰고올만 하겠다.

사이트 바로가기
AND

PS3 발매일에 혹시나 갔다가 95대 발매에 200명이상이 8시간전부터 줄을 서있는 것을 보고 충격에 휩였던 기억 때문에 가능하면 가고싶지 않았지만, 다시 한번 시도해보기로 하였다. 물량이 많은 대형 매장들은 사람들이 몰린다는 사실을 알았기 때문에 가능한 선전을 안하고 작은 매장에 아침 일찍 개장하는 곳을 물색했는데, 동네에 조그만 Wal-mart에서 Wii를 판다는 소문을 듣고 새벽 6시에 갔다. (7시 개장) 사람들이 줄을 서 있었지만 그다지 많은 편은 아니었고 27대가 있으며 기다리면 살 수 있기에 30분정도를 기다리니 경비원이 Voucher를 나눠주더라. 줄을 선 사람들은 대부분 아줌마, 아저씨들이었고 그들은 자식들이나 남편(!)들이 사달라고 졸라서 하는 수 없이 왔다고 한다.
012345678910
7시가 되어 들어가니 Customer Center에서 Voucher의 순번대로 판매를 하고 있었다.
일단 소프트없이 Wii Console과 컨트롤러 1개를 샀다.
Wii의 초기 기대치는 PS3에 비해 한참 못미치는 수준이었으나, 앞으로의 행보는 주목할 만하겠다.
AND

I don't know why...but my computer in HMS lab has 8 cores.
I think that there are four Dual-core Xeon 3.2Ghz processors.
AND

지난 학기말의 빡빡한 프로젝트 일정과 한국방문기간의 3개월 동안 사이트를 방치해두면 얼마나 많은 잡초가 자라는지를 절실히 느꼈다. SQL관리자에서 벌초 후, 마이그레이션 실행을 잘못해서-migrator.php인데 migration.php를 입력했는데 이 파일은 구구버전의 DB를 클레식에 덮어씌운다;;- 데이터가 전부 날아갔다가 호스팅업체에 요청하여 겨우 살리고 테터 1.0.6으로 업그레이드 완료. EAS(Eolin Antispam Service) Plug-in 이라는 걸 설치하기는 했는데, 스펨커멘트와 스팸트랙백의 주표적(하루에 300건이상)이 되어버려서 얼마나 잘 버텨줄지 궁금하다.
AND

첫미팅에서 했던 브레인스토밍일부.

이번 학기 프로젝트 중 하나였던 "MIMOSA"가 끝이 났다. MIMOSA는 "Maya Integrated Manufacturing Objective Shrub Architecture"의 약자로서 기존 L-system에서 한걸음 나아간 Open L-system을 이용한 크리쳐(주로 식물) 개발 도구이다. (건들이면 움직이는 신경초이기도 하고, 그리스 신화에 나오는 공주이기도 하다. 하지만 발표를 들은 대부분의 사람들은 칵테일을 연상했다;;) Open L-system의 특징은 고유의 룰 외에 E(x)라는 외부연동 함수가 추가되어 각 파트의 Variables에 영향을 미치게 되는 것인데, 쉽게 말하면 벽이나 구멍 등에 나무의 성장이 영향을 받게 되는 것이다. 그저 Collision Detection정도로 해결될 걸 뭐 대단하다고 할 수도 있지만 일단 L-system의 룰은 recursive하고 단지 충돌의 체크를 떠나 햇빛과 중력의 영향을 받아 새로운 성장벡터를 산출해야 하기 때문에 조금은 생각해볼 필요가 있었다. 더우기 마야에서 작업하는 폴리곤 또는 Nurbs Surface들에게 가상의 필드가 존재하여 해당 필드를 넘어가기 시작하면 필드포스의 영향력에 따라 그 방향에 대한 weight가 달라지기 때문에 결국 Open L-system의 E(x)는 Ray Hit Test 알고리즘 + Quaternion Space + A* Algorithm의 조합이 되고 이를 우리는 Q* Algorithm이라고 부른다.

Q*에서 공간면을 만들고 weight을 구하는 개요

3D Space상에서 경로산출을 최적화 하기 위해 Quaternion space를 생성한후 이를 Grid화하여 각 지점의 weight를 환산 이를 토대로 새로운 성장방향을 산출하는 식이다. Grid대신 Octree를 이용하고, pre-computed weight의 개념을 만들면 훨씬 빨라질 수 있지만 시간관계상 이론적으로 된다는 것만 정리하고 끝내버렸다. (학생식의 대충대충)

L-system 룰을 쉽게 제작하기 위한 툴인 L-viz.


01234
AND

%% 오늘의 미션 %%
이 프로그램은 당신의 주변에서 가장 가까운 곳에 있는 외계인을 찾아준다.
세계평화를 위하여 이자를 제거하도록.
AND

Alien Detector ver. 1.00

Personal 2006. 3. 24. 01:06
숨어도 소용없다.
2.0 버전엔 실명뜬다.
모두모두 자수하여 광명찾자.
AND

Optimizing in Sport?

Personal 2006. 2. 11. 05:42
어제 교수랑 Dynamic Human Motion에 대해 토론하다가 재밋는 이야기가 나왔다.

"An athlete's life is optimizing"

운동경기는 왜 관전만으로도 최고의 Entertainment인지 알려주는 대목. 우리는 예상 가능하지만 확신할 수 없는 초조함 속에 경기를 본다.
AND

나는 모든 MMORPG를 해보는건 아니지만 게시판의 내용은 꼭 보는 편이다. 유저들이 어떠한 반응을 보이는지는 (대작이건 졸작이건 게시판 분위기나 내용은 비슷하지만) 매우 흥미로우며 그 게임이 시도한 새로운 요소나 세계관이 어떻게 어필하며 플레이에 영향을 주는지를 알 수 있기 때문이다. 하지만, 게시판에서 가장 공통적으로 많이 볼 수 있는 글은 바로 게임 발란스의 붕괴에 대한 문제이다. 초기 버전에 발생한 발란스 문제와 이를 보완하기 위한 패치로 인한 발란스 문제 등등.. 기획/운영능력이 많이 향상됐다고 해도 항상 나오는 문제들이다.

좀 단순화해보자. 무엇이 문제인가?

게임에는 다향한 요소가 존재함에도 불구하고(퀘스트나 버그로 인한 문제는 제외) 불균형의 원인은 대부분 숫자놀음의 실패에서 발생한다.

게임에서 사용되는 수는 보통 NLIP(Non-Linear Integer Problem)인 경우가 대부분이다. (만약 HP나 기타 속성치를 Float으로 만들었다면 LP(Linear Problem)) 일반적으로 가하는 제약..스킬의 렙업제한이나 스킬트리로 인한 Alternative Selection의 구조 같은 것은 수학적 측면으로 보면 Constraint(한계치)이다. 액션RPG는 아니라고 말할 수도 있으나, 가정할 수 있는 최고의 플레이 시 움직임을 Max로 유저의 실력에 따라 근접하게 된다. 그리고 타격공식, 속성의 조합은 최종적으로 적에게 데미지를 입히는 Objective Function이라 볼 수 있다.. MMORPG에는 아이템 생산이나 인첸트 등의 다른 Objective한 요소들이 있을 수 있지만 이것 역시 마찬가지 문제가 된다.

그렇다면 플레이어가 하고 있는 활동은 무엇일까?

일반적으로는 정해진 Constraint안에서 Max 수치를 향하여 성장하는게 일반적인 경우이다. 하지만, 스킬과 직업 등으로 인하여 도달할 수 있는 Max Point가 여러개이다. (조합으로 인하여 수만가지가 될 수 있다)
MMORPG의 모든 요소를 대입하려면 3차원도 모자란다.

그렇다면 발란스의 붕괴를 몰고오는 소위 얍삽이 빌드오더는 무엇일까?

캐릭터가 전투를 하게 되면 여러가지 요소에 의해 전투의 양상이 달라지지만 결국 중요한건 적을 얼마나 빨리 때리느냐 or 내가 얼마나 적게 맞느냐로 귀결된다. 결국 위의 조건들을 늘어놓고 Maximize Hit & Minimize Damage를 Optimizing Theory를 통해 얻었을때, 그 해가 1개이면 하나의 긍극의 얍삽이가 2개면 2개의 얍삽이가 탄생하는 것이다.
이 경우 x(4)로 가는 빌드오더는 얍삽이가 되는거다.

가장 좋은 구조는 Contraint 안에서 최고 성장을 한 경우 중에서 다수의 Maximize Hit & Minimize Damage가 나오는 것이다.
만일 w가 어떤 게임의 Optimized Point라면 기획자가 설계를 잘 한 것이다. 다수의 최대값이 존재하여 유저들은 다양한 방법으로 경쟁할 수 있게 된다.

좀더 심화해서 생각하면 유저가 들이는 시간 t 역시 끌어들일 수 있다. 시간대비 각 지점 별 유저의 능력치 변화 △Abilities를 비교하여 최단거리의 빌드 오더 역시 최소화할 수 있다.

현재 필드에 있질 않아 실제로 이러한 방법론을 쓰고 있는지 알기 힘들지만, 앞으로 보다 복잡해질 기획요소들을 생각하면 연구해볼 만한 분야이다.

KLDP 토론 사이트(Thread 올려놨습니다.)
AND