본문 바로가기

Unity/제로부터 구현

Meteor 구현하기(Shader,Particle 활용)

728x90

메테오 만들기.

 

1. 운석 shader 생성.

  • Shader Graph
    • Fragment 콘텍스트
      • Normal(Tangent Space) : 픽셀의 표면 법선(normal)을 나타냅니다. 표면 법 선은 픽셀의 방향을 결정하는 데 사용되며 빛의 입사 각도, 그림자 및 조명 효과 등의 계산에 중요한 역할을 합니다.
      • Emission : 픽셀에게 추가적인 발광 혹은 광원 효과를 부여하는 데 사용됩니다.

2. 노드 생성

  • 텍스처 셈플링
    • Sample Texture 2D
    • Normal From Texture 
      • 텍스처로부터 법선(normal) 데이터를 추출하는 데 사용됩니다.일반적으로 텍스처는 색상 정보를 담고 있지만, Normal From Texture 노드를 사용하면 텍스처의 RGB 채널을 법선 벡터로 해석할 수 있습니다. 텍스처의 각 픽셀은 X, Y, Z 축에 대한 법선 값을 나타내며, 이를 조합하여 픽셀의 표면 방향을 결정할 수 있습니다. 렌더링 하는 개체의 표면을 더욱 자세하고 실감 나게 만드는 데 도움을 줍니다.
  • 패턴, 노이즈 만들기
    • Voronoi
    • Simple Noise
  • Fresnel Effect로 외각 강조

 

3. Blender로 간단한 메테오 운석 모형 만들어 쉐이더 적용하기

4. 연기쉐이더 파티클로 만들기

5. 운석이 땅에 충돌했을 때 스파크효과 파티클로 만들기

  • Renderer:  스파크가 길쭉한 형태로 퍼지게 만들기 위해 Renderer Mode는 streched Billboard
  • Duration 은 충돌 시 한 번만 실행할 것임으로 1.
  • Start LifeTime, Start Size, Start Speed, Start Color
    • Random between Two Constants로 랜덤 하게 설정
  • Emission 설정
  • Shape 스파크가 넓은 영역에 뿌려지게 만들기 위해  Shape: Cone, Angle : 75 정도로 설정
  • Velocity over Lifetime 설정, space : world
  • Color over Lifetime 설정
  • Size over Lifetime 설정

6. 운석이 땅에 충돌했을 때 연기가 주위에 퍼지는 효과 파티클로 만들기

  • duration 설정 LifeTime, Size, speed, color 설정
  • Emission설정
  • Shape : Circle, Radius
    • Radius , Radius Thickness 설정
  • Velocity over Lifetime 설정, space : world
  • Size over Lifetime
  • Rotation over Lifetime
  • Renderer에 연기쉐이더 적용 시키기
  • Texture Sheet Animation으로 텍스쳐 나누기

7. 잔해 이펙트 파티클로 만들기

  • duration, lifetime, size, speed, rotation 설정, emission 설정
  • 3D Start size 설정.
  • Flip Rotation을 1로 설정 (입자의 회전방향을 180도 반전)
  • 유성에 쓴 mesh를 사용해 파티클 renderer에서 renderer mode를 mesh로 바꿔 mesh 설정해 주고 새로운 material을 만들어 땅 색이랑 동일한 색상으로 설정해준 뒤 renderer의 material에 설정.
  • Shape Angle 설정
  • Gravity Modifier로 중력 설정.
  • Collision 설정
    • type: world
    • Dampen : 입자가 충돌할 때 감속하는 정도(값이 높을수록 충돌했을 때 더 많이 감속됩니다.)
    • Bounce : 입자가 충돌했을때 반사되는 양(값이 높을수록 충돌 시 더 많이 반사)
    • Radius Scale : 입자 충돌 반경
    • Visualize Bounds : 입자의 충돌 경계를 시각화

8. 크레이터 만들기

  • blender로 간단하게 크레이터 모형 만들기.
  • 파티클 만들기.
    • 딱 한번 생성할 것이기 때문에 looping 해제, 3d size, 3d rotation 설정 x 90 설정, flip rotation으로 반전시켜주기.
    • emission 반복생성 할 필요 없이 1개만 생성할 것.
    • shape 필요 없음으로 해제.
    • renderer에 mesh, material 적용하기, Render Alignment local 설정(입자 렌더링 방향 설정)
  • 만들어진 크레이터 파티클을 복사해 크레이터 안에 파티클 만들기. 사이즈와 렌더러 변경
  • 만들어진 잔해 이펙트 복사해 잔불 효과 추가해 보기
    • noise를 추가
  • 쇼크웨이브 파티클 만들기
  • 충돌시 위로 쏟아 올라오는 연기 추가

9. 운석 연기 디테일 추가

 

Script 만들기

  1. 지정한 카운트만큼 운석을 떨어트릴 것입니다.
  2. 시작지점과 도착 지점을 설정합니다.
    1. 운석에 rigibody 설정을 하고, 시작지점으로부터 일정한 간격 내에 랜덤 한 위치에 생성한뒤, 도착지점 또한 도착 지점으로 부터 일정한 간격 내에 랜덤한 위치로 설정해 줍니다.
    2. 시작 지점과 도착지점을 사용해  진행 방향을 구하고, 진행 방향 쪽으로 rotation 해줍니다.
    3. FixedUpdate에 운석의 rigibody.position에 운석의 진행방향과 운석의 속도, 시간을 곱해 더해줍니다.
    4. 운석의 진행방향으로 ray를 생성해 바닥과 충돌하는지 확인해 줍니다.
    5. 충돌 시 운석을 제거해 주고 이펙트를 생성해 줍니다.
      1. 충돌 이펙트의 경우 따로 script를 만들어 이펙트들을 모아논 list를 만들고 포문으로 list를 돌아주면서 destroy 시간을 duration 과 startLifetime.constantMax 더한 값으로 해줍니다.(각 이펙트들의 유지시간과 재생시간이 다름으로 충분히 재생한 후에 삭제)

 

완성

 

728x90