[Unity] 3D Rendering

Lingtea_luv·2025년 5월 9일
0

Unity

목록 보기
12/30
post-thumbnail

그래픽 요소 이론과 모델


다면체

  1. Vertex : 물체의 가장 기본이 되는 점
  2. Polygon : 물체를 이루는 최소 면 단위
  3. Mesh : 폴리곤이 모여 만들어지는 하나의 물체, 형체를 가지고 있는 모든 게임 오브젝트가 해당

레이어 마스크

유니티에서 레이어는 다방면으로 활용이 된다.
camera를 추가하여 culling mask에 레이어 지정을 통해 해당 레이어만 보이도록, 혹은 보이지 않도록 설정하는 것이 가능하며, 기본적인 충돌 지정 또한 physics의 collision matrix를 통해 정하는 것 또한 가능하다.

특정 레이어 추가 및 제거

public static class LayerUtil
{
	public static void AddLayer(ref LayerMask targer, params string[] names)
    {
    	foreach(string name in names)
        {
    		target |= (1 << LayerMask.NameToLayer(name));
        }
    }

	public static void RemoveLayer(ref LayerMask target, params string[] names) 
    {
    	foreach(string name in names)
        {
    		target &= ~(1 << LayerMask.NameToLayer(name));
        }
    }
}

public class Layer
{
	private LayerMask _targetLayer;
    
	private void Init()
    {
    	LayerUtil.AddLayer(_targetLayer, "Player", "Monster");
    }
}

렌더링 텍스쳐

렌더링 되고 있는 화면을 텍스쳐 형태로 저장한 것으로, 보조 카메라가 렌더링하는 화면을 추가로 다루고 싶을 때 렌더링 텍스쳐를 사용한다. 최적화 요소로 쓰이며, 자연효과를 연산할 때 생기는 부하를 방지하기 위해 녹화해두는 방식으로 구현된다.

렌더링 텍스쳐 지정 스크립트

아래는 1번을 누르면 스크린(CCTV)에 1번 카메라의 화면이 나오고, 2번을 누르면 2번 카메라의 화면이 나오도록 구현한 스크립트이다.

public class CameraController : MonoBehaviour
{
    [SerializeField] private RawImage screen;
    [SerializeField] private RenderTexture camera1;
    [SerializeField] private RenderTexture camera2;

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.Alpha1))
        {
            screen.texture = camera1;
        }

        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            screen.texture = camera2;
        }
    }
}

이후 프로젝트 창에서 렌더링 텍스쳐를 생성하여 인스펙터 창에서 생성한 카메라의 텍스쳐에 넣고, Raw Image를 생성하여 해당 스크립트를 넣은 뒤 인스펙터에서 드래그하여 각각의 렌더링 텍스쳐를 지정하면 위에서 설명한 방식으로 작동한다.

profile
뚠뚠뚠뚠

0개의 댓글