묻공러
'그래픽스/[전북대] OpenGL' 카테고리의 글 목록

그래픽스/[전북대] OpenGL

그래픽스/[전북대] OpenGL

[OpenGL Note] Output Merger - Alpha Blending

Alpha Blending Alpha Blending은 물체의 투명도에 따라 색의 계산을 다르게 적용해 주는 것이다 alpha 값은 0 ~ 1로 구성되어 있으며 0에 가까울 수록 불투명하고 1에 가까울 수록 투명하다 Alpha Blending을 계산하기 위해서는 0과 1 사이의 가중치를 통해 계산한다 Transparent Sorting z-buffering의 경우는 렌더링 순서와 상관이 없지만 alpha blending은 반드시 뒤 쪽부터 그려줘야 한다 따라서 투명한 오브젝트들의 sorting이 필요하다 추가적으로, 오브젝트들은 geometry, alpha, transparent 순으로 그려진다 Alpha Blending in OpenGL Alpha Blending을 사용하기위해서는 glEnable을 통..

그래픽스/[전북대] OpenGL

[OpenGL Note] Output Merger - Z buffering

Output Merger fragment shader를 통해 나오는 fragment color를 바로 viewport에 그리지 않고 마지막으로 frame buffer들을 통해 output merger 단계를 거친다 Frame buffer Frame buffer에는 Color buffer, Depth buffer, Stencil buffer가 있다 Color buffer는 픽셀의 색상을 저장하는 버퍼이다 Depth buffer(z-buffer)는 픽셀의 z축 값을 저장하는 버퍼이다 Stencil buffer는 특정 영역을 그릴 때 무시하거나 그리지 않도록 하는데 활용되며 그림자를 구현할 때 주로 사용된다 RGBZ rasterizer는 z-좌표뿐만 아니라 법선과 텍스처 좌표도 보간한다 z값은 fragment..

그래픽스/[전북대] OpenGL

[OpenGL Note] Lighting - Ambient, Emmisive

Ambient Term 특정한 빛이 들어오는 것이 아닌 간접적으로 빛들이 다양한 형태로 들어오는 경우를 의미하고 빛의 source를 정확히 알 수 없기 때문에, 물체의 주변광 ambient 색과 물체의 material ambient 색을 곱해서 계산한다 Emmisive Term material 표면 자체가 빛을 발산하는 경우이고 materail의 emmisive 값 만으로 계산이 된다 Phong Lighting Model diffuse, specular, ambient, emissive를 모두 합한 것이 바로 Phong Lighting Model을 적용한 것이다 Per-fragment Lighting fragment shader에서 라이팅을 위해서는 l, n, r, v 값을 알아야 하고 해당 값들을 fr..

그래픽스/[전북대] OpenGL

[OpenGL Note] Lighting - Diffuse, Specular

Lighting Lighting은 lights와 objects의 상호작용을 관리하는 기술이다 대표적이었던 방식 중 하나는 Phong Model 방식이다 최근에는 PBR(Physically Based Rendering) 방식이 대중화되었다 하지만 이론적으로 배우기 쉽지 않기에 Phong Model 방식으로 Lighting의 개념을 배우는 것이 추천된다 Light source 광원에는 총 4가지 종류의 광원이 있다 이 글에서는 Directional light를 기준으로 Phong Model을 설명한다 Directional light는 태양과 같은 light이고 light의 방향은 물체의 위치와 관련 없이 동일하게 방사된다는 점을 기반으로 한다 - Directional light : 태양과 같은 light -..

그래픽스/[전북대] OpenGL

[OpenGL Note] Fragment Shader

texCoord in Vertex Shader texCoord는 그대로 넘겨주면 rasterizer의 Scan Conversion을 통해 처리된다 Fragment Shader Fragment Shader는 픽셀에 색상을 입히는 처리를 하는 부분이다 Fragment Shader로 넘어올 때, texture는 Uniforms로 넘어오게 된다 전체적으로 정리하면 아래와 같다

그래픽스/[전북대] OpenGL

[OpenGL Note] Texture Wrapping과 Texture Filtering

Texture Wrapping Mode texture wrapping mode를 활용하면 (s, t)가 0, 1 범위가 아닌 경우에도 쉽게 활용할 수 있다 0, 1 범위 밖에서 texture coordinates에 맞게 어떻게 색상을 표시할지 옵션을 정해서 결정할 수 있다 Clamp-to-Edge 1 이상의 좌표를 모두 1의 좌표로 계산한다 Repeat (1, 1)을 (0, 1)로 계산한다 Mirrored-Repeat (1, 1)을 (0, 9)로 계산하고 좌우반전이 된다 S(Repeat) + T(Mirrored-Repeat) 각 축에 따라 다른 설정을 할 수도 있다 S축은 Repeat을 하고 T축은 Mirrored-Repeat을 할 수 있다 Texture Filtering 픽셀과 텍셀의 개수가 동일하지 ..

그래픽스/[전북대] OpenGL

[OpenGL Note] Image Texturing

Fragment shader Rasterizer 단계에서 Scan Conversion을 통해서 프래그먼트들의 정보를 다 넣어줬고 이러한 정보를 활용해서 색을 칠해서 픽셀을 만들어주는 과정이 fragment shader에서 진행되는데 픽셀을 만들어주는 과정 중에 대표적인 것이 Lighting과 Texteuring이다 Texture Coordinates 다양한 텍스쳐링 방법 중 하나는 image texturing이다 image texturing은 모델에 이미지를 입히는 것을 의미한다 텍스쳐는 fragment의 pixel처럼 texels(texture elements)의 형태로 구성되어 있다 Texturing 아티스트가 modeling 단계에서 텍스쳐링을 위해 (s, t) 혹은 (u, v) 형태의 textur..

그래픽스/[전북대] OpenGL

[OpenGL Note] Rasterizer

Rasterizer 단계 Rasterizer 단계는 아래와 같은 역할을 수행한다 Clipping Clip Space에서 화면에 표시되는 영역을 벗어나는 부분을 제거하는 것을 의미한다 예를 들어, t1은 버려지고 t2는 통과가 되고 t3는 View Frustrum에 걸쳐지면서 Clipping이 된다 Perspective division homogeneous 좌표계인 Clip space 좌표를 Cartesian 좌표계로 바꾸는 작업을 의미한다 그 결과값을 NDC(normalized device coordinates)라고 한다 homogeneous 좌표계를 Cartesian 좌표계로 바꾸기 위해서는 w값인 -z로 나누게 된다 따라서, w(-z)값이 크면, 나머지 x, y, z 값은 작아지고 w(-z)값이 작으..

그래픽스/[전북대] OpenGL

[OpenGL Note] Vertex Shader

Transform의 구분 World Transform은 각각 오브젝트가 고유의 변환을 한다 View Transform, Projection Transform은 모든 오브젝트가 공유하는 변환을 한다 Vertex Array Vertex Array는 position, normal, texture coordinates 등이 포함된다 Vertex Shader는 Vertex Array를 한 번에 병렬 연산으로 처리한다 Vertex Shader Input/Output Vertex Shader Input은 Attributes와 Uniforms로 구분된다 Attributes는 per-vertex data로 'in' 키워드를 사용한다 Uniforms는 per-object data로 'uniform' 키워드를 사용하고 Wo..

그래픽스/[전북대] OpenGL

[OpenGL Note] Uniforms, VAO

Attributes와 Uniforms Attributes: per-vertex data(정점당 데이터)이다 주로 정점의 position, color, texcoord, normal 등의 정보를 포함한다 Attributes는 정점 배열(Vertex Array)에 저장되어 있으며, 셰이더 프로그램에서 정점 셰이더(Vertex Shader)에 의해 사용된다 Uniforms: per-object data(오브젝트당 데이터)이다 셰이더 프로그램의 모든 실행에 대해 일관된 값을 가지는 전역 변수로 주로 변환 행렬, 광원의 위치, 재질의 속성 등의 정보를 전달하는 데 사용되고 world matrix, view matrix, proj matrix가 포함된다 Uniforms는 셰이더 프로그램 내에서 모든 정점에 대해 동..