4.7
제작할 것은 크게 2가지
- 타격 이펙트
- 먼지 이펙트
먼지는 배경에 따라 색이 달라져야 한다. 비오는 날엔 먼지 대신 물이 튀겨야 하지만, 느낌이 잘 안사니까 그냥 색만 맞추자. 무엇보다 귀찮다.

타격 효과부터 만들어 보자. 파티클은 써도 써도 헛갈린다.
오늘의 깨달음


파티클을 뉘이고 싶다면 렌더정렬을 Local로 해주면 된다.

하지만 방향성을 타는 파티클의 경우, 회전값을 주면 짐벌락 현상때문에 회전값이 뒤틀린다. 이것 때문에 이것저것 옵션을 찾아보았건만, 마땅한 해결책을 찾지는 못했다.

아무래도 블렌더에서커스텀 메쉬를 별도로 만들어 처리해 주어야 할 것 같다.

엥…그른데 반밖에 출력이 안된다.
회전계산을 할 때 부호가 바뀌는 걸 고려하지 않는 모양이다… 이래서 공식기능으로 회전이 없는건가.

일단은 셰이더에서 양면을 모두 찍게해서 해결하기로 하자. 이게 정답이 아닐 수도 있지만, 지금으로선 이게 최선이다.

앞으로 방향성을 타는 2D식 이펙트는 모두 오른쪽을 보게 만들어야 한다는 규칙이 생겼다.

테스트를 위해 이펙트를 붙인다. 이걸 붙이느라 또 리팩토링 한가득.

헤비 이펙트. 잘 작동한다.

풀관리도 잘되고 있다. 암만 때려도 이펙트가 5개가 넘어가진 못한다.
이제 꾸며보자.

이펙트의 마스크 이미지는 싱글채널을 사용한다. R과 A중 고를 수가 있다. 기본값이 A인걸로 보아 A를 추천하는 모양인데, 셰이더에서 정보를 받을 때 4채널로 받은 후 1개만 쓰는 구조가 마음에 들지 않았다. 그래서 지금까지는 번거로워도 R채널을 쓰고 있었는데… 샘플링하면 무조건 4채널로 받는 모양이다. (에러가 나는 건 아니지만, 경고가 뜬다.) 이래나 저래나 똑같다면 그냥 A를 쓰는 게 낫겠지만…
한가지 더 의문이 든다. 싱글채널은 작업은 편하지만 최적화에 도움이 될까?


샘플링이 무조건 4채널이라면 어쨌거나 비디오 메모리를 먹는다는 이야기가 된다. 비슷한 고민을 한 친구가 있다.
https://forum.unity.com/threads/sample-one-texture-channel-only-instead-of-four-optimization.526185
그런데 채널을 R로 바꾸면 메모리 절감효과가 있다.

무려 절반이! 줄어든다. 하지만 그렇게까지 훌륭하지는 않은 것 같기도… 그냥 Default로 하고 채널별로 분리하는 게 좋을까… 선인들이 그렇게 한데는 이유가 있겠지…
일단은 타임오버 내일 다시 고민해보기로 하자.
4.8
텍스처 압축에 대해 좀 더 조사를 해 보자. 유니티의 텍스처 관련 문서에서 자세한 설명을 찾을 수 있었다.
https://docs.unity3d.com/kr/2021.2/Manual/class-TextureImporterOverride.html
비교하려는 것은 BC3와 BC4다. BC3는 DXT5를 뜻한다. 우리가 흔히 사용하는 바로 그 포맷이다.
| 텍스처 압축 포맷 | 설명 | 채널 | Quality | 픽셀당 비트 | 1024×1024 텍스처 크기(MB) |
|---|---|---|---|---|---|
| RGBA Crunched DXT5 | 압축된 RGBA, 추가 디스크 크런치 압축 포함 | RGBA | 낮음-중간 | 가변 | 가변 |
| R Compressed BC4 | 압축된 단일 채널(R) | R | 높음 | 4 | 0.5 |
눈치껏 판단하건데 BC뒤에 붙는 숫자가 높을 수록 더 높은 품질을 보여주는 것 같다. 적어도 DXT5와 BC4를 놓고 보면 그렇다. 답은 나왔다. 마스크 채널은 BC4를 사용해야 한다.
파티클의 타격 이미지가 자연스럽게 사라지게 하기 위해 SDF를 사용할 예정이다. 블렌딩시키고 싶은 2개의 이미지가 있을 때 이것이 자연스레 합성이 되는지 테스트가 필요하다.

타격이미지는 요렇게 작아져야 한다.

는 실패. SDF는 마법이 아니다.

그냥 SDF를 쓰지 않은 프레임 커팅이 나아보인다.

에이..별로네…

그냥 SDF가 가장 낫다. SDF는 마법이다!(…)

파티클의 커스텀 데이터를 다룰 때 사용하는 모드는 ‘보기‘이다! 컬러 시맨틱을 커스텀 데이터로 사용한다는 뜻이 아니다! 이걸 사용하려면 커스텀 데이터를 TEXCOORD1에 할당해서 사용하여야 한다.

이 시스템을 이해하느라 작업시간을 다 썼다. 아휴. 타임오버.

오래 전 개발했던 캐릭터 히트 라이트가 이제야 그림이 맞게 됐다.


이펙트가 캐릭터를 감싸도록 찍히는 게 마음에 든다. 의도했던 대로
Awesome blog post. What is SDF?
Yeah, I read about the yellow light hit on a previous post, combined with the actual 2d sprite, looks amazing. But how did you make this in Unity shader? is it a particle shader?
Also, the research about using the R channel to compress it to half was impressive! I didn’t know this.
SDF(Signed Distance Field)는 컷아웃(알파테스트)셰이더에서 사용하기 위해 만들어진 텍스처 형태예요. 이펙트 경계가 해상도때문에 지글지글한 것을 보완해주기 위해 만들어졌지만, 스르륵-사라지는 이펙트를 만들 때 효과적이라 자주 사용합니다. 텍스처만 만들면 셰이더는 쉬워요. 그냥 셰이더 코드에 clip(a – 0.5)를 넣기만 됩니다. 그리고 이 셰이더를 파티클에 적용한 거죠.
유니티 어셋스토어에서 SDF Generator를 검색해보시면 도움이 되실 거예요.