-
Disintegrate Enemy Effect(Shader+VFX)Unity/제로부터 Effect 2024. 1. 6. 19:06728x90
Texture ↓
더보기Albedo
표면의 색상 및 질감을 정의하는 데 사용되는 텍스쳐입니다. 주로 물체의 기본 색상 맵핑에 사용되며, 픽셀별로 표면의 색상 정보를 담고 있습니다. 예를 들어, 벽면의 벽돌 또는 나무의 표면 텍스쳐 등을 Texture Albedo로 사용할 수 있습니다.
Normals
표면의 방향과 기울기를 나타내는 벡터입니다. 표면의 각 픽셀에 대해 노멀 벡터를 지정하여, 빛이 표면에 반사되는 방향을 결정하는 데 사용됩니다. 이를 통해 빛의 입사각에 따라 표면이 어떻게 조명되고 투영되는지 시각적인 효과를 조절할 수 있습니다. Normals는 주로 표면의 입체감을 강조하거나 광택 효과를 부여하는 데 사용됩니다.
Ambient Occlution
주변 환경의 조명 상태에 따라 표면의 그림자 밀도를 나타내는 텍스쳐입니다. Ambient Occlusion은 주로 표면의 빛과 그림자의 강도를 조절하여 물체의 입체감과 디테일을 강조하는 데 사용됩니다. 주변의 빛에 가려져 그림자가 형성되는 부분은 어두운 값으로 나타내어 표면의 입체감을 더욱 강조할 수 있습니다.
Emissive
주로 광원이나 발광체를 나타내는 데 사용됩니다. 예를 들어, 컴퓨터 게임에서 불이 타오르는 불꽃이나 전구의 빛, 화면에서 광원으로 작용하는 효과 등을 표현할 때 Emissive 속성을 활용합니다. 이러한 물체는 주변 물체에 빛을 비추어 밝은 조명 효과를 만들거나, 특정 물체를 강조하기 위해 사용될 수 있습니다.
1. Disintegrate Shader Graphe 만들기
3d 모델링의 텍스쳐 파일에 맞게 셈플링 해주기.
PBR(Physically Based Rendering)를 구성해 줍니다.
*PBR(Physically Based Rendering)?
더보기텍스처를 조합하여 물체의 외관을 결정합니다.
빛의 반사, 굴절, 그림자 등 다양한 광학적 효과를 물리적으로 정확하게 시뮬레이션하여 현실적이고 자연스러운 시각적 결과물을 만들어내는 기법.
노이즈를 사용해 Disintegrate 효과 만들어주기.
노이즈는 일반적으로 픽셀마다 랜덤한 값을 생성하며 검은색 부분이 0 에 가깝고, 흰색부분이 1에 가깝습니다.
Step 노드의 경우 In 값이 Edge 값 보다 크거나 같으면 1, 아니면 0 을 반환 하기 때문에
Step 을 사용해 불규칙한 노이즈를 검정과 흰색으로 명확하게 나눠 줍니다.
DissolveAmount가 커질수록 흰색 부분이 많아 지게 됩니다.
2.ParticleToCharacter_VFX 만들기 : 캐릭터의 Mesh에 맞게 파티클을 생성 시킬 것 입니다.
- Visual Effect Graph 를 생성하고 Set Potition(mesh) 추가
- 파티클의 생성량과 생성속도를 조절해 줍니다.
- 스크립트 만들기
- 오브젝트가 활성화 되면 스킨매쉬를 베이크해 vfx 에 적용 시킬 것 입니다 .
- 정상적으로 particle이 매쉬에 붙지 않는다면 만들어놓은 매쉬의 정점들을 배열로 받아 새로 만든 매쉬에 정점에 할당해준 뒤 VFX에 넣어줍니다.
while (gameObject.activeSelf) { Mesh m = new Mesh(); skinnedMesh.BakeMesh(m); /** Vector3[] vertices = m.vertices; Mesh m2 = new Mesh(); m2.vertices = vertices; **/ vfx.SetMesh("Mesh", m); yield return new WaitForSeconds(refreshRate); }
* 스킨과 매쉬 스킨의 상의 스케일이 1:1 이여야 Particle 이 정상적으로 매쉬에 붙게 됩니다.
Initialize Particle를 World으로 바꿔주면 Particle이 오브젝트를 따라가지 않고 잔상을 만들어 냅니다.
3. Disintegrate 효과를 다룰 스크립트 작성
- 필요한 변수들을 만들고, 적이 죽었을 때 실행할 코루틴 함수를 작성 합니다
- 죽었을 때 실행할 애니메이터와, VFX가 있는지 확인하고 , 각각 애니메이션과, 이펙트를 실행시켜줍니다.
- 배열로 받아논 Skinned Mesh Renderer 에 있는 materials의 각각의 Disintegrate Shader Graphe의 접근해 변수 DessolveAmount를 증가 시켜 줍니다.
IEnumerator Dessolve() { if(animator != null) { animator.SetTrigger("Die"); } if(vfx != null) { vfx.gameObject.SetActive(true); vfx.Play(); } yield return new WaitForSeconds(dieDelay); while (dessolveMaterials[0].GetFloat("_DissolveAmount") < 1) { percent += dessolveRate; for (int i = 0; i < dessolveMaterials.Length; i++) { dessolveMaterials[i].SetFloat("_DissolveAmount",percent); } yield return new WaitForSeconds(refreshRate); } Destroy(gameObject, 1f); }
완성
728x90'Unity > 제로부터 Effect' 카테고리의 다른 글
Lightning (Shader + VFX) (0) 2024.01.15 Electricity (Shader + Visual Effect) (0) 2023.12.28 VFX, 전류 Trail 구현하기 (0) 2023.11.29 TrailShader 만들기 (1) 2023.11.23 VFX Graph - Arrow Projectile (0) 2023.11.20 - Visual Effect Graph 를 생성하고 Set Potition(mesh) 추가