Skip to content

micklemacklemore/vkGrassRendering

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vulkan Grass Rendering

Grass.Normal.mp4

University of Pennsylvania, CIS 5650: GPU Programming and Architecture, Project 3 - CUDA Path Tracer

  • Michael Mason
  • Tested on: Windows 11, Ryzen 9 5900HS @ 3.00GHz 16GB, RTX 3080 (Laptop) 8192MB

This is a small Vulkan project that implements a grass simulation.

The implementation is based on Responsive Real-Time Grass Rendering for General 3D Scenes by Jahrmann & Wimmer.

Physics Sim / Forces

Gravity + Recovery

Recording 2024-10-31 at 22 18 32

Wind

Recording 2024-10-31 at 22 20 15

Culling Methods

Orientation

Recording 2024-10-31 at 22 24 01

Frustum

Recording 2024-10-31 at 22 26 36

Distance

Recording 2024-10-31 at 22 28 39

Performance Analysis

Lower is Better

No Culling, Orientation, Frustum and Distance

The graph above represents the effect of different culling methods for rendering grass in Vulkan. We measured miliseconds per frame against number of grass blades.

Culling by Orientation: this represents the culling occurs when grass blades (which are infinitely flat) are perpendicular to the camera. In the shader, we cull those grass blades within a certain threshold of 90 degrees

Culling by Frustum: This represents culling that occurs when grass blades are outside of the camera frustum. In the shader we cull those blades.

Culling by distance: This represents culling grass blades that are of a certain distance. After 10 units, every 10th blade is culled. After 40 units, every 2nd blade is culled and after 50 units, all blades are culled.

Without any culling, rendering times increase sharply with blade count, reaching 178.32 milliseconds at 4,194,304 blades. Orientation Culling, which removes blades perpendicular to the camera, provides moderate improvement, reducing the time to 123.23 milliseconds at the highest count. Frustum Culling, which discards blades outside the camera's view, achieves a similar but slightly less effective reduction to 156.2 milliseconds. Distance Culling, however, proves to be the most impactful, reducing the frame time to 75.89 milliseconds by progressively removing distant blades, especially effective in large fields where far-off details contribute minimally to visual quality.

While distance culling appears to be the winner here, be mindful that the tests done are dependant on the camera's position and orientation to the grass. It's likely more tests are needed to accurately measure performance of culling.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 90.6%
  • CMake 5.1%
  • GLSL 4.0%
  • C 0.3%