[ShaderX5] 2.7 Animating Vegetation Using GPU Programs
Upcoming SlideShare
Loading in...5
×
 

[ShaderX5] 2.7 Animating Vegetation Using GPU Programs

on

  • 1,919 views

 

Statistics

Views

Total Views
1,919
Views on SlideShare
1,799
Embed Views
120

Actions

Likes
1
Downloads
9
Comments
0

4 Embeds 120

http://ohyecloudy.com 101
http://dodoubt.tistory.com 11
http://0.0.0.0 7
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

[ShaderX5] 2.7 Animating Vegetation Using GPU Programs [ShaderX5] 2.7 Animating Vegetation Using GPU Programs Presentation Transcript

  • ShaderX52.7 Animating Vegetation Using GPU Programs
    http://ohyecloudy.com
    http://cafe.naver.com/shader.cafe
  • Introduction
    잔잔한 바람에 흔들리는 식물을 구현한다.
    vertex animation을 사용.
    static lightmap
    유의 사항 : z-up right-hand 좌표계를 사용했다.
  • 적용 가능한 식물
    palms
    birches
    mushrooms
    grass
    weeds
    flowers
    scrub
  • 구현 단계
    Animate Vegetation
    일단 움직이게 한다.
    Adding Chaos to Vertex Movement
    Lightmap and Height Bias
    개선
  • Vertex Shader
    uniform float time;
    const float magnitude = 0.006;
    varying vec2 texCoords;
    // varying : 모든 vertex마다 정의하고 pixel shader에서는 보간된 값을 갖는다.
    void main()
    {
    float amplitude = magnitude * gl_Vertex.z;
    vec4 wave =
    amplitude *
    vec4( sin(time), cos(time), 0, 0);
    vec4 vert = gl_Vertex + wave;
    vert.w = 1.0;
    gl_Position = gl_ModelViewProjectionMatrix * vert;
    texCoord = gl_MultiTexCoord0.xy;
    }
  • 문제점
    mesh group이 하나일 때는 그럴듯하다.
    복수의 mesh group일 때는 문제
    wave 변수인 time이 똑같다.
  • 구현 단계
    Animate Vegetation
    Adding Chaos to Vertex Movement
    단조로운 움직임을 없앤다.
    Lightmap and Height Bias
    개선
  • Vertex Shader
    vec4 wave = amplitude
    * vec4( sin(time), cos(time), 0, 0);
    vec4 wave = amplitude *
    vec4( sin(time + gl_Vertex.x),
    cos(time + gl_Vertex.y), 0, 0);
    • Vertex 마다 다른 wave 값을 갖는다.
    • 움직임이 부드럽다.
    • 이웃한 vertex끼리 차이가 작다.
  • 문제점
    World 좌표로 계산한다.
    amplitude 값이 높이에 비례한다.
    • Z 좌표가 0인 object에 비해 50인 object의 움직임이 너무 과하다.
  • 구현 단계
    Animate Vegetation
    Adding Chaos to Vertex Movement
    Lightmap and Height Bias
    라이트 적용
    Height bais를 사용한 amplitude 보정.
    개선
  • Vertex Shader
    float amplitude = magnitude * (gl_Vertex.z);
    float amplitude = magnitude
    * (gl_Vertex.z – gl_Color.a);
    Lightmap
  • Fragment Shader(Pixel Shader)
    uniform sampler2D baseMap;
    varying vec4 vertColor;
    varying vec2 texCoords;
    void main()
    {
    vec4 mapColor = texture2D(baseMap, texCoords);
    vec3 fragColor = mapColor.rgb * vertColor.rgb;
    float trans = step(0.5, mapColor.a);
    gl_FragColor = vec4(fragColor.rgb, trans);
    }
    • transparency artifact 제거
    • 텍스쳐 필터링, 밉맵핑이 원인.