Introduction
VersionWhat 1.0.2is [wip]Pragma?
Filmmaker
LuxCoreRenderPragma is a free, open source custom game engine written in C++. Here is an overview over some of its core features:
AddedSupportvolumetricforlightingvariousoptionsSource Engine and Source 2 assets, such as: maps, models, materials, textures, sound-script files and particle systemsAddedExtensivesubdivisionmoddingoptionssupport with Lua (with Live-coding, debugging-support with the ZeroBrane IDE, support formaterialscustom shaders, custom entities/weapons/NPCs/vehicles, etc)Added optionSupport forenablingPBR (physically based rendering)- Support for the Cycles-renderer (the same as used by Blender)
- Multiplayer-support, including dedicated servers
- Steam Workshop support
- VR support
- Support for the Bullet and PhysX physics engines
- Support for OpenGL and Vulkan
- AI-system based on behavior trees
- Entity-component-system
- Steam Audio support for
PhotonGIspatialcacheaudio - etc.
Pragma is currently in an early beta, some features may not be fully functional at the moment or are unfinished/experimental.
Lua
AddedCompositeComponent:GetEntities, :GetRootGroup, :AddChildGroup, :GetChildGroups
Version
Pragma 1.0.1also [2021-06-22]ships
with the Pragma Filmmaker, v0.4.2
an Improveopenretargetingsourceperformancealternative FixtovarioustheretargetingSourceissuesGeneral retargeting improvementsUpdate default material hair settings
Filmmaker.
Engine
You
AddedcanupdateduseLuathedocumentationBook Navigation on the left to navigate to the next page, which has details on how to download andZeroBraneinstallconfigurationPragma.filesUpdated "lua_help" documentation databaseAdded "TF2" and "HL1" demo gamemodesFixed random crashes on some hardwareFixed issue where game could freeze permanently during shutdownFixed Lua JIT-Compiler not being enabledFixed importing glTF models saving material files in wrong locationFixed exporting maps not working in some cases whentop Fixed crash on startup with certain launch parametersFixed automatic asset reloading on asset file change not workingFixed issue where Steam locations wouldn't get mounted properly on new Steam installationsAdded additional crash dump debug informationTransitioned AI-nav file-format to UDM systemTransitioned Lua documentation file-format to UDM system
Lua
AddedSkeleton:IsRootBonestring parameter overloadAddedSkeleton:GetBoneHierarchyAddedphys.Transform.IDENTITY,:GetAngles,:SetAngles,:GetForward,:GetRight,:GetUp,.x,.y,.z,.pitch,.yaw,.roll,phys.ScaledTransform.IDENTITYAddedCompositeComponent:ClearEntitiesAddEVENT_UPDATE_BONE_POSESandEVENT_ON_BONE_POSES_FINALIZEDanimated component eventsAddedtable.copyAddedengine.library_existsAddedents.PlayerComponent:SetFlashlightEnabled,:ToggleFlashlight,:IsFlashlightEnabledGeneral LuaDoc improvements
Version 0.9.15 [2021-05-30]
Filmmaker v0.4.1
Added console commands:pfm_max_fps,pfm_asset_icon_sizeAdded bone visualization to retarget editorRetarget rigs can now be auto-generated from existing rigs if a match can be foundVarious retargeting improvementsFixed "hair" settings in material editor not workingFixed PFM not showing up in new game menuFixed material editor and explorer not working properly
Engine
Added console commands:udm_validate,asset_clear_unused,asset_clear_unused_textures,asset_clear_unused_models,asset_clear_unused_materials,cache_version_target,loc_reloadAdded launch option:-audio_api <audioApi>Added game mount priority optionsPhysics engine can now be toggled betweenPhysXandBulletBulletis now the default physics engineAudio engine is now implemented as a module (can be changed in options)Assets are now automatically cleared from memory when not in useTransition particle system format to UDMFixed entities appearing invisible in some casesFixed various character animation issuesFixed character eyes not working correctly if entity is scaledFixed issue where models with a "." in the name could not get imported properlyFixed maps not being rendered if map was compiled without BSPFixed crash when generating reflection probesFixed crash when loading map with invalid world modelFixed various crash instancesFixed various shader/rendering issues
Lua
Addeddebug.beepanddebug.printAddedphys.CollisionObject:SetAlwaysAwake,:IsAlwaysAwakeAddedmath.map_value_to_fractionandmath.map_value_to_rangeAddedlocale.set_textAddedcompositeandanimated2entity componentsAddedutil.DirectoryChangeListenerclassAddedanimation.Channel,.Slice,.Animation2,.Pose,.PlayerclassesAddedents.Entity:SetUuidAddedents.RenderComponent:GetRenderModePropertyAddedents.EyeComponent:GetEyePoseAddedudm.PropertyWrapper:GetChildCount, :HasValueand :ToAsciiAddedents.AnimatedComponent:GetLayeredAnimations,:ApplyLayeredAnimationsAddedgame.Model.Animation:GetBoneIdAddedents.IteratorFilterModelAddedasset.delete,.determine_type_from_extension,.get_legacy_extension, .get_binary_udm_extension, .get_ascii_udm_extension, .determine_format_from_data, .determine_format_from_filename, .matches, .relative_path_to_absolute_path, .absolute_path_to_relative_path, .get_udm_format_extension, .get_asset_root_directory, .exists, .find_file, .is_loadedAddedfile.find_absolute_pathAdded new overloadright forfile.remove_file_extensionotherwith parameter to specify which extensions to removeAddedudm.AssetData:SetDataAddedgui.find_focused_window,gui.get_primary_window,gui.find_window_under_cursor,gui.get_base_elements,gui.add_base_elementAddedgui.Element:GetRootElement,:GetRootWindowAddedshader.BasePbrbase classAddedprosper.create_window,prosper.WindowCreateInfoandprosper.WindowclassesFixedents.Entity:SetEnabledLua binding not behaving correctly in certain casesScripts loaded withlua_execandlua_exec_clnow auto reload when changed (Unless"nocache" argument is set)util.register_classnow defines a default constructor and tostring methodutil.register_classnow returns class object (or nil) instead of boolean
Version 0.9.14 [21-04-16]
Filmmaker
Added animation and flex retargeting systemTransform widget can now be toggled between world/local/view spaceAdded basic posing and animating capabilitiesImproved hair rendering quality with LuxCoreRenderAdded hair configuration options to material editorAdded live raytracing preview
Engine
Added "util_export_asset" option to export assets to Source Engine model/material/texture format with optional fake pbr conversionTransitioned asset file formats to UDM systemAdded console commands: "udm_convert", "save", "crash", "debug_render_memory_budget" and "debug_render_memory_stats"Exporting model with glTF exporter now includes additional UV setstopics (such aslightmaptheUVs)API Fixeddocumentationrareforrandomdevelopers).deadlock issueAdded entity UUIDs to uniquely identify entitiesAdded additional crash dump debug information
Lua
Addedasset.get_supported_extensions, asset.export_texture_as_vtf, asset.TYPE_MAPAddedents.GetUuid, ents.AttachableComponent:GetBoneAddedQuaternion:DistanceAdded classents.IteratorFilterUuidAddedudmlibraryAddedgame.get_materialAddedutil.BSPTree.Node:GetIndexAddedgame.Material:ResetAddedgame.Model.Animation.Load,game.Model.FlexAnimation.LoadAddedgame.Model.Mesh.Sub:CopyAddedgame.Model.Animation:GetBoneIdAddedgame.Model.Eyeball:GetUpperLidFlexIndices,:GetUpperLidFlexAngles,:GetLowerLidFlexIndices,:GetLowerLidFlexAngles,:GetUpperLidFlexIndexand:GetLowerLidFlexIndexAddedgame.Model.FCOPY_BIT_FLEX_ANIMATIONSflagAddedents.ModelComponent:GetBodyGroups,:SetBodyGroupsAddedents.AnimatedComponent:GetBaseAnimationFlags,:SetBaseAnimationFlags,:GetLayeredAnimationFlags,:SetLayeredAnimationFlags,ents.AnimatedComponent:SetAnimatedRootPoseTransformEnabled,:IsAnimatedRootPoseTransformEnabled, :AddRootPoseBone,:SetRootPoseBoneId,:GetRootPoseBoneIdandents.AnimatedComponent.FPLAYANIM_LOOPAddedents.LightComponent:SetMorphTargetsInShadowsEnabled,:AreMorphTargetsInShadowsEnabled, .BakeSettings.globalLightIntensityFactorand.import_lightmap_atlasAddedents.ReflectionProbeComponent:GetIBLMaterialFilePath,:CaptureIBLReflectionsFromSceneand:RequiresRebuildAddedprosper.ImageCreateInfo:FLAG_ALLOCATE_DISCRETE_MEMORY_BIT,FLAG_DONT_ALLOCATE_MEMORY_BIT,FLAG_SRGB_BIT,FLAG_NORMAL_MAP_BITAddedprosper.Image:IsSrgb,:IsNormalMap,:SetSrgb,:SetNormalMapand:ConvertAddedprosper.Mesh:ClearBuffersAddedents.LightMapComponent:SetLightmapAtlasAddedents.RenderComponent:ClearBuffersRemovedgame.Model.Eyeball:GetUpperFlexDesc,:GetLowerFlexDesc,:GetUpperTarget,:GetLowerTarget,.lowerLidFlexDescand.upperLidFlexDesc
Version 0.9.13 [2021-03-14]Media
Filmmaker
Fully integrated LuxCoreRenderAdded support for transparent backgrounds/skies when rendering with LuxCoreRenderAdded new render tool commands (LuxCoreRender only):preview: Creates a preview image of what's been rendered so far and opens it in the default image programpause: Pauses the current renderresume: Resumes the current renderstop: Stops the render and uses what's been rendered so far to generate the final imagesuspend: Creates a .rsm-file, which can be used to continue the render at a later dateexport: Exports the entire scene in a LuxCoreRender format (including models and textures), which can be used to render it with thestandalone LuxCoreRender program
Fixed issue where importing textures via drag-and-drop would not generate mipmaps
Engine
Updatedbuild instructionsMorph targets now affect shadowsIncreased bone limit from 512 to 1024Added console commands "strip_weapons" and "cl_render_frustum_culling_enabled"Reduced number of entities with unnecessary tick/logic events to improve performanceCharacters now blink if no eyeballs are defined in the model, but blink flex controllers existAddedUDMdata format for unifying asset file formatsFixed issue where viewmodel entities would use incorrect field of viewFixed viewmodel not appearing in some cases if viewmodel was changed after weapon was deployedChanged entity component net event system so net events no longer have to be registered on the serverbeforethey are registered on the clientMerged cengine with client library and engine with shared
Lua
Removed gamemode system and replaced it with gamemode entity componentsAllows changing gamemodes on the fly, as well as running multiple different gamemodes at the same time
Added "player" and "gamemode" entity component types (and sub-directories)All entity components can now have individual tick/logic events instead of relying on the logic componentAddedudmlibrary for loading/saving/working with udm assetsAddedents.ModelComponent:GetBodyGroupsand:SetBodyGroupsAddedmath.Quaternion:DistanceAddedents.PhysicsComponent:EnableCollisions,:DisableCollisions,:SetCollisionsEnabled,:SetSimulationEnabledand:IsSimulationEnabledAddedents.CharacterComponent:SetMoveControllerand:GetMoveControllerAddedutil.DataStream:WriteVertex,:ReadVertexAddedVector:GetYawand:GetPitchAddedutil.generate_uuid_v4Addedents.register_component_net_eventAddedents.AttachableComponent.FATTACHMENT_MODE_FORCE_TRANSLATION_IN_PLACE,FATTACHMENT_MODE_FORCE_ROTATION_IN_PLACEandFATTACHMENT_MODE_FORCE_IN_PLACE
Version 0.9.12 [2021-02-08]
Filmmaker
Added support for rendering withLuxCoreRenderAdded fur rendering options with LuxCoreRender
Engine
Massive general performance improvementsAdded automatic rendering instancing systemAdded flex animation systemAdded new bloom/glow implementationAdded lightmap baking with CyclesAdded console commandsdebug_render_octree_dynamic_find,debug_render_stats,render_vsync_enabled,render_draw_static,render_draw_dynamic,render_translucent,cl_render_shadow_lod_bias,render_queue_worker_thread_count,debug_textures,sky_override,render_queue_entities_per_worker_job,render_queue_worker_jobs_per_batch,render_instancing_thresholdandrender_instancing_enabledFixed issue where camera would move upwards continuously in fullscreen windowed resolution modeFixed first LOD being skipped when importing Source Engine modelsFixed model LODs not workingFixed various crash bugsFixed bone scaling not working correctly in some cases
Lua
Addedents.RenderComponent:GetLocalRenderBounds,ents.RenderComponent:GetLocalRenderSphereBounds,ents.RenderComponent:GetAbsoluteRenderBounds,ents.RenderComponent:GetAbsoluteRenderSphereBounds,ents.RenderComponent:SetLocalRenderBounds,ents.RenderComponent:ShouldCastShadows,ents.RenderComponent:ShouldDraw,ents.RenderComponent:ShouldDrawShadow,ents.RenderComponent.EVENT_ON_RENDER_MODE_CHANGEDandents.RenderComponent.EVENT_UPDATE_INSTANTIABILITYAddedutil.DataBlock:GetVector2Addedgame.Material.detail_blend_mode_to_enumandgame.Material.DetailBlendModeenumsAddedents.SceneComponent:GetRenderQueue,ents.SceneComponent:BuildRenderQueueandents.SceneComponent.CreateInfoAddedmath.Vector:ToScreenUvAddedgame.set_default_game_render_enabled,game.is_default_game_render_enabled,game.render_scenes,game.set_debug_render_filterandgame.update_render_buffersAddedgame.RENDER_FLAG_TRANSLUCENT_BITAddedutil.ImageBuffer:SwapChannelsAddedprosper.get_api_identifier,prosper.get_api_abbreviation,prosper.wait_for_current_swapchain_command_buffer_completion,prosper.create_primary_command_bufferandprosper.create_secondary_command_bufferAddedprosper.CommandBuffer:FlushAddedgame.DrawSceneInfo.FLAG_FLIP_VERTICALLY_BIT,game.DrawSceneInfo.FLAG_DISABLE_RENDER_BITandgame.DrawSceneInfo.flagsAdded classesgame.RenderQueue,game.DepthStageRenderProcessor,game.LightingStageRenderProcessor,shader.GameWorld,game.Model.FlexAnimationandgame.Model.FlexAnimation.FrameAddedents.ModelComponent:SetMaxDrawDistance,ents.ModelComponent:GetMaxDrawDistanceandents.ModelComponent.EVENT_ON_RENDER_MESHES_UPDATEDAddedents.AnimatedComponent:AreSkeletonUpdateCallbacksEnabled,ents.AnimatedComponent:SetSkeletonUpdateCallbacksEnabled,ents.AnimatedComponent.EVENT_ON_SKELETON_UPDATED,ents.AnimatedComponent.EVENT_ON_BONE_MATRICES_UPDATEDandents.AnimatedComponent.EVENT_ON_BONE_BUFFER_INITIALIZEDAddedutil.BSPTree:FindLeafNodesInAABBAddedents.LightmapComponent.bake_lightmaps,ents.LightmapComponent:SetExposure,ents.LightmapComponent:GetExposure,ents.LightmapComponent:GetExposurePropertyandents.LightmapComponent.BakeSettingsAddedents.FlexComponent:PlayFlexAnimation,ents.FlexComponent:StopFlexAnimation,ents.FlexComponent:GetFlexAnimationCycle,ents.FlexComponent:SetFlexAnimationCycleandents.FlexComponent:SetFlexAnimationPlaybackRateAddedgame.Model:GetFlexAnimations,game.Model:GetFlexAnimationNames,game.Model:GetFlexAnimationCount,game.Model:AddFlexAnimation,game.Model:LookupFlexAnimation,game.Model:GetFlexAnimation,game.Model:GetFlexAnimationName,game.Model:ClearFlexAnimations,game.Model:RemoveFlexAnimation,game.Model.AddFlexControllerId,game.Model.SetFlexControllerValue,game.Model.LookupLocalFlexControllerIndex,game.Model:GetLODandgame.Model.Mesh:RemoveSubMeshAddedgame.RasterizationRenderer:ReloadPresentationRenderTargetAddedfile.to_relative_pathAddedgeometry.calc_point_on_triangleandgeometry.calc_triangle_areautil.save_imagenow has an option for saving cubemap texturesRemovedents.SceneComponent:PrepareRender,ents.TransformComponent:GetPosProperty,ents.TransformComponent:GetRotationProperty,ents.TransformComponent:GetScaleProperty,game.draw_scene,ents.RenderComponent:GetRenderBounds,ents.RenderComponent:SetRenderBounds,ents.RenderComponent:GetRenderSphereBounds,ents.RenderComponent:GetRenderModeProperty,ents.RenderComponent:SetDepthBias,ents.RenderComponent:GetDepthBias,game.DrawSceneInfo.flipVerticallyandents.RenderComponent.RENDERMODE_AUTOChanged parameters ofents.SceneComponent:Renderandents.RenderComponent:UpdateRenderBuffers
Version 0.9.11 [2020-11-11]
Filmmaker
Cycles render settings are now saved with the projectChanged frame render order when rendering animations with external render tool for easier quality controlAdded support for detail maps when rendering with CyclesFixed emission textures having no effect when rendering with CyclesFixed IOR value being set improperly when opening material in material editorFixed material editor not updating properly when switching to a different materialFixed HDR output format not working properly when rendering with CyclesChanged default gamma correction value when rendering with Cycles to 2.2 (was 2.4 before)
Engine
Added support for$detail,$detailscale,$detailblendfactor,$detailblendmodeand$detailtintVMT parametersAdded CS: GO to default game mount listFixed issue where entities with morph target animations would get visually corrupted if they were made invisible and then visible againFixed issue where ingame cursor position would mismatch actual cursor position in fullscreen windowed resolution modeFixed issue where camera would move upwards continuously in fullscreen windowed resolution mode
Lua
Replaced classgame.Scenewithents.SceneComponentAddedents.SceneComponent.OcclusionCullingMethodenumsAddedgame.Material.DetailBlendModeenumsAddedgame.Material.detail_blend_mode_to_enumAddedents.SceneComponent:SetOcclusionCullingMethodAddedgame.Model:GetBodyGroupMeshAddedgame.Material:SetShaderAddedents.Entity:GetBodyGroupand:SetBodyGroupoverloads for body group IDsAddedents.BaseEntityComponent:Save,ents.BaseEntityComponent:Loadandents.BaseEntityComponent:CopyAddedents.Entity:RemoveFromAllScenesandents.Entity:AddChildAddeddebug.breakpoint(Only available if-luaextwas specified in the launch options)Addedmath.Mat4:ApplyProjectionDepthBiasOffsetAddedents.RenderComponent:SetReceiveShadowsandents.RenderComponent:IsReceivingShadowsAddedents.EyeComponent:ClearViewTargetAddedutil.DataBlock:GetVector2Renamedgame.create_scenetoents.create_sceneutil.removenow has a second argument for removing objects safely (if available)tobooleanandtointnow accept numbers and booleans as argumentsChanged parameter order ofents.create_prop
Version
Filmmaker
Added Cycles option for setting the number of frames to the end of a clip or sessionRender jobs now take up a lot less disk space for animations (static geometry is now stored shared instead of every frame)Slightly improved overall rendering speedFixed rendering taking up your entire CPU resources when rendering with your GPUFixed an issue where rendering several times consecutively could slow your PC down to a crawlFixed VR renders being flipped horizontallyFixed a denoising issue which caused less than optimal denoising qualityFixed issue where the tiles in the final image would have mismatching sample counts and some tiles would be lower quality as a resultFixed render preview not being interactable when rendering VR imagesFixed potential crash when doing a preview render with the Vulkan renderer being used
Engine
Minor occlusion culling performance optimizationsGreatly improved reflection probe rendering speedFixed issue where entities would get rendered with error materials if their skin would exceed the max skin count of their modelFixed bone scaling not working correctlyFixed massive performance hit for light sources that cast shadows in the past, but had shadow casting disabledFixed BSP occlusion culling not working for imported Source Engine mapsFixed meshes not being rendered if entity skin exceeds maximum skin countImproved lightmap implementationVarious minor bug fixes and improvementsImproved loading times when starting a game
Lua
Added classutil.VersionAddedexecAddedents.create_propAddedents.AnimatedComponent:SetBindPoseandents.AnimatedComponent:GetBindPoseAddedents.LightMapComponent:UpdateLightmapUvBuffers,ents.LightMapComponent:ReloadLightmapDataandents.LightMapComponent:SetLightmapAtlasAddedents.LightMapReceiverComponent:UpdateLightmapUvDataAddedgui.Element:InjectMouseClickandgui.Element:InjectKeyPressAddedents.Entity:IsDisabledandents.Entity:IsTurnedOffAddedutil.Path:CreateFilePathandutil.Path:CreatePathAddedents.MapComponent:GetMapIndexAddedents.AnimatedComponent:PlayAnimationoverloads for playing animations by idAddedutil.DataBlock:ToStringAddedgame.Model.Frame:Copy,game.Model.Skeleton.Bone:IsAncestorOfandgame.Model.Skeleton.Bone:IsDescendantOfAddedmath.calc_average_rotationAddedfile.strip_illegal_filename_charactersAddedgame.Model.Mesh:GetReferenceIdAddedgame.Model.Mesh.Sub:FlipTriangleWindingOrder,:SetVertexCount,:SetIndexCount,:AddUVSet,:GetUVSetNames,:SetVertexTangentand:HasUVSetAddedstring.hashAdded new overload forgame.Model.Mesh.Sub:GetUVs,:SetVertexUV,:GetVertexUVwith UV set parameterChanged argument format forutil.pack_zip_archiveRenamedents.AnimatedComponent:GetBindPosetoents.AnimatedComponent:GetBoneBindPoseutil.removenow accepts a table as argumentfile.writenow automatically creates the file path if it doesn't existFile write operations now accept paths that include "addons/<addonName>/" as prefix