[Unreal]언리얼 공격판정 머터리얼 / Attack Preview Decal Material

2022. 2. 16. 19:18unreal/unreal materials

게임상에 공격 타이밍을 보여주는 연출을 할때 종종 데칼 머터리얼을 이용한 판정 범위를 보여줍니다.

 

보스나 특수한 개체의 경우 별도로 머터리얼을 제작하거나 텍스쳐를 제작해 퀄리티를 높인 데칼을 제작하지만

일반적인 몬스터등에 범용적으로 사용할 수 있는 기본 머터리얼을 제작해 기본적으로 적용합니다.

 

아래 이미지는 제작된 머터리얼로 만든 공격 판정용 데칼입니다.

다양한 기능들이 있으나 기본적으로 원형태와 박스형태를 제작하고 추가로 방사형 컨트롤이 가능하도록 변경하였습니다.

원 형태와 박스형태의 데칼만을 사용하는경우 복잡한 노드를 피하고 단순히 마스킹 텍스쳐를 사용하느것이 편리하고 좋습니다.

 

머터리얼 노드 내부에 완전 부리된 두 노드의 가지가 존재하며 별도의 머터리얼로 분리해도됩니다.

 

1. 사각형

 

사각형 데칼은 기본적으로 클램프된 마스킹 텍스쳐의 uv를 이용해 제작합니다.

사각형의 외곽 엣지부분입니다.

왼쪽에 보이는 마스킹 텍스쳐가 기본적인 엣지의 두께를 결정하며 머터리얼 내부에서 추가적으로 두께 조절이 가능합니다.

마스킹 텍스쳐 의 uv를 상하 좌우로 돌려가며 붙여 넣으면 됩니다. length 와 whith 수치를 데칼의 사이즈와 동일하게 맞추게 되면 크기와 상관없이 일정한 두께를 유지하는 외곽이 됩니다.

외곽선의 두께가 정확히 일치하지 않는 이유는 노드상에 최대값과 최소값을 정해 어느정도 이하로 줄어들거나 커지지 않도록 제한을 두었기 때문입니다.

 

두번째 안쪽 박스형태입니다. 데칼 형태에서 박스이며 중앙부터 커지는 형태는 불필요하다는 답변이 있어

이러한 형태의 영역 텍스쳐를 제작해 사용했습니다 좌우 면과 상단 면을 동시에 처리하며 엣지 스케일링은 좌우면만 처리하였습니다.(상단쪽 엣지는 크기 고정)

텍스쳐는 클램프 처리를 해둔 상태입니다.

마지막으로 외곽엣지와 내부 마스킹 지역을 합치면 박스형태의 데칼을 제작할 수 있습니다.

위 데칼의 외곽과 내부 사이 공백부분(공격영역이 아닌부분)에 대한 마스킹이 따로 없으므로 그 사이를 채울 수는 없습니다.

저의는 요청사항이 이렇게 왔기에 이정도로 진행된 것이며 추가적으로 그부분에 대한 마스킹이 필요하다면 

하단에 나올 원형태의 방식에서 참조하시면 됩니다.

 

사각형태는 간단한 방식이므로 이러한 방식이 아닌 다양한 방법이 존재할 수 있으므로 엣지의 크기를 유지가 필요하지 않다면 이러한 방식으로 제작할 필요는 없습니다.

또한 텍스쳐를 아예 사용하지 않고 uv에서 제공하는 그라디언트로만으로도 만들 수 있으니 외곽라인의 형태가 직선그라디언트만 사용한다면 그 방식 또한 어렵지 않게 제작 가능합니다.

 

2.원형

원형과 방사형(부채꼴)은 원형에서 파생되는 형태이므로 원형에 대한 설명을 먼저 진행하고 추가적으로 방사형을 추가하는 순서로 진행하도록 하겠습니다.

예전에 파동을 만들때 사용한 방식으로 아래 이미지의 결과를 확인할 수 있습니다.

원형은 전부 저 두가지를 혼합해서 사용합니다.꽉찬 이미지를 a라 하고 외곽 링 이미지를 b라고 하면

위 a 이미지는 데칼의 여역이고 b이미지는 데칼의 외부 링이 되는방식입니다.

내부에 차오르는 영역은 레디우스값의 일부분을 취하고(0-1을 곱함)그부분은 내부 영역과 내부 외곽으로 처리하게됩니다.

도넛형태까지 고려시 a이미지와 같은 영역 마스킹이 3개가 필요하며 외곽라인또한 3개가 필요합니다.

이러한 형태로 a, a-1, a-2 3개의 원을 만들고 각 원을 어떻게 채워넣는지 혹은 a-3의 경우처럼 빼주는지에 따라 전체 데칼의 형태를 결정할 수 있습니다.

기본적인 원형 데칼은 전체면저 a가 있고 내부에 차오르는 a-1이 있으며 a에서 a-1 의 면적을뺀 비어있는 데칼영역a-3이 필요합니다.

도넛의 경우에는  a-1에서 다시 a-2를 빼준경우가 됩니다.

 

전체노드는 크고 복잡해서 따로 이미지를 준비하지 않았지만 이런식으로 각 원형의 영역을 합한뒤 단일 파라메터로 제어할 수 있도록 엮어주고 필요에 따라 노이즈 텍스쳐 등을 추가해 주면 됩니다.

엣지와 내부 영역을 분리해서 계산해줘야하는데 내부영역에 타일링 마스크를 적용할 경우 마스크의 투명도에 따라

엣지가 사라져 보이지 않을수도 있기에 엣지를 살리려면 엣지의 투명도는 별도로 처리해서 합연산 처리를 해주어야 합니다.

 

3.방사형

방사형은 원형에서 파생되며 위에서 설명한 원형 메카니즘에 펼친각도만 계산해서 마스킹 처리만 하면됩니다.

또한 그 각도에 맞추어 엦지에 텍스쳐를 배치하면 방사형 데칼을 제작할 수 있습니다.

 

방사처리는 할때는 극좌표계를 사용합니다.

기본적으로 상단 노드를 통한 펼쳐짐 효과의 마스킹을 얻습니다.

위 마스킹을 B 라고 하면 위 원형때 설명했던 A와 B를 곱하게되면 방사형 마스킹을 얻을 수 있습니다.

원형때와 마찬가지로 외부용 마스킹과 내부용 마스킹을 따로 만들어주며 내부 마스킹이 외부마스킹의 범위만큼 차오는것 처럼 파라메터를 연결해 주면 됩니다.

위 이미지의 윗부분은 방사형 외곽부분이며 아래쪽이 내부의 데칼 영역입니다. angle 파라메터로 전체 각도를 정하고

Endangle로 현재가 어느정도 펼쳐져 있는지를 결정하게 됩니다. 

저는 추가로 좌에서 우로 차거나 우에서 좌로 차거나 하는 기능을 추가하였습니다.

내부와 외부는 각자 필요한 텍스쳐등을 곱한뒤 엣지를 합쳐 이미시브에 들어가면 최종적으로 방사형 데칼이 마무리 되게 됩니다.

방사형 엣지는 몇가지 작업이 필요합니다.

기본적으로 둥근 부분의 엣지는 원형에서 제공되므로 좌우 엣지만을 배치해주면 됩니다.

 

방사형의 외부엣지와 내부엣지입니다 

텍스쳐의 uv를 회전시켜 배치하며 외부형 엣지는 좌우 대칭으로 처리하고 내부 엣지는 앞쪽으로 뻣어나는 경우에는 엣지가 필요 없으나 좌에서 우나 우에서 좌로 나가는경우는 엣지가 필요해 1개의 엣지를 배치하였습니다.

방사형 외부 엣지의 경우 360도일경우 사라져야하므로 그에따른 작업을 해두었습니다.

이렇게 엣지부분은 마무리되며

 

최종적으로 위 내용들을 합쳐서 데칼 머터리얼을 작성하게 됩니다.

 

궁금하신 내용은 댓글이나 쪽지로 보내주세요 ^^