정지성 2011. 03. 07 Chung-buk National University, Korea 저수준 렌더링 정지성 2011. 03. 07 Chung-buk National University, Korea
파이프라인의 개념도 2010-12-18
렌더링 원시타입 기하학 원시타입 포인트, 라인, 삼각형, 사각형, 폴리곤 but, 하드웨어 가속을 위한 3D엔진에서는 삼각형만 유일한 원시타입 Why? 세 개의 포인트는 항상 동일한 평면을 구성하기 때문에 2010-12-18
Raster system pixel : picture element raster : an array of pixels frame buffer : pixel 저장용 memory area 바둑판 모델 raster image 2010-01-28
Raster system 1:1 대응 관계 y for (y = 0; y < LINES; y++) for (x = 0; x < PIXELS; x++) display one pixel; display processor x 화면 출력 frame buffer 비디오 카드 2010-01-28
Output Devices CRT : cathode-ray tube 음극선관 raster system frame buffer frame buffer의 모든 pixel을 CRT에서 순서대로 출력 frame buffer (in memory) 2010-01-28
Output Devices LCD : Liquid Crystal Display, 전압에 따른 액정의 배열을 변경으로 색상을 표현 frame buffer (in memory) 2010-01-28
Output Devices PDP : Plasma Display Panel, 대형 디스플레이에 사용, 방전의 원리 를 이용하여 색상을 구현 frame buffer (in memory) 2010-01-28
Graphics Architecture Modeling-Rendering Paradigm 가장 간단한 graphics architecture modeler, renderer 가 별도의 program 예 : Pixar’s RenderMan Interface modeler / renderer 연결은 file 로 되어 있음. AutoCAD, 3DS, MAYA, etc. RenderMan, BMRT, etc. 2010-01-28
Graphics Architecture Single CPU Model 초기의 computer 에서 사용 CPU 에 너무 많은 부하가 걸린다 Intel x86 : SSE (streaming SIMD extension) single CPU model을 위한 지원책 2010-01-28
Graphics Architecture Display Processor Model DPU : display processor graphics 처리 전용의 CPU를 추가 pipeline architecture로 넘어가는 과도기 2010-01-28
Graphics Architecture Pipeline Architecture 가장 진보된 형태 VLSI 기술의 발달로 가능 SGI (Silicon Graphics Inc.) IRIS series ,… , nVIDIA GeForce chips graphics 처리를 몇 단계로 나누어서 각각을 별도의 VLSI chip이 처리 2010-01-28
Graphics Architecture Pipeline Architecture transformation 좌표 변환을 위한 4×4 matrix multiplication clipping projection plane 상에서 불필요한 부분 제거 projection 3D object 2D image 로의 mapping rasterization image 를 frame buffer에 저장하는 과정 2010-01-28
Images: Physical and Synthetic 궁극적으로는 real world를 simulate camera 또는 human visual system이 어떻게 작동하는 지를 그대로 simulate 주로, OpenGL에서는 camera의 정보를 통해 simulate real world 3차원 공간 물체들 object Camera viewer 2010-01-28
Images: Physical and Synthetic Camera System computer graphics : 3D 2D 로의 mapping object : 3D viewer : 3D (= camera) image : 2D (camera의 film) object viewer image 2010-01-28
Images: Physical and Synthetic Camera System with a light source light : 3D 에서 정의됨 light source light object viewer object의 표면 결정 light object shadow 그림자 생성 2010-01-28
Images: Physical and Synthetic Light, Optics light : electro-magnetic radiation light, color 는 modern optics에서 해석 graphics 에서는 대부분 geometric optics 사용 2010-01-28
The Human Visual System rod (간상체 杆狀體) : night vision cones (원추체 圓錐體) : day vision human visual system back-end에 brain 이 있기 때문에, simulation 거의 불가능… 반응 곡선 2010-01-28
The Pinhole Camera 바늘 구멍 사진기 가장 간단한 geometric model (x, y, z) : 3D point (xp, yp, zp) : projection 2010-01-28
The Pinhole Camera 용어정리 projection of the point (x, y, z) (xp, yp, –d) : film 상의 좌표 FOV : field of view (= angle of view) 화면을 보는 최대각 DOF : depth of field focus 가 맞는 거리 pinhole camera는 infinite DOF 2010-01-28
The Synthetic-Camera Model graphics 에서 사용하는 camera model object 정의는 viewer와는 독립적 object 정의 function을 별도로 독립 image 생성 시에는 trigonometry 계산 필요 projection plane film을 center of projection 보다 앞으로 2010-01-28
The Synthetic-Camera Model Projection plane, Clipping window projection plane : 계산의 편의 clipping rectangle projection plane 상에서 실제로 보이는 부분 2010-01-28
Color Model Light red yellow green blue violet electromagnetic wave AM 흔히 가시광선(visible light)를 의미 104 106 108 1010 1012 1014 1016 1018 1020 AM FM microwave infrared visible ultraviolet X-ray frequency (Hz) red yellow green blue violet 2010-01-28
Color Model Color C(λ) : wave length에 대한 energy distribution C(λ) 에 따라, color 결정 additive color model C(λ) 끼리 더할 수 있음 three-color theory C = T1 R + T2 G + T3 B 2010-01-28
Color Model Human Visual System cones : red, green, blue 에 민감하게 반응 sensitive curve Si(λ) : wavelength에 따른 반응 정도 brain perception values three-color theory의 기본 이론 (Ared, Agreen, Ablue) 값들이 같으면, 같은 color로 인식 2010-01-28
Color Model Color Model color model color gamut color를 computer H/W, S/W에서 표현하는 방법 용도에 따라, 다양 : RGB, CMY, YIQ, CIE, … color gamut 특정 color model 이 생성 가능한 모든 color color solid (= color cube) color model 에서 흔히 three primary colors 사용 three primary color에 의한 3차원 cube color gamut 표현 가능 2010-01-28
Color Model RGB color model Green Red Blue C M Y Red, Green, Blue tri-stimulus theory 눈에 가장 민감한 3가지 색상 RGB cube : 각각이 0 ~ 1 까지 Green Red Blue C M Y 2010-01-28
Color Model CMY, CMYK color model hard copy 기계에서는 잉크 사용 subtractive system 감산 색계 흰 종이 위에 cyan, magenta, yellow 사용 CMYK color model : K (black) 을 첨가 이론상, cyan + magenta + yellow = black 실제로는 dark gray 해결책 : black(K) ink를 별도로 Yellow Magenta Cyan G B R 2010-01-28
Color Model RGB vs CMY <RGB color system> additive primaries 더하면 밝아진다 monitor 기준 형광 물질로 R, G, B 사용 graphics는 주로 RGB 기준 <CMY color system> subtractive primiaries 더하면 어두워진다 printer 기준 ink로 C, M, Y 사용 2010-01-28
Color Model Direct color system 기본적인 video card 구조 3개의 전자총, 3개의 frame buffer frame buffer 마다, pixel 당 n bit 할당 2n × 2n × 2n colors = 23n colors 3n can be 8, 12, 24, … 3n = 24 : true color system 2010-01-28
Color Model Direct color system OpenGL functions void glColor*( ); 3n 값은 system 마다 틀리다 color 설정은 RGB cube 기준 red, green, blue 모두 0.0 ~ 1.0 void glColor*( ); void glColor3f(GLclampf red, GLclampf green, GLclampf blue); 현재 색상 정의 GLclampf : 0.0 보다 작으면 0.0, 1.0보다 크면 1.0 see OpenGL manual 2010-01-28
Color Model RGBA color model void glColor4f(red, green, blue, alpha); RGB + A (alpha channel) alpha channel 은 opacity value : image 합성에 사용 A = 1.0 이 보통의 경우 void glColor4f(red, green, blue, alpha); void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); clear color 설정 (= background color) void glClear(GLbitfield mask); mask = GL_COLOR_BUFFER_BIT 이면, frame buffer 전체를 clear color로 2010-01-28
Color Model Indexed color system frame buffer size 를 줄이는 방법 color lookup table (LUT) (= palette) 23m bit 로 color 값 2k 개를 저장 frame buffer : k bit index 값 저장 23m color 중에서 2k 개만 동시 표현 color LUT 2010-01-28
Color Model Indexed color system why indexed color system ? image 표현에 필요한 frame buffer size 축소 image file format에서 사용 : GIF, BMP, … OpenGL functions LUT의 setting은 window system / GLUT 가 담당 void glIndex*(…); current color를 LUT의 해당 index로 설정 void glutSetColor(int index, GLfloat red, green, blue); LUT의 해당 index를 새로운 color로 2010-01-28
OpenGL설치 및 Console program 구조 OpenGL Library를 다운 강의자료 다운 OpenGL/GL : C:\Program Files\Microsoft Visual Studio 9.0\VC\include 로 복사 OpenGL/LIB : C:\Program Files\Microsoft Visual Studio 9.0\VC\lib로 복사 OpenGL/DLL : C:\Windows\System32로 복사 2010-01-28
OpenGL설치 및 Console program 구조 The Sierpinski Gasket 예제 문제로 사용 원래, Fractal geometry 에서 정의 만드는 방법 삼각형을 그린다. 삼각형 내부에 random하게 점 Pi 를 선택, 출력 random 하게 꼭지점 중의 하나 Vi 선택 Vi 와 Pi 의 중점을 Pi+1 로 선택, 출력 위 과정을 반복 2010-01-28
OpenGL설치 및 Console program 구조 The Sierpinski Gasket 전체 구조 void main(void) { initialize_the_system( ); for (some_number_of_points) { pt = generate_a_point( ); // 좌표 계산 display_the_point( pt ); // 출력 } cleanup( ); } 제일 먼저 할 일 ? 점을 어떻게 출력할 것인가? 2010-01-28
OpenGL설치 및 Console program 구조 Pen-Plotter Model pen-plotter 2D 종이 위에 펜을 움직여서 출력 moveto(x, y); 정해진 위치로 펜을 이동 lineto(x, y); 정해진 위치까지 선분 출력 가장 오래된 graphics output model 장점 : 간단. 2D 종이, 2D 화면에 적합한 model printer 용 언어, 초기 graphics system 에서 사용 PostScript, PDF, LOGO, GKS, … 단점 : 3D model 에는 부적합 2010-01-28
OpenGL설치 및 Console program 구조 2D in a 3D Model 2D 는 3D의 특별한 경우이다 3D 좌표 : (x, y, z) 2D로 해석할 때는 z = 0 : (x, y, 0) 간단하게 : (x, y) 3D space 2D plane (z = 0) x y z 2010-01-28
OpenGL설치 및 Console program 구조 Vertex space 상의 위치 1개 graphics 에서는 2D, 3D, 4D space 사용 표기법 : column vector geometric objects point : vertex 1개로 정의 line segment : vertex 2개로 정의 triangle : vertex 3개로 정의 point 와 헷갈리지 말 것 vertex triangle 2010-01-28
OpenGL설치 및 Console program 구조 Vertex 정의 in OpenGL OpenGL 에서 vertex 를 정의하는 함수 glVertex[n][t][v](…); n : number of coordinates n = 2, 3, 4 t : coordinate type t = i (integer), f (float), d (double), … v : vector or not v 가 붙으면, vector (= array) form Ex) glVertex2i(2, 3), glVertex3f(1.5, 2.3, 3.0), GLdouble vertex[3] = { 1, 2, 3 }; glVertex3dv(vertex); 모든 OpenGL 함수는 gl 로 시작 2010-01-28
OpenGL설치 및 Console program 구조 Vertex 정의 in OpenGL suffix data type C-language OpenGL type b 8-bit integer signed char GLbyte s 16-bit integer short GLshort i 32-bit integer int / long GLint, GLsizei f 32-bit floating pt. float GLfloat, GLclampf d 64-bit floating pt. double GLdouble, GLclampd ub 8-bit unsigned int unsigned char GLubyte, GLboolean us 16-bit unsigned int unsigned shrot GLushort ui 32-bit unsigned int unsigned int / GLuint, GLenum, unsigned long GLbitfield 2010-01-28
OpenGL설치 및 Console program 구조 Object 정의 in OpenGL geometric object 의 정의 vertex가 여러 개 모여서 하나의 object glBegin(TYPE); glVertex*(…); glVertex*(…); … /* 다른 함수도 가능 */ glEnd( ); 사용 예 glBegin(GL_LINES); glVertex2f(x1, y1); glVertex2f(x2, y2); glEnd( ); 2010-01-28
OpenGL설치 및 Console program 구조 Object-oriented Paradigm graphics program들은 object-oriented paradigm에 적합 Java3D : fully object-oriented library Point3 old(2, 1, 3); Vector3 vec(1, 0, 0); Point3 new = old + vec; OpenGL : not object-oriented ! C-based library 대안은 array 뿐 typedef GLfloat Point2[2]; Point2 p = { 2, 3 }; … glVertex2fv(p); 2010-01-28
OpenGL설치 및 Console program 구조 Sierpinski gasket Algorithm void display( void ) { point2 vertices[3]={{0.0,0.0},{250.0,500.0},{500.0,0.0}}; /* A triangle */ point2 p ={75.0,50.0}; /* An arbitrary initial point inside triangle */ int i, j, k; for (k=0; k<5000; k++) { j=rand( ) % 3; /* pick a vertex at random */ /* Compute point halfway between selected vertex and old point */ p[0] = (p[0] + vertices[j][0]) / 2.0; p[1] = (p[1] + vertices[j][1]) / 2.0; /* plot new point */ glBegin(GL_POINTS); glVertex2fv(p); glEnd( ); } glFlush( ); /* flush buffers */ old (p[0], p[1]) (vertices[j][0], vertices[j][1]) new (p[0], p[1]) 2010-01-28