본문 바로가기
Learning/Unity

유니티강좌_#07_메쉬 렌더러

by HappyStar 2020. 9. 19.
반응형

오늘은 메쉬 렌더러에 대해서 알아보도록 하겠습니다. 이번 강의에서는 메쉬 렌더러와 관련된 컴포넌트들에 대해서도 알아볼 겁니다. 메쉬 렌더러는 무엇을 하는 기능을 가진 컴포넌트일까요? 메쉬 렌더러에 대해서 알아보기 전에 MeshFilter를 알아봅시다.

 

Mesh는 무엇일까요? Mesh는 입자 크기를 나타내는 단위라고 하는데요. 그냥 쉽게 입체 도형이라고 생각하시면 됩니다. Mesh의 오른쪽에 있는 버튼에 Cube라고 써져 있습니다. 그럼 이걸 한번 바꿔 볼까요? MeshFilter의 제일 오른쪽에 있는 동근 란 버튼을 클릭하시면 아래와 같은 사진이 나옵니다. 그곳에서 아무거나 선택해볼까요? 저는 Cylinder를 클릭해 보겠습니다.

 

그러면 씬 뷰에 있는 큐브가 원기둥으로 변하게 됩니다. *그리고 선택한 모양의 아래쪽을 보시면 위의 사진처럼 그 모양의 이름이 적혀 있고 verts, tris 등 숫자와 함께 적혀있는 단어들이 보입니다. verts는 vertex를 말하며 점을 의미합니다. tris는 triangle이며 12개의 삼각형 면이 있다고 의미 합니다.*

 

MeshRenderer

이제부터 메쉬 렌더러에 대해서 자세히 알아보도록 하겠습니다. MeshRenderer의 역할은 MeshFilter에서 정해진 메쉬를 그려줍니다. Inspector창에서 transform의 scale에서는 오브젝트의 크기를 정할 수 있는데 이곳에 숫자를 입력해주면 메쉬 렌더러가 그 숫자만큼 커지게 그려줍니다. 만약 메쉬 렌더러 컴포넌트를 지운다면 어떻게 될까요? 그러면 오브젝트의 그래픽이 사라지게 됩니다. 왜냐하면 메쉬를 그려주는 기능을 하는 컴포넌트가 삭제되었기 때문입니다. 메쉬 필터를 삭제해도 마찬 가지입니다. 설명은 이쯤 하고 메쉬 렌더러의 기능을 다뤄보도록 하겠습니다. *제가 지금까지는 유니티 버전 2019.1f를 쓰고 있었습니다. 그런데 2020 버전이 나온 줄 모르고 2019 버전으로 MeshRenderer를 공부하려고 유니티 독스를 보고 있다가 2019와 2020이 다르다는 걸 보고 2020 버전을 사용하게 되었습니다. 제가 올린 앞 강의들은 2020 버전과 동일하니 안심하시고 따라 하셔도 됩니다. 2020이 Ui가 상당히 개편돼서 사용하기 좋네요! *

 

Materials

-Size : 머터리얼의 개수를 정합니다. 머터리얼은 물질이라고 생각하시면 됩니다. 예를 들어서 Clynder메쉬에 나무 머터리얼을 추가하면 clynder의 외부가 나무처럼 까칠까칠 해지고 색깔과 껍질 등이 생기게 됩니다.

 

-Element : 머터리얼 파일을 정해주는 곳입니다. 오른쪽의 동그란 버튼을 눌러서 자신이 추가하고 싶은 머터리얼 파일을 추가하면 됩니다. Size의 숫자만큼 요소가 생겨나게 됩니다.

 

Lighting

-CastShadows : 그림자를 켜고 끄는 기능을 가지고 있습니다. OnlyShadow는 그래픽은 사라지고 그림자만 남고, TwoSides는 두면에 그림자를 비쳐 줍니다.

 

-Recieve Shadows : 다른 객체의 그림자에 영향을 받지 않게 합니다.

-ContributeGlobalIllumination : 다른 객체가 반사한 빛과 간접 광등이 나타납니다.

-ReceiveGlobalIllumination : 위의 ContributeGlobalIllumination을 체크하시면 나타나는데 여기서 LightMap은 LightMap에서 조명을 받는 기능이고, LightProves는 LightProves에서 조명을 받는 기능을 가지고 있습니다. 이해가 잘 안 가시죠? 그래서 아래 기능을 보고 이해를 하는 게 좋습니다.

 

LightMapping

ReceiveGlobalIllumination에서 LightMap을 클릭하면 나타납니다. 

- Scale In LightMap : 값이 1.0보다 작아지면 픽셀 수가 감소하고, 1.0보다 커지면 픽셀 수가 증가합니다. 

- Stitch Seams : 이음새를 더 깨끗하게 해줍니다.

- Lightmap Parameters : LightMap 매개변수를 지정합니다.

Probes

Light Probes : 라이트 프로브 시스템에서 광원을 받는 방식을 설정합니다. 라이브 프로브 시스템은 빈 공간을 지나가는 광원에 대한 정보를 저장하는 기능을 가지고 있습니다. 라이트 맵은 표면에 닿는 광원에 대한 정보를 저장합니다.

 

-off : 라이브 프로브를 사용하지 않습니다.

-Blend Probes : 렌더러가 보정된 라이트 프로브를 사용합니다. 기본값

-UseProxyVolume : 크기가 큰 오브젝트의 색깔의 영향을 받을 때 사용합니다.

-Custom Provided : 렌더러가 MaterialProxyBlock에서 균일한 라이트 프로브 셰이더 값을 추출합니다. MaterialProxyBlock은 여러 오브젝트를 그리고 싶을 때 사용합니다.

 

AdditionalSeting

 

Motion Vectors : 모션 벡터를 이용하여 한 프레임에서 다음 프레임으로 넘어갈 때 픽셀당 화면 공간 모션을 추적할지 여부를 결정합니다.

-CameraMotionOnly : 카메라 동작만을 사용하여 모션을 추적합니다.

-PerObjectMotion : 특정 패스를 사용하여 이 렌더러의 모션을 추적합니다.

-ForceNoMotion : 모션을 추적하지 않습니다.

 

DynamicOcclusion : 만약에 카메라가 다른 방향을 보게 되어서 큐브 오브젝트가 보이지 않을 때 사라지게 만드는 기능입니다.

 

LightProbeGroup

 

LightProbeGroup은 주변의 색깔에 영향을 받을 그룹을 지정하는 컴포넌트입니다. 

 

스크립트로 머터리얼 색깔 바꾸기

먼저 머터리얼을 생성해 봅시다. 머터리얼은 Project창에서 우클릭을 한 뒤 Create-Material을 클릭하면 됩니다. 그러면 Inspector창에 아래와 같은 화면이 나타나게 됩니다. 그곳에서 Albedo에서 하얀색을 클릭하시면 색깔을 정할 수 있습니다. 이렇게 파란색, 빨간색을 만들어 봅시다. 

 

그러면 Assets 폴더에 머터리얼이 생성됩니다.

이제부터 스크립트를 작성해봅시다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Hello : MonoBehaviour
{
    [SerializeField]
    private Material M_Blue;
    [SerializeField]
    private Material M_Red;

    private MeshRenderer MR;

    void Start()
    {
        MR = GetComponent<MeshRenderer>();
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            MR.material = M_Blue;
        }

        else
        {
            MR.material = M_Red;
        }
    }

}

 

스크립트 해석 : Material 변수를 두 개 생성합니다. 그리고 MeshRenderer변수 MR을 생성하고, 컴포넌트를 가져옵니다. 그다음 마우스 왼쪽을 눌렀을 때는 파란색, 누르지 않았을 때는 빨간색이 됩니다.

 

-GetMouseButton(0) : 마우스 왼쪽 버튼을 클릭했을 때 True를 반환합니다. 0대신에 1을 넣으면 오른쪽을 클릭했을때 True가 반환됩니다.

 

결과

왼쪽 마우스를 누르지 않았을 때는 빨간색 눌렀을 때는 파란색으로 변하게 됩니다. 이 기능은 게임에서 캐릭터의 색을 바꿀 때 사용하면 좋을 것 같네요.

 

오늘 강의는 기초라고 하기에는 어려웠습니다. 이 부분을 꼭 안 하여도 게임을 만들 때 큰 상관은 없겠지만 배우면 게임을 만들때 더 디테일하게 만드실 수 있을 겁니다. 추후에 제가 어렵게 설명된 부분들을 더 쉽게 설명하도록 노력해보겠습니다. 다음 강의에서 만나요!^^

반응형

댓글