본문 바로가기
유니티 엔진

모바일에서의 알파 블렌딩과 테스팅

by 대마왕J 2021. 8. 1.

먼저 본 내용에 많은 도움을 주신 유니티 스팟라이트 팀의 고정석 팀장님께 인사박고 시작합니다.
회사에서 썼던 글을 수정해서 외부 공개 가능용으로 만들어 보았습니다. 
 
자아.. 모바일에서의 알파는 죄악으로 치부되고 있습니다. 네 뭐 그렇죠. 알파란 악독한 것 

니나 시작하세요

그렇다고 알파를 안쓸 수도 없고… 아니 알파를 안쓰고 게임을 어케 만들죠..?
에.. 알파는 그럼 그래픽에서 어떻게 써야 할까요? 어떻게 쓰는게 효율적일까요?

일단 한 가지 전제를 주자면 ‘그리지 않는게 가장 좋습니다’ 라는 겁니다. 
뭐 당연한 소릴 어디서 … 시비거나...

그래서 많은 ‘필요없는걸 그리지 않기 위한’ 여러 기술들이 개발되고 있습니다만,
사실 알고보면 그 ‘그리지 않기 위한 처리’ 도 연산이거든요.. 
그래서 사실은 근본적으로는 그래픽 아티스트분들이 ‘처음부터 덜 그리기’ 를 하게 하는게 제일 좋지만
그렇다고 안 그릴 수는 없는 것 아니겠습니까? 아니 이쁘게 그리라면서 리소스를 쓰지 말라고 하는게 말이 되냐고요

언제나 우리 일은 이거같애

그러니 우리는 방향을 전환해서, ‘최대한 효율적으로 쓰기’ 로 생각을 전환하는게 좋습니다. 
왜 우리 돈 쓸 때도 어떻게 하면 최대의 가성비를 내는지 생각하면서 쓰잖아요? 그렇게 말이죠
아트 분들도 읽을 수 있을 정도로 노력해 보았습니다만 힘드시다면 붉은색 글씨가 있는 단원만 읽으시면 됩니다. 


알파 블렌딩

알파 블렌딩은 예전부터 게임 프레임을 떨어뜨리는 주범으로 인식해 왔습니다. 네 그건 지금도 맞습니다. 

얼마나 나쁘냐며 이만큼 나쁩니다 

알파 블렌딩은 사실, PC에서는 굉장히 느린걸로 유명하지만, 모바일에서는 의외로 고속처리되고 있다고 합니다. 
이것은 PC와는 다르게 TBR 처리를 하는 모바일 기기의 특성이라고 해서 그렇게 알려져 있습니다만, 그렇다고 절대 안심하시면 안됩니다 
경험에 의한 얘기이니 믿어주시길. 

 


TBR (타일 베이스 렌더링) ? 

모바일 기기는 PC와는 다르게 모든 화면을 한 번에 렌더링 하지 않습니다. (칩마다 다릅니다만) 

출처 : 청강대 이득우 교수님의 최적화 자료 중


조사해 보면 다음과 같은 글 등이 나오는데요. 
https://docs.unity3d.com/kr/current/Manual/MobileOptimisation.html

  • ImgTec PowerVR SGX - 타일 기반, 디퍼드: 모든 것을 작은 타일(16x16)로 렌더링하며, 보이는 픽셀만 셰이드합니다.
  • NVIDIA Tegra - 클래식: 모든 것을 렌더링합니다.
  • Qualcomm Adreno - 타일: 전체를 큰 타일(256k)로 만들어 렌더링합니다. Adreno 3xx는 기존 버전으로 전환 가능합니다.
  • ARM Mali - 타일: 모든 것을 작은 타일(16x16)로 만들어 렌더링합니다.

쉽게 말해서 “화면을 조각내놓고, 필요한 조각만 그린다”는 방식입니다. 
PC는 뭐 그래픽 카드가 빠방하니까 쿨하게 화면 전체를 매 프레임 그린다면, 모바일에서는 발열이나 배터리 등등이 무서우니까 , 화면을 조각내놓고 ‘필요한 부분만 그리는’ 방식을 이용합니다. 

사실 PC도 최신은 다 TBR입니다. Nvidia 는 튜링부터 AMD 는 RDNA부터, 인텔은 작년부터... 2018년부터 변하기 시작해서 2020 인텔을 끝으로 이제 다 TBR로 변했습니다. 대략 지포스 16 시리즈 이상부터, 라데온 RX 5700 부터이군요.  

그나마 억지로 비슷한 것은 대형 전광판 같은 걸까요? 조각조각 나 있으니 그림이 움직이는 조각에만 그림을 업데이트 해주면 되잖아요?

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=8848ad&logNo=70170428894

이게 모바일 기기랑 상당히 비슷한 느낌인데요, (당연하게도 절대 똑같지 않지만)
알파 블렌딩은 PC와는 다르게 저 블럭마다 이루어지고 고속화 처리가 되어 있기 때문에 빠르다고 합니다. (캐쉬 처리 얘기같은건 패스할께요)  아무래도 전 화면 업데이트하면서 그리는 알파 블렌딩보다는 상대적으로 저전력이고 빠르겠지요.  PC와는 다르다 PC와는!!!


 

와 그래서 알파 블렌딩이 좋다는 거야??!? 어떻게 쓰라는거야? 

뭔가 얘기가 너무 새어 나가니까 결론부터 빠르게 말씀드려 보겠습니다. 

  • 알파 블렌딩이 작으면 괜찮습니다. – 작은 타일에만 영향을 주고 , 처리도 빠른 편이라 괜찮습니다. 
    예를 들자면, 하늘을 날라다니는 작은 반딧불이 같은 녀석들은 모바일에서도 꽤 괜찮을 수 있겠습니다. 
    아래 작은 타일만 사용하는 귀여운 유성 아기를 보세요
    안녕하세요 전 유성이예요 개그맨 아녜요
  • 큰 알파 블렌딩은 되도록 쓰지 않습니다. – 작은 알파지만 카메라가 가까이 가서 알파 블렌딩이 결국 카메라에서 크게 보인다면, 곤란합니다. 알파는 픽셀당 처리이기 때문에 ‘화면에 얼마나 크게 보이느냐’ 가 중요합니다. 
    화면 가득히 먼지가 낀다던가 한다면, 기껏 준비한 TBR 기능이 쓸모가 없어집니다. 
    유성 아기를 근접해서 보는건 다메요
    가까이 보지 말아 주세요 북끄러우니까
  • 알파 영역 빈자리를 최대한 줄입니다.  – 또한, 폴리곤을 아끼기 위해서 커다란 쿼드에 이펙트를 그려서 빈자리를 많이 남기는 일은 오히려 비효율적입니다. 가급적 알파 영역은 최대한 줄입니다. 
    차라리 오른쪽처럼 폴리곤을 좀 씁시다 
    ’픽셀별로 처리된다’ 라는 점을 잊지 마십시오. 오른쪽처럼 만든 것이 왼쪽보다 좀 더 효율적입니다. 약간의 폴리곤이 사용되지만 요즘 하드웨어에서 저 정도 폴리곤은 일도 아닙니다.
    오히려 2폴리곤이 더 부담입니다. 큰 공장에서 이쑤시개 하나 만드는 격이라.. 
    오히려 폴리곤을 좀 쓰더라도 알파 픽셀을 줄이면 타일 처리도 줄일 수 있고, 픽셀 블렌딩 연산도 줄일 수 있기 때문입니다.
    작은 일이지만, 이것이 점점 쌓이게 되면 그 결과는 확연해 집니다. 

오버드로우를 줄입니다. 상식적인 얘기입니다.  한 자리에 그리고 그리고 그리고 또 그리면 빠를 리가 없지요. 
이거야 말로 기껏 빠르다고 광고한 알파 블렌딩을 의미없이 만들어 버리는 놈입니다 
특히 이펙트에서 오버드로우는 필연적인것 맞습니다만, 조금씩이라도 덜 쓰고 비슷한 느낌을 내려고 노력한다면 ‘가랑비에 옷 젖듯’ 퍼포먼스를 향상시킬 수 있습니다. 그리고 이것도 ‘알파 영역을 줄이면’ 역시 도움이 됩니다. 


여기에 대한 해결책중 하나로, 알파 블렌딩 모드일때 완전히 불투명한 영역에 한해 댑스를 프리패스로 써버리는 방식을 소개하고 계시는 JP.Lee 님이 계십니다. 역시 JP 는 다 훌륭해! (...) 댑스 프리패스 내용은 이 글을 끝까지 보신 후에 이 글을 보시면 이해하시기 좋을 겁니다. 
https://jplee.notion.site/Transparent-DepthPre-Pass-d828a6ed9dac43568b9f6a69789e5787

  • 즉 ‘화면에 가득 차고, 여러 겹 겹친 알파 블렌딩이 가장 안좋습니다 
    그렇다고 쓰지 말라는 말이 아닙니다. 여러 번 말하지만, ‘필요하고 예쁘다면’ 쓰는 겁니다. 
    마치 비행기 게임의 폭탄처럼, 꼭 쓰고 싶을때에 중요하게 써야 하는 겁니다. 
    그리고 저사양 옵션에서는 날려도 괜찮게 신경써 줄 수 있다면 최고겠지요! 이런걸 신경써서 LOD 이펙트를 만들어 준다던가 하고 생각해 보세요. 얼마나 프로그래머들이 좋아하겠어요?!? 

짜잔 알파 블렌딩은 대충 여기까지 . 아티스트 분들이 알아 들을 수 있는 수준으로 적으라고 (사실 제가 그정도까지 깊이는 잘 모르기도 하고) 다소 허접하게 쓴 건 용서부탁 드립니다. 잘못된 내용은 알려주시면 감사하겠습니다. 

 


알파 테스팅(Alpha Testing , Cutout)

알파 테스팅 또한 우리가 안쓸 수 없는 녀석입니다. 게다가 블렌딩 연산이 없고 z 값을 쓰니 보통 PC에서는 알파 블렌딩보다 빠르고 좋은 기능이라고 배웁니다! 거기에 알파 블렌딩의 숙명인 소팅 문제도 일어나지 않습니다

그래서 아티스트 분들이 아주 편하게 쓰던 기능입니다만, 애석하게도 모바일에서는 그렇게 환영받는 녀석이 아니었습니다. 

왜냐면, 이 녀석은 픽셀셰이더에서 픽셀을 날려버리는 방식(discard) 을 사용해야만 하는데, 모바일에서는 특히 그 성능이 취약하기 때문에 권장되지 않았습니다. 복사된 캐쉬 댑스를 못쓰고 램에서 읽어와야 하기 때문이라는 얘긴 패스  또한, TBDR 처리를 해야 하는 그래픽 칩셋의 경우, ‘완전히 불투명’ 하다는 전제로 만들어진 기술이라 알파 테스팅이 들어가면 그 고속 처리를 스톱시켜 버려 TBDR의 장점을 날려 버립니다. 

뭐야 진짜 알파 테스팅이 더 느려?

 


TBDR? (타일 베이스드 디퍼드 렌더링) ? 이건 또 뭐야?

디퍼드라고 써있어서 혼동 마세요 흔히 알고 있는 그 라이트 연산의 디퍼드 렌더링이 아닙니다 . 그 라이트 무한정으로 쓴다는.. 그거 아니예요. 네네 아님. 암튼 아님 . 디퍼드(Deferred)는 '지연' 이란 뜻일 뿐입니다. 

사실 이건 앞에서 설명한 모바일 기기의 TBR 렌더링과 사실 거의 같은 녀석인데, 버텍스 단계에서 일단 다 그리고 -> 거기서 안보이는 놈들 잘라내는 것 까지 다하고 -> 그 다음에 픽셀처리로 보내는,  ‘지연’ 된 정책을 사용한다고 ‘디퍼드’입니다. 그러다 보니까 완전히 불투명한 놈들을 상정하고 만든 것이고, 그러다보니 알파 테스팅을 사용하는 경우 이 TBDR 이 깨져버리는 것입니다!!

역시 청강대 이득우 교수님의 강의자료를 훔쳐왔습니다. 

그러다 보니 ‘알파 테스팅이 블렌딩보다 더 무겁다!’ 라는 소문의 출처가 이것이 되었고, 알파 테스팅이 렌더링에 독을 풀었다
많은 책과 강연, 메뉴얼 등에서도 모바일에서는 알파 테스팅보다 알파 블렌딩을 사용하라는 것이 교과서처럼 나돌게 되었던 것입니다.
원래 가장 안좋은 상황에 최소기준을 맞추는 것이니까요

심지어 2019.3 메뉴얼에서조차도 말이죠!! 

여기까지가 많은 사람들이 알고 있던 스토리였습니다. 저 포함. 

 


 

그럼 알파 테스팅이 요즘에도 정말 무거운가요?
  > 최신 기술의 동향  이야기 <

URP가 생겨나면서 많은 것이 바뀌었습니다. 동시에, 하드웨어도 세상이 바뀌었네요. 
이야 세상이 … 많이 바뀌었어요… 하긴 저게 언제적 얘기인데.. 바뀔 때도 됐죠.. 괜찮아요.. 원래 이런 인생인걸..

그동안 알고있던건 순식간에 구식이 되어 버리지.. 

 알파 테스팅이 무거웠던 건 일단 'Depth 처리방식'에서의 문제와 'TBDR을 깨뜨리는 거'였는데,

TBDR 문제는 이제 해결되는 상황입니다. 

왜냐면 이 기술을 쓰는게 powerVR 칩 뿐이었는데, 아이폰 7을 마지막으로 주력 핸드폰 벤더에서는 더이상 이 칩을 쓰는 곳이 없어졌거든요 … 즉 TBDR은 더이상 사용하는 하드웨어가 없다시피 합니다. (하지만 그래도 완전히 사라진게 아니니 신경은 써야겠지만요) 
이런 경우, 미래에는 점점 더 걱정 안해도 돼요. (즉 지금은 좀 걱정해도 앞으로는 점점 괜찮아지는 느낌?)  

 

그리고 두 번째인 알파 테스팅 그릴 때의 기술적 문제는, 깊이값을 오브젝트보다 먼저 그리는 Depth Prepass  가 실행되면서 문제가 사라진 상황이라고 합니다. 깊이를 읽으면서 동시에 그리는게 아니게 되어서 


Depth Prepass ? 이건  또  뭐야?

깊이패스만 먼저 그려놓고 프레그먼트 처리를 할 수 있는 기법으로, 프레그먼트(픽셀) 처리가 될때 미리 처리된 댑스를 사용하기만 하면 되므로 알파 테스팅의 문제를 해결해 나갈 수 있다고 합니다. 캐쉬의 무결성을 보증할 수 없는 문제를 해결했다고..?  이게 가동되면, 픽셀 처리 이전에 (셰도우 처리 다음에) Depth  만 먼저 그리는 패스가 생겨요 

물론 이 만병 통치약 같은 Depth Prepass 가 기본으로 켜져 있는건 아닙니다. 기본은 꺼져 있기 때문에 옛날의 알파 테스팅의 문제가 계속 발생할 수 있는데, 특이한 몇 경우에는 Depth Prepass가 켜질 수 있습니다. 그 특이한 경우 중 하나는 소프트 파티클이나 , 물결의 Depth fade 기능 등을 위해 사용해야 하는 ‘Depth Texture’ 옵션이라고 합니다. 

요거요 요거

이 옵션이 가동되면 Opaque 를 그리기 이전에 Depth만 먼저 그리게 되면서, Depth Prepass가 실행되고 알파 테스팅이 무거워지던 문제를 해결할 수 있다고 합니다.

 저게 꺼지면 댑스 프리패스가 없어지면서, 알파 테스팅의 문제도 다시 발생하게 됩니다. 캐쉬를 못쓰고 램에 접근해서 계속 원본 댑스를 읽어와야 하는...

잠깐요. 그럼 오히려 사양 낮춘다고 소프트파티클 기능 없애면서  댑스 텍스쳐 꺼버리면 오히려 알파 테스팅 부하가 급 가속된다는 말이잖아요!!!

히이익

그렇습니다. 맞습니다 ㄷㄷㄷ  무서운 부분이 여기입니다 ㄷㄷㄷ 
저사양 만든다고 옵션 끄다가 무거워질 '수도' 있다는 말이죠 

댑스 프리패스가 생성된것을 프레임디버거에서 볼 수 있습니다. 

하지만 이 시점에서 하나의 새로운 기사를 보게 되었는데, 
Depth Prepass 기능이 2021.2 에서 처음 들어간다는 뉴스였습니다 . 
읭? 그전 버전인데도 Depth Prepass가 가동되는뎁쇼? 뭔소리야?

https://m.news.nate.com/view/20210719n16129?mid=m05

그래서 조금 더 알아본 결과 답을 찾게 되었는데, 
Depth Prepass가 이전에는 PP나 깊이 처리를 위해서 저런 특정 옵션을 켜줘야 생기는 것이었다면, 
이번에는 아예 렌더러에서 처음부터 강제할 수 있게 처리하였다는 것입니다. 그래요.. 이게 맞네요.. 잘했네.. 

요로코롬 들어가게 된데요. 

그래서 혼동될까봐 이름도 Depth Priming Mode로 바꾸었다는군요. 물론 약간의 기능개선도 더 들어갔다고 합니다. 


 


 

즉 결론적으로는 

최신 기술에서는 모바일에서 알파 테스팅이 느려지는 문제를 거의 다 잡아서 큰 걱정 안해도 되고 앞으로도 점점 더 걱정 안해도 되고 뭐 그렇겠지만, 
오래 된 기기나 독특한 기기를 만날 수가 있기 때문에 (power VR 칩을 쓴다던가) 아직까지는 완전히 마음을 놓지는 않아야 하는 상태

라는 결론을 내릴 수 있었습니다. 

아마 몇 년이 지나면 알파 테스팅을 다들 찬양하고 있겠죠?!?


 

그러면 그래픽에서는 알파 테스팅을 어떻게 써야 하는가?

  • 되도록이면 쌩 메쉬로 모델링합니다. 
    이전에도 말했듯, 요즘 모바일 그래픽 카드는 몇 년전 PC의 그래픽 카드와 맞먹을 정도로 발전했습니다. 이런 경우 폴리곤이 ‘너무 적은’ 것 보다 ‘어느 정도 적당한’ 폴리곤을 계속 먹이로 던져주는게 빠릅니다. 이 얘기는 원하시면 언젠가 다시 해 보도록 하죠. 
    우쭈쭈 잘먹네 폴리곤 먹어라
    그러므로 가장 좋은건 알파 테스팅조차 안쓰는 것입니다. ‘할 수 있다면’ 알파 테스팅도 안쓰는 방향을 먼저 고민하면 좋습니다. 그렇지만 그렇다고 과다한 디테일을 모델링하여 ‘너무 작은 삼각형’ 폴리곤을 만드는 것은 좋지 않습니다. 그건 또 다른 얘기
    작은 디테일이 있어야 한다면 알파 테스팅을 써주시는게 좋습니다. 
     
  • 가급적 큰 알파 테스팅은 사용하지 않습니다. 
    알파 테스팅이 요즘 최신 기기에서는 별 문제 없지만, 사실 문제가 일어나는 곳은 구형 기기들입니다. 언제 우리가 만날지 모르는… 그러므로 알고만 있으면 됩니다. 근데 뭐.. 필요하면 써야지요 어쩌겠어요... 뭔가 일 잘못되면 뺀다! 는 느낌으로 각오하고 만들어야 하는 겁니다. 그러니 뭐 크기나 좀 줄여주시면 감사하다는건데 ..사실 이걸 뭐 어쩌겠어.. 
     

알파 영역 빈자리를 최대한 줄입니다. 
이것 또한 알파 블렌딩과 같은 개념입니다. 조금이라도 타일의 면적을 줄인다면 효과가 있을 수 있고, 조금이라도 타일 방식의 렌더링에 도움을 줄 수 있습니다. 빈 면적으로 줄이기 위해 약간의 폴리곤은 더 써 주시는 버릇이 여러모로 좋습니다. .

이게 진리다 


미리 설명했듯이, 알파 테스팅은 요즘 기기에서는 그렇게 두려워할 녀석이 아니지만, ‘아직까지도 남아있는 구형/독특한 모바일 기기를 위해’ 기본적인 정도만 신경써 주시면 좋습니다. 
그래픽 데이터의 섬세한 최적화는 ‘낙숫물이 돌에 구멍을 뚫고’ ‘가랑비에 옷 젖는’ 느낌이거든요. 쌓이면 무섭습니다. 


그래서, 알파를 쓰면 얼마나 무거워 진다는 거야?

 

모릅니다!!!! 

기기별로 다르고 상황별로 다르고 심지어 카메라 뷰 각도에 따라도 다른데다가  심지어 알파보다 다른것이 더 무거워서 알파는 티도 안날지도 모릅니다. 이것은 마치 닥쳐오지 않은 질병을 걱정하는 질병청과 가깝습니다. 

때문에 정기적인 프로파일링을 해야 하고, 그래픽에서는 ‘가급적’ 필요한 곳에서만 알파들을 ‘알아서 잘’ 써야 하는 것입니다. 
사실상 얼마를 써야 한다는 기준 자체를 만드는게 불가능하며, 프로그래밍쪽에서는 일괄적인 처리나 기계적 처리가 가능하지만 ‘비주얼을 살리면서’ 상대적으로 가장 좋은 선택을 하고, 프로그래밍에서 할 수 없는 최적화를 차곡차곡 하면서 그래픽 리소스의 ‘체질’ 을 유지시키는 것은 그래픽들분들만이 할 수 있는 최적화입니다. 그것이 그래픽이 기술을 알면 놀라운 일이 일어난다 라는 포인트인 것입니다. 

 

감사합니다. 

 


레퍼런스들

https://ozlael.tistory.com/24

 

모바일 기기의 Tile Based Rendering(타일 기반 렌더링)과 유니티에서의 주의 사항 #2 : TBR 대응 리소스

"모바일 기기의 Tile Based Rendering(타일 기반 렌더링)과 유니티에서의 주의 사항 #1 : TBR의 이해"에서 이어지는 글입니다. 앞선 글에서 설명드린 바와 같이 모바일에서는 타일 단위로 쪼개서 렌더링

ozlael.tistory.com

https://3dmpengines.tistory.com/2045

 

모바일 기기의 Tile Based Rendering(타일 기반 렌더링)

개요 기술이 발전하고 시간이 지남에 따라 그래픽카드 성능 역시 계속 발전해왔습니다. 그 덕에 더욱 놀랍고 사실적인 그래픽을 표현할 수 있게 되어왔습니다. 그 결과 현대의 PC 및 콘솔 게임의

3dmpengines.tistory.com

https://docs.imgtec.com/Architecture_Guides/PowerVR_Architecture/topics/rules/c_GoldenRules_do_not_use_discard.html

 

Do Not Use Discard

Avoid forcing depth-test processing in the texture stage as this will decrease performance in the early depth rejection architectures. Avoid forcing depth-test processing in the texture stage as this will decrease performance in the early depth rejection a

docs.imgtec.com

https://ettrends.etri.re.kr/ettrends/140/0905001809/28-2_050-057.pdf

https://docs.unity3d.com/kr/current/Manual/MobileOptimisation.html

 

최적화 - Unity 매뉴얼

PC와 마찬가지로 iOS 또는 Android와 같은 모바일 플랫폼에는 다양한 성능의 디바이스가 있습니다. 어떤 휴대전화의 경우에는 다른 모델보다 10배 강력한 렌더링이 가능하기도 합니다. 다음은 스케

docs.unity3d.com

뎁스 프리패스와 뎁스 프라이밍
https://forum.unity.com/threads/depth-priming-advantages.1132912/

 

Depth Priming Advantages?

I saw the new beta includes Depth Priming in URP which sounds like an amazing feature for me. Was somebody already able to test it and the impact it...

forum.unity.com

유니티 2012.2 에서 뎁스 프리패스 기능이 생겨
https://m.news.nate.com/view/20210719n16129?mid=m05

 

 

[이슈] 유니티, 'Unity 2021.2' 베타 버전 출시

3000여 개 수정사항과 720여 개 신규 기능 추가 및 업데이트 포함 베타 버전 피드백 반영해 '2021.2 테크 스트림' 올해 말 선보일 예정 유니티가 'Unity 2021.2' 베타 버전을 출시했다. 유니티는 크리에이

m.news.nate.com

 

https://gigglehd.com/zbxe/special/10121173

 

기글 하드웨어 스페셜 게시판 - 5종 모바일 GPU 회사의 비교

1. 5대 모바일 GPU 회사 ARM 계열 모바일 CPU를 만드는 회사는 대충 13개 정도 됩니다. 그러나 GPU 코어를 설계하는 곳은 그리 많지 않습니다. 2012년의 모바일 GPU 시장 점유율 2012년에 JPR에서 발표한 모

gigglehd.com

블로그 주인장에게 커피값을 후원할 수 있습니다! 

donaricano-btn

 

반응형

댓글