메모장


  메모장

내 맘대로 정리 ㅋ.ㅋ
(하루에 한가지 배우자. 가다보면 끝도 있겠죠 ^.^;;)

1 임시창고
2 걸어서 게임까지/ 원하는 만큼 멀리 갈 수는 있지만, 원하는 만큼 빨리 갈 수는 없다.
2.1 나침반
2.1.1 레벨디자인
2.2 작은 주제
2.2.1 그래픽 파이프라인의 전통적 아키텍쳐
2.2.2 모리노리 개정 버전 1.03
2.2.3 3D Character Animation
2.2.4 지형
2.2.5 X파일
2.2.6 기타 설정
3 C++
3.1 MFC
3.2 클래스
4 소프트웨어 3D (김성완 샘 감사^^)
5 게임에서의 물리
6 다이렉트 3D
7 Cg (최문성 샘 감사^^)
8 Shader

1 임시창고 #

* 워드 문서 내에서 하이퍼 링크 거는 방법; Introduction.htm#Notes

* 주석은 코드가 '어떻게' 동작하는가를 말하는 게 아니라 '무엇을' 하는가를 말해야 한다는 것이다.

* 일곱 가지 정석과 세가지 바보짓
정석 1. 재사용 계획, 같은 일을 되풀이 하지 마라
정석 2. 문서화, 머릿속에 남겨두지 마라
정석 3. 기획 먼저, 개발은 다음
정석 4. 일정, 모든 사람들에게 목표를 확실히 알려주어라
일정을 짜고, 일정에 쫓기면 포기하고 하는 일은 반복적으로 일어난다. 문제는 계획을 포기하는 것이 아니라, 대안을 만들지 못하고 코딩하고 수정하는 악순환에 빠지는 것이다. ( Steve McConnell )
정석 5. 실수를 잡으면서 가라
정석 6. R&D의 수준을 조절하라
정석 7. 선을 그을 때를 알라
바보짓 1. 부적절한 관리
좋은 관리는 눈에 보이지 않게 하는 것이다. 평소에는 조용히 팀의 활동을 지원하고 필요할 때만 끼어들어야 한다. 권위는 팀원들에 의해 만들어지며, 영화의 감독과 마찬가지로 결정권과 창조적 비전을 가진 개인이 갖게 된다.
바보짓 2. 기능의 범람
바보짓 3. 코더들의 편협함

* 공개프로그램
XnView-win/ rendermonkey/ Paint.NET/ 7-Zip/ StickyPad

2 걸어서 게임까지/ 원하는 만큼 멀리 갈 수는 있지만, 원하는 만큼 빨리 갈 수는 없다. #

◈ 영상자극 ; 게임뇌 (--> 치매현상과 비슷) ⇔ 명상
/ 전두엽이 발달하지 못하고, 사회성이 결여
/ 클릭(자극)에 의한 적각적인 반응은 감정의 급격한 기복, 이성적 판단을 저해하고 결과를 기다리지 못함

* 메모장 ; 메모장의 항목별 정리(확장)
* 딱지 ; 단위 주제에 관한 정리


2.1 나침반 #

* 완벽한 범용성을 갖는 게임엔진을 개발해서, 새로운 게임을 개발할 때 contents와 스크립트만을 필요로 할려면... 게임에 특화된 기능들을 보다 많이 소프트아키텍처 안에 포함시키고, 이것이 범용성을 갖는 하드아키텍터 틀 안에서 작동해야한다. 그렇게되면 게임개발자의 업무는 한결 쉬워질 것이다.

* 동기화 ; 클라이언트가 서버에 보내는 내용은 이미 끝난 행동이 아니라 이렇게 하고 싶다는 플레이어의 의지이며, 서버가 클라이언트에게 되돌려주는 데이터는 이미 플레이어에게 일어난 사실이다. 플레이어가 느린 컴퓨터를 가지고 있다면, 게임 내에서의 그 플레이어의 행동 역시 느릴 것이다.

* 기술정보
{_o} EMotion FX {_-} EMotion FX 3.1 정보 @ 2008-09-07 @
{_o} 소설네트워킹서비스 {_-} 소설네트워킹서비스란? @ 2008-09-07 @
{_o} 징가(ZynGa), 팜빌(Farmville)에서 본 {_-} 소셜게임 성공의 6가지 비밀 @ 2010-07-14 @

* 세미나 메모
{_o} RenderWare Developer Seminar 2004 {_-} 세미나_Render Ware2004 @ 2004-10-23 @
{_o} 2009.02.10 게임스팟코리아가 주최한 '게임테크 2009' 컨퍼런스 {_-} 세미나_게임테크2009 @ 2009-02-24 @

* 딱지
{_o} tokamakphysics {_-} 딱지_Tokamak @ 2004-12-14 @
{_o} Zbrush 2 {_-} 딱지_Zbrush @ 2005-09-10 @

* 기타
{_o} 시스템 관련 정리 {_-} 메모장_시스템 @ 2009-02-16 @
{_o} 툴 사용시 유용한 정보 {_-} 메모장_ToolTip @ 2009-03-09 @

2.1.1 레벨디자인 #
* 유저는 게임을 진행하면서 단계적으로 기술을 배우는 것이지, 모든 것을 단번에 깨우치는 것이 아니다.
..."진행하면서 기술 배우기" 방식은 유명한 게임 디자이너인 닌텐도사의 시게루 미야모토로부터 시작되었다. 그는 마리오와 젤다의 전설을 제작한 사람이다. 그의 게임 디자인 방식은 아주 모범적인데, 특히 젤다 시리즈가 그렇다. 이런 게임을 플레이하면 게임디자이너가, 플레이어가 알아챌 수 없는 방식으로, 선형적인 경로를 따르게 했다는 것을 느낄 수 있다. 이 유명한 속임수는 레벨을 완료하기 위한 목적을 레벨을 완료함에 따른 보상으로 여기게 만들어서 플레이어를 속이는 것처럼 보인다. 그리고는 그 목적물을 가지고 있으면 레벨을 완료하기가 얼마나 쉬웠는지 깨닫는다. 좌절감을 느끼는가? 그렇다, 게다가 영리하기도 하다. 이런 방식은 완벽한 중독성 그물을 제공하고, 새 기술을 배우는 매끈한 방법을 제공한다. 그 레벨에서 얻은 목적물은 당연하게도 다음 레벨에서 무척 중요한 것이다. 그렇다. 이런 것은 비현실적이다. 그러나 현실은 별로 구조적이지 않으며, 그렇기에 사람들은 게임을 하는 것이다. 게임 디자이너가 만들어둔 일관되고 구조적인 세상에서 재미있는 것들을 하는 것이다.
#출처 - "게임아키텍쳐&디자인2", 8장...

{_o} 형상관리 {_-} 메모장_형상관리 @ 2009-03-29 @
{_o} BTS {_-} 메모장_BTS(Bug Tracking System) @ 2009-05-16 @ 개발자가 발견된 소프트웨어의 버그를 추적하는 것을 돕기 위한 소프트웨어
{_o} 테스터 요건 {_-} 메모장_좋은 테스터가 되기 위한 요건 @ 2009-05-16 @

2.2 작은 주제 #

2.2.1 그래픽 파이프라인의 전통적 아키텍쳐 #
*.설정/래스터 → 텍스쳐 어드레스 → 텍스쳐 → Fog → 알파 테스트 → Depth 테스트 → 알파 블렌딩 → Mem Write
깊은 파이프라인(200단계)로 항상 모든 단계를 거쳐야하고, 항상 clocking을 수행한다.

* 하드웨어 스팩
출처; http://www.techarp.com/ - Article Database/ Desktop Graphics Card Comarison Guide
ATi 스팩 NVIDIA 스팩
{_o} 하드웨어 정보 {_-} Graphics_Card_Guides @ 2008-08-28 @


2.2.2 모리노리 개정 버전 1.03 #
* 혼자 백수인 관계로 혼자 수정 작업을 했는데, 작업중에 추석이 있었고 조금씩 수정하다 보니깐 처음 계획한 수정범위 보다 넓어져서 작업기간이 길어졌고, 무엇보다도 공동 작업에서의 주석의 필요성을 절실하게 느꼈으며,
1.03개정은 늑대를 잡았을 때, 보상 아이템으로 horn를 추가하는 것으로 요약할 수 있다.
{_o} 버전 1.03에서 변경된 내용 {_-} 모리노리_개정1.03 @ 2004-10-25 @

2.2.3 3D Character Animation #
* 애니메이션의 종류
1.Vertex Animation ( 정점 애니메이션 ); 스프라이트 애니처럼 매쉬의 정보를 동작동작 마다 만들어 놓고, 시간에 맞추어서 그 매쉬를 렌더링한다.
{_o} MD2(Quake2 File Format) {_-} 메모장_MD2 @ 2004-06-06 @
2.Hierarchical Animation
3.Bone Based Animation ( Skeletal Animation, 뼈대 애니메이션 )
4.Skinned Bone Animation
5.Inverse Kinematics ( IK : 역운동학 )

2.2.4 지형 #
* Scene Graph; 3D 데이타를 표현하기 위한 자료 구조로써
전체 지형에서, 3D엔진에서 처리해야 할 절두체 내 보이는 데이타만을 처리하기 위해 세세하게 나누어서 처리(전처리 필요)
1.2진트리(binarytree)
2.쿼드트리(quadtree); 공간을 4개의 자식 노드로 재귀적으로 분할하는 방식
생성할 지형의 크기는 반드시 2의 n승 + 1이다.
3.옥트리(octree)
* LOD
Static LOD; 물체와 카메라와의 거리에 따라 가까울수록 세밀한 메쉬로 구성된 물체를 렌더링
장점; 간단한 연산으로 빠르게 동작
단점; 처음부터 메시의 정밀도가 정해져 있기 때문에 단계에 따른 메시를 가지고 있어야
하기 때문에 메모리 낭비가 심하고, 단계가 급격하게 변할 경우 popping현상이 발생
Dynamic LOD; 물체와 카메라와의 거리에 따라 실시간으로 메시의 정밀도를 변화
장점; 거리에 따른 자연스런 LOD구현으로 popping현상을 방지
단점; 메시 분할과 간략화의 추가적인 연산이 필요하기 때문에 상대적으로 느리게 동작

2.2.5 X파일 #
* X파일 메시를 읽어들일 때 주의점은 메시는 여러 개의 폴리곤으로 구성되어 있고,
폴리곤은 각각의 재질을 가질 수 있다. 재질이 여러 개일 경우 메시를 재질별로 부분 메시로 분할, 부분 메시별로 따로 그린다.
1.D3D에서는 DrawSubset()함수를 이용 렌더링
2.SetTexture() + SetMaterial() + DrawSubset()로 해당 메시에 텍스쳐와 재질을 적용

2.2.6 기타 설정 #
1.닷넷용 어이스트에서 함수색이랑 변수색이 표시 안되는 경우
닷넷의 폰트가 문제가 될 수 있는데,
.Net에서 Default 로 가지고 있는 폰트를 사용할 경우 표시가 안되는 경우가 있다.
폰트를 Fixedsys 로 변경해 한다.
2.VS.Net에서 프로그램 줄번호 보이게 하는 옵션
도구|옵션|텍스트편집기|C/C++에 디스플레이 설정 옵션 체크

3 C++ #

* 가상함수(virtual function)
기본 클래스 내에 선언되고 파생 클래스에 의해 재정의된 클래스 맴버 함수이다. 가상함수를 생성하기 위해서는 키워드 virtual을 함수 선언 앞에 쓴다. 근본적으로 가상함수는 다형성(polymorshism)의 기본 철학인 "한 가지 인터페이스와 여러 가지 방법"을 구현한다. 기본 클래스 내에 있는 가상함수는 그 함수에 대한 인터페이스의 형태를 정의해 주고, 파생 클래스에 의한 가상함수의 재정의(특정한 방법을 생성)는 특히 그 파생 클래스에 관련된 연산을 구현한다.

{_s} Virtual-Key Codes @2004-04-24@
{_s} namespace @2004-04-25@
namespace의 역할은 어떤 모듈이나 타입 등을 하나의 그룹으로 묶어주는 역할을 한다.
{_s} 헝가리안표기법; 변수이름 정할 때 참고 @ 2004-05-13 @
{_s} 메모장_STL @ 2005-04-26 @
{_s} 메모장_VS2005로_만든_프로그램_배포방법 @ 2008-04-09 @
{_s} 메모장_Lua Tinker @ 2008-04-24 @

http://daftcoder.egloos.com/1866943 - VC++에서 C++ 예외 처리(EH) 기능을 사용하 때 주의할 점

* 라이브러리 등록
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

* 2의 승수구하기
float z = _logb(float(m_Mapsize));
m_Mapsize = pow(2, z);

* 2차원 배열의 동적할당의
   // a[20][30]; 
   int **a;
   a = new (int*)[20];
   for ( int i = 0; i<20; ++i )
   {   a[i] = new int[30];   }
   
   for ( int i = 0; i<20; ++i )
   {   delete [] a[i];       }
   delete [] a;
* 하나의 수를 정수부와 소수부로 나누는 표준 라이브러리 함수
double modf(double x, double *ipart); (math.h)
소수부가 반환되고, 정수부는 두번째 매개변수가 가리키는 변수에 저장된다.

* C(1주) + C++(2주) + 자료구조(2주) = 5주 기본 프로그램 과정
{_o} C 세부 수업내용 and more... {_-} 메모장_C

3.1 MFC #

* 모든 Windows 응용프로그램은 올바로 동작하기 위해 공통된 과정을 수행하고, 게다가 이들 과정은 응용프로그램이 개발된 환경에 관계없이 항상 일치한다. MFC는 boilerplate code전부를 처리하고, Windows 응용프로그램의 기본적인 2부분(message pump와 windows procedure)을 CWinApp와 CWnd에서 처리한다.
{_o} MFC more... {_-} 메모장_MFC

3.2 클래스 #

클래스의 구성요소...
클래스는 이름(name), 애트리뷰트(attribute), 오퍼레이션(operation)으로 구성됩니다.
-.이름; 클래스의 이름이고 다른 클래스와 구분되는 이름으로 작성
단순 이름과 패키지를 접두어로 가지는 경로 이름이 있다.
-.애트리뷰트; 클래스의 모든 객체가 공유하는 어떤한 특성을 표현
(객체가 가지는 일종의 데이터 혹은 상태에 대한 추상화)
-.오퍼레이션; 다른 객체가 요청할 수 있는 서비스를 구현
객체 대하여 수행할 수 있는 일에 대한 추상화이며 해당 클래스의 모든 객체가 공유하는 것이다.

클래스 식별시 고려사항
1.저장하거나 분석하여야 할 정보가 있는가?
2.외부 시스템이 존재하는가?
3.패턴 클래스 라이브러리, 컴포넌트 등이 존재하는가?
4.시스템이 취급하여야 하는 장치가 존재하는가?
5.조직체의 부서가 존재하는가?
6.액터가 어떠한 역할 수행하는가?

4 소프트웨어 3D (김성완 샘 감사^^) #


3D 렌더링을 소프트웨어(CPU에서 실행)로 구현하는 목적
1.3D원리를 이해
2.가속카드가 내장되어 있지 않는 모바일 기기등 개발
3.Shader Programming의 이해와 응용
4.3D 가속기 파이프라인 설계

        폴리곤을 제일 빠르게 표현 ==> 화면에 출력하지 않는 것이다. (!)
(최적화의 기본은 무리하게 많은 Data를 처리(화면으로 출력)하지 않는 것이다.)
  • 폴리곤 렌더링의 경우 기본Data = 꼭지점(정점)에서 출발.
    {_o} 소프트웨어 3D more... {_-} 메모장_소프트웨어3D @ 2005-04-26 @

  • #. 좌표계(Coordinate System)

    왼손좌표계 ; 시계방향(CW: Clock Wise)
    DirectX - 행우선(row major) 방식

    오른손좌표계 ; 반시계방향(CCW: Count Clock Wise)
    OpenGL - 열우선(column major) 방식
    3DS Max - 바닥을 X/Y축, 높이를 Z축으로 사용
    XNA

    5 게임에서의 물리 #

    6 다이렉트 3D #

    7 Cg (최문성 샘 감사^^) #

    20040225
    1.c for graphic의 약칭(HLSL과 100% 호환)
    2.Nvidia 사이트에서 Cgsdk를 다운 받은후 설치하면
    VC6의 환경셋팅은 자동으로 실행
    3.Cg는 D3D, opengl에서 모두 사용가능
    추가로 윈도우, 리눅스 매킨토시, Xbox에서도 사용가능
    HLSL ; 윈도우에서만 사용가능
    OGLSL(opengl shader language) ; 멀티 플래폼
    4.Cg(*.cg)는 컴파일시 필요한 버전으로 셋팅할 수 있다.
    ( H/W가 지원하는 버전으로 자동변환 )
    HLSL(*.fx)도 마찬가지
    5.C++같은 범용적인 성격이 아니므로 배우기가 쉽다.
    포인터 X, 클래스 X
    배열 O, 구조체 O
    6.CgFx == HLSL ==> MAX, softImage, Maya

    0-1.라이브러리 추가설치(CgGL/ CgD3D9) --> 용량이 커짐
    D3D 입장에서 보면 겹치는 기능을 가진 라이브러리를 추가 설치한다는 단점
    0-2.사운드 라이브러리
    입력장치
    캐릭터툴 ;
    ASE등-->어기능(70% 이상)-->txt, Binary+ 기능 추가(예, 능력치부여/ 힘-20 체력-11)
    맵툴 ; MMORPG 등
    이벡터툴
    UI툴 ; 인터페이스의 능동적인 배치
    0-3.보이는 부분만 처리하자!!
    1) 절두체 컬링
    2) 보이는 부분에서만 충돌체크 처리
    3) occlusinn 컬링
    D3D의 "Query"기능을 이용/
    우선 흑백톤으로 Z값만 렌더링해서 보이는지 여부를 판단, 보이는 오브젝트만 렌더링
    {_o} Cg 세부 수업내용 {_-} 메모장_Cg

    8 Shader #

    20050418
    20070827
    #.Direct X 7 API
    -.하드웨어가 일부 프로그래밍 가능해진 버전
    -.애드 훅 멀티패스(Ad Hoc MultiPass) 기능을 구현 ; 지오메트리 연산 기능을 GPU로 옮김으로써
    지오메트리 연산의 T&L(Transform and Lighting: HDR(High Dynamic Range)의 원형)을 GPU상에서 하드웨어적으로 가능

    #.Direct X 8 API
    -.2001년에 발표, 어셈블리 프로그래밍을 통해 만들어진 세이더 모델(Shader Model)
    -.OpenGL에서 벗어나 독자적인 행보를 가속화

    #.Direct X 9 API
    -.2002년 3월에 발표, 세이더 모델 2.0부터 세이더 모델 3.0까지 가장 많은 변화
    -.한 클럭당 vs_1.0 최대 12개, 2.0은 96개, 2.0b는 1536개, 3.0에서는 무제한의 명령어를 처리
    -.마이크로소프트가 OpenGL API를 마지막으로 수용한 API

    Direct X API의 발전은 그래픽 프로세싱의 CPU에 대한 독립사(史)

    3D 그래픽을 다룬다는 API가 CPU의 작업에 따라 순서를 기다려야 되는 구조로
    화면에 나타낼 때 시스템 자원을 상당히 소비하는며, API로 인해 CPU와 GPU 모두 순수한 데이터 연산 외에 불필요한 작업량이 생겨 결과적으로 모두에게 피해를 입힌다.
    때문에 개체를 표현하는 수를 줄이거나 개체에 적용되는 그래픽 효과의 수를 줄이거나 없애는 타협책을 택하는 경우가 많아져 시스템의 잠재력을 극대화하는데 한계로 작용

    Direct X 10 API에서는 PC 태동기에 하드웨어를 직접 조적해 효율을 높였던 근본주의 개념으로 돌아가
    프로그래밍으로 하드웨어를 직접 제어하고, 세이더 연산 유니트를 통합해 관리하는 새로운 개념의 프로그래그래밍을 시도

    #.Direct X 10 API
    -.세이더 모델 4.0은 세이더 용도가 픽셀, 버텍스, 지오메트리 등 세 가지로 구분된 '통합 세이더 구조(Unified Shader Architecture)'
    -.세이더 유니트가 개별적으로 고정된 것이 아니라 그룹 형태로 존재하면서 프로그래밍에 따라 작동

    주의할 점은 프로그래밍 가능하다고 해서 내부에서 처리되는 데이터를 임의로 조작할 수 있다는 것이 아니라, 픽셀, 버텍스, 지오메트리 등으로 세분된 데이터들을 프로그래밍에 따라 배분할 수 있다는 뜻이다.

    버전 DirectX 9 API DirectX 10 API
    임시 레지스터 32 4096
    고정 레지스터 256 65536 (4096 * 16)
    텍스처 16 128
    렌더 타켓 4 8
    최대 텍스처 크기 4096x4096 8192x8192
    세이더 모델 4.0은 세이더 모델 3.0에서 볼 수 있었던 두 가지 HDR 기술인 FP16과 FP24 외에 두 가지 포맷(R11G11B10와 R9G9B9+5)을 추가(채널 컴퍼넌트별로 32비트씩으로 구성)
    -.R11G11B10은 레드와 그린은 각각 11비트, 블루는 10비트를 써 합계 32비트
    -.R9G9B9+5는 세 가지 색상이 9비트씩 차지한 가운데 5비트를 공유