유니티에서 버텍스를 사용하여 직접 Quad를 그려봄으로써,
랜더링의 전반적인 단계들과, 유니티에서는 랜더링 과정을 어떻게 돕고 있는지 알아보았다.
코드는 여기
https://github.com/eunchaeee/unity-snippets/tree/main/Assets/Graphics/DrawVideoPlayer
아래의 유니티 공식 도큐를 참고하여 작성하였다.
Unity - Manual: Example: creating a quad
Unity - Manual: Example: creating a quad
Level of Detail (LOD) for meshes Example: creating a quad To represent flat surfaces, Unity includes the Plane and QuadA primitive object that resembles a plane but its edges are only one unit long, it uses only 4 vertices, and the surface is oriented in t
docs.unity3d.com
메시 랜더링에 필요한 모든 과정을 직접 해보기 위해, Empty GameObject에 QuadCreator.cs 를 붙이면 Quad가 그려질 수 있도록 작성하였다.
Start 함수 안에 순차적으로 코드를 작성하였다.
다음은 그 설명이다.
Mesh Filter의 역할
Mesh Renderer의 역할
Material은 Universal Render Pipeline/Lit 쉐이더를 사용해 만들어주었다.
Material
머터리얼에 사용하는 셰이더에 따라 머터리얼의 설정 옵션들이 결정된다.
텍스처에 대한 레퍼런스, 타일링 정보, 컬러 틴트 등을 포함한 표면 랜더링 방법이 정의된다.
Vertices 는 그래픽스 공간에서 정점을 뜻한다.
Vector3 배열에 원하는 정점들을 찍어준다.
mesh.Triangles
메시가 갖고있는 모든 삼각형을 나열한 배열.
따라서 triangles 배열의 크기는 3의 배수이다.
여기서 버텍스 인덱스는 시계방향으로 적어줘야한다..!
보통 그래픽스에서 반시계 방향으로 적어야 벡터의 외적을 따라 내가 보는 면이 앞면이 되는데,
유니티에서는 시계 방향으로 정의되면 무조건 앞면이라고 한다.
normal 정보는 버텍스에 수직인 방향을 뜻한다.
노멀 벡터의 방향이 앞면(랜더링 되는 면)이다.
카메라가 보는 방향이 Vector3.forward이므로, 카메라를 마주보도록 Vector3.back으로 설정해 주었다.
normal 벡터 정보는 따로 설정해주지 않아도 괜찮다.
uv 는 각각의 버텍스가 텍스처의 어느 위치를 랜더링하면 되는지를 나타내는 정보이다.
텍스처 매핑에 사용되며 Vector2로 나타낸다.
언리얼은 DirectX 방식을, 유니티는 OpenGL 방식을 따라 매핑하면 된다.
유니티 UnlitShader 코드 분석(렌더링 파이프라인 기반) (1) | 2024.01.31 |
---|---|
행렬식 (0) | 2024.01.31 |
벡터의 내적과 외적 (0) | 2024.01.26 |
벡터공간(Vector Space)과 어파인공간(Affine Space) (0) | 2024.01.19 |
유니티 아키텍쳐 (0) | 2024.01.18 |