[re] 버텍스버퍼에 캐시를 사용한다는 말이 무슨말인지..

조회 수 6117 추천 수 130 2003.10.30 23:01:09
피지크를 사용하게 되면 cpu에 부담이 상당히 갑니다. 버텍스 쉐이더나 매트릭스 팔레트등을 사용하면 가속기에 어느 정도 부하를 넘길수 있으나 가속기 종속적인 코드가 되어 재활용이 어렵게 되고 기껏해야 2링크 정도밖에 사용할 수 없습니다.

그래서 ss3d엔진은 피지크 처리를 전적으로 소프트웨어에 의존합니다.덕분에 무제한의 n링크 피지크를 사용할 수 있습니다.속도에서의 약점은 피지크 트랜스폼 함수를 최적화된 SSE 코드로 짜서 C만 사용해서 짠 코드보다 3배정도 빠르게 처리했습니다.

그럼에도 불구하고 피지크 처리는 cpu에 많은 부하를 걸리게 합니다.왜냐하면 일단 락을 걸고 버텍스 데이타들을 갱신해야하기 때문이죠.cpu에서 아무리 빠르게 처리한다 해도 버스를 타고 비디오 메모리로 전송되는 병목은 피할 길이 없습니다.

이 부하를 줄이고자(즉 락걸고 업데이트하는 시간을 줄이고자) 버텍스 버퍼 캐쉬를 사용합니다.

컨셉은 간단합니다. 버텍스 애니메이션을 흉내내는 것이죠. 거의 모든 게임에서는 일반적으로 애니메이션은 반복 사용됩니다. 예를 들어 걷는 동작이 있다 칩시다.30프레임짜리 걷는 동작이 있으면 적어도 1초정도 후에는 그 동작을 다시 필요로 하게 됩니다.정석대로 투영하여 그림자를 출력하는 SS3D엔진같은 경우는 적어도 두번이상 같은 애니메이션이 프레임이 사용됩니다. 이런 경우 피지크 트랜스폼된 버텍스들을 그대로 가지고 있다가 필요로 할때 다시 돌려주면 락을 걸고 새로 갱신할 필요가 없게되죠.

여기서 문제가 되는 것이 각각의 매쉬 오브젝트들은 사용하고 있는 버텍스 개수가 다르다는 것입니다. 버텍스 버퍼를 메모리 풀로 만들어서 실시간 할당,해제를 해야만 하는데 게임 등장하는 수많은 매쉬오브젝트들의 버텍스 개수가 일정치 않으므로 최대치를 정해서(오브젝트당 최대 버텍스 개수는 4000개다..이런식으로) 고정 사이즈로 할당하게 되면 메모리 효율이 극히 나빠지고 캐쉬 미스 가능성이 높아지게 됩니다.

그래서 사용하는 것이 버텍스 버퍼 힙입니다. 일반적으로 우리가 사용하는 malloc, new, HeapAlloc처럼 버텍스 버퍼의 큰 덩어리를 놓고 가변적으로 버텍스 버퍼 블럭을 할당해주고 해제시 병합하여 큰 블럭으로 만들어주는 메모리풀이죠.몇개월전에 버텍스 버퍼에 그대로 매칭시킬수 있는 유져모드 고속 메모리 힙을 만들었는데 이 힙 라이브러리를 사용하고 곧 버텍스 버퍼 힙을 만들었습니다. SS3D엔진은 같은 힙 라이브러리를 사용하여 만든 버텍스 버퍼 힙과 인덱스 버퍼 힙을 사용합니다. 덕택에 버텍스 버퍼 캐쉬와 인덱스 버퍼 캐쉬를 사용할 수 있게 된 것이죠.

버텍스 버퍼 캐쉬를 사용한 덕분에 SS3D엔진을 사용하는 코룸온라인은 평균 50%이상 과부하시 90%정도의 속도의 이득을 볼 수 있었습니다.

답변이 되었는지 모르겠군요.


>기본적으로 동일한 구조의 오브젝트면 몰라도
>캐릭터가 각각 다른데 이게 가능한지요?
>어떻게 하셨는지 힌트라도 좀 주세요...
>그럼 수고하세요
>
>

댓글 '3'

전우

2003.11.02 23:04:18
*.98.13.22

머쪄여~ :)

또다른

2003.12.03 23:30:53
*.219.187.206

메쉬를 인덱스드 트라이앵글 스트립으로 변형해 GPU캐쉬히트율을 증가시켰을경우도 30%이상의 속도 향상이 있었네요^^;;;

빗자루

2003.12.16 17:38:51
*.49.114.194

웃-_-)b 좋군요
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
63 [re] BSP/Portal/PVS에 대한... file 여치 2005-02-19 25496
62 BSP/Portal/PVS에 대한... guest 2005-02-18 25194
61 direct3d8.0 hongiro 2002-11-07 14097
60 [re] 개발 인력에 대한 질문 여치 2004-07-20 13217
59 [질문] 게임 hongiro 2003-07-07 12307
58 개나소나 만드는 바이러스 강좌#2 여치 2002-04-22 12096
57 Windows NT 4.0 이상 Completion I/O Port를 이용한 send,recv 여치 2002-10-19 11882
56 소켓 hongiro 2002-10-17 11223
55 runtime assembler..... [1] gg 2002-09-12 10856
54 3D Programming에 관한 책을 추천해주실 수 있으신지요... 천세진 2002-10-11 10499
53 [re] [질문] 게임 [1] 여치 2003-07-08 9830
52 스핀락 구현하기 여치 2002-10-19 9620
51 메모리카피는 어떻게 이루어지나? [3] 여치 2002-10-19 9597
50 마소의 도전...X-box의 후기 베지타 2003-01-15 9135
49 [re] runtime assembler..... 여치 2002-09-14 9116
48 [re] o/s의 내부에 대해 자세하게 알고싶은데여... [3] 여치 2002-10-12 9021
47 개나소나 만드는 바이러스강좌#3 여치 2002-04-22 8840
46 HTTP 에서 응답메세지중에 본문의 크기에 대한 부분이 나오지를 않습니다. [5] 바하무트 2004-03-23 8492
45 엔진 버전업에 관해 [1] 답게 2003-08-26 8198
44 질문~~~ [1] clever98 2004-06-22 8148



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet