Portal rendering / culling module for Godot
Go to file
2020-01-14 11:22:24 +00:00
images Delete lportal_boxrooms.jpg 2019-10-23 11:22:54 +01:00
config.py Add files via upload 2019-09-11 08:09:36 +01:00
INSTRUCTIONS_SINGLEROOM.md Update INSTRUCTIONS_SINGLEROOM.md 2019-11-25 18:19:59 +00:00
INSTRUCTIONS.md Update INSTRUCTIONS.md 2020-01-09 14:14:08 +00:00
larea.cpp More realtime support 2019-11-19 10:29:53 +00:00
larea.h More realtime support 2019-11-19 10:29:53 +00:00
lbitfield_dynamic.cpp Dynamic objects now working 2019-09-13 19:15:25 +01:00
lbitfield_dynamic.h Dynamic objects now working 2019-09-13 19:15:25 +01:00
lbound.cpp Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
lbound.h Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
ldae_exporter.cpp External lightmap workflow working 2019-12-03 15:50:30 +00:00
ldae_exporter.h External lightmap workflow working 2019-12-03 15:50:30 +00:00
ldebug.cpp More realtime support 2019-11-19 10:29:53 +00:00
ldebug.h Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
ldob.cpp Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
ldob.h Added option to use Godot hide instead of detach from scene tree 2020-01-09 14:08:27 +00:00
lhelper.cpp External lightmap workflow working 2019-12-03 15:50:30 +00:00
lhelper.h External lightmap workflow working 2019-12-03 15:50:30 +00:00
LICENSE Initial commit 2019-09-11 08:04:27 +01:00
lmain_camera.cpp More realtime support 2019-11-19 10:29:53 +00:00
lmain_camera.h More realtime support 2019-11-19 10:29:53 +00:00
lplanes_pool.cpp Improved pool 2019-09-25 07:48:35 +01:00
lplanes_pool.h Improved pool 2019-09-25 07:48:35 +01:00
lportal_all.cpp Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
lportal.cpp Switch portal plane normal convention 2020-01-08 19:18:06 +00:00
lportal.h Switch portal plane normal convention 2020-01-08 19:18:06 +00:00
lroom_converter.cpp Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
lroom_converter.h Auto bounds now created with qhull 2020-01-09 13:35:50 +00:00
lroom_manager.cpp teleport message changed to LPRINT 2020-01-14 11:22:24 +00:00
lroom_manager.h Added option to use Godot hide instead of detach from scene tree 2020-01-09 14:08:27 +00:00
lroom.cpp More realtime support 2019-11-19 10:29:53 +00:00
lroom.h More realtime support 2019-11-19 10:29:53 +00:00
lscene_saver.cpp Working with box rooms demo 2019-10-22 20:44:17 +01:00
lscene_saver.h Working with box rooms demo 2019-10-22 20:44:17 +01:00
ltrace.cpp Camera dob updated in frame update 2020-01-14 11:17:59 +00:00
ltrace.h More realtime support 2019-11-19 10:29:53 +00:00
lvector.h More realtime support 2019-11-19 10:29:53 +00:00
OCCLUSION_CULLING.md Update OCCLUSION_CULLING.md 2019-11-26 12:27:05 +00:00
README.md Update README.md 2020-01-09 14:33:19 +00:00
register_types.cpp Refactor LRooms and LPortals to no longer be part of scene graph 2019-09-15 15:39:01 +01:00
register_types.h Add files via upload 2019-09-11 08:09:36 +01:00
SCsub Properly deal with duplicate verts in portal geometry 2020-01-07 18:16:54 +00:00

godot-lportal

Portal rendering / Occlusion culling module for Godot 3.2

You can either use LPortal as a full occlusion culling system if you can create your level as rooms and portals, or use it in a simplified single room mode to speed up culling in any 3d level.

Note that this is a Work in progress. Feel free to try out the latest version (master) but recognise that the API may change as I move towards first release.

plane_lines

Video of initial testing:
https://www.youtube.com/watch?v=uVwLltiouBs
https://www.youtube.com/watch?v=xF_3Fe2HRdk
https://www.youtube.com/watch?v=NmlWkkhGoJA

Features

  • Support for dynamic objects (DOBs)
  • Dynamic lights
  • Optional auto-generation of room bound convex hulls
  • Internal lightmapping workflow (for baking lights in Godot)
  • External lightmapping workflow (for baking lights in Blender etc)
  • Single room mode (for non-portalled levels)

Demos / Tutorials

https://github.com/lawnjelly/lportal-demos

Feel free to leave suggestions / feature requests on the issue tracker, especially regarding ease of use.

Current status

As everything is now basically working, I am currently working on a small demo / test first person shooter game. This is helping me find bugs / add usability features as I go.

Instructions

Roadmap

  • Auto conversion of named room spatials and portal mesh instances to LRoom and LPortal DONE

  • Auto creation of mirror portals DONE

  • Recursive determine visibility DONE

  • Prevent memory allocations (use pools for plane vectors) DONE

  • Add support for objects moving between rooms - cameras, players, physics etc - DONE

  • Handle special cases (multiple portals views into room etc) DONE

  • Optimize non-moving statics DONE

  • Optional convex hull bound for rooms DONE

  • Auto convex hull bound generation DONE

  • Add debug graphical view of portal planes DONE

  • Add debug graphical view of room bounds DONE

  • Dealing with shadows from objects outside of view DONE

  • Universal visibility query for camera and dynamic lights DONE

  • Support for global directional lights (like the sun) DONE

  • Internal baked lightmap workflow DONE

  • External baked lightmap workflow DONE

  • Switchable culling method DONE

  • Bug fixing / testing ONGOING

  • Demo game ONGOING

  • Shadow caster optimization

  • Closable portals

  • PVS (primary and secondary)

Installation

You will need to compile Godot from source (for now). See: http://docs.godotengine.org/en/3.0/development/compiling/index.html

Once the engine is compiling okay on your system, to add the module:

  • Create a folder inside godot/modules called 'lportal'
  • Clone / download this repository as a zip file and place the files in the lportal folder
  • Compile the engine as normal, it should automatically pick up the lportal module
  • Note that to export to other platforms you will also have to compile export templates for those platforms

You will know the installation was successful when you see a new Node type 'LRoomManager' in the Godot IDE.