• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

21.06.30 23:38 작성 조회수 178

0

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

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

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

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

답변 1

답변을 작성해보세요.

1

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

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

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

정다운님의 프로필

정다운

질문자

2021.07.01

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

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

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

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

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

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

정다운님의 프로필

정다운

질문자

2021.07.01

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