yuchi's Development Home


[여치스컬럼] 게임 유져들 사이에 퍼진 미신들

조회 수 2565 추천 수 77 2010.08.27 12:03:52
1. ATI GPU에 최적화되어있다 또는 nVidia GPU에 최적화되어있다.



3D프로그래밍을 10년넘게 했지만 어떻게 하면 GPU에 특화된 코드를 짤 수 있는지 잘 모르겠습니다.



D3D나 openGL과 같은 공통 API를 사용하기 때문에 딱히 어느 하드웨어에 맞춰서 작업하지도, 할 수 도 없습니다.



물론 하드웨어와 드라이버의 특성상 경우에 따른 퍼포먼스 차이가 있습니다.



퍼포먼스 차이는 있지만 인위적으로 특정 GPU에서 더 빠르게 작동하도록 만들기가 어렵다는 것입니다.



8년전에 제가 만든 엔진의 경우 nVidia쪽이 훨씬 빨랐습니다. 적어도 2배이상.



당시엔 GPU스키닝이 일반화되지 않았고 쉐이더 1.0도 사용할 수 없는 그래픽카드들이 대부분이었기 때문에 CPU로 스키닝을 처리했고 완료된 결과는 비디오메모리에 락을 걸어서 전송했습니다. 텍스쳐 uv애니메이션, 버텍스 애니메이션도 마찬가지였죠.



확실히...8년이 지난 지금도 마찬가지입니다면 락을 걸게 되면 ATI장비에서 심각하게 퍼포먼스가 떨어집니다. 제가 보기엔 하드웨어적인 특성보다 드라이버의 캐쉬 전략이 더 큰 영향을 미치지 않나 추측해봅니다만 왜 그런진 확실히 모르죠.



개인적으로 nVidia를 선호하고 몇 번의 경험 때문에 ATI를 싫어하게 되어서 현재 개발중인 게임도 nVidia에 최적화하고 싶었습니다만, 위에서 언급했다시피 딱히 어느 GPU에 맞춰 최적화할 방법이 없습니다.



nv칩에서만 지원하는 하드웨어 쉐도우맵 기능을 사용합니다만 그마저도 ATI4850부터는 동일하게 지원합니다. 같은 API를 사용하는 이상 특정 GPU에 맞춰서 뭘 할 수가 없습니다. (쉐이더 1.4라든가 2_a는 논외로 칩니다)



지금 만들어쓰고 있는 엔진은 렌더링중 락을 전혀 걸지 않습니다. 대부분의 자원도 최대한 비디오메모리에 올려버립니다.



그래서인지 ATI장비에서 아주 약간 더 빠릅니다만, 이거야 nVidia, ATI, MS 모두 권장하는 퍼포먼스 향상의 기본 지침이지 어느 장비에 최적화하는 비법은 아닙니다.



굳이 ATI장비에서 느리게 작동하게 하고 싶다면 락을 많이 걸면 됩니다.



최적화 논란에 대해서 결론을 내리자면 게임개발사에서 특정 gpu에 맞춰 게임을 최적화하는게 아니고 GPU업체에서 게임에 맞춰 최적화한다고 보는게 맞습니다.



드라이버가 업데이트될때마다 릴리즈 노트를 보면 '어느 게임에서 몇 %만큼 성능 향상이 있다.'는 내용이 대부분이죠.



제가 알고 있는 선에선 nVidia또는 ATI와의 관계 때문에 일부러 테스트를 해가며 특정 업체의 GPU에서 일부러 빠르게 동작하도록 노력하는 개발사는 없습니다.





2. 이 게임은 하드웨어를 손상시킨다.



예전에 c9이 nv8800계열 그래픽칩을 손상시킨다는 기사가 돌았었는데요. 최근에 스타크래프트2가 하드웨어를 손상시킨다는 기사가 떴더군요.



위에서 언급했다시피 게임을 개발할때 하드웨어를 직접 제어할 수 없습니다.



게임 소프트  -> D3D또는 OpenGL -> Driver ->GPU



이와같은 단계로 GPU를 제어하는 것이죠.



어플리케이션단에서 할 수 있는거라곤 드라이버에서 실패를 리턴할때까지 비디오메모리에 있는대로 텍스쳐를 올리거나, 최대한 GPU가 바쁘도록 자주, 많은 양의 버텍스 스트림을 때려넣어서 Draw함수를 호출하는는 정도입니다.



하지만 GPU를 설계할땐 어차피 최대부하를 가정하기 때문에 일을 많이 시킨다고 하드웨어가 손상되는 것은 말이 안됩니다. 그렇다면 하드웨어 버그죠.



특정 GPU에 버그가 있고 그 버그를 발동시키는 트리거를 게임 어플리케이션에서 제공할 가능성도 없지 않습니다만, 이 경우도 하드웨어 버그입니다.



혹자는 다른 게임은 안그런데 왜 이 게임만 이러냐? 라고 반문하실지도 모르겠습니다.



렌더링함수를 호출해서 GPU에 일 시키고나면 CPU는 GPU가 작업을 완료할때까지 대기합니다. 반대로 CPU가 렌더링 함수를 호출하기 전까지 GPU는 대기합니다. GPU가 대기하는 시간이 길면 발열이 낮아지고 GPU대기시간이 짧을수록 발열이 높아집니다.



즉 CPU에서의 작업시간이 길어지면 GPU 부담이 적어집니다. GPU활용률이 낮아지죠. 발열도 적습니다.



GPU를 태워먹는다는 구설수에 휘말리는 게임들은 CPU에서의 작업시간이 길지 않아서 GPU활용률이 높다고 볼 수 있습니다. 어찌 보면 좋은 것이죠. GPU가 노는 일 없이 화면에 아름다운 그래픽을 뿌려주기 위해 적극적으로 작동하고 있으니까요. 프레임 레이트가 올라가든지 화면이 아름다워지든지 둘중 하나는 해줍니다.



'GPU에 무리를 주지 않는 게임은 느리거나 그래픽이 나쁘고 GPU에 무리를 주는 게임은 프레임이 잘 나오거나 그래픽이 좋다'라는 말도 안되는 소릴 하려는게 아닙니다.



GPU대기시간을 줄일수록 GPU발열이 높아진다는것입니다. 잠재적으로 모든 3D어플리케이션들은 고발열에 의한 GPU손상을 야기시킬 가능성을 가지고있는 것입니다.



게임이 GPU를 혹사시켜서 GPU가 고장난다면 사실 해결책은 간단합니다. GPU클럭을 낮추거나 대용량의 쿨러를 설치하면 됩니다.



업체에서 GPU에 보호회로를 내장해서 일정 온도 이상 올라가면 시스템이 멈추게 해주면 좋겠는데 요새 그렇게 나오는지는 잘 모르겠습니다.



기본적으로 오버클럭이 전혀 되어있지 않은 레퍼런스대로의 그래픽 카드라면 거의 문제가 될 일이 없다고 생각합니다만, 요새는 많은 그래픽카드 벤더들이 조금씩 오버클럭킹을 해서 제품을 내놓기 때문에 게임에서의 적극적 GPU활용으로 인한 손상이 있을 수는 있습니다.



물론 이 경우도 소프트웨어의 버그는 아닙니다.



블리자드에서 어떤 공식입장을 밝힐지 모르겠습니다만, 제 예상으로 개발팀안에선 '별..미친..."이러고 있을거고 마케팅,홍보 부서에선 '내부에서 대안을 찾고있다'라고 하겠죠.



뭐 진짜 기술적으로 뾰족한 수가 없습니다. 소프트 버그가 아니거든요. 30프레임 나오던 게임을 15프레임으로 낮추고 중간에 한프레임씩 gpu를 쉬게 해주면 아마 절대 GPU가 고장날 일은 없겠지요. 하지만 어느 유져가 이런 류의 패치를 원하겠습니까?



좌우간 디바이스의 임계치를 넘기면 홀라당 맛이 갈 수 있는거고 그 선이 어느 정도인지 게임소프트웨어 개발사에선 알 수 없습니다.



그러니까요. 그런 기사에 휘말려서 게임업체를 까지 말자는 얘기였습니다.



제가 개발중인 게임 GPU활용률이 95%이상인데 나중에 GPU태워먹는 게임이란 소리 들을까봐 미리 적어봅니다.



--------------------------------------------------------------------
한달쯤 전에 네이버 블로그에 썼던 글인데 홈피에는 올리지 않아서 늦게나마 홈피에도 업데이트합니다.

댓글 '2'

레옹2

2010.08.30 15:01:04
*.229.244.230

이건 어때.. ATI의 R2VB이용하고.. nVidia의 Vertex Fetch를 이용하는거야.. ㅋㅋㅋ 그래서 그걸 스키닝에 쓰는거지 :D

그럼 나름 최적화? ㅎㅎㅎ

여치

2010.08.30 17:33:10
*.199.248.185

레옹 / 나름 특정 장비에 맞는 최적화가 되겠네.
파일 첨부

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

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

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수
381 i3서버 전력 테스트 여치 2011-07-20 7578
380 에일리언웨어 m15x 풀로드시 전력 테스트 여치 2011-07-20 6755
379 노트북 그래픽카드 GTX460M로 교체 file 여치 2011-05-30 10017
378 최근 구입한 아이템 - 酒井法子 앨범 あなたが満ちてゆく file 여치 2011-04-15 7209
377 심심테스트 IE9가 사용하는 것은 dx9? dx10? file [2] 여치 2011-03-07 3746
376 5년만에 재작업중인 세라마스 레진피규어 file 여치 2011-01-09 5112
375 스즈미야하루히의 소실 감상 file [1] 여치 2010-11-21 6237
374 최근 구입한 아이템 - Power Dolls 1 (remake) file [2] 여치 2010-11-20 2686
373 최근 구입한 아이템 - 머신로보/레이나 이터널 컬렉션 file 여치 2010-11-20 2926
372 오늘 날라온 물건 [초인로크 신세계전대 이미지 앨범] file 여치 2010-10-20 2950
371 프로젝트 엡실론 3차 알파 테스트를 무사히 마쳤습니다. file [8] 여치 2010-10-18 3251
370 프로젝트 엡실론 3차 알파테스트 합니다. file [5] 여치 2010-10-01 2125
» [여치스컬럼] 게임 유져들 사이에 퍼진 미신들 [2] 여치 2010-08-27 2565
368 프로젝트 엡실론 2차 알파 테스트 미리보기 영상 여치 2010-05-27 3032
367 프로젝트 엡실론(가칭) 2차 알파테스트 합니다. file 여치 2010-05-20 2731
366 트위터 개설 [4] 여치 2010-04-05 2438
365 사무실 입구 옆 칠판의 그림 file [2] 여치 2010-03-02 2353
364 최근 구입한 아이템들 여치 2010-02-27 2720
363 [여치스컬럼] 스티브잡스를 배우자? 여치 2010-02-22 1752
362 아이폰 구입 및 사용기 [2] 여치 2009-12-25 2276
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 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

자유게시판



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