본문 바로가기

Computer/Graphics20

수묵화 렌더링(?) View vector: V Mesh surface normal: N 이 있다고 할 때, result= dot(V, N); 을 계산한다고 생각해 보자. vector V와 N의 내적된 결과는 -1 ≤ result ≤ 1 의 값을 범위로 갖는다. result가 0보다 작은 경우에는 backface가 되고, result가 0인 경우는 N이 V에 수직인 벡터가 된다. result가 0보다 큰 경우에는 frontface가 된다는 것은 잘 알고 있을 것이다. 따라서 0 ≤ result ≤ threshold 의 범위를 갖는 값을 edge로 판단하면 렌더링 결과는 어떻게 될까? 그 결과는 Figure 1, Figure 2에 나타나 있다. threshold값을 0.5로 설정하여 렌더링한 결과이다. 즉, 뷰벡터와 수직인 벡.. 2008. 11. 2.
Edge detection on GPU Render to texture 에 관한 예제이다. 윈도우에 직접 Teapot를 렌더링 한 것이 아니라, 우선 윈도우 클라이언트 영역(화면의 검은 부분)과 같은 크기의 텍스쳐를 생성한 후, 그 텍스쳐에 Teapot를 그리고, Quad(Triangle x 2)를 이용하여 텍스쳐 매핑을 수행 한 것이다. DirectX는 Render to texture에 관한 여러가지 보조 함수가 있으나 OpenGL은 별로 그렇지 못하다. 이렇게 화면에 직접 무엇인가를 그리지 않는 이유에는 몇 가지를 들 수 있다. 그림 2는 그림 1에서 렌더링된 결과를 이용하여 Mask 0 -1 0 -1 4 -1 0 -1 0 로 Edge detection을 수행한 결과이다. 카툰렌더링에 사용될 Edge를 이런 식으로 구할 수도 있다는 것과,.. 2008. 10. 28.
Slide 붉은색 박스가 A 위치에서 출발하여 B위치 까지 이동하는 경우를 생각해 보자. 1. 사실감 있는 이동을 위해서는, A에서는 점점 가속 되다가, B에서는 점점 감속되어야 한다. 2. Impact가 있는 이동의 경우 A에서 최고 속도가 될 것이고, B지점에 가까워 질 수록 감속이 되어야 한다. 감속률이 1/2 즉 0.5라고 하고 계산을 하면, 첫 번째 프레임에서 박스를 A와 B의 중간 지점인 C까지 이동 시킨다. 두 번째 프레임에서는 박스를 C와 B의 중간 지점인 D까지 이동 시킨다. 네 번째 프레임에서는 박스를 D와 B의 중간 지점인 E까지 이동 시킨다. 이같은 작업을 반복식으로 나타내 보면, while( abs(Box.position.x-Destination.x) >0.01){ Box.position.x.. 2008. 10. 22.
Cartoon rendering 카툰렌더링은 첫째, 3~4단계의 급격한 명암 변화 둘째, 실루엣 엣지 상기한 두 가지를 기반으로 렌더링된다. 첫째의 급격한 명암변화는 아주 쉽게 구현할 수 있다. 렌더링될 버텍스의 법선과 방향성 광원을 내적 하여 나온 값을 이용하면 된다. vertexNormal(버텍스의 법선, 3차원 벡터) lightingDirection(방향성 광원의 방향, 3차원 벡터) 라고 하고, finalColor(최종 색상 계산 결과, rgb컴포넌트) 라고 할 때, 픽셀 쉐이더에서, float dotResult= dotProduct(vertexNormal, lightingDirection); if( dotResult > 0.7f ) finalColor= float4(0.7f, 0.7f, 0.7f); else if( dotRes.. 2008. 10. 21.