ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Disintegrate Enemy Effect(Shader+VFX)
    Unity/제로부터 Effect 2024. 1. 6. 19:06
    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
Designed by Tistory.