* 주석은 코드가 '어떻게' 동작하는가를 말하는 게 아니라 '무엇을' 하는가를 말해야 한다는 것이다.
* 일곱 가지 정석과 세가지 바보짓
정석 1. 재사용 계획, 같은 일을 되풀이 하지 마라
정석 2. 문서화, 머릿속에 남겨두지 마라
정석 3. 기획 먼저, 개발은 다음
정석 4. 일정, 모든 사람들에게 목표를 확실히 알려주어라
일정을 짜고, 일정에 쫓기면 포기하고 하는 일은 반복적으로 일어난다. 문제는 계획을 포기하는 것이 아니라, 대안을 만들지 못하고 코딩하고 수정하는 악순환에 빠지는 것이다. ( Steve
McConnell )
정석 5. 실수를 잡으면서 가라
정석 6. R&D의 수준을 조절하라
정석 7. 선을 그을 때를 알라
바보짓 1. 부적절한 관리
좋은 관리는 눈에 보이지 않게 하는 것이다. 평소에는 조용히 팀의 활동을 지원하고 필요할 때만 끼어들어야 한다. 권위는 팀원들에 의해 만들어지며, 영화의 감독과 마찬가지로 결정권과 창조적 비전을 가진 개인이 갖게 된다.
바보짓 2. 기능의 범람
바보짓 3. 코더들의 편협함
* 공개프로그램
XnView-win/ rendermonkey/ Paint.NET/ 7-Zip/
StickyPad
2 걸어서 게임까지/ 원하는 만큼 멀리 갈 수는 있지만, 원하는 만큼 빨리 갈 수는 없다. #
◈ 영상자극 ; 게임뇌 (--> 치매현상과 비슷) ⇔ 명상
/ 전두엽이 발달하지 못하고, 사회성이 결여
/ 클릭(자극)에 의한 적각적인 반응은 감정의 급격한 기복, 이성적 판단을 저해하고 결과를 기다리지 못함
* 메모장 ; 메모장의 항목별 정리(확장)
* 딱지 ; 단위 주제에 관한 정리
* 동기화 ; 클라이언트가 서버에 보내는 내용은 이미 끝난 행동이 아니라 이렇게 하고 싶다는 플레이어의 의지이며, 서버가 클라이언트에게 되돌려주는 데이터는 이미 플레이어에게 일어난 사실이다. 플레이어가 느린 컴퓨터를 가지고 있다면, 게임 내에서의 그 플레이어의 행동 역시 느릴 것이다.
* 기술정보
* 세미나 메모
* 딱지
* 기타
* 유저는 게임을 진행하면서 단계적으로 기술을 배우는 것이지, 모든 것을 단번에 깨우치는 것이 아니다.
..."진행하면서 기술 배우기" 방식은 유명한 게임 디자이너인 닌텐도사의 시게루 미야모토로부터 시작되었다. 그는 마리오와 젤다의 전설을 제작한 사람이다. 그의 게임 디자인 방식은 아주 모범적인데, 특히 젤다 시리즈가 그렇다. 이런 게임을 플레이하면 게임디자이너가, 플레이어가 알아챌 수 없는 방식으로, 선형적인 경로를 따르게 했다는 것을 느낄 수 있다. 이 유명한 속임수는 레벨을 완료하기 위한 목적을 레벨을 완료함에 따른 보상으로 여기게 만들어서 플레이어를 속이는 것처럼 보인다. 그리고는 그 목적물을 가지고 있으면 레벨을 완료하기가 얼마나 쉬웠는지 깨닫는다. 좌절감을 느끼는가? 그렇다, 게다가 영리하기도 하다. 이런 방식은 완벽한 중독성 그물을 제공하고, 새 기술을 배우는 매끈한 방법을 제공한다. 그 레벨에서 얻은 목적물은 당연하게도 다음 레벨에서 무척 중요한 것이다. 그렇다. 이런 것은 비현실적이다. 그러나 현실은 별로 구조적이지 않으며, 그렇기에 사람들은 게임을 하는 것이다. 게임 디자이너가 만들어둔 일관되고 구조적인 세상에서 재미있는 것들을 하는 것이다.
#출처 - "게임아키텍쳐&디자인2", 8장...
2.2.1 그래픽 파이프라인의 전통적 아키텍쳐 #
*.설정/래스터 → 텍스쳐 어드레스 → 텍스쳐 → Fog → 알파 테스트 → Depth 테스트 → 알파 블렌딩 → Mem Write
깊은 파이프라인(200단계)로 항상 모든 단계를 거쳐야하고, 항상 clocking을 수행한다.
* 하드웨어 스팩
2.2.2 모리노리 개정 버전 1.03 #
* 혼자 백수인 관계로 혼자 수정 작업을 했는데, 작업중에 추석이 있었고 조금씩 수정하다 보니깐 처음 계획한 수정범위 보다 넓어져서 작업기간이 길어졌고, 무엇보다도 공동 작업에서의 주석의 필요성을 절실하게 느꼈으며,
1.03개정은 늑대를 잡았을 때, 보상 아이템으로 horn를 추가하는 것으로 요약할 수 있다.
버전 1.03에서 변경된 내용
모리노리_개정1.03 @ 2004-10-25 @
2.2.3 3D Character Animation #
* 애니메이션의 종류
1.Vertex Animation ( 정점 애니메이션 ); 스프라이트 애니처럼 매쉬의 정보를 동작동작 마다 만들어 놓고, 시간에 맞추어서 그 매쉬를 렌더링한다.
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 : 역운동학 )
* Scene Graph; 3D 데이타를 표현하기 위한 자료 구조로써
전체 지형에서, 3D엔진에서 처리해야 할 절두체 내 보이는 데이타만을 처리하기 위해 세세하게 나누어서 처리(전처리 필요)
1.2진트리(binarytree)
2.쿼드트리(quadtree); 공간을 4개의 자식 노드로 재귀적으로 분할하는 방식
생성할 지형의 크기는 반드시 2의 n승 + 1이다.
3.옥트리(octree)
* LOD
Static LOD; 물체와 카메라와의 거리에 따라 가까울수록 세밀한 메쉬로 구성된 물체를 렌더링
장점; 간단한 연산으로 빠르게 동작
단점; 처음부터 메시의 정밀도가 정해져 있기 때문에 단계에 따른 메시를 가지고 있어야
하기 때문에 메모리 낭비가 심하고, 단계가 급격하게 변할 경우 popping현상이 발생
Dynamic LOD; 물체와 카메라와의 거리에 따라 실시간으로 메시의 정밀도를 변화
장점; 거리에 따른 자연스런 LOD구현으로 popping현상을 방지
단점; 메시 분할과 간략화의 추가적인 연산이 필요하기 때문에 상대적으로 느리게 동작
* X파일 메시를 읽어들일 때 주의점은 메시는 여러 개의 폴리곤으로 구성되어 있고,
폴리곤은 각각의 재질을 가질 수 있다. 재질이 여러 개일 경우 메시를 재질별로 부분 메시로 분할, 부분 메시별로 따로 그린다.
1.
D3D에서는
DrawSubset()함수를 이용 렌더링
2.
SetTexture() +
SetMaterial() +
DrawSubset()로 해당 메시에 텍스쳐와 재질을 적용
1.닷넷용 어이스트에서 함수색이랑 변수색이 표시 안되는 경우
닷넷의 폰트가 문제가 될 수 있는데,
.Net에서 Default 로 가지고 있는 폰트를 사용할 경우 표시가 안되는 경우가 있다.
폰트를 Fixedsys 로 변경해 한다.
2.VS.Net에서 프로그램 줄번호 보이게 하는 옵션
도구|옵션|텍스트편집기|C/C++에 디스플레이 설정 옵션 체크
3 C++ #
*
가상함수(virtual function)는
기본 클래스 내에 선언되고 파생 클래스에 의해 재정의된 클래스 맴버 함수이다. 가상함수를 생성하기 위해서는 키워드 virtual을 함수 선언 앞에 쓴다. 근본적으로 가상함수는 다형성(polymorshism)의 기본 철학인 "한 가지 인터페이스와 여러 가지 방법"을 구현한다. 기본 클래스 내에 있는 가상함수는 그 함수에 대한 인터페이스의 형태를 정의해 주고, 파생 클래스에 의한 가상함수의 재정의(특정한 방법을 생성)는 특히 그 파생 클래스에 관련된 연산을 구현한다.
Virtual-Key Codes @2004-04-24@
namespace @2004-04-25@
namespace의 역할은 어떤 모듈이나 타입 등을 하나의 그룹으로 묶어주는 역할을 한다.
헝가리안표기법; 변수이름 정할 때 참고 @ 2004-05-13 @
메모장_STL @ 2005-04-26 @
메모장_VS2005로_만든_프로그램_배포방법 @ 2008-04-09 @
메모장_Lua Tinker @ 2008-04-24 @
*
라이브러리 등록
#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주 기본 프로그램 과정
C 세부 수업내용 and more...
메모장_C
* 모든 Windows 응용프로그램은 올바로 동작하기 위해 공통된 과정을 수행하고, 게다가 이들 과정은 응용프로그램이 개발된 환경에 관계없이 항상 일치한다. MFC는 boilerplate code전부를 처리하고, Windows 응용프로그램의 기본적인 2부분(message pump와 windows procedure)을
CWinApp와
CWnd에서 처리한다.
클래스의 구성요소...
클래스는 이름(name), 애트리뷰트(attribute), 오퍼레이션(operation)으로 구성됩니다.
-.이름; 클래스의 이름이고 다른 클래스와 구분되는 이름으로 작성
단순 이름과 패키지를 접두어로 가지는 경로 이름이 있다.
-.애트리뷰트; 클래스의 모든 객체가 공유하는 어떤한 특성을 표현
(객체가 가지는 일종의 데이터 혹은 상태에 대한 추상화)
-.오퍼레이션; 다른 객체가 요청할 수 있는 서비스를 구현
객체 대하여 수행할 수 있는 일에 대한 추상화이며 해당 클래스의 모든 객체가 공유하는 것이다.
클래스 식별시 고려사항
1.저장하거나 분석하여야 할 정보가 있는가?
2.외부 시스템이 존재하는가?
3.패턴 클래스 라이브러리, 컴포넌트 등이 존재하는가?
4.시스템이 취급하여야 하는 장치가 존재하는가?
5.조직체의 부서가 존재하는가?
6.액터가 어떠한 역할 수행하는가?
4 소프트웨어 3D (김성완 샘 감사^^) #
3D 렌더링을 소프트웨어(CPU에서 실행)로 구현하는 목적
1.3D원리를 이해
2.가속카드가 내장되어 있지 않는 모바일 기기등 개발
3.Shader Programming의 이해와 응용
4.3D 가속기 파이프라인 설계
폴리곤을 제일 빠르게 표현 ==> 화면에 출력하지 않는 것이다.
(최적화의 기본은 무리하게 많은 Data를 처리(화면으로 출력)하지 않는 것이다.)
폴리곤 렌더링의 경우 기본Data = 꼭지점(정점)에서 출발.
#. 좌표계(Coordinate System)
왼손좌표계 ; 시계방향(CW: Clock Wise)
DirectX - 행우선(row major) 방식
오른손좌표계 ; 반시계방향(CCW: Count Clock Wise)
OpenGL - 열우선(column major) 방식
3DS Max - 바닥을 X/Y축, 높이를 Z축으로 사용
XNA
5 게임에서의 물리 #
6 다이렉트 3D #
- D3D는 구조체를 기본적으로 이용, 왼손 시계방향
setting...
D3D9.lib
D3D9dt.lib
#include <d3d9.h>
- 기본적으로 <선언> --> <렌더링> ; 선언부분에서 선언된 내용은 전역으로 사용
<환경설정> --> <DATA 입력/ 처리>
- 카메라와 매트릭스는 분리하자.(20040408)
- (주의) 라이트를 사용한 효과를 얻기 위해서는
라이트를 설정하고
재질을 설정하고
버텍스 정의에 D3DFVF_NORMAL하고, normal값 넣어준다.(20040409)
참고로, Draw call 전에 pd3dDevice->
SetFVF();를 확인한다.
- texture stage; 중첩해서 출력하기 위한 텍스처들이 임시로 보관되는 영역
Direct3D는 총 8개의 텍스처 스테이지를 사용할 수 있으나 하드웨어적인(그래픽 카드등) 제약이 있다.(보통 2~4장)
- 주사율에 관계없이 렌더링
d3dpp.
PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //이 부분만 추가
세부 수업내용
메모장_수업D3D
D3D more...
메모장_D3D
7 Cg (최문성 샘 감사^^) #
20040225
1.c for graphic의 약칭(HLSL과 100% 호환)
2.Nvidia 사이트에서 Cgsdk를 다운 받은후 설치하면
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값만 렌더링해서 보이는지 여부를 판단, 보이는 오브젝트만 렌더링
Cg 세부 수업내용
메모장_Cg
8 Shader #
20050418
- HLSL(High Level Shading Language); 고급 언어인 C 언어를 사용하여 셰이더 프로그램을 개발하고,
이후에 FXC라는 전용 컴파일러를 사용하여 VS와 PS의 코드를 만들어 낸다.
콘솔에서 fxc.exe를 사용하기 위해서는 fxc.exe가 있는 곳이 path 환경변수로 등록 되어 있어야 하고,
c:\dxsdk\Bin\
DXUtils 폴드에 있다.
- 다이렉트X 8.x세대의 하드웨어; 버텍스 쉐이더와 픽셀 쉐이더를 지원하는 그래픽 칩을 지원
-.픽셀쉐이더 1.4 ; 다이렉스X 8.1이 지원하는 쉐이더중 가장높은 버전(1.4)
픽셀쉐이더 1.4에서 1번에 pass로 가능한 처리가 픽셀쉐이더 1.1에서는 4번의 pass가 된다.
- 다이렉트X 9; 버텍스 쉐이더 2.0 및 픽셀쉐이더 2.0가 지원
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에 대한 독립사(史)
#.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비트를 공유