inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

혹시 render target을 이용한 picking의 구현이 가능할까요?

336

정다운

작성한 질문수 1

0

예를 들어 각각의 오브젝트가 유니크한 24비트 색상id를 가지고, 해당 색상id를 diffuse color처럼 뿌린 render target을 만든다면,

마우스로 화면 클릭시 해당 render target의 클릭 좌표에 있는 색상에 따라 어떤 오브젝트가 선택되었는지를 확인할 수 있기 때문에 행렬 변환과정이 필요 없어지면서 속도가 엄청 빠를것 같은데요.

이미 사용되고 있는 방법인지,

알려져있긴 하지만 비효율적이거나 일반적이진 않은 방법인지 궁금해서 여쭈어봅니다.

게임수학 DirectX

답변 1

1

Rookiss

3d 게임은 조명 영향을 받아 색상이 바뀌기도 하고,
동일 타입 물체가 겹쳐 있으면 가장 앞에 있는 애를 클릭해야 하기 때문에
색상으로 판별하는 방법은 딱히 현실에서 사용하기 애매합니다.

다만 그 방법이 굉장히 유용할 때가 있는데
바로 게임봇을 제작할 때입니다.
게임봇 제작도 여러가지 방법이 있는데
리버싱 or 패킷 조작 방식도 있긴 하지만
그보다 더 쉬운건 화면 색상으로 판별하는 방법인데요.
UI는 색상이 바뀌지 않기 때문에
특정 색상 (ex. 유니크 아이템)이 화면에 뜨면 그 화면 좌표를 클릭한다거나,
하는 식으로 간단히 자동화를 할 수 있습니다.

예전에 디아블로3 그홈이라는 보스를 무한으로 사냥하는 봇을 그렇게 만든 기억이 있네요.

0

정다운

제가 말하고자 했던것은 diffuse와 비슷하지만, diffuse와는 관계없는, 조명과도 관계없는 별개의 object id를 색상처럼 이용하는 render target view를 만드는것을 의미한 거긴합니다!

좌측 그림에서는 색상으로 두 물체가 구분이 되지 않지만, 우측에서처럼 각 object는 id를 따로 갖고 있어서 클릭했을 때 우측 RT에서의 클릭 위치로 어떤 object를 클릭했는지를 판별하는 그런 메커니즘을 말한거였습니다 ㅎㅎ

해당 object id를 key로 갖는 map이나 tree 구조에 object 포인터들을 보관하는 방식으로 object 클릭의 속도를 가속화할 수 있지 않을까 해서요.

그런데 생각해보니 picking이 비싸긴 하지만, 마우스의 I/O보다는 훨씬 빠르기 때문에 단지 그것을 위해서 이런 방식으로 구현하는 것은 굉장히 메모리적으로나 리소스상으로 비효율적이라는 생각이 들긴 하네요.

그렇지만 rts같은 경우처럼 object가 엄청나게 많은 경우에는 사용할 수 있지 않을까 하는 생각도 들긴 합니다 ㅎㅎ

0

Rookiss

아 이해했습니다.
RenderTarget 리소스 관리까지 생각하면,
그만한 가치가 있을지는 테스트 해봐야 알 것 같지만
높은 확률로(?) 부정적인 결과가 나올 것 같습니다.
사실 마우스 피킹 자체는 성능에 엄청 큰 이슈가 되지 않습니다.
AI 길찾기 비용이라거나, 피킹 외의 raycasting (가령 지형 지물 위에 있기 위해 아래로 쏘는)
비용 등이 대부분의 클라 CPU 연산량을 차지하기 때문이죠.

0

정다운

그렇군요! 답변 감사드립니다 :D

Lighting 추가하고 나니 프레임이 많이 떨어지는데 원래 이런 건가요?

0

524

0

Deferred Rendering 에서 조명에 Culling이 일어나는 것 같습니다.

1

563

1

static_pointer_cast와 static_cast의 차이가 무엇인가요?

0

1353

1

Engine.lib 파일을 포함 불가

0

617

1

셰이더 VS_Main에서 행렬 곱해줄 때

0

491

2

1:05분 질문(1시간 5분)

0

303

0

오류가 발생합니다

0

479

1

Animation코드가 무한로딩에 걸리네요

0

350

0

fov 관련해서 질문이 있습니다

0

282

0

normal mapping Tangent Space 수학식 질문

0

388

1

커리큘럼 관련 질문 드립니다!

0

278

0

강의를 어떤식으로 들으면 될까요??

0

385

1

머티리얼과 텍스쳐, 셰이더를 따로 관리해도 되나요?

0

444

1

박스 메쉬 생성하는 함수에서 버텍스가 왜 24개인가요

0

245

1

복수개의 서로 다른 동영상을 Picture in Picture 형식으로 rendering하는 가장 최적의 방법이 궁금합니다.

0

262

0

애니메이션 쉐이더에서 행렬보간 부분에 대해 질문드립니다

0

232

0

assert 에서 _currentIndex 와 _elemtSize 를 비교하는게 이해가 잘 안되네요

1

248

1

DX 공부방법에 대해서 질문 있습니다.

0

642

1

Root Parameter 를 정의하는데 있어서 질문있습니다.

0

377

1

Client 콘솔창이 잠깐 켜졌다가 말아요

0

255

1

DirectX12 Root Signature : CBV관련 질문입니다.

0

353

1

뷰 변환 행렬 관련하여

0

632

2

강의 시작!

0

306

1

using namespace Microsoft::WRL;

0

275

1