Sample shader and component for mesh decals aka floaters#1587
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Mesh decals aka floaters or floating geometry is often used to add details to meshes without complicating the underlying geometry and uv mapping.
This PR adds a sample shader that uses a depth offset to ensure floaters are always rendered on top of the underlying geometry. The depth offset is in depth units so there won't be any z-fighting even when viewed from far away.
Furthermore the sample shader utilizes the runtime decal atlas to allow variation between mesh instances with increasing the number of draw calls. The shader works in tandem with the mesh decal component which allows the user to select arbitrary textures that will then be put into the runtime decal atlas. The component feeds the runtime decal indices as custom data per instance to the shader.
The shader uses the integer part of the UV coordinates to identify which decal slot should be used. There can be up to 8 slots per mesh:
The sample shader only supports base color from the runtime decal atlas and an additional alpha texture per material. The shader and also the component is meant as a starting point and can be customized to the individual needs of the user.