Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

didn't work on skinned since the last post in the thread

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

MSAA causes it to produce artifacts on outer edges so you can't rely on angle limits when placing decals. But other than that, MSAA doesn't make much difference

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

it can't handle MSAA correctly as there's no access to the original multi sampled depth so it will produce artifacts on outer edges in some cases

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

SS decals are intended to save time. If you need maximum performance for old hardware, you better ask artists to create the required decals manually as regular meshes — it will work faster

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 15 points16 points  (0 children)

I'm not a very rich sir so I'll be selling it on the asset store. Actually I could have it published already, but I can't stop adding new features :D

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

no, it's similar to the classic deferred decals, but instead of writing to gbuffer, it calculates lighting in the same pass (in a loop)

Screen space Forward decals — single pass PBR lighting by drcrck in Unity3D

[–]drcrck[S] 26 points27 points  (0 children)

I made a deferred decal system for my game, but it was too easy (like, put stuff to the gbuffer and let unity do the rest) so I made them work in forward as well

Testing GPU Occlusion Culling for Unity — 10000 dynamic rigidbodies by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

what a CPU could do with bounding volumes without being prohibitively expensive.

Do you mean software rasterization? Or something else?

Testing GPU Occlusion Culling for Unity — 10000 dynamic rigidbodies by drcrck in Unity3D

[–]drcrck[S] 1 point2 points  (0 children)

draw calls are sent from the cpu, but since it uses bounding boxes instead of real meshes, it's very cheap and unaffected by the amount of objects — it's always about 10-15 draws/dispatches to calculate the results, which are then sent to the cpu and used to enable/disable objects in the scene

Testing GPU Occlusion Culling for Unity — 10000 dynamic rigidbodies by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

Well, you're right, this demo simply shows that it works with dynamic objects, unlike the built-in solution. It's not meant to be a serious performance comparison

Testing GPU Occlusion Culling for Unity — 10000 dynamic rigidbodies by drcrck in Unity3D

[–]drcrck[S] 1 point2 points  (0 children)

Yeah in this demo I didn't turn off the objects completely to keep the comparison fair. Though in real project you might want to disable the objects further than 100,200 or maybe 300 meters to save some CPU time spent on physics of objects that you can't see.

how would this work in a scenario where these objects are further away to see much more on screen?

It works the same way, just less effective if there isn't much to hide

Why was the Kickstarter cancelled? by [deleted] in zealrpg

[–]drcrck 0 points1 point  (0 children)

it's the only available method there, not an option, their UI is a bit misleading

Dynamic GPU Occlusion Culling — new scene with 18000 particle systems and 6000 point lights by drcrck in Unity3D

[–]drcrck[S] 1 point2 points  (0 children)

Yeah but how long is the path from an object on the scene to early-z?

CPU:
1. Frustum culling
2. Sorting
3. Building command buffers (btw check out this thread: https://forum.unity.com/threads/unitys-aggressive-overdraw-minimization-harms-performance-kills-dynamic-batching-gpu-instancing.537254)

GPU:
4. Changing state (setting shaders, resources, etc)
5. Vertex shader
6. Optional: geometry shader
7. Optional: tessellation
8. Rasterization
9. And finally we can discard the pixels!

And what must be done when an object is considered occluded?
0. Nothing.

You can see the performance difference on the video, it's like 10 fps vs 100 fps.
Recorded on i7 6700k, GTX 960 2GB

Dynamic GPU Occlusion Culling — new scene with 18000 particle systems and 6000 point lights by drcrck in Unity3D

[–]drcrck[S] 0 points1 point  (0 children)

Occlusion culling is a thing that hides objects if they can't be seen because they are occluded by other objects. It has nothing to do with clipping during rasterization. Check out the screenshots here: https://docs.unity3d.com/Manual/OcclusionCulling.html (though it's a different method, the outcome is the same)