18
Chapter 6. Fire in the “Vulcan” Demo GPU Gems 1 http://cafe.naver.com/sha der 임임임 ([email protected])

Gpu Gems 1 Chapter 6

Embed Size (px)

DESCRIPTION

http://cafe.naver.com/shader

Citation preview

Page 1: Gpu Gems 1 Chapter 6

Chapter 6.

Fire in the “Vulcan” DemoGPU Gems 1http://cafe.naver.com/shader

임용균 ([email protected])

Page 2: Gpu Gems 1 Chapter 6

Creating Realistic Flames

•fully procedural flames•Screen space distortion based flames

Page 3: Gpu Gems 1 Chapter 6

Creating Realistic Flames• Particle System 으로 많은 화염을 표현 하기에는 Poly-

gon 이 너무 많이 필요함 .• 물리 연산도 무시하지 못 할 수준임 .

▫Video-Textured Sprite(Animated Sprite) 를 사용하자 .

Page 4: Gpu Gems 1 Chapter 6

Implementing Animated Sprites• 2 개의 화염 , 1 개의 연기 에니메이션 ( 각 64 프레임 )• 1 개의 떠다니는 불똥 에니메이션 (64 프레임 )

▫총 256 프레임 프레임당 256x256 텍스쳐일때

Uncompressed Texture : 67MB Compressed Texture (DXT1) : 8.4MB

Page 5: Gpu Gems 1 Chapter 6

Custom Smoke Generator

•Animated Sprite 로는 연기를 표현하기가 쉽지 않았다 .

•적절한 조명 , 색 등등으로 인한 연기의 적절한 영상 만들기 어려움 .▫결국 Particle System 을 이용하기로 함 .

불 환경에 맞게 lighting 을 미세 조정하여 색을 제어함 . Smoke Particle 이 x 축에서 회전하게 함

Smoke 가 자기 자신으로 말려 들어가는 듯한 효과를 손쉽게 구현 .

Page 6: Gpu Gems 1 Chapter 6

Adding Variety to the Flames• 효과에 사용할 수 있는 에니메이션의 수가 적다면 같은 이미지가

반복되는 것이 문제가 될 수 있다 .▫ Animated Sprite 도 Particle System 화 하여 크기 , 위치 , 수명 , 시작 프레임 ,

알파값 등을 설정된 값 범위에서 무작위로 설정한다 .

• Animated Sprite Particle 의 축을 뒤집어 다양성을 증가시킨다 .

Page 7: Gpu Gems 1 Chapter 6

Storing the Animation

•Volume texture (3D texture) 를 사용하는 것이 유용함 .▫Z-texture coordinate 를 증가시키는 것이 곧

에니메이션을 재생하는 것임 .▫압축된 256x256x256 B8G8R8A8 texture 를

사용함 . (16mb)

Page 8: Gpu Gems 1 Chapter 6

Blending Flames and Smoke• 처음에 additive blending 을 사용함 . (srcblend = one, dest-

blend = one)▫ Sprite 들을 독립적으로 그릴 수 있음 .▫ 하지만 결과물이 사실적이지 않으며 카툰 같아짐 .▫ 화염과 연기를 섞는 것이 더 까다로워 진다 .

• Alpha Blending 을 사용함 . (srcblend = srcalpha, destblend = invsrcalpha)▫ 위의 문제점들이 해결됨 .▫ 파티클을 프레임마다 정렬하여 렌더링 해야 함 .

하지만 그 성능상의 영향은 무시해도 좋을 정도 이다 .

Page 9: Gpu Gems 1 Chapter 6

Particle Motion• 화염 근원지가 움직일 경우 그 간격을 채우기에는 particle 이 충분하지

않고 따로 떨어져 있는 particle 은 효과를 망친다 .▫ 불이 연속되게 유지하기 위해 불과 발화체의 가중치를 이용하였다 .

처음 생성 했을 때 가중치가 높아 발화체가 움직이면 불도 같이 움직인다 . particle 이 오래 될 수록 가중치가 낮아져 같이 움직이는 정도가 줄어든다 .

Page 10: Gpu Gems 1 Chapter 6

Performance• Video-textured 빌보드는 막대한 양의 픽셀 처리 능력을 소비함 .

▫ Layer Composition 을 이용해 해결함 .

Page 11: Gpu Gems 1 Chapter 6

Layer Composition• 화염을 저해상도 버퍼 (1/4) 에 렌더링 한 후 원래의 Scene 에 합성한다 .

▫ 전체 이미지 품질의 저하는 미비했으나 성능 향상은 매우 컸다 .

Page 12: Gpu Gems 1 Chapter 6

Custom Sprite• 정사각형 Particle Sprite 는 불 모양에는 낭비가 심했음 . ( 보통 1/3

정도만 차지 )▫ 화염에 더 잘 맞는 직사각형 sprite 를 사용함 .▫ 각 프레임에 맞는 최적의 직사각형을 생성한 후 particle 위치를 기준으로 sprite

중심에 오프셋을 더하여 맞춘다 .

Page 13: Gpu Gems 1 Chapter 6

Post-Rendering Effects

•glow, film grain, heat shimmer (distortion)

Page 14: Gpu Gems 1 Chapter 6

Glow• 첫 번째 패스에서 x 축에 8 픽셀 넓이 Blurring• 두 번째 패스에서 y 축에 8 픽셀 넓이 Blurring• 최종 Blurring 될 부분을 선택하기 위해 Alpha 채널을 이용함 .

Page 15: Gpu Gems 1 Chapter 6

Heat Shimmer• Render target texture 에 “ heat shimmer” 즉 왜곡 (distortion)

정보를 렌더링 한다 . ( 왜곡 정보는 heat shimmer texture 에 있음 .)

• 최종 혼합 과정에서 “ rendered scene” 픽셀의 u,v 좌표값에 heat render target texture 에 저장되어 있는 red, green 값을 더하여 왜곡된 좌표를 해당 픽셀의 color 값으로 사용한다 .

Page 16: Gpu Gems 1 Chapter 6

Heat Shimmer

Page 17: Gpu Gems 1 Chapter 6

Grain

Page 18: Gpu Gems 1 Chapter 6

Conclusion