포트폴리오 기술서 조병욱
1. Project Information 2. Technique 3. Code Explanation 4. Screen Shot & Explanation 5. Other Project
Project Information
Project Information 제작 기간 2012. 3. 21 ~ 2012. 5. 28 2개월 참여 인원 2012. 3. 21 ~ 2012. 5. 28 2개월 참여 인원 클라이언트 4명, MFC 맵툴 1명 내가 맡은 분야 잔상, 소프트 파티클, UI 장르 논타겟팅 액션 RPG 사용 언어 / 개발 도구 C / C++, WIN32 API, Direct SDK, HLSL, MFC, Fmod Sound 3D Max, Photo Shop, U Model Viewer 개요 마을 안의 상점에서 더 쎈 무기를 구입할 수 있고 마지막 보스인 용을 잡으면 게임이 종료됩니다. 동영상 링크 3D Team Project 동영상
Technique
Technique Singleton 패턴을 활용한 객체의 단일 객체화 ( Device, Manager, Sound, Mediator 등 ) Abstract Factory 패턴을 활용한 객체의 제품 군 별 생성 ( Factory 클래스를 Template와 접목시켜 객체를 생성 ) 객체의 Prototype을 미리 생성 후 복사 생성사를 통해 객체 생성 Mediator 패턴을 사용해 객체들의 M:N 관계를 M:1 관계로 만듬 ( Mediator 클래스를 Singleton화 시켜 객체들간의 관계를 용이하게 함 ) Adapter 패턴을 사용해 객체간의 인터페이스 호환 ( Camera 클래스의 인터페이스를 Obj 클래스에서 사용할 수 있도록 함 )
Technique STL을 사용하여 Object 및 Resource 관리 ( List : 삽입/삭제가 빈번한 객체 관리 Vector : 삽입/삭제가 빈번하지 않은 객체 관리 Map : Key/Value를 사용해 Resource 관리 ) 플레이어 중심으로 유연한 카메라 구현 잔상 및 Soft Particle을 활용한 Effect 구현 HLSL을 사용해 프레임 확보 및 그래픽 효과 증가 OBB를 활용한 충돌 FMOD를 활용한 사운드 출력 및 제어 SVN을 사용해 팀원들간 소스 관리 U Model Viewer를 사용해 Object 추출
Technique Shader Skinning을 사용해 프레임 확보 및 애니메이션 구현 Render Target을 사용해 깊이 버퍼 그림자 및 잔상 구현 HLSL을 활용한 Water 구현 Pixel Shader 연산을 통해 Object 밝기 값 조절 HDR 기술을 사용해 더욱 실감있는 조명 구현
Code Explanation
Static 변수는 언제 초기화 될 지 모르기 때문에 메소드의 안에 둠으로써 초기화 지점을 설정해 두었고 상속을 위해 접근지정자 protected와 virtual 소멸자를 사용하였습니다. Singleton 클래스를 Template과 접목시켜 소스코드의 중복성을 줄이고, 옆의 클래스를 상속받아 단일 객체화와 동시에 어디서든 사용할 수 있도록 하였습니다
클래스의 상속을 활용하여 계층구조로 설계 하였고, 상위 클래스는 최소한의 멤버 변수나 멤버 함수를 정의하고, 하위 클래스에서 세부적인 속성을 정의하였습니다. 상위 클래스에서 가상함수를 정의한 후 Runtime 시간에 하위 클래스에 Overriding 된 멤버 함수를 동적 바인딩 하여 호출 합니다. 소멸자에 virtual 키워드를 붙여주어서 자식 클래스의 소멸자도 호출 될 수 있도록 설계하였습니다.
상속받는 하위 클래스에서만 접근이 가능하도록 하였고, 실제 구현 클래스는 private 을 사용하여 상위 클래스의 멤버변수를 Protected로 두어 상속받는 하위 클래스에서만 접근이 가능하도록 하였고, 실제 구현 클래스는 private 을 사용하여 외부에서의 직접적인 접근을 막았습니다. Get, Set 접근자를 지정하여 멤버변수에 직접 접근하지 못하고 간접 적으로 접근 할 수 있도록 하였습니다.
#define 을 사용하면 컴파일 전 전처리기 지시자가 먼저 처리하여 변수가 컴파일러의 기호 테이블에 들어가지 않아 디버깅 할 수 없습니다. 따라서 #define 대신 const 키워드를 사용하여 값을 확인 할 수 있게 하였습니다.
Screen Shot & Explanation
Pong Shading 기술에 High Dynamic Range Lighting 기술을 더해 더욱 실제감 있고 화려하게 만들었습니다.
깊이맵을 이용한 Soft Particle 기술로 자연스러운 불을 구현하여 마을의 화덕과 마지막 보스인 용의 브레스 스킬에 적용시켰습니다. 소프트 파티클 구현 동영상 링크.
몬스터가 죽게되면 알파 블렌딩을 사용하여 자연스럽게 사라지도록 하였습니다.
상점에서 아이템을 구매/판매를 할 수 있고 아이템 및 인벤토리/상점 창을 이동시킬 수 있습니다.
무기를 오른쪽 클릭하면 아이템 위에 E라는 장착 표시가 생기고 무기 교체가 가능하도록 하였습니다.
OBB 충돌 기술로 타격판정 을 하였고 애니메이션 메 시의 본행렬을 OBB박스의 부모행렬로 받아와 계속 따라붙도록 만들었습니다. 충돌시에 타격 Effect와 데미지박스가 생성됩니다.
Render Target으로 무기를 여러번 출력후 한곳에 합쳐서 출력하여 잔상효과를 구현하였습니다. 잔상 구현 동영상 링크.
렌즈플레어를 구현하여 실감있는 조명효과를 내었습니다.
스플렉팅. 알파채널로 여러 텍스쳐를 섞어 지형을 자연스럽게 만들었습니다.
Render Target을 사용하여 반사와 굴절로 물을 구현하고 카메라 각도에 따라 반사량을 조절하여 더욱 실감있게 하였습니다.
Other Project
Direct 2.5D 팀 프로젝트(3인) 소실점을 사용해 3D 처럼 보이게 만들었습니다. 2.5D 팀 프로젝트 동영상 링크입니다.
API 기반의 2D 게임 API 기반의 2D 프로젝트 동영상 링크입니다.
Thank you 조병욱 cho982@naver.com 010-2060-4676 3D Team Project 동영상 링크