I’d like to show you what i’ve been working on in my free time.
Easy Cull (working title) is an alternative frustum culling system which i’ve already used in many game prototypes.
To explain the system to you, let me show you a little screenshot:
Objects that are within the culling sphere AND within the camera view frustum will be rendered. Everything else will be hidden. The objects can either pop in/out or smoothly fade in/out (adjustable).
Fading does only work with shaders supporting alpha blending (e.g. transparent shaders).
Objects that should be culled are “cached” before the game starts.
You are also able to define tags for objects which you want to cull.
The reason why i wrote Easy Cull is because i wanted to avoid visible assembly of the horizon (especially when using terrains) while still being able to cull everything else.
Webplayer demos (hit the button to activate Easy Cull): 3D Demo 2D Demo
Hah, being a 3D guy i’ve never thought about using this with 2D scenes until now. Thanks for asking!
Technically it should be doable, i’ll do some tests and will let you know how it worked out.
I think the fading in should be less noticeable or faster. Otherwise, looks good. I’d buy it already(I’d think an asset like this would do well at 10-15 dollars).
Thanks for the feedback, the fading speed can be modified from within the inspector.
I’ll try to expose some of the settings for you in the demo so that you will be able to test it a little bit more.
Once I’ve completed my todo list (which hopefully won’t take too long), i’ll put the package on the AS.
Right now i’m implementing support for dynamic objects (instantiated at runtime).
I’ve updated my first post with videos showing the setup of Easy Cull (excuse my bad english, i am not a native speaker).
The webplayer builds have also been updated with support for instantiated objects.
I’ll now continue with writing the manual / documentation.
Once this is done, i’ll release Easy Cull on the Asset Store for 10 dollars (introductory price).
It could be a lot faster to check sphere-to-sphere (your sphere with object renderer’s bounding sphere) intersection manually, depending on scene complexity. It require only one IF check and will not require the presence of Collider on each object that you want to cull. Did you try it?
And what about realtime shadows? After all, the volume occupied by Collider is not the same as Collider + shadow. It may cause an incorrect appearance / disappearance of object’s shadows.
Thank you for your suggestion.
I’ve already managed to get rid of the collider requirement and i’ll include it in the final build
As for realtime shadows: i’ve already seen this behavior before, but to be honest i have no idea on how to overcome this problem. I’ll make sure to mention this in the documentation though.
Why not make it so instead of showing right inside the camera view, it shows just outside of it, so things load before the player sees them, showing shadows and all.
Yep, looks like we both had a similar idea, this is what i have right now:
Basically i am using a 2nd orthographic camera (which renders nothing) and its frustum area in conjunction with the main camera’s frustum + culling sphere.
I’ve tested it with Unity’s Stealth Game project (because that’s the project where i first saw the realtime shadow problems) and so far it’s very promising. I’ve been able to reduce the amount of realtime shadows popping in/out to a minimum
Only with a workaround. You will need to add a mesh renderer component to the point light’s game object AND enable “Disable Game Object”. See the attached screenshot below.
Hi again! I’ve applied Easy Cull to a vehicle. I have a rotating camera for when I reverse, the AI that I have placed in the cull are not being seen when the camera is looking behind, only in front. Is there a boundry that only culls the front?
I’m guessing I may need to add another camera, but facing the other way, or will using the 2D Easy Cull with a 360 view frustrum work on a 3D game?
Hi Julian,
please send me your invoice number in a private message and I will assist you in fixing this problem. I already have an idea of what might be wrong here.