Upload
yong-gyun-im
View
1.015
Download
3
Embed Size (px)
DESCRIPTION
http://cafe.naver.com/shader
Citation preview
Creating Realistic Flames
•fully procedural flames•Screen space distortion based flames
Creating Realistic Flames• Particle System 으로 많은 화염을 표현 하기에는 Poly-
gon 이 너무 많이 필요함 .• 물리 연산도 무시하지 못 할 수준임 .
▫Video-Textured Sprite(Animated Sprite) 를 사용하자 .
Implementing Animated Sprites• 2 개의 화염 , 1 개의 연기 에니메이션 ( 각 64 프레임 )• 1 개의 떠다니는 불똥 에니메이션 (64 프레임 )
▫총 256 프레임 프레임당 256x256 텍스쳐일때
Uncompressed Texture : 67MB Compressed Texture (DXT1) : 8.4MB
Custom Smoke Generator
•Animated Sprite 로는 연기를 표현하기가 쉽지 않았다 .
•적절한 조명 , 색 등등으로 인한 연기의 적절한 영상 만들기 어려움 .▫결국 Particle System 을 이용하기로 함 .
불 환경에 맞게 lighting 을 미세 조정하여 색을 제어함 . Smoke Particle 이 x 축에서 회전하게 함
Smoke 가 자기 자신으로 말려 들어가는 듯한 효과를 손쉽게 구현 .
Adding Variety to the Flames• 효과에 사용할 수 있는 에니메이션의 수가 적다면 같은 이미지가
반복되는 것이 문제가 될 수 있다 .▫ Animated Sprite 도 Particle System 화 하여 크기 , 위치 , 수명 , 시작 프레임 ,
알파값 등을 설정된 값 범위에서 무작위로 설정한다 .
• Animated Sprite Particle 의 축을 뒤집어 다양성을 증가시킨다 .
Storing the Animation
•Volume texture (3D texture) 를 사용하는 것이 유용함 .▫Z-texture coordinate 를 증가시키는 것이 곧
에니메이션을 재생하는 것임 .▫압축된 256x256x256 B8G8R8A8 texture 를
사용함 . (16mb)
Blending Flames and Smoke• 처음에 additive blending 을 사용함 . (srcblend = one, dest-
blend = one)▫ Sprite 들을 독립적으로 그릴 수 있음 .▫ 하지만 결과물이 사실적이지 않으며 카툰 같아짐 .▫ 화염과 연기를 섞는 것이 더 까다로워 진다 .
• Alpha Blending 을 사용함 . (srcblend = srcalpha, destblend = invsrcalpha)▫ 위의 문제점들이 해결됨 .▫ 파티클을 프레임마다 정렬하여 렌더링 해야 함 .
하지만 그 성능상의 영향은 무시해도 좋을 정도 이다 .
Particle Motion• 화염 근원지가 움직일 경우 그 간격을 채우기에는 particle 이 충분하지
않고 따로 떨어져 있는 particle 은 효과를 망친다 .▫ 불이 연속되게 유지하기 위해 불과 발화체의 가중치를 이용하였다 .
처음 생성 했을 때 가중치가 높아 발화체가 움직이면 불도 같이 움직인다 . particle 이 오래 될 수록 가중치가 낮아져 같이 움직이는 정도가 줄어든다 .
Performance• Video-textured 빌보드는 막대한 양의 픽셀 처리 능력을 소비함 .
▫ Layer Composition 을 이용해 해결함 .
Layer Composition• 화염을 저해상도 버퍼 (1/4) 에 렌더링 한 후 원래의 Scene 에 합성한다 .
▫ 전체 이미지 품질의 저하는 미비했으나 성능 향상은 매우 컸다 .
Custom Sprite• 정사각형 Particle Sprite 는 불 모양에는 낭비가 심했음 . ( 보통 1/3
정도만 차지 )▫ 화염에 더 잘 맞는 직사각형 sprite 를 사용함 .▫ 각 프레임에 맞는 최적의 직사각형을 생성한 후 particle 위치를 기준으로 sprite
중심에 오프셋을 더하여 맞춘다 .
Post-Rendering Effects
•glow, film grain, heat shimmer (distortion)
Glow• 첫 번째 패스에서 x 축에 8 픽셀 넓이 Blurring• 두 번째 패스에서 y 축에 8 픽셀 넓이 Blurring• 최종 Blurring 될 부분을 선택하기 위해 Alpha 채널을 이용함 .
Heat Shimmer• Render target texture 에 “ heat shimmer” 즉 왜곡 (distortion)
정보를 렌더링 한다 . ( 왜곡 정보는 heat shimmer texture 에 있음 .)
• 최종 혼합 과정에서 “ rendered scene” 픽셀의 u,v 좌표값에 heat render target texture 에 저장되어 있는 red, green 값을 더하여 왜곡된 좌표를 해당 픽셀의 color 값으로 사용한다 .
Heat Shimmer
Grain
Conclusion