밑에 클릭해서 다운로드 하세요.

http://www.microsoft.com/downloads/details.aspx?familyid=4b78a58a-e672-4b83-a28e-72b5e93bd60a&displaylang=en
크리에이티브 커먼즈 라이선스
Creative Commons License

'Development & Tips > Downloads' 카테고리의 다른 글

DirectX SDK November 2007  (0) 2008/02/16
Panda DirectX Max Exporter x86 5.8.63.0 for 3DSMax 8  (0) 2007/11/27
FRAPS 2.9.1 Retail  (1) 2007/08/23
Posted by HLDEC
Panda DirectX Max Exporter x86 5.8.63.0 for 3DSMax 8
크리에이티브 커먼즈 라이선스
Creative Commons License

'Development & Tips > Downloads' 카테고리의 다른 글

DirectX SDK November 2007  (0) 2008/02/16
Panda DirectX Max Exporter x86 5.8.63.0 for 3DSMax 8  (0) 2007/11/27
FRAPS 2.9.1 Retail  (1) 2007/08/23
Posted by HLDEC

"GPU-based Rendering and Animation for Chinese Painting Cartoon" 이라는 논문 중 일부를 간단하게 구현해보았다.

먼저 표현할 모델은 비교적 간단하게 표현할 수 있는 아래 사과 메쉬를 사용하였다.

사용자 삽입 이미지

예제가 되는 사과 모델


수묵화의 가장 큰 특징인 먹이 번진듯 한 농담 표현과 두꺼운 선을 간단하게 적용해보았다.

언급한 두 특징을 이용하여 렌더링 순서를 정리하며 아래와 같다.
첫째. 전체적으로 윤곽은 크고 두껍게 표현한다.
둘째. 농담은 4단계로 표현하되 농담과 농담 사이는 부드럽게 한다.
셋째. 두 결과 이미지를 혼합하여 최종 결과물을 얻는다.

첫 번째, 크고 두꺼운 윤곽 표현

카툰렌더링과는 다르게 윤곽이 크고 두껍게 표현되어야 하기 때문에 따로 Edge 추출 방법을 쓰지 않고, 광원의 위치를 카메라의 위치와 일치 시키고 퐁 셰이딩(Phong Shading)으로 렌더링 한 결과로 윤곽을 표현하였다. 하지만 퐁 셰이딩으로는 완전히 윤곽을 잡아낼 수 없어서 대략 0.3~0.7(Min 0.0 ~ Max 1.0)값을 골라내서 Linear Interpolation 적용하였다.

사용자 삽입 이미지

뽕 셰이딩(Phong Shading) 결과

사용자 삽입 이미지

Linear Interpolation 결과

(빠른 작업을 위해 Phong shading 대신 N·L (Normal Vector · Light Vector) 로 구현하였다.)

이렇게 나온 결과물을 그냥 사용하기엔 가장자리가 너무 날카롭기 때문에 LPF(Low Pass Filter)로 부드럽게 처리하였다.

사용자 삽입 이미지

LPF가 적용된 윤곽 추출 결과



두 번째, 농담 표현

다시 광원을 원 위치로 옮기고 Phong Shading을 적용한다.
이전 카툰 렌더링은 간단하게 코드상에서 양자화 했지만 이번에는 농담별로 값이 다르기도 하고 농담 사이도 부드럽게 처리해야 하기 때문에 양자화 대신 텍스쳐에서 농담값을 불러와서 사용하였다. (아래 이미지 참조)

사용자 삽입 이미지

농담 값 텍스쳐

위 이미지를 먼저 Phong Shading한 값과 맵핑시켜 아래와 같은 결과를 얻을 수 있었다.

사용자 삽입 이미지

기본 광원 결과

사용자 삽입 이미지

농담 텍스쳐 처리 결과


하지만 이 결고 또한 가장자리가 날카롭기 때문에 윤곽과 같이 LPF를 적용하였다.
사용자 삽입 이미지

Low Pass Filter를 적용한 농담 결과


세 번째, 윤곽 결과물고 농담 결과물 혼합 및 마무리

위에서 먼저 얻은 두 결과물을 혼합하면 아래와 같은 결과를 얻을 수 있다.
(결과물 혼합은 각각의 픽셀과 픽셀을 곱하여 얻어낸다.)
사용자 삽입 이미지

윤곽 + 농담



하얀 배경으로는 수묵화 느낌을 살리기엔 허전한 부분이 존재한다.
그래서아래 그림과 같은 종이 표면같은 텍스쳐를 배경으로 사용해 보았다.
사용자 삽입 이미지

종이 텍스쳐


두 효과의 혼합 결과물과 종이 텍스쳐를 혼합한 최종 결과물은 아래와 같다.

사용자 삽입 이미지

최종 결과


사과 뿐 아니라 다른 모델 또한 위와 같은 작업을 통해 아래와 같은 결과를 얻을 수 있었다.
사용자 삽입 이미지

코끼리

사용자 삽입 이미지

노랑붓꽃

사용자 삽입 이미지

동백

FX 파일 내용 보기

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development & Tips > 3D Programming' 카테고리의 다른 글

Ambient Occlusion  (2) 2008/07/22
[Shader] 간단한 수묵 렌더링  (3) 2007/09/04
[Shader] 간단한 카툰 렌더링  (0) 2007/09/03
Posted by HLDEC


예제 모델 '코끼리'

사용자 삽입 이미지

기본 광원 결과물


만화적 표현은 크게 2가지 특징이 있다. 첫째로 외곽선 표현하는 것이고, 둘째로는 명암처리를 날카롭게 표현하는 것이다.

일단은 외곽선을 생성한다.
외곽선은 깊이맵을 이용하거나 혹은 노말맵을 이용하는게 일반적이다. 
 
사용자 삽입 이미지

깊이맵

사용자 삽입 이미지

노말맵

(두 방식 중 원하는 방식을 택일하여 사용하면 된다.)
 
위 결과물의 특징은 경계쪽의 Frequency가 급격히 변화한다는 것이다.
이에 HPF(High Pass Filter)를 적용하면 외곽선 추출을 손쉽게 얻어낼 수 있다.

 

사용자 삽입 이미지

깊이맵을 이용한 외곽선 추출 결과

사용자 삽입 이미지

노말맵을 이용한 외곽선 추출 결과


라플라시안 필터(Laplician Filter) 적용 결과


외곽선을 찾았으니 명암처리를 하도록 한다.
명암처리는 셰이딩 결과 값을 양자화(Quantization) 하면 손쉽게 얻어올 수 있다.
예를 들어 0.0f~0.3f 까지는 0.0f으로 반환, 0.3f~0.7f 까지는 0.5f 반환 0.7f~1.0f 까지는 1.0f 을 반환하면 된다.
아래 이미지는 위 예를 바탕으로 만들어진 결과물이다.

사용자 삽입 이미지

명함처리 후 이미지


최종 결과물을 만들기 위해 위에서 만들어진 두 결과물을 합성한다.
합성할 때에는 Multiply기법을 사용하면 된다. (두 픽셀값을 곱하여 값을 얻어오는 방식)

사용자 삽입 이미지

깊이맵을 이용한 외곽선과 합성

사용자 삽입 이미지

노말맵을 이용한 외곽선과 합성



외곽선이 너무 딱딱하게 표현된다 생각이 들면 LPF를 추가로 적용해주면 된다.
사용자 삽입 이미지

깊이맵을 이용한 외곽선 + LPF 과 합성

사용자 삽입 이미지

깊이맵을 이용한 외곽선 + LPF 과 합성


FX 파일 내용 보기

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development & Tips > 3D Programming' 카테고리의 다른 글

Ambient Occlusion  (2) 2008/07/22
[Shader] 간단한 수묵 렌더링  (3) 2007/09/04
[Shader] 간단한 카툰 렌더링  (0) 2007/09/03
Posted by HLDEC