[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
번호 제목 글쓴이 날짜 조회 수
63 [re] 개발 인력에 대한 질문 여치 2004-07-20 13217
62 [질문] SS3D의 안보이는 펄리곤 제외 방식 [3] 방문객108 2004-07-01 6305
61 질문~~~ [1] clever98 2004-06-22 8148
60 ss3d 엔진에 대한 질문 Guest 2004-06-13 5412
59 [re] ss3d 엔진에 대한 질문 [2] 여치 2004-06-13 6159
58 [질문]HeightField에서 LOD는 안쓰시나요? [5] clever98 2004-05-05 4751
57 [re] [질문]HeightField에서 LOD는 안쓰시나요? 여치 2004-05-05 6931
56 [re] [질문]HeightField에서 LOD는 안쓰시나요? [6] protian 2004-06-10 7709
55 HTTP 에서 응답메세지중에 본문의 크기에 대한 부분이 나오지를 않습니다. [5] 바하무트 2004-03-23 8492
54 엔진 제작기간은? 답게 2003-12-08 7554
53 [re] 엔진 제작기간은? 여치 2003-12-09 6023
52 캐쉬 적중률 어떻게 측정해요?? ... 2003-11-06 6231
51 [re] 캐쉬 적중률 어떻게 측정해요?? file 여치 2003-11-06 5101
50 버텍스버퍼에 캐시를 사용한다는 말이 무슨말인지.. ario 2003-10-28 5794
» [re] 버텍스버퍼에 캐시를 사용한다는 말이 무슨말인지.. [3] 여치 2003-10-30 6117
48 컴과 내 인생 여치 2003-09-24 5085
47 [질문]열혈피구 [5] hongiro 2003-09-03 6560
46 엔진 버전업에 관해 [1] 답게 2003-08-26 8198
45 [re] 엔진 버전업에 관해 [1] 여치 2003-08-28 6492
44 오랜만에 질문 하나 드립니다~ 풍이 2003-08-07 7076



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