CG - Screen space Object Manipulation
2022. 7. 22. 18:18
☘️ Computer Graphics/Fundamental
이제 스크린에서 물체를 선택하는 방식과 회전하는 것에 대해 알아보고자 한다. 스크린을 조작하여 물체를 선택할 때 어떤 물체가 선택되는지, 손가락으로 물체를 슬라이드하면 어떻게 돌아가는지 등에 대한 내용이다. Object Picking 2차원 스크린의 게임 상에서 마우스 커서로 유닛이나 물체를 클릭할 때, 스크린에서 z값이 가장 작은(카메라와 가장 가까운) 물체를 선택하게 된다. 이는 매우 간단한 작업처럼 보이지만 여기에는 생각보다 고려해야 할 부분이 많다. 가장 가까운 물체를 선택하는 방식은 레이저(Ray)를 쏴서 가장 먼저 맞는 물체를 선택하는 것과 동일하다. 우리가 Screen space의 x,y 좌표(start point)를 클릭한다면 Screen space에서는 (x, y, 0) 에서 (x, y,..
CG - Euler Transforms and Quaternion
2022. 7. 21. 21:07
☘️ Computer Graphics/Fundamental
Euler Transforms 물체의 회전에 대해 다룬 적이 있다. 지금까지는 오일러 각(지금까지 사용했던 일반적인 각도)을 이용한 변환을 다루었다. 아래의 그림처럼 x, y, z축을 골고루 이용하면 물체에 임의의 방향을 줄 수 있다. 이렇게 주축 중심 회전을 결합해서 임의의 방향을 제공하는 것을 Euler transform이라고 한다. 위 그림에서는 x축으로 45도, y축으로 60도, z축으로 -45도 회전한 물체를 보았다. 하지만 아래 그림처럼 회전의 순서에 따라 결과값이 다르게 나타난다. Keyframe Animation in 2D 여기까지 오일러 각도를 이용한 회전을 기억하고 있자. 이젠 지금까지와 다른 주제에 대해서 생각해보고자 한다. 지금까지 우리가 다룬 animation은 하나의 결과 장면이..
CG - Output Merger
2022. 7. 20. 22:54
☘️ Computer Graphics/Fundamental
Output Merger 이전 포스팅에서는 Fragment shader에서 진행되는 대표적인 작업인 texturing 과 lighting에 대해서 알아보았다. Fragment shader를 거치고 나면 각각의 fragment는 색상 값을 할당을 받게 된다. Fragment의 output은 RGBAZ fragment 라고도 한다(A : alpha, Z : depth). 그러면 이 색상은 곧 바로 스크린에 보여지는 것이 아니라 Output merger 단계를 거쳐야 한다. Output merger는 fragment를 스크린에 찍을건지 안찍을건지, 어떻게 변형시켜서 보여줄지를 결정한다. fragment 색상은 어찌됐건 위 그림의 viewport(실제로 스크린에 보여질 영역) 안에서 계산이 된다. Color &..
CG - Lighting
2022. 7. 19. 16:08
☘️ Computer Graphics/Fundamental
이전 포스팅에서 fragment shader 의 역할 중 첫 번째 역할인 texturing에 대해 배웠다. 이번 포스팅에서는 lighting에 대해 배워보자. 그중에서도 가장 기본이 되는 Lighting 모델인 Phong Lighting에 대해 배워보자. Phong Lighting Model Lighting은 물체와 빛 사이의 상호작용을 말한다. 사실적인 그래픽을 위해서는 lighting이 매우 중요하다. 그중에서도 유타대학 출신의 베트남 사람인 Phong 이 제안한 모델인 phong lighting model은 4개의 요소로 이루어져 있다. Diffuse, Specular, Ambient, Emissive 이다. 네가지 요소의 설명에 앞서 광원에 대해 생각해보자. 광원은 여러가지 종류가 있다. 가장 간..
CG - Image Texturing
2022. 7. 18. 11:04
☘️ Computer Graphics/Fundamental
이제 우리는 vertex shader로부터 rasterizer 까지 살펴 보았다. 하나의 삼각형 안에 들어가는 모든 fragment를 계산했다는 것이고, 그 fragment에는 선형보간을 통해 얻어진 normal과 texture coordinate가 저장이 되어있을 것이다. 그 다음 단계는 fragment shader이고 각 fragment의 색상을 결정한다. fragment shader는 texturing과 lighting을 진행한다. 이번 포스팅에서는 texturing을 알아보도록 하자. Texture Coordinates texture는 모델링한 polygon mesh에 입히는 옷이다. 다음과 같은 원통에 texturing을 진행한다고 해보자. 이미지와 mesh가 주어졌을 때 mesh 표면에다가 t..
CG - Rasterizer
2022. 7. 16. 20:55
☘️ Computer Graphics/Fundamental
지금까지 Vertex shader와 Vertex shader가 하는 역할인 Object space부터 World space와 Camera space를 거쳐 Clip space까지의 변환을 배웠다. Vertex shader는 Clip space의 점들의 좌표을 Rasterizer에 넘겨준다. 그러면 Clip space의 점들을 다시 조립(assemble)한다. 그래서 하나의 삼각형이 스크린에 나타나게 된다. 그러면 삼각형의 픽셀들을 점유하면서 색깔(정보)들을 보여주며, 픽셀 위치마다 fragment를 정의하게 된다. Rasterizer는 여기서 fragment를 만드는 것이 주요 임무이다. Rasterizer는 Clipping, Perspective division, Back-face culling, Vi..
CG - Vertex Processing
2022. 7. 15. 19:54
☘️ Computer Graphics/Fundamental
지금까지 정점들로 이루어진 object가 어떻게 변환하는지 알아보았다. GPU에서 어떻게 렌더링이 되는지 보자. 삼각형이 스크린 안에서 여러 개의 픽셀들을 차지하고, 그 픽셀의 색상을 정하는 정보를 rasterizer가 모아서, 픽셀 위치마다 저장해 놓는다. 이를 fragment라고 한다. 그냥 예비 픽셀, 후보 픽셀이라고 이해하면 된다. fragment shader는 실제로 fragment color를 결정한다. 그리고 마지막으로 output merger가 어떻게 보여줄 건지를 결정해서 최종 스크린을 보여준다. 이번 장에서는 vertex shader가 하는 일을 하나하나 살펴볼 것이다. 이제 이러한 물체가 어떻게 화면에 표현되는지 알아보도록 하자. vertex shader는 object space에서 ..
CG - Spaces and Transforms
2022. 7. 14. 10:17
☘️ Computer Graphics/Fundamental
Affine Transform의 3가지 중요한 변환에 대해 알아보자. Scaling (확대,축소) 먼저 볼 것은 Scaling이다. Scaling은 우리말로 축소, 확대이다. 2차원에서의 scaling을 먼저 보자. 간단하게 행렬로 표현하면 아래와 같다. Rotation (회전) 다음으로 2차원 회전은 다음과 같다. p 벡터의 좌표가 나와있을 때, 회전이 이루어졌을 때도 p' 벡터의 좌표를 알 수 있다. 기본적으로 반시계 방향으로 회전했을 때를 구한다. Translation (이동) 지금까지 본 Scaling(확대/축소)와 Rotation(회전)은 선형변환이다. 하지만 이동(translation)은 선형 변환이 아니므로 위와 같은 행렬의 곱으로 표현할 수 없다. 선형 변환과 달리 이동은 일반적으로 행렬의..
CG - Modeling
2022. 7. 12. 22:37
☘️ Computer Graphics/Fundamental
모델링에서는 polygon mesh를 통해 물체를 표현한다고 하였다. 그렇다면 왜 polygon을 사용해 물체를 표현하는것일까? 컴퓨터 그래픽스는 물체를 표현하는데 굉장히 많은 병렬 연산을 필요로 한다. 이때 구를 예시로 들자면 무수히 많은 점들을 필요로 하고 각 점들에 대해서 연산을 한다면 구 하나를 표현하는데도 엄청난 연산을 필요로 할 것이다. 이러한 물리적 한계를 뛰어넘기 위해 일종의 해상도를 낮추는 방식으로(근사적 표현 방식으로) polygon mesh를 사용한다. 위의 구를 표현하기 위해서 모든 점을 표현하는 것이 아니라, 일정한 갯수의 점을 다각형으로 잇는다. 이러한 방법을 polygon mesh라고 한다. 대체로 일반적인 다각형은 처리하지 않고 삼각형 또는 사각형 mesh로 처리한다. 또한 ..
CG - Rendering pipeline 개요
2022. 7. 12. 16:49
☘️ Computer Graphics/Fundamental
먼저 랜더링 파이프라인에 대한 영상을 보고 시작하자. 아래 영상이 컴퓨터 그래픽스를 이해하는데에 최고의 영상인 것 같다. 1. Local space에서의 각각의 물체들을 Model Matrix로 변환해주어, 2. 하나의 우주인 World space 속에서 그 크기와 위치 회전 등이 적절하게 바뀌어 예쁘게 자리 잡고, (Local space -> World space) 새롭게 구성된 하나의 우주 속 물체를 앞에서 보느냐 옆에서 보느냐에 따라 3D 화면이 다르게 나타나듯, World space에서 어느 시선으로 보고있느냐에 따라 View Matrix로 카메라 시선에 따라 변환해 준다. (World space -> Camera space, View space) 3. 여기에서 모니터의 2차원 면에서 보았을 때의..