매크로

조회 수 23858 추천 47 댓글 163


안녕하세요.. ?바람처럼 입니다~^^


지난번 올린 허접하기 그지없는 터치관련 강좌에?많은 관심과 격려 보내주셔서 감사합니다~


이에 힘입어 (사실은 등떠밀려서... XXXX님 잊지 않겠어요...ㅋ)?


오늘은 프렙의 가장 핵심적인 기능이자 꽃이라 할 수 있는?웨이트 이미지 (Wait Image)에 대해


제가 아는 부분을 설명드리는 자리를 마련했습니다...




1. 웨이트 이미지의 정의


웨이트 이미지는 그 이름 그대로 프렙의 이미지 인식을 위한 시퀀스 입니다.


프렙을 프렙답게 만들어 주며, 변화하는 화면 상황에 맞춰 스마트한 매크로를 만드는데


없어서는 안되는 아주 중요한 기능이라고 할 수 있겠죠...


이 기능을 알기쉽게 정의 하자면, 화면상에서 우리가 원하는 어떤 부분을 찾기 위해


미리 지정한 이미지를 이용해 다양한 방법으로 맞춰 보는 것이라 할 수 있습니다.


또한, 원하는 이미지를 찾았을 때와 찾지 못했을 때를 구분하여


각각의 동작을 따로 정의할 수 있습니다.


고정된 위치의 고정된 값을 이용한 동작이 아니라 다이나믹하게 변화하는 상황에 맞추어


우리가 해야할 일들을 가변적으로 지정할 수 있게 해주는 아주 고마운 기능이라고 할 수 있겠습니다.





2. 웨이트 이미지의 기본기능


자 그럼 이제부터 우리가 만드는 매크로에서?


웨이트 이미지를 어떻게 이용할 수 잇는지?하나씩 살펴 보도록 하겠습니다.


웨이트 이미지는 프렙 시퀀스의 Wait Image를 선택하여 지정할 수 있습니다.


https://i.imgur.com/E07M2hC.png



Wait Image를 선택하면 아래와 같이 항목이 나옵니다.


https://i.imgur.com/ij0mEVI.png



두가지 항목의 의미는 지난번 터치편에서 설명드린 바와 마찬가지 입니다.


레코드를 구성할 때 프렙이 저장한 이미지를 사용할 것인가


아니면 새로운 png/bmp 파일을 사용할 것인가의 선택입니다.


대부분의 경우에 미리 캡쳐해둔 스크린샷을 이용해 두번째 방법으로 지정을 합니다.



비교할 부분이 포함된 이미지를 로딩하면 아래처럼 대상 이미지의 영역을 설정하는


파란색 사각형이 나옵니다. 이 부분의 위치와 크기를 우리가 비교할 대상에 맞춰주는 작업을 해야합니다.


https://i.imgur.com/nTZ0S03.png



가령 몬길의 예를 들자면, 자동으로 하트보내기 기능을 구현하기 위해


우선 하트 이미지를 찾아서 지정하는 부분이 필요하겠죠? 그래서 하트 이미지를 대상으로 지정합니다.


https://i.imgur.com/gWx6e7A.png



이 때, 대상을 지정하는 파란색 박스를 잡고 드래그 하면 박스를 원하는 위치로 옮길 수 있으며


배경화면을 잡고 드래그 하면 박스 위치는 고정되고 배경화면의 위치를 옮길 수 있습니다.


대상을 지정하는 파란색 박스 크기를 바꾸고 싶다면,?


폰에서는 두 손가락 멀티터치를 이용해 상하좌우로 스와이프 하면?박스 크기를 바꿀 수 있습니다.?


지니와 같은 가상환경에서는 위에 보이는 좌상단, 우하단 x, y 좌표값의 -, + 버튼을 클릭 함으로써


마찬가지로 박스의 크기를 바꿀 수 있습니다.


이 때, 한가지 팁을 드리자면 박스크기 조정을 위해 -, + 버튼을 미친듯이 연타 하지 마시고


- 혹은 + 버튼을 클릭한채 드래그 해주시면 좌/우 방향에 따라 박스 사이즈가 바뀌게 됩니다.


이렇게 우리가 원하는 대상을 지정한 후 저장해 주시면 기본적인 웨이트 이미지 시퀀스가 지정됩니다.


https://i.imgur.com/zzuEIt9.png



기본적으로 이미지 검색방식은 Exact Match, 새로운 스크린샷을 떠서 검색하며


검색성공시 다음 Wait는 스킵, 그리고 검색시간은 10초로 지정되어 있습니다.


검색 성공시는 다음 시퀀스로, 실패시에는 매크로를 종료 하도록 되어 있습니다.


자, 그럼 각각의 옵션에 대해서 상세하게 살펴보도록 하겠습니다.





3. 웨이트 이미지의 옵션


가장 첫번째 나오며, 가장 중요한 옵션이 검색 방식의 지정입니다.


현재 프렙은 5가지 방식의 검색옵션을 제공하며, 각각의 의미를 명확하게 알고 있어야


필요한 상황에 적절하게 대응하여 사용하실 수 있습니다.


https://i.imgur.com/jpIGjaQ.png



1. Exact Match


지정된 이미지의 위치와 크기 및 내용(각 픽셀의 색값)이 정확하게 일치하는 경우 입니다.


이 경우는 조금의 여유도 없이 무지막지하게 검사하는 방식입니다. 다양한 상황에 대응하기 위한 용도로는


조금 부적합하며 융통성있는 매크로를 만들기 위해서는 잘 사용되지 않는 옵션입니다.



2. Match Pixels Rate


주어진 영역(위치 및 크기) 내에서 일치하는 픽셀값의 갯수를 검사하여 지정된 비율내에 포함되는지 검사합니다.


이 옵션 또한 정확하게 일치하는 픽셀값만을 대상으로 하며, 역시나 자주 사용되지는 않는 옵션입니다.



3. Color Similarity


주어진 영역의 모서리값과 색유사도를 검사하여 정해진 비율내에 포함되어 있는지 검사합니다.


여기서 색유사도란, DSP나 이미지 프로세싱을 하시는 분들은 잘 아시겠습니다만


간단히 설명하자면, 주어진 색값을 대상 Color Space (RGB 혹은 YUV) 상에서의 Distance를 구해


그 델타값이 얼마나 되는지 비교하는 방식입니다. 뭔가 말이 어렵죠? 네.. 저도 자세한 건 잘 모릅니다~^^;;


이와 관련해서는 서적이나 논문이 끝도없이 나오는 주제인 만큼 자세한 내용은 각자 검색하시기 바라며


또한, 프렙 제작자가 정확히 어떤 유사도 체크방식을 썼는지 알수 없습니다만,


쉽게 설명드려서 영역내의 색값 분포도가 얼마나 비슷한지를 판단하는 옵셥입니다.


즉, 정확한 픽셀값의 비교를 하는게 아니라 비슷한지 아닌지를 판단하게 됩니다.


따라서 일반적으로 매크로에서 특정 위치의 특정 이미지를 비교할 때 많이 사용하는 옵션입니다.



4. Search(Exact)


위의 세가지 옵션은 이미지의 정확한 영역, 즉 위치와 크기를 대상으로 비교하는 방식 입니다만


이번과 다음번 옵션은 특정 위치가 아닌 전체화면을 대상으로 이미지를 검색하는 방식입니다.


즉, 검색하려는 이미지가 화면상 어디에 위치하더라도 상관없이 찾아주는 옵션이라고 할 수 있겠습니다.


Search Exact 옵션은, 1번의 Exact 옵션과 유사하게 정확한 크기와 색값을 찾아 줍니다.


마찬가지로 여유가 전혀 없는 옵션인 관계로 특별한 경우가 아닌이상 잘 사용되지 않습니다.



5. Search(Similarity)


이 옵션은 전체화면을 대상으로 비슷한 (색유사도가 주어진 비율에 포함되는) 이미지를 찾아주는 옵션입니다.


일반적으로 가장많이 사용되며, 그만큼 친숙한 옵션이라고 할 수 있겟습니다.


다만, 검색 대상이 전체화면이라 그 정밀도는 Color Similarity에 비해 다소 떨어집니다.


전체 화면에서 확실히 구분되는 충분한 크기의 영역을 비교대상으로 삼아야 성공율이 높아집니다.


장점으로는, 원하는 이미지가 화면상 어디에 있든 혹은 몇개가 있든 상관없이 찾아주며


제법 빠른 이미지 검색속도를 자랑하여 범용으로 쓰기에 충분한 성능을 제공하고 있습니다.




두번째와 세번째 옵션은 조금 있다 설명드리고, 네번째 옵션인 Skip next wait 입니다.


https://i.imgur.com/rjqZN0e.png



일반적으로, Wait Image에 검색시간을 지정하여 특정한 시간동안 기다리게 합니다만


여기에 여유를 두기 위해서 Wait Image 다음에 Wait 시퀀스를 주는 경우가 많습니다.


즉, 이미지를 찾으면 원하는 동작을 하지만 혹시 못찾더라도 일정시간 더 기다려 보자 하는 경우입니다.


이런 경우, Skip next wait 옵션의 On Success 부분을 켜두게 되면


이미지를 찾는데 성공한 경우 바로 다음에 나오는 Wait 는 무시하고 그냥 스킵하게 됩니다.


마찬가지로, On Fail 을 켜두면 이미지 검색에 실패한 경우 직후의 Wait를 무시하게 됩니다.


여기서 주의 하실점은 Wait Image와 Wait 사이에


어떤 시퀀스가 몇개가 나오든지 상관없이 무조건 처음 만나는 Wait에 적용 된다는 사실입니다.


프렙을 처음 만드는 분들중에 Wait Image 다음번에 나오는 Wait 가 제대로 동작하지 않아서


이거 왜이러지? 하면서 Wait를 두번씩 주는 경우를 많이 경험 하셨을 줄 압니다.


그 원인은 바로 On Success 옵션이 디폴트로 켜져 있기 때문입니다.


이 옵션은 둘다 켤수도 있고, 끌 수도 있어서 상황에 따라 적절하게 사용할 수 있습니다만


개인적으로 저는 두개를 모두 끄고, 정확하게 제가 원하는 부분에만 Wait 를 주는 방식을 선호하고 있습니다.




다섯번째 옵션인 Trial 은, 이미지 검색에 할당된 시간입니다.


일반적으로 이 시간이 너무 짧으면 제대로 검색이 되지 않고, 그렇다고 또 너무 길게 주면


불필요한 딜레이가 발생하므로 상황에 따라 적절하게 값을 지정해 주시기 바랍니다.


대체로 화면의 특정 위치를 검색하는 첫번째 옵션의 1, 2, 3 번은 조금 짧게 주셔도 무방하며


전체화면 대상인 4, 5번은 시간을 조금 넉넉하게 주셔야 제대로 찾는 경우가 많습니다.


또한, 찾으려는 이미지가 크거나 대상 화면의 해상도가 넓은 경우도 넉넉하게 시간을 지정해야 합니다.




여섯번째 옵션은, 이미지의 검색성공 여부에 따라 분기할 시퀀스를 지정하는 곳입니다.



일곱번째 옵션은, 프렙이 구동할 때 콘솔창에 Skip/Extend 기능을 보일건지를 정하는 옵션입니다.


이 옵션을 켜두게 되면 프렙이 동작하는 중간 Wait Image를 건너뛰거나 혹은 검색시간을 늘이거나 할 수 있습니다.


https://i.imgur.com/4l6dzPM.png



여덟번째 옵션은, 해당 시퀀스에 이름을 지정하여 알아보기 편하게 해주는 부분입니다.





4. 웨이트 이미지의 고급옵션


위의 설명에서 건너뛴 부분이 있습니다. 바로 두번째 세번째 옵션입니다.


두번째 옵션인 Take Screenshot 은 디폴트로 켜져 있으며, 이 의미는


Wait Image 기능이 동작하기 전 무조건 현재화면의 스샷을 떠서 메모리에 보관하고


보관된 메모리상의 이미지와 우리가 찾으려는 대상을 비교하는 연산을 한다는 뜻입니다.


일반적으로 Wait Image 는, 다양하게 변화하는 화면을 대상으로 사용하게 되므로


대부분의 경우 이 옵션을 켜두는게 당연하고, 또한 제대로 된 동작을 보장하게 됩니다.



그러나 일부 특수한 경우가 있습니다. 변화하지 않는 고정된 화면에서


찾으려는 이미지가 여러개가 있는 상황을 한번 가정해 보겠습니다.


몬길의 예를 들면, 모험을 끝내고 상자가 오픈된 상태에서 원하는 아이템을 찾아 다시뽑기를 하고 싶다고 가정해 봅시다.


https://i.imgur.com/P4g3U60.png



이 상황에서는, 화면은 고정되어 바뀌지 않는 반면 우리가 검색해야 할 이미지의 갯수는 많습니다.


이럴경우, 매번 디폴트 옵션인 스샷을 떠서 검색을 하게되면 시간도 많이 걸릴뿐더러 효율도 좋지 않습니다.


이럴때 진가를 발휘하는게 바로 두번째 옵션 입니다. 이 옵션을 해제하게 되면


Wait Image 기능은 스샷을 새로 뜨지 않고 가장 최근에 뜬 스샷을 이용해 검색을 하게 됩니다.



프렙 시퀀스에서 화면 캡쳐를 하는 Take Screenshot 기능이 있습니다.,


이 기능의 옵션을 살펴보면 아래와 같이 실제로 파일에 저장하지 않고


다음번 Wait Image 기능을 위해 메모리로 스샷을 보관만 해두는 옵션이 있습니다.


https://i.imgur.com/Ng5TnBb.png



이렇게 메모리로 스샷을 보관한 이후, Wait Image 에서 두번째 옵션을 해제 합니다.


이렇게 하면 검색시간이 의미가 없어져 비활성이 됩니다.


https://i.imgur.com/WQKPvDd.png



그 이후, 원하는 이미지를 모두 차례대로 검색하면 매우 빠른 속도로 검색 연산이 이루어 져서


아래처럼 비교 대상이 수십개가 되더라도 순식간에 검색을 마치게 됩니다.


아주 유용한 기능이니 꼭 기억해 두시고 적절하게 사용하시길 바라겠습니다.


https://i.imgur.com/NNCCRWL.png





세번째 옵션인 Tab Center on Success 기능입니다.,


이 기능은 지난번 터치편에서도 제가 잠깐 언급을 했었는데


프렙의 Wait Image 기능은 검색을 성공해도 해당 이미지의 좌표를 넘기는 부분이 없습니다.


그래서 이미지를 찾은 경우, 직접 해당 이미지의 가운데 좌표에 터치를 하도록 해주는 기능입니다.


앞서 예를 들었던, 몬길에서 친구에게 하트 보내기 같은 경우


하트 이미지를 찾은다음 바로 터치를 해주도록 만들면 매우 쉽게 구현할 수 있습니다.


https://i.imgur.com/Sb5q6PK.png



매크로를 만들다 보면 버튼이나 확인/취소를 찾아서 터치해야 할 일이 매우 많은데


이런경우 이 옵션을 사용하시면 간편하게 구현하실 수 있습니다.





5. 웨이트 이미지의 마스크


Wait Image 를 이용하고 다양한 기능을 구현하다 보면 간혹 난감한 경우를 만나게 됩니다.


특정 이미지를 찾아서 검색해야 하는데, 그 주변이나 가운데 방해물이 있는 경우입니다.


혹은, 검색해야 하는 이미지가 너무 작아 프렙이 검색하지 못하는 경우도 있습니다.


(프렙은 Search 기능을 사용할 때, 이미지의 한쪽 폭이 최소 30 픽셀 이상이 되어야 제대로 동작합니다)


이런 경우 검색대상 이미지에 마스크를 씌울 수 있습니다.



다시 몬길의 예를 들어 보겠습니다. 메시지함의 4성 장비를 모두 받아서 팔고자 하는 상황입니다.


https://i.imgur.com/3a5SAWz.png



이 경우, 4성 이미지를 영역을 설정해서 검색하고자 했습니다만


이미지 크기가 너무 작아 프렙에서 검색할 수 없는 문제가 발생해 버렸습니다.


그럼 이런 경우 어떻게 해야 할까요? 답은 이미지 마스크에 있습니다.


마스크는 검색 대상이 되는 영역에서 찾기를 원하지 않는 부분을 지정하는 기능입니다.


위의 그림에서 아래쪽 하단부분의 Edit Mask 로 지정할 수 있습니다.


우선 찾고자 하는 영역을 크게 잡은 후, Edit Mask 를 클릭해 줍니다.


https://i.imgur.com/Xs4Hgpg.png



그 다음, 검색에서 제외할 부분을 마스크로 지정해 줍니다.


https://i.imgur.com/FXOILBo.png



이렇게 해주면, 충분한 영역을 확보함과 동시에 프렙은 이미지 검색시 마스크로 지정된 부분은 무시하고 검색하게 됩니다.


https://i.imgur.com/ZdgC3aQ.png



마찬가지로 큰 이미지의 가운데나 주변에 불필요한 부분이 있으면 역시 마스크로 지정해 주면 됩니다.


복잡한 이미지 검색에 다양하게 사용할 수 있겠죠.





이상으로 프렙의 Wait Image 기능과 옵션에 대해 제가 알고있는 부분의 설명을 모두 마쳤습니다.


어떠셨는지요? 프렙의 꽃인 Wait Image 기능이 조금 더 새롭게 다가오지 않나요?


지난번 터치와 이번 웨이트 이미지 모두 프렙에서 가장 중요하고 자주 사용하는 기능들 입니다.


프렙을 이용한 훌륭한 매크로가 많이 나오길 바라는 마음에서?짧은 실력으로 이런 강좌를 쓰게 되었습니다.


아무쪼록 많은 분들께 도움이 되었으면 하는 작은 소망이 있습니다~^^





감사합니다...









전체 최신 인기글

전체 주간 인기글