본문 바로가기
Computer/JOGL

9. GLSL -- 툰 셰이딩

by DogBull 2007. 8. 3.
Toon Shading ( 만화적 셰이딩)은 Cell Rendering 이라고도 하는 NPR( Non-Photorealistic Rendering, 비 실사 렌더링 ) 분야의 한 종류이다.

Toon Shading 의 핵심은,
1. 급격한 음영 변화와 비교적 단순한 단계의 음영. (밝음, 중간, 어두움)
2. 외곽선.
의 두가지로 들 수 있다.

외곽선을 제외한 Toon Shading이다.
사용자 삽입 이미지


// VertexShader.vs
uniform vec3 lightDir;
varying float intensity;

void main(){
    intensity=  dot(lightDir, normalize(gl_Normal));
    gl_Position=    ftransform();
}
// FragmentShader.fs
varying float intensity;

void main(){
    vec4 color;

    if( intensity > 0.95 )      color=  vec4(0.5, 1.0, 0.5, 1.0);
    else if( intensity > 0.5)   color=  vec4(0.3, 0.8, 0.3, 1.0);
    else if( intensity > 0.25)  color=  vec4(0.2, 0.6, 0.2, 1.0);
    else                        color=  vec4(0.1, 0.3, 0.1, 1.0);

    gl_FragColor=   color;
}

OpenGL App.에서 지정해 주어야 될 것은 보시다시피 uniform 으로 선언되어 있는 lightDir 이다.
렌더링될 물체의 법선벡터빛의 방향내적으로, 셰이딩 색상을 결정한다.

알고 있겠지만, OpenGL App.에서 설정하는 것을 보자.
//Render.java ( GLEventListener 인터페이스를 상속한 클래스 
public void init(GLAutoDrawable drawable){
....
....
int loc= gl.glGetUniformLocation(glsl.getProgID(), "lightDir"); gl.glUniform3f(loc, 0.1f, -0.4f, 0.5f); }

'Computer > JOGL' 카테고리의 다른 글

glut  (0) 2007.08.06
10. GLSL -- Texture  (0) 2007.08.03
8. GLSL -- Animation  (0) 2007.08.03
7. GLSL -- vs & fs  (0) 2007.08.03
6. GLSL -- HelloWorld  (0) 2007.08.03