-
Meteor 구현하기(Shader,Particle 활용)Unity/제로부터 구현 2023. 12. 14. 20:55728x90
메테오 만들기.
1. 운석 shader 생성.
- Shader Graph
- Fragment 콘텍스트
- Normal(Tangent Space) : 픽셀의 표면 법선(normal)을 나타냅니다. 표면 법 선은 픽셀의 방향을 결정하는 데 사용되며 빛의 입사 각도, 그림자 및 조명 효과 등의 계산에 중요한 역할을 합니다.
- Emission : 픽셀에게 추가적인 발광 혹은 광원 효과를 부여하는 데 사용됩니다.
- Fragment 콘텍스트
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 만들기
- 지정한 카운트만큼 운석을 떨어트릴 것입니다.
- 시작지점과 도착 지점을 설정합니다.
- 운석에 rigibody 설정을 하고, 시작지점으로부터 일정한 간격 내에 랜덤 한 위치에 생성한뒤, 도착지점 또한 도착 지점으로 부터 일정한 간격 내에 랜덤한 위치로 설정해 줍니다.
- 시작 지점과 도착지점을 사용해 진행 방향을 구하고, 진행 방향 쪽으로 rotation 해줍니다.
- FixedUpdate에 운석의 rigibody.position에 운석의 진행방향과 운석의 속도, 시간을 곱해 더해줍니다.
- 운석의 진행방향으로 ray를 생성해 바닥과 충돌하는지 확인해 줍니다.
- 충돌 시 운석을 제거해 주고 이펙트를 생성해 줍니다.
- 충돌 이펙트의 경우 따로 script를 만들어 이펙트들을 모아논 list를 만들고 포문으로 list를 돌아주면서 destroy 시간을 duration 과 startLifetime.constantMax 더한 값으로 해줍니다.(각 이펙트들의 유지시간과 재생시간이 다름으로 충분히 재생한 후에 삭제)
완성
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
Cinemachine 을 사용한 카메라 이동 범위 제한 (2D) (0) 2024.01.16 플레이어의 정보를 로컬 저장소에 저장하기 (PlayerPrebs) (0) 2023.12.24 (2D)Enemy 정해진 영역에서 반복 이동 시키기(+Blend Tree) (0) 2023.12.14 플레이어를 기준으로 n크기의 반지름을 가진 원의 접선 그리기. (0) 2023.12.13 Electric Attack 구현하기 ( +Overlap) (0) 2023.12.11 - Shader Graph