본문 바로가기
GGM/엔진

20230306 - 엔진 - mesh, Materials

by DDongYeop 2023. 3. 6.
728x90

URP설정 

 

우클릭 - Create - Rendering - URP Asset (with Universal Renderer) 

 

 

URP에셋을 만들어주고, 

 

 

 

Project Settings에서 Graphice Scriptable Render Pipeline Settings에서 아까 만든 URP에셋을 넣어준다. 

 

 

Shader - Universal Render Pipeline - Lit을 선택해준다. 

대부분 UnLit과 Lit만 사용하게 될 것이다. 

UnLit은 빛의 효과를 받지 않는 것이고, Lit 빛의 효과를 받는 것이다. 

 

 

이후 Mesh에 있는 메테리얼 쪽을 보면 여러 설정을 할 수 있다. 

 

 

Base Map은 가장 기본 적인 색을 표현 해주는 것 

 

 

Metalic Map은 메탈 효과. 즉 광택 효과를 주는 것 

 

 

Normal Map은 간단한 입체 표현 

 

 

Occlusion Map은 음영 표현 

 

 

계속 적용 되어있던 Emission Map은 약간 밝게 해주는 표현 발광 표현이다. 

검은색으로 표시된 곳은 발광을 안 해주고, 다른 색으로 표시 된 곳은 발광된다.

 

이곳에서 사용하지 않은 Height Map은 높낮이 표현이다. 

캐릭터에서 사용하기보단 벽 같은 곳에서 더 많이 사용한다. 

 

 

다음은 매쉬를 그리는 방법을 배웠다.

 

vertices라는 변수로 삼각형의 위치를 잡아주고, 

triangles변수로 삼각형을 그릴 순서를 정해준다. 

그후 텍스쳐를 넣기 위해 uv변수를 만들어서 좌표를 설정해준다. uv의 좌표는 vertices변수의 순서와 같이 찍어주어야하고, 0과 1로만 표현 할 수 있다. 

참고로 시계방향으로 그려주어야 정방향으로 나온다. 

using UnityEngine;

public class TestUV : MonoBehaviour
{
    private MeshFilter _meshFilter;
    
    private void Awake()
    {
        _meshFilter = GetComponent<MeshFilter>();
    }

    private void Start()
    {
        Mesh mesh = new Mesh(); //새로운 메쉬를 만들어서 

        Vector3[] vertices = new Vector3[3];
        Vector2[] uv = new Vector2[3];
        int[] triangles = new int [3];

        vertices[0] = new Vector3(0, 0);
        vertices[1] = new Vector3(0, 5);
        vertices[2] = new Vector3(5, 5);

        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 2;

        uv[0] = new Vector2(0, 0);
        uv[1] = new Vector2(0, 1);
        uv[2] = new Vector2(1, 1);

        mesh.vertices = vertices;
        mesh.uv = uv; //비여있는 배열 
        mesh.triangles = triangles;
        
        _meshFilter.mesh = mesh; //메쉬 필터에 적용 
    }
}

 

 

이렇게 만들어주면 4각형이 만들어진다. 

using UnityEngine;

public class TestUV : MonoBehaviour
{
    private MeshFilter _meshFilter;
    
    private void Awake()
    {
        _meshFilter = GetComponent<MeshFilter>();
    }

    private void Start()
    {
        Mesh mesh = new Mesh(); //새로운 메쉬를 만들어서 

        Vector3[] vertices = new Vector3[4];
        Vector2[] uv = new Vector2[4];
        int[] triangles = new int [6];

        vertices[0] = new Vector3(0, 0);
        vertices[1] = new Vector3(0, 5);
        vertices[2] = new Vector3(5, 5);
        vertices[3] = new Vector3(5, 0);

        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 2;
        triangles[3] = 0;
        triangles[4] = 2;
        triangles[5] = 3;

        uv[0] = new Vector2(0, 0);
        uv[1] = new Vector2(0, 1);
        uv[2] = new Vector2(1, 1);
        uv[3] = new Vector2(1, 0);

        mesh.vertices = vertices;
        mesh.uv = uv; //비여있는 배열 
        mesh.triangles = triangles;
        
        _meshFilter.mesh = mesh; //메쉬 필터에 적용 
    }
}

 

 

추가적으로 유니티에서 특정 오브젝트를 선택한 후 Ctrl + Shift + F를 눌러주면 지금 Scene뷰에서 바라보고 있는 방향, 지금 있는 위치 그대로 오브젝트가 이동한다. 

728x90

댓글