이번엔 간단한 수묵 렌더링 구현!
일단 "GPU-based Rendering and Animation for Chinese Painting Cartoon" 이라는 이상한 논문 중 일부만 정말간단하게 구현한거라는걸 알아두시길.

먼저 표현할 모델부터!
수묵으로 뭘 표현하면뭐가 이쁠까? 고민하다가 사과로 결정!

사용자 삽입 이미지

예제가 되는 사과 모델


수묵화의 특징은 간단하게 말하면 적당한 농담이 곁들어져있고 선이 좀 두껍고 뭐....
대충 알거라 생각하고 스킵 (역시나 본인도 잘 모름 ㅠ.ㅠ)
그래서 크게 2가지만 살리기로 했음!
첫째. 전체적으로 윤곽은 크게 살리자!
둘째. 농담은 4단계로 농담과 농담 사이는 부드럽게 해보자!
본인은 수묵에 대해 아는게 전혀 없어서 대충 이정도만 적용하기로 결정!

그럼 이 사과의 윤곽을 따보도록 하자규~

카툰렌더링과는 다르게 윤곽이 크게 드러나야 하기 때문에 따로 Edge 추출 방법을 쓰지 않고, 광원의 위치를 카메라의 위치와 동기화 시키고 뽕 셰이딩(Phong Shading)으로 대충 빠바방 해서 윤곽을 만들기로 함. 하지만 뽕 셰이딩으로는 완전히 윤곽을 잡아낼 수 없어서 대충 0.3~0.7값만 골라내서 Linear Interpolation 적용

사용자 삽입 이미지

뽕 셰이딩(Phong Shading) 결과

사용자 삽입 이미지

Linear Interpolation 결과

(사실 귀찮아서 Phong shading으로 안하고 대충 N·L 로 구현)

요로케 나온 결과물을 그냥 쓰기엔 너무 끝이 날카(?)롭기 때문에 LPF로 불러효과 작렬!

사용자 삽입 이미지

LPF가 적용된 윤곽 추출 결과


윤곽을 얻어냈으니 이번에는 내부 농담 처리 시작!
일단 다시 광원 위치를 원래대로 놓고 이번에도 가짜 Phong Shading으로 광원처리 빵!

이전 카툰 렌더링에서는 그냥 코드에서 양자화 해버렸지만 이번에는 이래저래 귀찮아서(농담별로 값이 다른건 둘째치고 농담 사이도 부드럽게 처리하고 해야함) 양자화 대신에 텍스쳐에서 농담값을 불러와서 쓰기로 함.

사용자 삽입 이미지

농담 값 텍스쳐

보는봐와 같이 텍스쳐에 대충 어디부터 어디까지가 무슨 값이고 그 사이는 부드럽게 뭐 이런 정보가 들어있음. (바보가 아니면 알 수 있다고 생각하는데...)

뭐 저 값이야 가져오는건 쉽지 않은가... 대충 빛에대한 밝기값 0~1 나오는거 UV좌표로 먹여버리면 바로 나오는거니깐 -_-ㅋ

그런고로 다음과 같은 결과 득템 성공!

사용자 삽입 이미지

기본 광원 결과

사용자 삽입 이미지

농담 텍스쳐 처리 결과


하지만 이녀석도 변두리가 날카로운고로 LPF 작렬!
사용자 삽입 이미지

Low Pass Filter를 적용한 농담 결과


이번에도 역시 마무리는 윤곽과 농담 믹씽!
사용자 삽입 이미지

윤곽 + 농담


뭔가 허전하다... 그래서 아래 그림과 같은 종이 표면같은(대충 뽀샵으로 끄적거려서 만듦) 텍스쳐를 발라봄.
사용자 삽입 이미지

종이 텍스쳐


그럼  다시 종이 위에다 믹씽 결과를 입혀보면?

사용자 삽입 이미지

최종 결과


오우- 그럴싸하게 나온다ㅋ

뭐 대충 간단한 수묵 렌더링은 여기서 그만 두는걸로 하고 아래는 사과말고 다른 모델에 적용해 봤을때 이미지ㅋ 즐감~
사용자 삽입 이미지

코끼리 선수

사용자 삽입 이미지

노랑붓꽃 선수

사용자 삽입 이미지

동백 선수

FX 파일 내용 보기

이올린에 북마크하기(0) 이올린에 추천하기(0)

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

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