형상에현실감더하기 지난호에서형상을어떻게근사적으로표현하는가에대해서소개를하였다. 이번호에서는근사적으로표현된형상을어떻게더가치있게활용하는지소개하고자한다. CD 에서형상을가치있게활용한다는것은표현된형상을통해설계정보를더정확하고빨리이해할수있다는것이다. 선으로표현했던형상을좀더직관적으로이해할수있는형태로변경해보도록하자. 제1회형상정보의표현제2회형상에현실감더하기제3회다양한변환 (Transform) 제4회사용자와의의사소통제5회성능향상을위한기법 심원일 온라인동호회 왕십리.OpenGL 의운영자로활동했으며, 현재이놉스개발 2 팀에서 PLM 컨설팅및뷰어개발을하고있다. E-Mail red112@naver.com 색상정보동일한형상의구분 ( 원 ) 설계정보를구분할때가장손쉬운방법은형상의차이를확인하는것이지만유사하거나동일한형상들사이의구분은다른방법이필요하다. 형상에 색 을더하면다른설계정보와손쉽게구분할수있다. 지난시간에만든원을그리는함수를이용하여각각다른위치에다른색상으로원을그려보도록하자. gllinewidth 그려질선의두께를지정한다. glcolor 그려질요소들의색상을지정한다. 동일한형상의구분 ( 구 ) 구를그릴때도색상을적용해보자. 원을그릴때와별차이가없는데구는선이아니라면으로그리도록하자. 그려질요소를선택한다. 예제에서는선으로그릴지, 면으로그릴지를선택하도록한다. glegin( 인자 ) GL_LINE_LOOP : 선으로닫힌경로를그린다. GL_TRINGLES : 삼각형을면으로그린다. 예제프로그램 예제프로그램위 / 아래방향키를이용하여원의선분개수를조정할수있다. 하지만, 아무리선분을많이그려서원에가깝게그리더라도다른원과구분을하기위해서는다른조건이필요하다. 그조건중가장명확한조건이색상의차이인것을확인할수있다. 그림 2. 입체감이없는다른색상의구 그림 1. 원의색상 구에색상을넣어다른구와구별은되었지만, 만약삼각형을이루는테두리선이보이지않는다면어떻게보일까? 예제프로그램에서스페 2008/11 C 157
이스키를눌러서비교해보면, 단지색깔이있는원으로보이게된다. 즉, 입체감이없는형상이다. 그렇다면입체감은어떻게표현해야하는것일까? 입체감명암중학교미술시간에소묘를처음배울때구를그리며명암넣는방법을배웠을것이다. 대략 5단계정도로나눠지고하이라이트나반사광등에대해서도배웠을것이다. 하이라이트단계별명암반사광그림자그림 3. 소묘의명암 바로이명암을통해입체감을주도록한다. 중학교미술시간에배운내용을회상해보면 < 그림3> 과같이명암의단계를나눌수있다. OpenGL의조명 OpenGL에서조명을이용하여명암을구현하는데, 그조명의요소는다음과같다. 주변광 (mbient light) 방향성없이주변을골고루비추는빛을말한다. 엄밀히말하면어딘가광원이있지만여러차례반사가된후도달하기때문에특정방향에서의명암이불분명하고거의비슷한밝기로비춰진다. 우리주변에서찾기쉬운예를들면새벽이나흐린날의거리, 불꺼진방안의희미한조명을들수있다. 분산광 (Diffuse light) 일정한방향으로들어온빛이여러방향으로분산되어보이는빛을말한다. 우리가사물을볼때빛을받는부분이밝게보이고, 그렇지않은부분이어둡게보이는것을예로들수있다. 반사광 (Specular light) 일정한방향으로들어온빛이일정한방향으로반사되는빛의성분을말한다. 깨끗하게세차를한자동차에주변의조명이나햇빛이반사되어번쩍거리는것이좋은예가될수있다. 조명에의해명암이달라지는것은빛을얼마나받아얼마나반사를하는가에의해결정된다. 이것은빛을받는면의방향과매우밀접한관계가있다. 빛을수직으로받으면단위면적당받는빛의양이많아 N PEye PLight 그림 5. 면의방향과조명 지므로밝게된다. 물론, 앞에서소개한주변광은이론적으로는방향의영향을받지않으며, 반사광은면의방향뿐아니라관찰자의위치도중요한요소가된다. OpenGL의쉐이딩쉐이딩 (Shading) 이란음영이나농담등의표현을의미하는데 OpenGL에서는색상사이의보간을의미한다. 조명과색상을이야기하다가갑자기왜보간을이야기하느냐하면, 연재첫회에이야기한그한계, 즉컴퓨터는형상을근사적으로표현하기때문에색상정보또한근사적으로주어지고, 이에대한보완이필요하다. 균일쉐이딩 (Flat shading) OpenGL로형상을그릴때, 그첫번째, 혹은마지막정점 (vertex) 에할당된색상으로형상을그리는것을말한다. 부드러운쉐이딩 (Smooth shading) 각정점에할당된색상을사용하고, 그사이는다양한방식의보간을통해중간색을부여하여형상을그리는것을말한다. gllight 조명의위치및각성분에값을지정한다. 특정의활성화여부를지정한다. glenable/gldisable GL_LIGHTING : 이인자를이용해조명사용여부를정한다. 균일쉐이딩과부드러운쉐이딩을선택한다. glshademodel GL_FLT/ GL_SMOOTH glnormal 이후그려질요소들의방향을지정한다. 예제프로그램 - EX2-3 예제프로그램 Ex2-3을선택하면각각다음과같은구가그려진다. (a) (b) (c) 반사광 (Specular light) 그림 6. 조명에따른구의명암 주변광 (mbient light) 그림 4. 조명의종류 (a) 조명이적용되지않은구 (b) 조명이적용되고균일쉐이딩이된구 (c) 조명이적용되고부드러운쉐이딩이된구 158 C 2008/11
OpenGL 을이용한 CD 와 3D 그래픽스원리 구의각면이나점에서방향은구의중심에서그지점을이어주는방향과동일하다. 즉, 다음과같이계산할수있다. P1 = tv1n v1n=norm(p1) P3 fn=norm(p1+p2+p3) glenable GL_COLOR_MTERIL : 별도의설정없이지정된색상으로재질을표현하도록한다. glmaterial 재질의각성분별특성을지정한다. P2 그림 7. 구표면한지점에서의방향 조명을사용하는구는방향키를조정하면조명의위치가바뀌면서밝은부분과어두운부분이바뀌는것을볼수있으며, -Z키를이용하여주변광을, S-X키를이용하여분산광을, D-C키를이용하여반사광을설정할수있다. 조명의성분을바꿔보면서그차이를확인하면도움이될것이다. 질감색상과조명등을적용하면 CD를사용할때의기본적인표현은가능하다. 즉, 설계자가표현하고자한설계형상에대한정보는이러한방법을통해구체화될수있다. CD에서그활용도는높지않지만좀더현실감있는표현을위한방법을소개한다. 이러한은 CD로설계된데이터의검토시활용될수있다. 질감의차이물체는저마다재질에따른고유의질감이있다. 이것은촉감뿐만아니라시각적으로도차이가있다. 똑같은차라도세차도하고왁스칠도한차와먼지가쌓인차는만져보지않아도알수있는것은그표면이반사하는빛이차이가나기때문이다. 예제프로그램 : EX2-4 동일한조명아래서재질의특성을다르게지정한세개의구가있다. 1) 주변광은녹색만을반사하고, 빨간색의자체발광이있으며, 반사광은파란색만을반사한다. 2) 주변광은파란색을반사하고, 녹색의자체발광이있으며, 반사광은빨간색만을반사한다. 3) 주변광은빨간색을반사하고, 파란색의자체발광이있으며, 반사광은녹색만을반사한다. 그림 9. 다양한재질설정 좌우방향키를조정하면, 자체발광정도를조정할수있고, 상하방향키를조정하면반사도를조정할수있다. 이값을조정하면자체발광색상과반사광색상이섞이면서어떤색으로보이는지확인해보도록한다. 재질의정의도이렇게자세히할수있지만, 재질에따른특성이별로필요하지않은경우에는그냥색상만지정해주면 OpenGL이알아서그색상으로된재질을설정해주는을사용하는것도효과적이다. 그림 8. 다양한질감의사물들 OpenGL의재질 OpenGL에서의재질은조명과유사한개념이다. 조명의정의는조명의종류에따른빛의색상과밝기를설정하고, 재질의정의는비춰진조명의각성분을얼마나어떻게반사를할것이냐를정해주는것이다. 즉, 최종적으로관찰자에게보여지는빛의종류와양은그곱으로나타난다. 여기에추가로, 반사의정도나자체발광을하는정도도추가로정의할수있다. 텍스처 텍스처 (Texture) 라는말을사전에서찾아보면재질감이나직물, 성격등을의미한다고되어있다. 질감이라면앞에서배운방법을쓰면되는데왜다른방법이필요할까? 텍스처를사용하면참많은장점이있다. CD에서도설계를할때나적검토를할때보다는외적인느낌등을검토할때는유용하게쓰일수있다. 텍스처이용의장점현실감 CD를이용해서벽돌로쌓은집을설계했다고하자. 설계를다한후, 집이어떻게보일지확인할때벽돌무늬가있는것이밋밋한색으로표현된것보다한결더현실적인검토가될것이다. 2008/11 C 159
효율성위의예에서, 각각의벽돌을설계하고그벽돌하나하나의위치와방향을정해서벽을만든다면들여야할공이너무많다. 이런경우, 외형을간단한형상으로그리고, 그위에벽돌이미지의텍스처를이용하면쉽게만들어낼수있다. 텍스처의활용예우리주변에서손쉽게볼수있는텍스처의활용이라면단연 3D 게임을들수있다. 고구려와수나라의대규모전투가벌어지는게임을생각해보자. 일단, 등장하는캐릭터도많고, 게임이라는특성상신속한응답성도요구되므로화면을그리기위한리소스는최대한아껴야할것이다. 지형평원에는온갖풀들이나있고, 바위, 물, 흙등참많은것들이있다. 이런것을모두정확하게표현하기란거의불가능하다. 대략의지형의형상을만든후평원의이미지를덮어주면손쉽게평원을표현할수있다. 옷짐승의가죽으로만든털옷은어떻게표현해야할까? 그리고, 갑주가촘촘히박혀있는갑옷도그갑주각각의형상을표현하고재질이나색상을표현하는것이과연가능할까? 이럴때도적은수의삼각형으로형태를근사적으로표현한뒤텍스처를이용하면된다. 얼굴아마도가장표현하기어려운것이사람들의얼굴일것이다. 눈, 코, 귀, 입은얼마나그형상이복잡한가? 이경우에도얼굴의형태만근사적으로표현한뒤텍스처를이용해서얼굴을쉽게표현할수있다. CD가아닌게임의예를든것은, CD에서텍스처를사용하는경우가있기는하지만그효과가가장두드러지는분야가게임이기때문이다. 그렇다고 CD에서텍스처를사용하지않는것은아니다. 로고나포장의이미지를입혀검토하는등완성된제품의디자인을 CD를통해서검토하는경우도있다. 예제프로그램 - EX2-5 텍스처의효과를보여주는예제이다. 네개의육면체에각각다른방법으로텍스처를적용하였다. (a) (b) (c) (d) 그림 10. 텍스처이미지 ( 제공 : TIV 2nd Move, http://tierrasea.egloos.com) (a) 조명만을이용해서입체감을표현한육면체 (b) 이미지를있는그대로텍스처로적용한육면체 (c) 이미지에조명을반영해서텍스처를입힌육면체 (d) 이미지에조명과색상을반영하여텍스처를입힌육면체 그림 11. 텍스처예제 텍스처이미지에보이는작은자갈의형상을각각다표현하려한다면그형상정보만으로도상당히큰리소스가필요하다. 그리고, 특별한목적이있지않다면텍스처를이용하여표현하는것만으로도충분한효과가있다. 블렌딩 (lending) 이제까지는보다현실적인표현을위한방법을언급했다면이번에소개할내용은조금다르다. 현실에서어려운것을손쉽게할수있도록해주는방법이다. 바로반투명효과가그것이다. 최근에는일부러속이다보이도록설계된제품들도많이있다. 하지만, 그것은어디까지나반투명재질을사용할수있는경우에국한되고, 두꺼운금속이나나무, 돌등을이용하는경우에는그내부를볼수가없다. 이렇게현실과동떨어진이왜중요할까? 블렌딩을이용한반투명표현의적용반투명재질에대한표현실제로반투명인재질을표현하기위해사용될수있다. 유리나투명한플라스틱등의모습을검토하기위해사용한다. glgentextures 텍스처객체를만든다. glindtexture 사용할텍스처를선택한다. gltexparameter/ gltexenv 텍스처관련변수를설정한다. gluuild2dmipmaps 소스이미지로부터텍스처를준비한다. gltexcoord 정점 (Vertex) 에사용할텍스처좌표를지정한다. 내부형상에대한확인 그림 12. 반투명효과를이용한제품내부투시 여러가지부품들이정밀하게상호작용하는복잡한기계를설계할때특히유용할수있다. 실제로는보이지않는내부의모습을확인하여원하는설계가되었 160 C 2008/11
OpenGL 을이용한 CD 와 3D 그래픽스원리 는지, 문제가있다면어떤문제가있는지등실물로는확인하기불가능한다양한기술적검토를할수가있다. 반투명효과의구현방법제목의 블렌딩 이라는말처럼반투명은색상을섞는방법을통해구현한다. 이해하기쉬운예로어릴때미술시간을돌이켜보면, 수채화를그릴때이전에칠한색상이비춰서보이는것이나여러가지색상이있는셀로판지를겹쳐놓고그밑의그림을보는것과같다. 즉, 화면상에어떤그림을그려야할때그릴색상그대로그리는것이아니라그자리에그려져있는그림의색상을고려해서그리는것이다. 이전에그려져있는색상과그위에그릴색상을어떤방법으로섞을? 그림 13. 두가지색상을섞는방법에따른여러가지결과 것이냐에따라다양한효과를구현할수있다. 미술시간에물감은섞을수록어두워지고, 빛은섞을수록밝아진다고한것과같이두가지색상을섞는 (lending) 방법은여러가지가있다. 맺음말이번호에소개한내용은 CD라는프로그램의관점에서는별로비중이큰부분이아니다. 오히려, 당연히준비되어있어야할이다. 하지만그래픽스의관점에서는이번에다룬내용이참고서적의절반이상을차지하고있을만큼참많은주제를다루었다. 방대한양의핵심만을전달하기위해상세한코드설명은생략하고중요한 OpenGL 함수만을소개하였다. 함수이름과이함수가사용된소스를참고하면의구현을이해하는데큰도움이될것이다. 기회가된다면 OpenGL 코드에대한보다상세한설명을하도록하겠다. 그래픽스분야에서는이보다더멋진기술들이이미개발되어적용되고있다. 이번에소개한내용은아주기본적인내용이면서도중요한내용이라생각한다. CD에서도이런다양한기술들을접목하여품질높은렌더링이미지를만들어낼수있으며, 이를도와주는많은프로그램들을사용할수있다. glenable(gl_lending) lending을사용하는상태로변경한다. leding을사용할경우, 일반적인색상지정방식인 R, G, glcolor4f 에추가하여 lpha라는투명도값을더정의해줘야한다. 이함수를이용하여두색상이섞이는방법을지정한다. gllendfunc OpenGL에서제공하는상수중원하는방식의상수를지정하면된다. 예제프로그램사용법프로그램을실행시켜 CD & Graphics 메뉴하위의메뉴를통해예제를선택할수있다. 예제를선택한 그림 14. 예제프로그램사용법 후, 키보드의방향키와, S, D, Z, X, C 등메뉴에표시된키를이용해서관련파라미터를변경해볼수있다. 그림 15. CD 로설계후렌더링한이미지 ( 출처 : 네이버 CD/CM 카페마늘빵님 ) 조금다른이야기지만, 다른유용한기술을접목해서발전해가는이런점이바로 CD라는프로그램의특성을잘보여주고있다. 설계정보를보다쉽게입력하기위해개발된프로그램이점차설계에대한지원범위를더욱확대해가고있다. 그래픽스기술을접목하여시각적을강화하는것처럼, 통신기술이나 D 기술등의발전에힘입어시간적, 공간적한계도극복해가고있다. 가까운미래의 CD는얼마나획기적으로변모해갈지기대된다. 다음호에는다양한변환 (Transform) 에대해서다룰것이다. 이주제역시 CD라는프로그램의관점에서는당연히준비되어야할이다. 변환이라고는하지만복잡한수학계산은 OpenGL이알아서해주기때문에가벼운마음으로대하면될것이다. 예제번호 사용키 역할 2-1 방향키 ( 위 / 아래 ) 원의선분개수를조정한다. 방향키 ( 전방향 ) 구의위도, 경도방향으로나눠지는개수를조정한다. 2-2 스페이스키 삼각형의테두리를보이거나감춘다. 방향키 ( 전방향 ) 조명의위치를조정한다. /Z 조명의주변광 (mbient) 밝기를조정한다. 2-3 S/X 조명의분산광 (Diffuse) 밝기를조정한다. D/C 조명의반사광 (Specular) 밝기를조정한다. 2-4 방향키 ( 위 / 아래 ) 재질의반사도 (Shininess) 를조정한다. 방향키 ( 좌 / 우 ) 재질의발광도 (Emission) 를조정한다. 참고서적 OpenGL Super ible OpenGL Reference Guide 참고사이트 Devpia의 gsi Programming World(http://www.devpia.com /club_gsi.meul) ( 이전의 OpenGL Club) 자료실및강좌 http://nehe.gamedev.net 네이버 CD/CM 카페 : http://cafe.naver.com/cadcam.cafe 2008/11 C 161