Custom culling rules can be set in C++:
There’s this renderer module method that makes the renderer to use the specified custom culling rules:
void IRendererModule::RegisterCustomCullingImpl(ICustomCulling* impl) = 0;
you must give it an object that inherits from this interface (a culling query factory):
class ICustomCulling
{
public:
virtual ICustomVisibilityQuery* CreateQuery (const FSceneView& View) = 0;
};
The CreateQuery()'s returned object will be used to perform the actual custom visibility check, it must be inherited from ICustomVisibilityQuery interface:
class ICustomVisibilityQuery: public IRefCountedObject
{
public:
/* prepares the query for visibility tests */
virtual bool Prepare() = 0;
/* test primitive visiblity */
virtual bool IsVisible(int32 VisibilityId, const FBoxSphereBounds& Bounds) = 0;
/* return true if we can call IsVisible from a ParallelFor */
virtual bool IsThreadsafe()
{
return false;
}
};
If all you need a “never culled object” i think Prepare() can be left empty and IsThreadsafe() can return true (to make the culling run in multiple threads which is faster).