텍스처(Texture)
3D 모델의 표면에 적용되는 2D 이미지로, 물체의 색상, 세부 사항, 패턴 등을 추가하여
풍부한 그래픽으로 보완해주는 역할을 가진다.
이미지 데이터 : 픽셀로 구성된 2D 이미지로, 색상 정보를 포함 함
UV : 3D 모델의 표면에 2D 텍스처를 매핑하는 데 사용되는 좌표 체계, U와 V는 텍스처의 수평과 수직 방향을 나타내며, 각각의 축이 0에서 1 사이의 값을 가진다.
UV 좌표는 텍스처와 3D 모델 간의 연결고리 역할을 함
※ U: 텍스처의 수평 위치 (0 = 왼쪽, 1 = 오른쪽)
V: 텍스처의 수직 위치 (0 = 아래, 1 = 위)
예를 들어, (0, 0)은 텍스처의 왼쪽 아래 모서리를, (1, 1)은 오른쪽 위 모서리를 나타낸다.
- UV매핑 : 3D 모델의 각 정점에 UV 좌표를 할당하여 텍스처의 특정 부분이 해당 정점에 적용되게끔 함
셰이더 : 텍스처와 함께 사용되어 물체의 시각적 표현을 조정함
조명 : 텍스처는 조명 효과와 함께 사용되어 물체가 어떻게 빛을 반사하고 보일지를 결정함
등 그래픽 처리에 관한 여러 특징을 지니고 있으며 이를 포괄적으로 통칭하는 것이 텍스쳐 라고 할 수 있다.
using System;
using UnityEngine;
public class HandmadeTim : MonoBehaviour
{
private MeshFilter mf = null;
private MeshRenderer mr = null; //MeshFilter와 MeshRenderer가 있어야 화면에 그릴 수 있음
private void Awake()
{
mf = gameObject.AddComponent<MeshFilter>();
mr = gameObject.AddComponent<MeshRenderer>();//두 컴포넌트 추가
}
private void Start()
{
Mesh mesh = BuildMesh();
mf.mesh = mesh;
}
private Mesh BuildMesh() //Mesh Filter 만들기
{
Mesh mesh = new Mesh();
mesh.name = "HandmadeQuad";
Texture2D tex = Resources.Load<Texture2D>("Textures\\t_Texture_Braid_Tim");
//Material mat = CreateMaterial(null);
Material mat = CreateMaterial(tex);
mr.material = mat;
// 0 -- 1
// | |
// 2 -- 3
Vector3[] vertices = new Vector3[4]
{
new Vector3(-0.5f, 1f),
new Vector3(0.5f, 1f),
new Vector3(-0.5f, 0f),
new Vector3(0.5f, 0f)
};
// vertex Buffer
mesh.vertices = vertices; //vertices : mesh에 vertex정보(위치)를 배치하는 배열
// CW(Clock - Wise)
int[] indieces = new int[]
{
0,1,2,//시계방향
1,3,2 //1,2,3 반시계방향
};
// Index Buffer
mesh.triangles = indieces;
Vector2[] uvs = new Vector2[] //texture를 받으려면 uv가 필요하다
{
//new Vector2(0f, 0f),
//new Vector2(1f, 0f),
//new Vector2(0f, 1f),
//new Vector2(1f, 1f),
new Vector2(0f, 1f),
new Vector2(1f, 1f),
new Vector2(0f, 0f),
new Vector2(1f, 0f)
};
mesh.uv = uvs; //mesh의 각 정점에 대한 uv좌표를 담은 배열, Texture를 mesh에 매핑하는데 사용됨
Vector3[] normals = new Vector3[4] //normal : 법선벡터, 조명계산엔 법선벡터가 필요하다.
{
new Vector3(0f, 0f, -1f),
new Vector3(0f, 0f, -1f),
new Vector3(0f, 0f, -1f),
new Vector3(0f, 0f, -1f)
};
mesh.normals = normals;
return mesh;
}
private Material CreateMaterial(Texture2D _tex)
{
Material mat = new Material(
Shader.Find("Universal Render Pipeline/Lit")); //Material은 기본 생성자가 없다.(new Material() 은 빨간색 에러가 뜸)
//항상 특정한 셰이더를 지정해서 생성해야함.
//Material -> URP - Lit(조명처리) -> 유니티에서 기본적으로 설정되는 셰이더
mat.name = "Unlit_Tim";
mat.mainTexture = _tex;
return mat;
}
}
빈 object에 스크립트를 넣은 뒤 실행
빈 object에 메쉬 필터와 렌더러, material이 설정되는 것을 확인 할 수 있다
'Unity' 카테고리의 다른 글
람다식 (0) | 2024.10.22 |
---|---|
UI - Canvas (0) | 2024.10.18 |
Lerp(선형 보간) (0) | 2024.10.01 |
Coroutine(코루틴) (0) | 2024.09.30 |
Prefab (0) | 2024.09.24 |