Sumaili - Creating Tools Pipeline
Sumaili - Creating Tools Pipeline
Dissatisfied Users
Far behind our competition
The CoreText Format
Written in Python
And many more…
Debug UI
In-game UI framework
Created during Shadow Fall
Placeholder
Conversation Editor
The first steps to a new editor
Where do we begin?
Creating a 3D Editor
Why a 3D Editor?
- New code-path
Longer development
- Visual/behavioral disparity
Integrate full game into editor?
Editor Process
Editor Game
Code Code
In-process integration
+ Fast to setup
Editor Process
+ Direct synchronous data
changes
Editor Game
Code Code
- Crash in game = crash in
editor
In-process integration
+ Fast to setup
Editor Process
+ Direct synchronous data
changes
Editor Game
Code Code
- Instability
- Enforcing code separation
Out of process integration
+ Stability
+ Cleaner code
+ Responsive UI Editor Game
Code Code
Creation is destructive
Shader compilation
Meshes optimization
Data packing
3D Editor: Initial design
EditorNode
Editor Process
Editor Game
Code Code
Making Changes to Objects
What we didn’t want
Proxy representations
String-based accessors
Editor-specific boilerplate
Code Separation
After changes:
Analyzes what has changed between the
snapshot and the current state
DiffUtil – Code Example
Undo System – Reverting Changes
Applying the Undo Transaction
What worked?
Editor Process
Editor Process
Editor Game
Code Code
3D Editor – Applying a change in the tree
MyPrefab
MySpotlight
GeoObject
3D Editor – Applying a change in the tree
MyPrefab multiplies
transform change with it’s
local matrix
MyPrefab
Modified transaction passed
MySpotlight to MySpotLight
GeoObject
3D Editor – Applying a change in the tree
GeoObject
3D Editor – Applying a change in the tree
[Optional]: MyPrefab
invalidates cached data or
updates dependencies
MyPrefab
MySpotlight
GeoObject
Interactive changes
Solution:
Tool does not modify data
Editor keeps authority over data
Undoing tool changes
MyPrefab
Spotlight
GeoObject
GameSync – Analyze change
MyPrefab
Spotlight
CopiedSpotLight
GeoObject
GameSync – Patch file
MyPrefab (modified)
CopiedSpotLight
GameSync - Conversion
MyPrefab (modified)
CopiedSpotLight
GameSync
GameSync
MyPrefab
Spotlight
CopiedSpotLight
GeoObject
GameSync
GameSync – The Good
Inconsistent behavior
Crashes, incomplete updates
Low level of confidence from users
Other Tools
NodeGraph Debugger
NodeGraph Debugger
Python wrapper
Artists and designers can create
scripts manipulate game content
Decima API
Future goals
Everyone at Guerrilla
Special Thanks
Michiel van der Leeuw Olaf Jansen
Jelle van der Beek Bryan Keiren
Ritesh Oedayrajsingh Varma Emile van der Heide
Guido de Haan Remco Straatman
Laurens Simonis Stefan Reek
Kenzo ter Elst Nathan Vos
Johanna Persson
We’re Hiring!
https://www.guerrilla-games.com/join
Contact
[email protected]
Questions?