• 검색 결과가 없습니다.

12장. 프래그먼트 연산

N/A
N/A
Protected

Academic year: 2022

Share "12장. 프래그먼트 연산"

Copied!
29
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

12장. 프래그먼트 연산

학습목표

• 지엘 파이프라인의 전반적인 흐름을 이해한다.

• 프래그먼트의 정의를 이해한다.

• 프래그먼트 테스트를 종류별로 이해한다.

• 블렌딩, 논리연산 등이 필요한 이유를 이해한다.

• 비트맵과 화소맵의 차이점을 이해한다.

• A-버퍼 사용방법을 이해한다.

(2)

2

지엘 파이프라인

녹색 화살표: 3차원 기하 물체 처리(Geometry Processing) 청색 화살표: 2차원 영상 처리 (Image Processing)

(3)

지엘 파이프라인

디스플레이 리스트(Display List)

• 정점데이터, 화소데이터, 명령어를 컴파일된 형태로 저장

• 실행시 파이프라인으로 보내짐.

이밸류에이터(Evaluators)

• 제어점으로부터 곡선이나 곡면의 정점 좌표, 법선벡터 등을 계산 정점연산 (Per-Vertex Operation)

• 정점 데이터에 모델변환, 시점변환, 투상변환 등의 기하변환을 가하는 작업. 조명이 사용되면 시점 좌표계에서 정점의 색이 계산됨.

기본요소 조합(Primitive Assembly)

• 변환된 정점 위치로부터 기본요소인 선분 또는 다각형을 구성하는 작업. 절단, 원 근분할, 뷰포트 변환에 의해 완전한 기하 기본요소 생성

기하 기본요소 (Geometric Primitives)

• 정점 위치와 해당 정점의 색, 깊이, 텍스쳐 좌표 등의 정보로 구성.이 정보가 래스터 변환( Rasterization) 또는 스캔 변환(Scan Conversion) 프로세서로 입력.


(4)

4

지엘 파이프라인

정점 연산 프로세스:정점 좌표로부터 투상변환까지.

기본요소 조합 프로세스:절단 텍스쳐 정점 생성 프로세스

• 주어진 정점 좌표로부터 텍스쳐 좌표를 계산하는 작업

• 함수에 따라서는 생성된 텍스쳐 좌표를 변환.

• 별도의 파이프라인을 따라 진행

법선벡터: 모델뷰 변환이 가해진 후 시점 좌표계에서 정점의 조명 계산에 사용

(5)

프래그먼트(Fragment)

프래그먼트(Fragment, Pixel Fragment, Fragment Square)

• 화면 화소의 색은 프레임 버퍼에 그 값이 기록되는 순간 결정됨.

• 프레임 버퍼에 기록되기 이전 단계의 화소로서 추상적인 개념

• 화소 위치, 색, 깊이, 텍스쳐 등 하나의 화소를 채우기 위해 필요한 모든 정보를 지닌 기본단위


래스터 변환

• 기하 기본요소와 화소 기본요소를 프래그먼트로 변환하는 프로세스

(6)

6

지엘 버퍼

프런트 버퍼, 백 버퍼, 보조 버퍼: 컬러 영상의 저장에 사용 좌측 버퍼와 우측 버퍼: 입체 영상을 위한 스테레오 버퍼

컬러 인덱스: 인덱스 컬러 모드에서 컬러 보기표(CLUT)를 저장

보조 버퍼: 직접 화면 디스플레이에 사용할 수는 없음. 임시 저장 장소로 사용하되 화 면에 디스플레이 하려면 프런트 버퍼로 옮겨야 함.

(7)

지엘 함수

glutInitDisplayMode(int modes);

• 버퍼 활성화: GLUT_SINGLE, GLUT_DOUBLE, GLUT_DEPTH, GLUT_ACCUM, GLUT_STENCIL

glClearColor( ), glClearIndex( ), glClearDepth( ), glClearStencil( ), glClearAccum( )

• 초기화 값을 지정

glClear(GLbitfield mask);

• 실제로 버퍼 내용을 초기화 값으로 초기화: GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_STENCIL_BUFFER_BIT,

GL_ACCUM_BUFFER_BIT

glDrawBuffer(GLenum mode); glReadBuffer(GLenum mode);

• 버퍼 쓰기와 읽기: GL_FRONT, GL_BACK, GL_RIGHT, GL_LEFT, GL_FRONT_RIGHT, GL_FRONT_LEFT, GL_BACK_RIGHT, GL_BACK_LEFT, GL_AUXI, GL_FRONT_AND_BACK,

glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); glDepthMask(GLboolean flag);

glStencilMask(GLUint mask);

• 버퍼 쓰기 금지. 마스킹

(8)

8

래스터 변환과 프래그먼트

래스터 변환의 결과 = 프래그먼트 프래그먼트 단위의 병렬처리

• 텍스쳐 매핑

• 컬러 섬(Color Sum): 래스터 변환 단계에서 정점의 경면광을 별도로 보간한 뒤 이를 텍스쳐가 가해진 이후에 텍스쳐 색 위에 덧씌움으로써 경면광 효과를 극 대화

• 안개 효과(Fog Effect)

(9)

프래그먼트 테스트

테스트 결과

• 프래그먼트를 제외. 이후 테스트로 입력되지 않음 모든 테스트를 통과한 프래그먼트에 대해서

• 블렌딩, 디더링, 논리연산이 실행

• 최종 결과가 프레임 버퍼에 기록됨.

(10)

10

시저 테스트(Scissor Test)

그리기 범위를 뷰포트 일부로 제한: 마스크(Mask)

넓은 범위의 가시부피 설정: 절단작업은 1번만 일어남

• 뷰포트 내부에 시저박스를 이동

• 처리속도 가속화

• 숨겨진 부분: 가드 밴드(Guard Band)

(11)

알파 테스트(Alpha Test)

알파 값을 기준으로 해당 프래그먼트를 제외

• glAlphaTest(GL_LESS, 0.2)

• 불투명도가 0.2보다 작은 프래그먼트는 모두 제외 투명성 테스트(Transparency Test)

• b)의 순서로 지-버퍼 알고리즘을 가하면 투명성이 적용 안됨

• 지-버퍼를 활성화한 상태에서 완전히 불투명한 것을 먼저 그림.

• 지-버퍼를 비활성화 한 후 알파가 1.0보다 작은 것을 그림.

(12)

12

스텐실 테스트(Stencil Test)

스텐실 버퍼에 저장된 임의 모양을 기준으로 마스킹

• cf. 시저 박스: 사각형 모양을 기준 예: 간단한 그림자 그리기

• 그림자 = 원래 물체를 glScalef(1, -1, 1), 이후 아래쪽 반사

• 스텐실 테스트에 의해 바닥 밖의 그림자는 테스트 결과 모두 제외

(13)

깊이버퍼 테스트(Depth Buffer Test)

지-버퍼 알고리즘(Z-Buffer Algorithm)이 가해지는 부분

• glEnable(GL_DEPTH_TEST)에 의해 활성화

void glDepthFunc(GLenum func);

• GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL

• 기본값은 GL_LESS: 새로운 z가 이전 z보다 작을 때 갱신

(14)

14

블렌딩(Blending)

프래그먼트와 프레임 버퍼 내용을 혼합(Blending)

• 입력 프래그먼트 = 소스(Source) 프래그먼트

• 현재 프레임 버퍼에 있는 화소 = 대상(Destination) 화소

• 연산 결과는 다시 대상화소에 기록됨.

(15)

블렌딩(Blending)

: 소스 프래그먼트의 색 : 대상 화소의 색

: 소스 프래그먼트의 혼합인수 : 대상 화소의 혼합인수

혼합인수 값에 따른 변환

• (GL_ONE, GL_ZERO)

• (GL_ONE, GL_SRC_ALPHA)

• (GL_SRC_ALPHA, GL_ONE)

• (GL_SRC_ALPHA, GL_DST_ALPHA)

(16)

16

블렌딩(Blending)

영상 합성(Image Composition)

• 전면 영상과 배경 영상을 합성, A의 청색 부분을 투명하게 처리 전면영상 A = 소스 프래그먼트, 배경 영상 B = 대상 화소

청색 프래그먼트의 알파 값을 0으로 설정. 혼합 시에 소스 프래그먼트의 혼합인수를 GL_SRC_ALPHA로 하면 청색 프래그먼트 혼합인수가 (0, 0, 0, 0)으로 작용

투명 부분 선택작업 = 키잉(Keying), 블루 스크리닝(Blue Screening)

• 일정한 색을 선택 = 크로마 키잉(Chroma Keying)

• 밝기의 임계치를 선택 = 루마 키잉(Luma Keying)

• 일정한 모양을 선택 = 매팅(Matte, Matting)

(17)

깊이 큐(Depth Cue)

원근 투상결과 멀리 있는 물체는 작게

원근 투상 결과 멀리 있는 물체가 소실점 근처에

반복 패턴이라면 멀리 있는 물체의 텍스쳐 패턴이 더욱 자주 반복 가까운 물체에 가려져 일부만 보임.

음영과 그림자

(18)

18

안개효과(Fog Effect)

멀리 있는 물체 일수록 더욱 뿌옇게 보임.

(19)

디더링(Dithering)

glEnable(GL_DITHER)

지엘의 디더링은 하프토우닝을 포함하는 개념

• 실행결과 해상도 저하를 초래할 수 있음.

• 일반적으로 지엘의 디더링은 하드웨어에 의해 실행

• 하드웨어 별로 서로 다른 디더링 방식을 사용

• 지엘로서는 디더링 모드를 활성화하거나 비활성화

(20)

20

논리연산(Logical Operations)

소스 프래그먼트와 대상 화소 사이의 연산 예: BitBlt(Bit Block Transfer)

• 단순한 이동이 아님

• 블록 A를 블록 B로 복사할 경우 기존의 B 블록과 A 블록에 대한 논리 연산이 실 행

(21)

논리연산(Logical Operations)

예: 러버밴드(Rubber Band)

• 그림 (a)에서 선분 AB는 XOR 모드로 그려짐

• B점이 움직이면 XOR에 의해 현재의 선분 AB가 지워짐

• 010111 XOR 110010 = 100101

• 100101 XOR 010111 = 110010

(22)

22

화소 연산(Pixel Operations)

화소연산(Pixel Operation): 화소 파이프라인에 의해 처리됨

(23)

화소 연산(Pixel Operations)

메인 메모리의 화소저장

• 부호화(Signed), 비 부호화(Unsigned), 부동소수(Floating Point)

• 공간 절약을 위해 압축(Pack). 타입 변환이 필요.

화소 저장모드(Pixel Storage Mode)

• 부분 영상 저장에 데이터 경계선을 몇 바이트로 할 것인지(Memory

Alignment), 몇 행을 뛰고 읽을 것인지(Row Skip), 주소를 어떻게 지정할 것인지(Addressing Mode) 등을 지정

화소 변환연산(Pixel Transfer Operation)

• 지엘의 컬러는 [0.0, 1.0]. 다른 시스템의 컬러 값을 사상할 필요

• 컬러 인덱스를 변경(Index Shift). 컬러 값을 변경(Scale, Bias)

(24)

24

화소 연산(Pixel Operations)

(25)

화소 기본요소

지엘의 화소 기본요소

• 비트맵(Bitmap)과 화소맵(Pixmap, Image)으로 분류 비트맵

• 화소 당 1 비트를 할당. 마스크에 해당 화소맵

• 화소 당 여러 비트를 할당. 실제 영상 화소의 색에 해당

(26)

26

비트맵

래스터 위치(Raster Position)

• 화면 좌표계 기준의 현 위치(Current Position). 상태변수.

비트맵

• glColor3f( )에 의해 현재 색(Current Raster Color)을 정의

• 비트맵 = 마스크로 사용되는 영상

• 비트맵이 0이면 기존의 프레임 버퍼 내의 해당 화소 색을 유지

• 비트맵이 1이면 프레임 버퍼내의 해당 화소 색을 현재 색으로 변경

• 예: 비트맵 텍스트

(27)

비트맵 함수

void glBitmap(GLsizei width, GLsizei height, GLint xo, GLint yo, GLint xi, GLint yi, GLubyte *bitmap);

• 배열명 bitmap에 담긴 영상을 현 위치에 쓰기 위한 함수

(28)

28

A-버퍼

A-버퍼(Anti-Aliased, Area-Averaged Accumulation Buffer) A 버퍼

• 프레임 버퍼, 깊이 버퍼, 알파 채널, 앤티 에일리어싱 등의 기능 통합

• 가까운 물체, 그 뒤 물체, 다시 그 뒤의 물체 등을 연결 리스트로 유지. cf. 지-버 퍼

• 리스트 상의 모든 물체들에 대해서 RGB, 투명도, 깊이, 화소 점유율등을 저장

(29)

지엘의 A-버퍼

단일 버퍼로서 복수개의 영상을 누적적으로 저장하는 버퍼 화면 앤티-에일리어싱

• 변위된 영상들을 평균하면 에일리어싱이 약화

필드 깊이 조절

• 초점거리로부터 물체가 멀어질수록 흐려짐

모션 블러

• 물체를 이동하면서 glAccum(GL_MULT, decayFactor) 함수 호출

참조

관련 문서

[r]

Unregulated dc 입력 à regulated dc

스위칭 동작에 따른 각부의 파형 스위칭 동작에

• 불연속성, 순간적인 충격량, 또는 복잡한 주기함수를 입력으로 갖는 상미분방정식도 쉽게 해를 찾을 수 있다....

ü a 접점과 b 접점 사이를 훨씬 빈번하게 스위칭 함으로써 고조파가 적게 포함되어 정현파에 더욱 가까운 출력전압 파형을 생성할 수 있다.

- WebP, AVIF 같은 최신 형식으로 자동 변환 - 이미지 사이즈 자동 조절. - 로컬호스팅, CDN

switching losses : turn-on loss, turn-off loss, reverse recovery loss Hard switching :. -overlap of voltage & current waveforms -Proportional to f

그러나 디락 델타 신호 δ(ˆ ω) 를 이용하여 다음과 같은 방법으로 이산시간 복소 지수 신호의 이산시간 푸리에 변환을