If you have your schedule already created in other project management software, you may auto convert it using Ifc4D: https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.7.0/src/ifc4d - the proprietary "big three" are already covered.
I've personally used ProjectLibre for basic schedules. It's simple and you can pick it up without any training, but lacks many more advanced features that the big three have. It doesn't have an Ifc4D converter yet though.
You can also create your schedule within the BlenderBIM Add-on interface itself. See Scene Properties > IFC Costing and Schedule. It works very much like other project management software and I've trained others familiar with existing software very quickly on it, yet it's not quite "as slick" and doesn't have an gantt chart visible at all times (you need to press a button to show it) which is not very pleasant. It works, though. Lots of QoL work still to be done.
Animation-wise there are two types of 4D animation in our industry: fancy marketing explanatory ones, for which Blender is more than capable and I've used it on large commercial jobs (and won some too!), and more technical "schedule-connected" generated animations, which I also use at work (and for some projects it's a staple!). The BlenderBIM Add-on has basic generation capabilities with speed controls and so on. It won't yet create the timeline overlay though, but it does generate an auto-updating date text. I've used this quite a bit at work too. If you're good with Blender you can do quite a few things that the proprietary tools can't do.
Or you can script it yourself. This'll get you started for scripting the schedule generation. You can even script custom animation yourself, and use the existing animation generation code as a starting point. I know of a huge commercial project which has written a lot of custom Blender IFC animation code and is using it very successfully.
import datetime
import ifcopenshell
import ifcopenshell.api
import blenderbim.tool
def add_task(model, name, predecessor, work_schedule):
task = ifcopenshell.api.run("sequence.add_task", model, work_schedule=work_schedule)
task.Name = name
task.PredefinedType = “CONSTRUCTION”
task_time = ifcopenshell.api.run("sequence.add_task_time", model, task=task)
ifcopenshell.api.run(
"sequence.edit_task_time", model, task_time=task_time,
attributes={"ScheduleStart": datetime.date(2022, 1, 1), "ScheduleDuration": "P1W"}
)
if predecessor:
ifcopenshell.api.run("sequence.assign_sequence", model, relating_process=predecessor, related_process=task) # defaults to an FS relationship
return task
model = blenderbim.tool.Ifc.get() # model = ifcopenshell.open('whatever.ifc')
schedule = ifcopenshell.api.run("sequence.add_work_schedule", model, name="Construction")
task = add_task(model, "Site est.", None, schedule)
start_task = task # Life is simpler if you know your start task
# Example of building a building storey by storey
for storey in model.by_type("IfcBuildingStorey"):
name = f"Construct {storey.Name}"
task = add_task(model, name, task, schedule)
for product in ifcopenshell.util.element.get_decomposition(storey):
ifcopenshell.api.run("sequence.assign_product", model, relating_product=product, related_object=task)
ifcopenshell.api.run("sequence.cascade_schedule", model, task=start_task) # Notice we didn't care much about explicit dates / etc, you can if you want to, but this'll also autocalculate it all for you.
ifcopenshell.api.run("sequence.recalculate_schedule", model, work_schedule=schedule) # Critical path, float, etc