Successfully reported this slideshow.

[GEG1] 3.volumetric representation of virtual environments

1,667 views

Published on

Published in: Technology, Design
  • Be the first to comment

  • Be the first to like this

[GEG1] 3.volumetric representation of virtual environments

  1. 1. Game Engine Gems 1chap 3.Volumetric Representationof Virtual Environments ohyecloudy http://ohyecloudy.comshader studyhttp://cafe.naver.com/shader.cafe 2011.10.31
  2. 2. height map이 아니라실제 volume으로 환경을 표현하는기법을 살펴본다.간단한 개념 정리 수준
  3. 3. height map • 등고선을 생각하면 쉽게 이해 • 간단한 표현법 • 시각화 쉽다 • 생성 쉽다 http://www.alvaromartin.net/images/surfaceclipmaps /heightmap.jpg
  4. 4. height map 표현 한계 • 좌표마다 높이 값이 하나만 존재 • 동굴, 돌출부 등을 표현 못함
  5. 5. volumetric environments • 실제 3D 데이터 • height map이 가지는 제한 X
  6. 6. 실제로 쓰이고 있다! • Worms 3D • Crysis sandbox • MinerWars • Thermite3D game engine
  7. 7. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  8. 8. Voxel • volumetric pixel • 코어 데이터 구조로 사용 ������ × ������ × ������ voxels
  9. 9. Cell • 2 × 2 × 2 voxels • surface를 만드는 최소 단위
  10. 10. Surface extraction • 표현을 하려면 변환해야 함 • triangle mesh로 변환하는 작업
  11. 11. Marching Cubes algorithm
  12. 12. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  13. 13. Material ID • 8-bit • 0 : empty space • rock, soil, ….
  14. 14. Density field • 단순한 volume 안/밖 결정 문제점 • 뾰족한 겉면 • 부드러운 메시 겉면을 표현하려고 • Marching Cubes Algorithm에서 – linear interpolation을 할 때 사용
  15. 15. Voxel이 가지는 데이터 • material ID (1byte) • density (1byte)
  16. 16. Block • volume을 구성하는 단위 • voxel 여러 개로 이루어진다
  17. 17. Volume은 block 리스트로 표현
  18. 18. Voxel 데이터 변경 시나리오 1 • Voxel 변경 • 해당하는 block을 찾음 • shared 상태면 block을 복사해서 변경 • reference count 업데이트
  19. 19. Voxel 데이터 변경 시나리오 2 • 변경해서 다른 block과 같은 모양 • 모든 voxel을 비교해 공유 block을 식별하고 처리하는 작업은 비쌈 • potentially homogeneous 마크 • garbage collection 시간에 처리
  20. 20. 적절한 block size는? • 실험 결과 32 × 32 × 32 • smaller block : 공유 가능성 높음 • larger block : block 개수가 줄어 들어 관리 비용이 감소
  21. 21. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  22. 22. 요구 사항 • real-time으로 volume 변경 가능 • 변경된 부분만 surface 재생성 • 결과는 GPU rendering에 적합한 포멧
  23. 23. Region • volume을 겹치는 부분 없이 나눔 • 업데이트가 수행되는 단위 • mesh data를 가진다 • vertex buffer, index buffer • dirty flag : mesh data를 재생성?
  24. 24. 적절한 region size는? • 실험 결과 8 × 8 × 8 • smaller regions – finer-grained occlusion culling – 효율적인 mesh data 생성 – batch count 증가
  25. 25. Output of Algorithm struct Vertex { float position[3]; float normal[3]; float materialId; float alpha; }
  26. 26. Level of Detail • volume에서 바로 LOD를 구현 • 생성된 triangle surface는 상관 X • mip level에 맞는 surface extraction 실행
  27. 27. Threading the Algorithm
  28. 28. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  29. 29. visibility culling • intersecting 검사 – view frustum – bounding volume hierarchy • 간단하게 구현 가능
  30. 30. The Material System • geometry는 미리 만들어지지 X • volume 정보로부터 생성 • texture coord 자동 생성 필요 • Triplanar texturing 사용
  31. 31. Triplanar texturing • pixel shader • surface normal을 blend weights로 사용 • x,y,z 축으로 프로젝트된 텍스쳐를 blend weights를 사용해 섞는다
  32. 32. // Interpolation means normals may not be unit length.normal = normalize(normal);// Squaring a unit vector makes the components add to one.float3 blendWeights = abs(normal * normal);// For each axis, sample the texture and multiply by theblend weights.float4 colorMapValueYZ = tex2D(colorMapX, worldPos.yz) * blendWeights.x;float4 colorMapValueXZ = tex2D(colorMapY, worldPos.xz) * blendWeights.y;float4 colorMapValueXY = tex2D(colorMapZ, worldPos.xy) * blendWeights.z;// Combine the resultsfloat4 colorMapValue = colorMapValueXY + colorMapValueYZ + colorMapValueXZ;
  33. 33. Triplanar texturing • 자연물 잘 표현 – rock, grass, … • 인공물 잘 표현 못함 – 날카로운 모서리 – 높은 디테일
  34. 34. Using Multiple Materials
  35. 35. Using Multiple Materials • non-uniform 영역 초기화 – black으로 setting • uniform triangles 렌더링 – blending mode : set • non-uniform 영역 – blending mode : additively – material 간 부드러운 전환
  36. 36. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  37. 37. collision mesh • region에 있는 mesh data로 생성 • dynamically updating – collision mesh를 재생성 – 기존 mesh와 교체
  38. 38. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  39. 39. 해야 할 일들 • volume 사이즈를 더 크게 • data streaming • content creation – height map  volumes (현재) – triangle mesh -> volumes (이후)
  40. 40. 게임 플레이에 어떻게 활용? • 지형 파괴 • 파괴된 지형을 복구 • …
  41. 41. OverviewData StructuresSurface ExtractionRenderingPhysicsThe FutureConclusion
  42. 42. • height map이 아닌 volume으로 표현 – 표현할 수 있는 영역을 넓힌다.• voxel, cell, volume, block, region 설명• LOD, material 여러 개 사용 등을 살펴 봄

×