godot-lportal/README.md

86 lines
4.2 KiB
Markdown
Raw Normal View History

2019-09-11 09:04:27 +02:00
# godot-lportal
2019-11-28 13:29:46 +01:00
Portal rendering / Occlusion culling module for Godot 3.2
2019-11-20 13:20:07 +01:00
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.
2019-11-26 21:47:21 +01:00
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.
2019-09-18 14:33:19 +02:00
2019-10-23 12:22:22 +02:00
![plane_lines](images/lportal_boxrooms3.jpg)
2019-09-23 12:29:07 +02:00
2019-09-16 19:07:22 +02:00
Video of initial testing:\
2019-10-22 21:51:58 +02:00
https://www.youtube.com/watch?v=uVwLltiouBs \
2019-09-16 19:07:22 +02:00
https://www.youtube.com/watch?v=xF_3Fe2HRdk \
2019-09-16 19:06:34 +02:00
https://www.youtube.com/watch?v=NmlWkkhGoJA
2019-09-15 20:38:42 +02:00
2020-01-09 15:33:19 +01:00
### 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)
2019-10-22 21:51:58 +02:00
### Demos / Tutorials
https://github.com/lawnjelly/lportal-demos
2019-10-09 12:33:19 +02:00
_Feel free to leave suggestions / feature requests on the issue tracker, especially regarding ease of use._
2019-09-15 20:36:47 +02:00
2019-09-14 13:10:48 +02:00
## Current status
2020-03-08 10:07:57 +01:00
8 March 2020 - I've identified a breaking bug in the DOB visibility caused by the assumptions from the data coming from godot. It turns out when DOBs are hidden I can't retrieve their position etc from the Godot node, so I'm having to change the API for DOBs and dynamic lights so you pass the position manually each update. I've tested and this works, I just have to polish this up more before pushing to the repository here.
So for now if you are testing I would advise not using the DOB functionality, and just not culling your DOBs for now (aside from for the camera, which should work fine). I should have the fixed version finished in the not too distant future.
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.
2019-11-20 11:42:05 +01:00
2020-02-15 09:39:30 +01:00
Note I'm also currently rewriting the Godot 2d GLES renderer in core, so that has to take priority until it is working.
2019-11-20 13:16:28 +01:00
## Instructions
2019-11-26 21:48:33 +01:00
* [OVERVIEW](OCCLUSION_CULLING.md)
2019-11-26 13:29:06 +01:00
* [INSTRUCTIONS](INSTRUCTIONS.md)
* [INSTRUCTIONS for single room mode](INSTRUCTIONS_SINGLEROOM.md)
2019-11-20 13:16:28 +01:00
* [TUTORIAL](https://github.com/lawnjelly/lportal-demos/tree/master/Tutorial-Simple)
2019-09-14 13:10:48 +02:00
2019-09-11 21:23:17 +02:00
## Roadmap
* Auto conversion of named room spatials and portal mesh instances to LRoom and LPortal DONE
* Auto creation of mirror portals DONE
2019-09-12 17:29:01 +02:00
* Recursive determine visibility DONE
2019-09-12 21:14:52 +02:00
* Prevent memory allocations (use pools for plane vectors) DONE
2019-09-13 20:26:52 +02:00
* Add support for objects moving between rooms - cameras, players, physics etc - DONE
2019-09-15 20:33:15 +02:00
* Handle special cases (multiple portals views into room etc) DONE
2019-09-16 16:38:52 +02:00
* Optimize non-moving statics DONE
2019-09-17 15:31:37 +02:00
* Optional convex hull bound for rooms DONE
2020-01-09 15:33:19 +01:00
* Auto convex hull bound generation DONE
2019-09-23 12:22:47 +02:00
* Add debug graphical view of portal planes DONE
2019-09-23 13:32:09 +02:00
* Add debug graphical view of room bounds DONE
2019-12-03 17:31:16 +01:00
* Dealing with shadows from objects outside of view DONE
2019-11-18 10:22:08 +01:00
* Universal visibility query for camera and dynamic lights DONE
2019-12-03 17:31:16 +01:00
* Support for global directional lights (like the sun) DONE
* Internal baked lightmap workflow DONE
* External baked lightmap workflow DONE
2020-01-09 15:33:19 +01:00
* Switchable culling method DONE
2019-09-17 15:31:37 +02:00
* Bug fixing / testing ONGOING
2019-11-18 10:22:08 +01:00
2020-01-09 15:33:19 +01:00
* Demo game ONGOING
2019-10-14 16:43:12 +02:00
* Shadow caster optimization
2019-09-16 16:38:52 +02:00
* Closable portals
2019-09-15 17:25:43 +02:00
* PVS (primary and secondary)
2019-09-12 17:29:01 +02:00
2019-09-16 16:45:06 +02:00
## Installation
2020-02-26 14:29:33 +01:00
2020-02-26 14:32:37 +01:00
For convenience to trial LPortal I have provided a win64 build under the 'releases' tab in github. However, note that for production use (on multiple platforms) you will currently have to compile from source.
I will work on increasing the number of builds for different platforms.
2020-02-26 14:29:33 +01:00
## Compiling from source
See:
2019-09-16 16:45:06 +02:00
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.