본문 바로가기

Unity/제로부터 Effect

Disintegrate Enemy Effect(Shader+VFX)

728x90

 

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