Introduction
VersionWhat 1.0.2is [wip]Pragma?
Filmmaker
v0.4.3

LuxCoreRenderPragma is a free, open source custom game engine written in C++. Here is an overview over some of its core features:
AddedSupport volumetricfor lightingvarious optionsSource Engine and Source 2 assets, such as: maps, models, materials, textures, sound-script files and particle systems
AddedExtensive subdivisionmodding optionssupport with Lua (with Live-coding, debugging-support with the ZeroBrane IDE, support for materialscustom shaders, custom entities/weapons/NPCs/vehicles, etc)
Added optionSupport for enablingPBR (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 PhotonGIspatial cacheaudio
etc.
Pragma is currently in an early beta, some features may not be fully functional at the moment or are unfinished/experimental.
Lua
Added CompositeComponent:GetEntities, :GetRootGroup, :AddChildGroup, :GetChildGroups
Version
Pragma 1.0.1also [2021-06-22]ships
an Improveopen retargetingsource performance
alternative Fixto variousthe retargetingSource issues
General retargeting improvements
Update default material hair settings
Filmmaker.
Engine
You
Addedcan updateduse Luathe documentationBook Navigation on the left to navigate to the next page, which has details on how to download and ZeroBraneinstall configurationPragma.
files
Updated "lua_help" documentation database
Added "TF2" and "HL1" demo gamemodes
Fixed random crashes on some hardware
Fixed issue where game could freeze permanently during shutdown
Fixed Lua JIT-Compiler not being enabled
Fixed importing glTF models saving material files in wrong location
Fixed exporting maps not working in some cases whenClick the map
namebutton has a "." inat the name
top Fixed crash on startup with certain launch parameters
Fixed automatic asset reloading on asset file change not working
Fixed issue where Steam locations wouldn't get mounted properly on new Steam installations
Added additional crash dump debug information
Transitioned AI-nav file-format to UDM system
Transitioned Lua documentation file-format to UDM system
Lua
Added Skeleton:IsRootBone string parameter overload
Added Skeleton:GetBoneHierarchy
Added phys.Transform.IDENTITY, :GetAngles, :SetAngles, :GetForward, :GetRight, :GetUp, .x, .y, .z, .pitch, .yaw, .roll, phys.ScaledTransform.IDENTITY
Added CompositeComponent:ClearEntities
Add EVENT_UPDATE_BONE_POSES and EVENT_ON_BONE_POSES_FINALIZED animated component events
Added table.copy
Added engine.library_exists
Added ents.PlayerComponent:SetFlashlightEnabled, :ToggleFlashlight, :IsFlashlightEnabled
General LuaDoc improvements
Version 0.9.15 [2021-05-30]
Filmmaker v0.4.1
Added console commands: pfm_max_fps, pfm_asset_icon_size
Added bone visualization to retarget editor
Retarget rigs can now be auto-generated from existing rigs if a match can be found
Various retargeting improvements
Fixed "hair" settings in material editor not working
Fixed PFM not showing up in new game menu
Fixed 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_reload
Added launch option: -audio_api <audioApi>
Added game mount priority options
Physics engine can now be toggled between PhysX and Bullet
Bullet is now the default physics engine
Audio engine is now implemented as a module (can be changed in options)
Assets are now automatically cleared from memory when not in use
Transition particle system format to UDM
Fixed entities appearing invisible in some cases
Fixed various character animation issues
Fixed character eyes not working correctly if entity is scaled
Fixed issue where models with a "." in the name could not get imported properly
Fixed maps not being rendered if map was compiled without BSP
Fixed crash when generating reflection probes
Fixed crash when loading map with invalid world model
Fixed various crash instances
Fixed various shader/rendering issues
Lua
Added debug.beep and debug.print
Added phys.CollisionObject:SetAlwaysAwake, :IsAlwaysAwake
Added math.map_value_to_fraction and math.map_value_to_range
Added locale.set_text
Added composite and animated2 entity components
Added util.DirectoryChangeListener class
Added animation.Channel, .Slice, .Animation2, .Pose, .Player classes
Added ents.Entity:SetUuid
Added ents.RenderComponent:GetRenderModeProperty
Added ents.EyeComponent:GetEyePose
Added udm.PropertyWrapper:GetChildCount, :HasValue and :ToAscii
Added ents.AnimatedComponent:GetLayeredAnimations, :ApplyLayeredAnimations
Added game.Model.Animation:GetBoneId
Added ents.IteratorFilterModel
Added asset.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_loaded
Added file.find_absolute_path
Added new overloadright for
file.remove_file_extensionother with parameter to specify which extensions to remove
Added udm.AssetData:SetData
Added gui.find_focused_window, gui.get_primary_window, gui.find_window_under_cursor, gui.get_base_elements, gui.add_base_element
Added gui.Element:GetRootElement, :GetRootWindow
Added shader.BasePbr base class
Added prosper.create_window, prosper.WindowCreateInfo and prosper.Window classes
Fixed ents.Entity:SetEnabled Lua binding not behaving correctly in certain cases
Scripts loaded with lua_exec and lua_exec_cl now auto reload when changed (Unless"nocache" argument is set)
util.register_class now defines a default constructor and tostring method
util.register_class now returns class object (or nil) instead of boolean
Version 0.9.14 [21-04-16]
Filmmaker
Added animation and flex retargeting system
Transform widget can now be toggled between world/local/view space
Added basic posing and animating capabilities
Improved hair rendering quality with LuxCoreRender
Added hair configuration options to material editor
Added live raytracing preview
Engine
Added "util_export_asset" option to export assets to Source Engine model/material/texture format with optional fake pbr conversion
Transitioned asset file formats to UDM system
Added 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 as
lightmapthe UVs)API Fixeddocumentation rarefor randomdevelopers).
deadlock issue
Added entity UUIDs to uniquely identify entities
Added additional crash dump debug information
Lua
Added asset.get_supported_extensions, asset.export_texture_as_vtf, asset.TYPE_MAP
Added ents.GetUuid, ents.AttachableComponent:GetBone
Added Quaternion:Distance
Added class ents.IteratorFilterUuid
Added udm library
Added game.get_material
Added util.BSPTree.Node:GetIndex
Added game.Material:Reset
Added game.Model.Animation.Load, game.Model.FlexAnimation.Load
Added game.Model.Mesh.Sub:Copy
Added game.Model.Animation:GetBoneId
Added game.Model.Eyeball:GetUpperLidFlexIndices, :GetUpperLidFlexAngles, :GetLowerLidFlexIndices, :GetLowerLidFlexAngles, :GetUpperLidFlexIndex and :GetLowerLidFlexIndex
Added game.Model.FCOPY_BIT_FLEX_ANIMATIONS flag
Added ents.ModelComponent:GetBodyGroups, :SetBodyGroups
Added ents.AnimatedComponent:GetBaseAnimationFlags, :SetBaseAnimationFlags, :GetLayeredAnimationFlags, :SetLayeredAnimationFlags, ents.AnimatedComponent:SetAnimatedRootPoseTransformEnabled, :IsAnimatedRootPoseTransformEnabled, :AddRootPoseBone, :SetRootPoseBoneId, :GetRootPoseBoneId and ents.AnimatedComponent.FPLAYANIM_LOOP
Added ents.LightComponent:SetMorphTargetsInShadowsEnabled, :AreMorphTargetsInShadowsEnabled, .BakeSettings.globalLightIntensityFactor and .import_lightmap_atlas
Added ents.ReflectionProbeComponent:GetIBLMaterialFilePath, :CaptureIBLReflectionsFromScene and :RequiresRebuild
Added prosper.ImageCreateInfo:FLAG_ALLOCATE_DISCRETE_MEMORY_BIT, FLAG_DONT_ALLOCATE_MEMORY_BIT, FLAG_SRGB_BIT, FLAG_NORMAL_MAP_BIT
Added prosper.Image:IsSrgb, :IsNormalMap, :SetSrgb, :SetNormalMap and :Convert
Added prosper.Mesh:ClearBuffers
Added ents.LightMapComponent:SetLightmapAtlas
Added ents.RenderComponent:ClearBuffers
Removed game.Model.Eyeball:GetUpperFlexDesc, :GetLowerFlexDesc, :GetUpperTarget, :GetLowerTarget, .lowerLidFlexDesc and .upperLidFlexDesc
Filmmaker
Fully integrated LuxCoreRender
Added support for transparent backgrounds/skies when rendering with LuxCoreRender
Added 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 program
pause: Pauses the current render
resume: Resumes the current render
stop: Stops the render and uses what's been rendered so far to generate the final image
suspend: Creates a .rsm-file, which can be used to continue the render at a later date
export: Exports the entire scene in a LuxCoreRender format (including models and textures), which can be used to render it with the standalone LuxCoreRender program
Fixed issue where importing textures via drag-and-drop would not generate mipmaps
Engine
Morph targets now affect shadows
Increased bone limit from 512 to 1024
Added console commands "strip_weapons" and "cl_render_frustum_culling_enabled"
Reduced number of entities with unnecessary tick/logic events to improve performance
Characters now blink if no eyeballs are defined in the model, but blink flex controllers exist
Added UDM data format for unifying asset file formats
Fixed issue where viewmodel entities would use incorrect field of view
Fixed viewmodel not appearing in some cases if viewmodel was changed after weapon was deployed
Changed entity component net event system so net events no longer have to be registered on the server before they are registered on the client
Merged cengine with client library and engine with shared
Lua
Removed gamemode system and replaced it with gamemode entity components
Allows 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 component
Added udm library for loading/saving/working with udm assets
Added ents.ModelComponent:GetBodyGroups and :SetBodyGroups
Added math.Quaternion:Distance
Added ents.PhysicsComponent:EnableCollisions, :DisableCollisions, :SetCollisionsEnabled, :SetSimulationEnabled and :IsSimulationEnabled
Added ents.CharacterComponent:SetMoveController and :GetMoveController
Added util.DataStream:WriteVertex, :ReadVertex
Added Vector:GetYaw and :GetPitch
Added util.generate_uuid_v4
Added ents.register_component_net_event
Added ents.AttachableComponent.FATTACHMENT_MODE_FORCE_TRANSLATION_IN_PLACE, FATTACHMENT_MODE_FORCE_ROTATION_IN_PLACE and FATTACHMENT_MODE_FORCE_IN_PLACE
Version 0.9.12 [2021-02-08]
Filmmaker
Added fur rendering options with LuxCoreRender
Engine
Massive general performance improvements
Added automatic rendering instancing system
Added flex animation system
Added new bloom/glow implementation
Added lightmap baking with Cycles
Added console commands debug_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_threshold and render_instancing_enabled
Fixed issue where camera would move upwards continuously in fullscreen windowed resolution mode
Fixed first LOD being skipped when importing Source Engine models
Fixed model LODs not working
Fixed various crash bugs
Fixed bone scaling not working correctly in some cases
Lua
Added ents.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_CHANGED and ents.RenderComponent.EVENT_UPDATE_INSTANTIABILITY
Added util.DataBlock:GetVector2
Added game.Material.detail_blend_mode_to_enum and game.Material.DetailBlendMode enums
Added ents.SceneComponent:GetRenderQueue, ents.SceneComponent:BuildRenderQueue and ents.SceneComponent.CreateInfo
Added math.Vector:ToScreenUv
Added game.set_default_game_render_enabled, game.is_default_game_render_enabled, game.render_scenes, game.set_debug_render_filter and game.update_render_buffers
Added game.RENDER_FLAG_TRANSLUCENT_BIT
Added util.ImageBuffer:SwapChannels
Added prosper.get_api_identifier, prosper.get_api_abbreviation, prosper.wait_for_current_swapchain_command_buffer_completion, prosper.create_primary_command_buffer and prosper.create_secondary_command_buffer
Added prosper.CommandBuffer:Flush
Added game.DrawSceneInfo.FLAG_FLIP_VERTICALLY_BIT, game.DrawSceneInfo.FLAG_DISABLE_RENDER_BIT and game.DrawSceneInfo.flags
Added classes game.RenderQueue, game.DepthStageRenderProcessor, game.LightingStageRenderProcessor, shader.GameWorld, game.Model.FlexAnimation and game.Model.FlexAnimation.Frame
Added ents.ModelComponent:SetMaxDrawDistance, ents.ModelComponent:GetMaxDrawDistance and ents.ModelComponent.EVENT_ON_RENDER_MESHES_UPDATED
Added ents.AnimatedComponent:AreSkeletonUpdateCallbacksEnabled, ents.AnimatedComponent:SetSkeletonUpdateCallbacksEnabled, ents.AnimatedComponent.EVENT_ON_SKELETON_UPDATED, ents.AnimatedComponent.EVENT_ON_BONE_MATRICES_UPDATED and ents.AnimatedComponent.EVENT_ON_BONE_BUFFER_INITIALIZED
Added util.BSPTree:FindLeafNodesInAABB
Added ents.LightmapComponent.bake_lightmaps, ents.LightmapComponent:SetExposure, ents.LightmapComponent:GetExposure, ents.LightmapComponent:GetExposureProperty and ents.LightmapComponent.BakeSettings
Added ents.FlexComponent:PlayFlexAnimation, ents.FlexComponent:StopFlexAnimation, ents.FlexComponent:GetFlexAnimationCycle, ents.FlexComponent:SetFlexAnimationCycle and ents.FlexComponent:SetFlexAnimationPlaybackRate
Added game.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:GetLOD and game.Model.Mesh:RemoveSubMesh
Added game.RasterizationRenderer:ReloadPresentationRenderTarget
Added file.to_relative_path
Added geometry.calc_point_on_triangle and geometry.calc_triangle_area
util.save_image now has an option for saving cubemap textures
Removed ents.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.flipVertically and ents.RenderComponent.RENDERMODE_AUTO
Changed parameters of ents.SceneComponent:Render and ents.RenderComponent:UpdateRenderBuffers
Version 0.9.11 [2020-11-11]
Filmmaker
Cycles render settings are now saved with the project
Changed frame render order when rendering animations with external render tool for easier quality control
Added support for detail maps when rendering with Cycles
Fixed emission textures having no effect when rendering with Cycles
Fixed IOR value being set improperly when opening material in material editor
Fixed material editor not updating properly when switching to a different material
Fixed HDR output format not working properly when rendering with Cycles
Changed default gamma correction value when rendering with Cycles to 2.2 (was 2.4 before)
Engine
Added support for $detail, $detailscale, $detailblendfactor, $detailblendmode and $detailtint VMT parameters
Added CS: GO to default game mount list
Fixed issue where entities with morph target animations would get visually corrupted if they were made invisible and then visible again
Fixed issue where ingame cursor position would mismatch actual cursor position in fullscreen windowed resolution mode
Fixed issue where camera would move upwards continuously in fullscreen windowed resolution mode
Lua
Replaced class game.Scene with ents.SceneComponent
Added ents.SceneComponent.OcclusionCullingMethod enums
Added game.Material.DetailBlendMode enums
Added game.Material.detail_blend_mode_to_enum
Added ents.SceneComponent:SetOcclusionCullingMethod
Added game.Model:GetBodyGroupMesh
Added game.Material:SetShader
Added ents.Entity:GetBodyGroup and :SetBodyGroup overloads for body group IDs
Added ents.BaseEntityComponent:Save, ents.BaseEntityComponent:Load and ents.BaseEntityComponent:Copy
Added ents.Entity:RemoveFromAllScenes and ents.Entity:AddChild
Added debug.breakpoint (Only available if -luaext was specified in the launch options)
Added math.Mat4:ApplyProjectionDepthBiasOffset
Added ents.RenderComponent:SetReceiveShadows and ents.RenderComponent:IsReceivingShadows
Added ents.EyeComponent:ClearViewTarget
Added util.DataBlock:GetVector2
Renamed game.create_scene to ents.create_scene
util.remove now has a second argument for removing objects safely (if available)
toboolean and toint now accept numbers and booleans as arguments
Changed parameter order of ents.create_prop
Version
0.9.10
Filmmaker
Added Cycles option for setting the number of frames to the end of a clip or session
Render 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 speed
Fixed rendering taking up your entire CPU resources when rendering with your GPU
Fixed an issue where rendering several times consecutively could slow your PC down to a crawl
Fixed VR renders being flipped horizontally
Fixed a denoising issue which caused less than optimal denoising quality
Fixed issue where the tiles in the final image would have mismatching sample counts and some tiles would be lower quality as a result
Fixed render preview not being interactable when rendering VR images
Fixed potential crash when doing a preview render with the Vulkan renderer being used
Engine
Minor occlusion culling performance optimizations
Greatly improved reflection probe rendering speed
Fixed issue where entities would get rendered with error materials if their skin would exceed the max skin count of their model
Fixed bone scaling not working correctly
Fixed massive performance hit for light sources that cast shadows in the past, but had shadow casting disabled
Fixed BSP occlusion culling not working for imported Source Engine maps
Fixed meshes not being rendered if entity skin exceeds maximum skin count
Improved lightmap implementation
Various minor bug fixes and improvements
Improved loading times when starting a game
Lua
Added exec
Added ents.create_prop
Added ents.AnimatedComponent:SetBindPose and ents.AnimatedComponent:GetBindPose
Added ents.LightMapComponent:UpdateLightmapUvBuffers, ents.LightMapComponent:ReloadLightmapData and ents.LightMapComponent:SetLightmapAtlas
Added ents.LightMapReceiverComponent:UpdateLightmapUvData
Added gui.Element:InjectMouseClick and gui.Element:InjectKeyPress
Added ents.Entity:IsDisabled and ents.Entity:IsTurnedOff
Added util.Path:CreateFilePath and util.Path:CreatePath
Added ents.MapComponent:GetMapIndex
Added ents.AnimatedComponent:PlayAnimation overloads for playing animations by id
Added util.DataBlock:ToString
Added game.Model.Frame:Copy, game.Model.Skeleton.Bone:IsAncestorOf and game.Model.Skeleton.Bone:IsDescendantOf
Added math.calc_average_rotation
Added file.strip_illegal_filename_characters
Added game.Model.Mesh:GetReferenceId
Added game.Model.Mesh.Sub:FlipTriangleWindingOrder, :SetVertexCount, :SetIndexCount, :AddUVSet, :GetUVSetNames, :SetVertexTangent and :HasUVSet
Added string.hash
Added new overload for game.Model.Mesh.Sub:GetUVs, :SetVertexUV, :GetVertexUV with UV set parameter
Changed argument format for util.pack_zip_archive
Renamed ents.AnimatedComponent:GetBindPose to ents.AnimatedComponent:GetBoneBindPose
util.remove now accepts a table as argument
file.write now automatically creates the file path if it doesn't exist
File write operations now accept paths that include "addons/<addonName>/" as prefix