Jump to content
  • entries
    940
  • comments
    5,894
  • views
    863,957

Beta update available with deferred decals


Josh

3,978 views

 Share

An update is now available on the beta branch.

 

A new decal entity type is available. Decals are used to project an image into surrounding geometry. A decal requires a material using a decal shader, located in the "Shaders\Decals" folder. The FPSGun.lua script has been updated to add bullet marks and gunshot wounds to objects a bullet hits. You can also place a decal in a map for adding large details to walls, terrain, or anything else.

 

blogentry-1-0-35862900-1438109550_thumb.jpg

 

Decals are rendered similarly to the way a deferred light works; they are rendered onto the screen gbuffer. This allows them to work on any geometry, including animated models and GPU-generated details like tessellation. They will also map onto any surface, based on the direction of the surface normal. There are two new commands, Decals::Create() and Decal::SetRenderMode().

 

Because decals render onto the scene gbuffer, a way to differentiate pixels is needed. Otherwise, a scene decal will appear on objects that pass through that area. The Decal::SetRenderMode(int mode) command can be used to indicate whether a decal should be a static scene decal (mode=0) or a dynamic decal, like for a bullet mark (mode=1). Materials also have a new parameter for their decal mode, which can be 0 (static), 1 (dynamic), or 2 (none).

 

The blending of decals required that I modify the channel allocation of the gbuffer, and the lighting and model shaders have changed. Previously, data was stored like this:

0: Diffuse RGBA

1: Normal XYZ, specular

2: Emission RGB, material flags

 

Now the gbuffer is storing information as follows:

0: Diffuse RGBA

1: Normal XYZ, material flags

2: Emission RGB, specular

 

Any modified model shaders or shaders that are rendered before lighting need to be changed to accommodate this change, as well as any post-processing effects that read the specular value or material flags.

 

Particle emitters will now use simple collision if the emitter has a collision type other than zero. This is a nice touch that makes bullet shrapnel bounce off floors instead of going straight through.

 

I previously talked about four big features I was researching, terrain tessellation, terrain horizontal offsets, deferred decals, and vegetation. I made headway on each of these, but discovered that deferred decals were fairly easy to wrap up, while the other three features were more involved. Based on this development, I am revising my plan to release a new version in August with decals and the other recent improvements, then focus on finishing the vegetation system for a subsequent update. The important thing is to have the final update with vegetation out by November 1, at the latest, although that could end up being much sooner if things go smoothly.

 

I also expect to release the game launcher in August, as an early preview release on Steam.

 

(Build #691949 was update to #711604.)

  • Upvote 8
 Share

12 Comments


Recommended Comments

The FPSGun script sets blood decals to mode 1, which means the material has to have the same decal mode to accept them. Therefore, any character materials should use decal mode = 1 for blood to show up on them.

 

For vectronic, this will add some nice burn marks on the walls, and you can make sparks flying off the impact spot. Use the directional rotation setting to make sparks, then they will bounce off the walls and floors. It will look really good.

 

You need to update your project to get new materials and shaders.

Link to comment

I mostly want them for the indicator lights. Before, I had planes that were raised a smitch off the ground. But I'll look into those other uses and ideas as I'm in the process of giving the balls a new identity :)

Link to comment

Only had a quick look before work and my first impressions of the decals are really good. Would have had more time but had a few shaders to update like Shadmars vegetation one, but that was quick enough to do.

 

Looking forward to looking at the particles with collision.

 

Thanks!

Link to comment

You can use an alpha channel in the diffuse texture and set the blend mode to alpha. You could also add a new shader that performs an alpha discard.

Link to comment

Decals look good and work quite well. I am getting very bad performance after this update though (10-15 fps less than before the update) and can't seem to do anything to make it better.

Link to comment

It is possible that decals could make it run slower if any are visible in the scene, but when none are present the FPS should be the same as before.

Link to comment

Other than updating shaders I haven't changed or added anything. It seems like the terrain rendering is much slower because my games without a terrain have the same performance as before.

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...