bevyengine / bevyengine/bevy

Compute Shader Skinning

Open
#7,502 6 comments 4 reactions 0 assignees View on GitHub
A-Rendering C-Feature C-Performance
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 16h
Merged PRs (30d)
171

Description

## What problem does this solve or what need does it fill?

Currently Skinning is recomputed in many passes (prepass, main pass, shadow passes, etc...).

## What solution would you like?

Utilize compute shader skinning where skinning is done beforehand in a compute shader which writes out skinned vertices to a buffer. There are a few advantages to doing this:

- Skinning is only computed once for all passes
- Results in fewer shader permutations since vertex shaders are not specialized on skinning.
- The previous skinned vertex buffers can be kept around for computing the velocity pass (used in TAA, motion blur, etc...)

The use of compute shaders means that WebGL would require a separate skinning implementation.

## Additional context

Article about wicked engine's implementation: https://wickedengine.net/2017/09/09/skinning-in-compute-shader/
Doom Eternal uses this: https://simoncoenen.com/blog/programming/graphics/DoomEternalStudy

Contributor guide

Open the contributing guide

Research direction

The issue names no files or tests, so begin by locating the existing skinning paths for the prepass, main, shadow, and velocity passes. Compare those paths with the referenced compute-shader implementations and account for the separate WebGL requirement. Done means skinning is performed once through the proposed compute path while preserving the stated velocity-pass behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
computer-graphics, game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.