less than 1 minute read

GPU를 미친 듯이 괴롭힌 이펙트 종결 발표. 거기다 충돌도 구현했다.

Cheap Colliding Particles

nil

  • 요구사항 : CPU대신 GPU를 괴롭혀 줘.

nil

nil

  • 파티클 하나당 28 bytes 사용

nil

  • type data를 texture에 저장.
  • 이것 때문에 드로우 콜 한 번으로 렌더링이 가능하다.

nil

nil

  • particle state buffer
    • 이걸로 총 파티클 수를 제어함
    • pixel 하나가 파티클 하나를 가르킴
    • 죽은 파티클은 검정색
    • 살아 있는 건 색깔

nil

  • 파티클 충돌 멋지다

nil

  • 살색은 여유 공간.
    • surface에서 마진을 둔다.
  • 파티클 속도 벡터와 surface normal을 연산해 튕김을 구현
    • surface tangent를 기준으로 reflect

Shields & Depth Effects

nil

  • 버텍스 확장

nil

  • 깊이와 비교해 fade out
  • 캐릭터와 가까울수록 투명

nil

Low Resolution Transparent

nil

  • 반투명 레이어가 너무 많을 때

nil

  • low resolution을 적극 사용

nil

  • low -> high 트랜지션은 비싸므로 남용하면 느려진다

nil

  • 그룹을 low-res로 그리고 high-res 콘텐츠와 섞는다.
  • 이렇게 묶은 그룹을 반투명 소팅에 넣어서 소팅한다.
  • 그룹에 가장 먼 녀석을 소팅 기준값으로 사용
    • high res 녀석들보다 멀리 가서(그룹 내 가장 먼 녀석이랑) high res에 가려질 가능성이 크다.

nil

  • 뎁스 잘 사용하자
  • 이쪽을 어떻게 잘 활용하느냐가 관건인 듯.

발표