Search

'3d'에 해당되는 글 10건

  1. 2006/08/11 Optimizing VertexBuffer and IndexBuffer (2)
  2. 2006/08/09 Depth Of Field
  3. 2006/08/01 GPU Skinning
  4. 2006/07/14 Trapezoidal Shadow Mapping
  5. 2006/06/04 Development shader system using Semantics
  6. 2006/01/27 Parallax Mapping
  7. 2006/01/25 Billboard Beam (4)
  8. 2004/12/08 옥트리
  9. 2003/09/10 BSP Study
  10. 2003/08/06 ROAM
일단 Device 차원의 최적화를 이야기할까 한다. 나머지는 프로그래머의 역량에 따라 충분히 개선될 수 있기 때문이다. 그렇지만 지금 이 글에 나오는 내용은 단순히 프로그래머의 역량에 의존적이지 않기 때문에 필히 알아두어야 하겠다.

1. 자주 업데이트 되는 VertexBuffer와 IndexBuffer는 일반적으로 D3DPOOL_DEFAULT 에 생성해야 한다.
D3DPOOL_MANAGED메모리풀을 사용하면 보통 두 번의 메모리 복사가 일어나므로 퍼포먼스 향상에 도움이 되지 않는다.

2. 가능하면 생성된 버퍼로부터 값들을 읽지 말아야 한다.
일반적으로 AGP나 비디오 메모리로부터 값을 읽는것은 매우 느리다. 이것은 옛날 2D 때부터도 그랬다. 그래서 만일 값들을 많이 읽어야 한다면 차라리 D3DPOOL_SYSTEMMEM 에 버퍼를 생성하고 읽는게 낫다.
아니면 System 에 따로 Buffer의 복사본을 두고 쓰는게 낫다.

3. 오직 쓰기만하는 버퍼는 D3DUSAGE_WRITEONLY 와 D3DPOOL_MANAGED를 사용하라.
DirectX Software Development Kit Document에는 D3DUSAGE_WRITEONLY flag 를 사용하면 버퍼에 쓰고 화면에 렌더링하는데 가장 효율적인 메모리 위치를 찾아 할당해준다고 나와있다.

그렇다면 메로리 할당 순서는?
1. 렌더타겟
2. D3DPOOL_DEFAULT
3. D3DPOOL_MANAGED
이 순서를 반드시 지키는 것이 큰 규모의 게임을 만드는데 큰 도움이 될 것이다. 나중에 비디오 메모리가 부족하다고 난리치지말자.
TAG 3d, 최적화

Depth Of Field

Game Dev./Renderings 2006/08/09 19:11 Posted by sonee
Depth Of Field(걍 심도라하자)는 우리가 피사계 심도라고 부르는것과 같은데, 우리 눈이 어떤 사물에 초점을 맞추면 그 앞에 있는 물체나 뒤에 있는 물체가 흐릿하거나 두개등으로 번져보이는 현상을 말한다.
이러한 현상은 우리가 늘 겪는 현상이고, 심도 표현력이 좋은 카메라(렌즈포함-_-) 에서도 볼 수 있다.
이러한 효과는 초점을 맞춘 부분(물체)을 부각시켜준다.(알아듣기 쉬운말로 말해 화면이 뭔가 좀 더 있어보이게 해준다)
구현 방법은 여러가지가 있고, 실제로 렌즈의 원리를 이용하여 구현하는 방법이 퀄리티가 좋아보인다. 하지만 역시나 매우 느리다.
앞으로 나오는 차세대 게임이라면, 보다 더 사실적인 연출과 효과를 보여주기 위해 필수적으로 가지고 가야할 기술이라고 생각된다.

실제로 간단히 구현하는것은 그리 어렵지는 않으나, 속도 및 몇가지 상황에 따른 문제점등이 아직 남아있다. 여튼 머리 좋은 사람들이 열심히 고민해준덕분에 많은 문제점들을 피해갈 수는 있다.
역시나 이 기술에 대한 몇가지 문서를 링크한다.
이 문서만으로 간단히 게임에 적용할 수 있다.(기존의 쉐이더 코드 수정이 꽤 귀찮을 수 있다)

http://www.ati.com/developer/gdc/Scheuermann_DepthOfField.pdf
http://www.ati.com/developer/shaderx/ShaderX2_Real-TimeDepthOfFieldSimulation.pdf
TAG 3d

GPU Skinning

Game Dev./General 2006/08/01 19:10 Posted by sonee
기존에 캐릭터 애니메이션을 CPU 에서 처리 하던것을 GPU 로 옮겼다.
하루 종일 삽질끝에 완성-_-v
그러나.. 속도는 많이 빨라 졌지만 문제가 생겼다.-_-

만들고 있는 게임에선 렌더타겟이 많은데-_-;;;
렌더타겟 별로 그려줄 때 계속 GPU 에서 애니메이션 계산을 해야 한다는 것. ;;;

결국 속도는 비슷하게 나온다.. 렌더타겟이 화면에 출력되지 않을땐 빠르고..-_-
흐으으으;;;;

여튼 쉐이더 코드만 기하급수적으로 늘어나고 있다-_-;
라이팅 1개 일때, 2개일때-_-, 스페큘러 맵, 환경 맵, 노멀맵, 라이트맵-_-, 디스플래이스먼트맵-_-, 쉐도우맵, GPU 스키닝 여부, 그림자 렌더링;;; 등
경우의 수만큼 Technique 가 증가하고 있다.
OTL
TAG 3d, SHADER

Trapezoidal Shadow Mapping

Game Dev./Shadows 2006/07/14 19:30 Posted by sonee
지난 며칠간 TSM 을 연구하고, 게임 적용에 성공하여 잘 사용하고 있다.
그러나 넓은 영역을 하나의 쉐도우 맵에 포함하여 사용하려니 생각보다 퀄리티가 잘 나오지는 않는다.
가장 큰 문제는 Depthbuffer의 Aliasing 이다.
Gems4 에 ID+Depth 가 소개가 되어 있는데 아직 적용은 해보지는 못했고, depth buffer interpolation -_- 만 기대하고 있다.
여튼 PSM 에 비해 가까이 있는 오브젝트의 경우 그림자 퀄리티가 나아져서 나름 괜찮아 하며 만족중-_-

스샷은 회사-_- 이미지라 올리진 못하고
참고한 링크를 남긴다~
TSM 링크는 이전 글에 있고, 추가로
http://developer.nvidia.com/object/shadow_mapping.html
http://developer.nvidia.com/object/Projective_Texture_Mapping.html
http://developer.nvidia.com/object/hwshadowmap_paper.html

이건 Parallel split shadow maps -_-
http://hax.fi/asko/PSSM.html
TAG 3d
보통 쉐이더를 사용하는 게임에서는 두 개 이상의 FX코드를 사용한다.
이렇게 FX코드 파일이 늘어날 수록 번거로운 부분은 C 코드 내에서 쉐이더 코드에 있는 변수로 값을 세팅해줄 때 동일한 변수명이 아니면 통일화된 쉐이더 구조를 개발하기 힘들다는 점이다.

그래서 HLSL 코드에서는 semantic 이라는 기능이 지원이 되고 각각 변수가 의미하는 것을 지정해줄 수 있다.
예를들면

float4 CameraPos : CAMERA_POSITION;

CameraPos 는 CAMERA_POSITION 이라는 것을 의미하게 된다.
따라서 이렇게 Semantic policy 만 잘 정의 해두면 여러 fx들을 손쉽게 교체하고, 사용할 수 있다.

이와 관련해서 FX 파일을 읽을 때 FX파일에 있는 모든 변수들에 대하여 semantic 이 있는 경우에는 미리 ShaderHandle 객체를 만들어 각각의 핸들을 세팅해 주면 런타임에 find shader-handle by semantic 을 수행하지 않고, 로딩시에 읽어 미리 세팅해놨던 핸들을 사용하여 탐색 시간을 줄일 수 있다.

또 이러한 구조를 만들어 사용하게 되면 편리한 부분은 sort by shaderHandle 이 가능하다는 점이고, batch process 의 퍼포먼스를 향상 시킬 수 있다.
semantic 에 대해서는 실수 하지 않도록 따로 헤더를 만들어 pre-def. 하여 사용하도록 하고, 예외 처리해야할 부분은 ShaderConstant 객체를 만들어 스크립트화 시켜 사용하거나, 상속을 사용하여 dynamic 하게 구현하도록 한다.

--
오늘도 역시나 셤공부하러 학교 나와서 밥먹고 블로그질을..ㅠㅠ
TAG 3d, SHADER, 설계

Parallax Mapping

Game Dev./Renderings 2006/01/27 19:05 Posted by sonee
텍스쳐에 깊이를 느끼게 하는 Parallax Mapping. 보통 Normal(Bump) Map 과 같이 사용한다.

언제쯤 게임에 적용해볼 수 있는 모험-_-을 할 수 있을까
TAG 3d

Billboard Beam

Game Dev./Renderings 2006/01/25 17:04 Posted by sonee
보통 레이저나 각종 광선효과를 표현하기 위해 단순히 빌보딩 하는 방식을 많이 쓴다.

나도 아무 생각 없이 -_- 빌보딩시켜서 구현을 하였는데;

gems3 에 billboard beam 에 대한 내용이 나와있다.

이걸 응용해서 연결 고리식의 billboard beam을 만들면 효과가 괜찮을 것 같다.
articulated billboard beam -_- 이라 해야하나;

어쨌든 구현했는데 이쁘지 않다면-_- 함 살펴보는것도.~
TAG 3d

옥트리

Game Dev./General 2004/12/08 21:16 Posted by sonee
해봤던거라 그런지 모르겠지만 반나절 만에 완성한-_- 옥트리..
한 번에 되는게 아직도 너무나 불안하다.
일단 기본적인 obb/ray/segment 충돌 처리는 다 된거 같다..
bsp 를 쓸까 하는 갈등이 마구 때린다...-_-

BSP Study

Game Dev./General 2003/09/10 10:01 Posted by sonee

옛날 위키에 적어놓았던 글을 가져옴

  • Binary Space Partitioning
  • 공간을 둘로 앞과 뒤로 적당히-_- 쪼개는 방법.
  • 2003년 8월 22일 공부 시작.
  • 2003년 8월 24일 노드 분할 성공.. ToT 말그대로 분할만-_- 성공
  • 2003년 9월 5일 꾸에에 첨부터 다시 작성하는중~
  • 2003년 9월 7일 대략 분할 완성-_-
  • 2003년 9월 10일 PVS 붙이기 시작
  • 아하핫 첨으로 분할해서 출력해본 스크린샷.. 사실 분할만 했을뿐 기능이 엄청 이상하다.. 그나마 제대로 나오는곳에서 스크린샷-_-

  • 분할면이 24개밖에 안되다니-_-;;

  • bsp 분할후 출력. Frustum 적용. 우에에 뭔가 되지만.. 어직 엄청 부족한듯 싶다.

  • bsp 실내부분에서 -_-;;; 아직 몇개의 polygon 들이 깨진다.... 텍스쳐 좌표는 아직 세팅안함.

  • 므흣흣 어쩌다 되버린 bsp-_-

  • 다른 맵에서... 흐... polygon 이 깨지는부분이 몇군데 있군..

TAG 3d, BSP

ROAM

Game Dev./General 2003/08/06 10:03 Posted by sonee

옛날 위키에 적어놓은 내용

구현중 사진

* 처음으로 구현해본 사진

* 최적화와 상관없이 -_- 돌려본 사진.(오옷 된다-_-a)

* 안개, Shading 된 스크린샷

* 그 두번째-_-

TAG 3d, ROAM