본문 바로가기

IT/컴퓨터 그래픽스16

Aliasing과 Anti-Aliasing Aliasing과 Anti-Aliasing Aliasing 아날로그의 원본을 컴퓨터가 저장하면서 원본이 손상되는 현상이다. Sampling rate가 낮아서 생기는 모든 문제라고도 말할 수 있다. 한국말로 계단현상이라고도 한다. 이런 선이 있다면, 이 선을 한칸한칸(한 pixel)에 찍어주면서 계단처럼 보이게 된다. 이런 식으로 부자연스럽게 보이게 된다. Polygon Aliasing Scan line에 걸치지 않을 정도로 작은 polygon이 있다면, 컴퓨터가 읽지 못해 색을 칠해주지 못한다. 그래서 우리 눈에 사라진 것처럼 보인다. Anti-Aliasing Aliasing을 줄이는 방법이 Anti-Aliasing이다. sampling rate가 낮아서 생기는 문제이니 높여주면 된다. 단순히 sampl.. 2021. 2. 3.
Rasterization Rasterization Rasterization Primitive Assembly 과정에서 Primitive을 그리는데, 이 때 어떤 pixel이 Primitive에 속하는지 계산하는 것. (OpenGL 에서는 이 과정을 알아서 해준다) 그래서 pixel에 들어가는 Fragment의 list를 뽑아낼 수 있다. Line Algorithm 그렇다면 Line에 속해있는 pixel들은 어떻게 계산되어질까? Line을 Rasterization하는 알고리즘이 존재한다. 1. DDA Algorithm x가 1만큼 변할 때마다 y는 m만큼 변화시켜준다. 그러면 x는 정수단위이고, y는 부동소수점단위이기 때문에 반올림 시켜준다. 이를 수도코드로 표현하면 다음과 같다. for(ix = x1; ix 아래 pixel 로... 2021. 1. 31.
Perspective Projection Perspective Projection Perspective Projection 원근법으로 멀리 있는 건 작게, 가까이 있는 건 크게 그리는 방법이다. Projection Matrix 만약 z의 위치에 어떤 물체가 있고, 이를 View plane에 크기에 맞춰 그리려면 닮은 비를 이용하자. 이를 x', y', z' 으로 풀어보면 이를 행렬로 표현하면 다음과 같다. 한 예시인데, 이같은 행렬 형태로 쓰인다는 것만 알고 있자. Frustum View Volume -> Normalized View Volume Normalized Coordinates를 사용하기 위해 우선 Znear Plane과 Zfar Plane을 두고, Znear 와 Zfar를 -1 과 1 로 만들어줘야 한다. Z 를 -1~1 로 만들어주.. 2021. 1. 18.
Camera Coordinates Camera Coordinates 좌표계는 어떤 게 있을까? 1. Modeling Coordinates Modeling 하는 좌표계 실세계와 다른 독립된 좌표계이다. 2. World Coordinates 실세계의 좌표계 Modeling 된 물체들이 World Coordinates에 배치된다. 3. Camera Coordinates 카메라로 보는 좌표계 유저가 바라보게 되는 좌표계이다. 이 때 Camera Coordinates 는 어떻게 구성될까? Camera Coordinates Camera 는 그 자리에 있고, 그 위치에 대한 상대적인 위치를 정의하면 된다. 그림으로 살펴보자. World Coordinates가 있고, Camera Coordinates가 있다고 하자. 이 때 World Coordinat.. 2021. 1. 17.
GPU와 Buffer GPU와 Buffer Buffer Video Memory에 data를 저장하기 위한 공간 (하드웨어 저장공간) Vertex Buffer Objects (VBO) Vertex 특성인 Attributes를 담을 수 있는 buffer. Vertex의 position 이나 Texture Coordinates 등이 있다. OpenGL 입장에서는 position 하나가 buffer 하나라고 생각하면 된다. Vertex Array (VA) Vertex의 Attributes 가 여러개, 즉 buffer가 여러개 존재한다. 각각의 buffer가 무엇인지 알기 위해서 번호를 다는 것. 즉 Array에 담은 것이다. Vertex Buffer Objects GPU로 보낼 Vertex 의 position 배열이 있다고 하자. .. 2021. 1. 17.
GPU에 data를 전달하기 GPU에 data를 전달하기 옛날 방식 CPU에서 RAM에 있는 data를 읽고 매 프레임마다 GPU로 전달하는 방식이었다. 그런데 이는 전달하지 않아도 될 때에도 data를 전달하게 되는 큰 낭비가 발생하게 된다. 현재 방식 GPU한테 data를 다 보내놓고 필요할 때마다 그리라고 신호를 주는 방식이다. GPU는 data를 Video Memory에 저장한 상태에서, CPU에서 그리라는 신호가 오면 Video Memory에서 data를 가져와서 연산하는 방식이다. 그리고 GPU의 bus는 PCIE 라는 것을 사용한다. 이는 그래픽 카드에서 주로 사용하는데 그만큼 전송할 데이터 양이 많아서 그렇다. 또 Video Memory는 DDR5 를 사용한다. (현재 노트북 RAM 사양을 보면 아마 DDR4가 제일 .. 2021. 1. 17.
[ 3D Rotation ] 임의의 축으로 회전하기 임의의 축으로 회전하기 3D 환경에서 x축, y축, z축으로 회전하는 건 4X4 matrix로 할 수 있다. 그러면 임의의 축으로 회전하는 건 어떻게 할까? 순서 1. 임의의 축이 좌표축과 평행할 때 (Special Case) 회전 2. 좌표축과 평행하지 않은 임의의 축 회전 - 5 Step이 있음 - α와 β를 구하는 법 - 다른 형태의 matrix 임의의 축이 좌표축과 평행할 때 (Special Case) 임의의 축이 x과 평행하다고 해보자. 이럴 때 회전은 어떻게 될까? 다음과 같이 진행된다. 1. 임의의 축을 x축으로 이동 2. x축 기준으로 회전 3. 임의의 축을 원래 자리로 이동 1. 임의의 축을 x축으로 이동 2. x축 기준으로 회전 3. 임의의 축을 원래 자리로 이동 회전하는 점의 식은 이.. 2020. 12. 4.
3D Geometric Transformation 3D Geometric Transformation Homogenous Coordinates in 3D 2D에서 변환 matrix가 3X3 matrix로 표현됐다면, 3D에서 변환 matrix는 4X4 matrix로 표현된다. 3D Translation 3D에서의 Translation matrix는 위와 같이 4X4 matrix로 표현할 수 있다. Inverse matrix는 이와 같이 표현된다. 3D Rotation 2D에서는 각도 하나로 Rotation이 가능했다. 회전하는 방향이 하나이다. 그런데 3D에서는?? 세 방향으로 회전이 가능하다. (Yaw, Roll, Pitch) 그래서 rotation의 축이 결정되어야 한다. x축 기준, y축 기준, z축 기준, 임의의 축 기준으로 회전할 수 있다. 우선.. 2020. 12. 4.
Homogeneous Coordinate Homogeneous Coordinate 이전 글 2D Geometric Transformation에 이어서. Homogeneous Coordinates (x,y) 라는 2D 좌표를 확장하여 (x,y,1) 으로 표현하는 것이다. 즉, 2D 좌표계를 3X3 matrix로 확장한 것이다. (만약 3D 좌표계라면, 4 X 4 matrix가 된다.) Homogeneous Coordinates의 특징 - (x, y, h) 일 때, h=1 일 때 augmented vector라고 부름. - 원점 : (0, 0, 1) - (x, y, 0) : 0을 곱해도 x, y가 남아있을 정도면 엄청 크므로, 숫자가 무한대였을 것이라 생각. - (0, 0, 0) : Homogeneous Coordinates에서는 존재하지 않음. .. 2020. 12. 4.
2D Geometric Transformation 2D Geometric Transformation 순서 1. 2D Translation matrix 2. 2D Rotation matrix 3. 2D Scaling matirx 4. 실제 사용하는 matrix일까? Transformation 만들어진 기하학적 물체의 위치를 바꾸거나, 방향을 바꾸거나, 종횡비를 바꾸거나, 크기를 바꾸거나 이런 변환 작업을 Geometric Transformation이라고 한다. 결국엔, 물체를 어디선가 만들었는데, 디스플레이 화면 상에 어디에 보여야할지의 문제라고 생각하면 된다. 우리 화면 상에 실제로 어디에 배치되어야 하냐는 것이다. Transformation의 하나의 예시 Maya, 3D Max, Blender 등에서 어떤 물체를 만들었는데, 이것을 Unity, Unr.. 2020. 12. 4.
[ 3D Modeling ] Procedural Polygon Mesh Procedural Polygon Mesh Procedural Polygon Mesh Procedural 하게 방법을 이용해서 Polygon Mesh를 생산해 내는 방법이다. 제일 많이 쓰는 방법이 Fractal이다. 기준이 되는 Geometry가 하나 있고, 이 Geometry를 만나면 이렇게 그려라 하는 규칙이 있다. 그러면 계속 확장해 가게 된다. 어떤 선에 규칙을 적용시켜보자. 이 하나의 규칙을 계속 적용해 나가면 위처럼 계속 나아갈 것이다. 위 규칙을 삼각형의 선들에 적용시켜 보자. 이런 식으로 계속 나아가게 된다. 이를 이용하면 굉장히 복잡한 지형을 모델링 없이 만들 수 있게 된다. ex) 풀이나 산 등을 만들 때 사용된다. [참고] Interactive Computer Graphics: A .. 2020. 10. 24.
[ 3D Modeling ] Sweep Representation Sweep Representation Polygon 말고 다른 걸로 표현해보자. 어떤 평면을 한바퀴 돌려서 만들어보자. Sweep. 그래서 외곽선만 주고, 중심축만 주면 3D를 표현할 수 있다. 이것도 어떤 외곽선을 돌려서 만든 3D 물체이다. 이것은 중심축에서 얼마나 떨어져 있나 거리만 표시해주면 된다. 그럼 중심축이 휘면 물체도 휘게 된다. 만약 많이 휘게 되면 접히는 부분이 생길 수도 있어 주의해야 한다. [참고] Interactive Computer Graphics: A Top-Down Approach with Shader-based OpenGL 6th edition / 저자: Edward Angel, Dave Shreiner / 출판사: Pearson Education 2020. 10. 24.
[ 3D Modeling ] Polygonal Representation Polygonal Representation 3D Object Modeling이란? 어떤 것들을 정규화된 형식으로 표현하는 것이라고 말할 수 있다. 어떤 물건 혹은 물체 등을 3차원에 존재하는 물건 혹은 물체 등으로 형식적인 방법으로 Representation하는 것이라고 할 수 있다. Representation 어떻게 표현할 것인가. 어떤 데이터로 바꿔서 저장할 것인가. 결과적으로 데이터가 저장된 형식이 중요하다. 그런데 이 데이터가 바뀌니(캐릭터가 움직이는 등) 바뀌는 것에 대응하는 방법들을 고민해야 했다. 어떻게 하면 데이터를 잘 저장하고, 잘 표현할 지 고민하는 분야가 그래픽스 분야이다. modeling에 필요한 데이터를 어떻게 만들까도 고민했다. 어떻게 표현할까에 대한 방법에는 여러가지가 있다... 2020. 10. 24.
[ OpenGL ] GLEW + GLM 설치 및 설정 GLEW + GLM 설치 및 설정 이전 글(GLFW 설치 및 설정)과 이어서 작성하였습니다. ● GLFW 설치 및 설정 -> inyongs.tistory.com/117 ● 목차 1. GLEW 설치 및 설정 2. GLM 설치 및 설정 맥은 GLEW를 따로 다운받지 않고 최신버전으로 할 수 있습니다. 대신 4.1버전까지 사용할 수 있습니다. 맥을 사용하신다면 GLEM은 건너뛰고, GLM만 설치하면 됩니다. (버전 4.1에 대한 내용은 맨 마지막 코드에 있음) 1. GLEW 설치 및 설정 GLEW (OpenGL Extension Wrangler Library) 사용하는 이유 비주얼 스튜디오에 있는 window header 파일이 OpenGL 1.5 버전까지만 지원합니다. (현재는 대략 4.7) header 파.. 2020. 9. 20.
Graphics Pipeline architecture Graphics Pipeline architecture ● 순서 1. Vertices (Application program) 2. Vertex Processor 3. Clipper and Primitive Assembler 4. Rasterizer 5. Fragment Processor 6. Pixels (Display) Application에서 Vertices(3차원 상의 점들) 이 들어오고 Vertex Processor에서 vertex processing을 통해 2차원으로 가져오고 Clipper를 통해 이미지를 자르고 Primitive Assembler를 통해 어떤 도형인지 알아내고 Rasterizer를 통해 알아낸 도형에 해당하는 pixel들을 알아내고 Fragment Processor에서 pixe.. 2020. 9. 20.