SlideShare uma empresa Scribd logo
1 de 110
Creating a Tools Pipeline for Horizon Zero Dawn
Dan Sumaili Senior Tools Programmer Guerrilla
Sander van der Steen Principal Tools Programmer Guerrilla
Takeaways
 Insight into why we rebuilt our tools
 How we did it during production
 How it paid off
Overview
 Our legacy tools
 Rebuilding the tools
 Building a 3D Editor
 Editing data
 Other tools
 Where we are today
In the beginning… (Nov 2013)
 We had fragmented tools
 Mix of languages & frameworks
 Long iteration times (20-30 mins.)
 Dissatisfied Users
 Far behind our competition
The CoreText Format
 Intermediate plaintext format
 Used for most data
 Except Textures and Audio
 Converted to binary for game
CoreText Editor
CoreText Editor
 Used to create & configure
game data
 Written in C#, WinForms, ATF
 Absurdly complex code
Maya Plugin
Maya Plugin
 Exports Maya data to .CoreText
 Used Decima’s Renderer
 C++, Python, Maya API
 Killzone Shadow Fall Art Tools
 http://www.gdcvault.com/play/1020711
State Machine Editor – ‘SMED’
State Machine Editor – ‘SMED’
 Node-based State Machine editor
 Generates LUA script
 Maintained by a Technical Designer
 Written in Python
And many more…
Debug UI
 In-game UI framework
 Created during Shadow Fall
 Programmers found it easy to use
 Led to many in-game debug tools
Horizon Zero Dawn
 Horizon was new for us
 New types of content
 Tools team was small
 Had to use time and resources efficiently
Horizon Zero Dawn
 The old ways would not scale
 We must begin again…
Tools Goals: Code
 Create a Framework to build Tools
 Re-use Decima engine libs
 Making tools should be easy
Tools Goals: Editor
 Users need tools that fit their
work
 Discipline-specific ‘Editing Contexts’
 Built from reusable components
 User should be able to stay in
one Program
 Decima Editor
Decima Engine
 Data Serialization & Deserialization
 Runtime Type Introspection (RTTI)
 File I/O, Networking, Threads, Jobs
 Image Readers & Writers
 Compression, Hashing, Algorithms
 Unit Testing Framework
Level Editor
Visual Script Editor
Placeholder
Conversation Editor
The first steps to a new editor
Where do we begin?
 Production is getting started
 Users already have tools that
they’re familiar with
 We would need to start small and
and minimize risk
Where do we begin?
 We decided to focus on the Audio
Team
 A small group of users with
specific needs
 Their workflow could be used to
test the Framework’s viability
Where do we begin?
 The Audio Team primarily worked with NodeGraphs
 NodeGraph is our High Performance Visual Scripting
language
 Generates native C++ code, that runs on target
 Proven tech, used for audio in Killzone: Shadow Fall
 http://www.gdcvault.com/play/1020559 [Varga, Woldhek 2014]
CoreText Editor
NodeGraph: Prototype #1
NodeGraph: Prototype #2
Node Graph Editor Context
Node Graph Editor
 We reached feature parity within a
few months
 New features could be
implemented easily
 Programmers from other teams
could also contribute
A new workflow for Game Design
Creating a 3D Editor
Why a 3D Editor?
 Maya not suitable for quest content
 3D Editor was urgently needed
 Focus on Object placement & creation
Integrate sub-systems or full game?
Integrate only sub-systems into Editor?
+ Purpose build, controllable
+ Fast
- New code-path
Longer development
- Visual/behavioral disparity
Integrate full game into editor?
+ All game systems available
+ DebugUI (tools) for free
+ Single code path (play/edit)
- Overhead of running game
3D Editor – Architecture
Due to time constraints:
Integrate full game into Editor
How to integrate a full game into Editor?
In process? Out of process?
Game
Code
Editor Process
Editor
Code
In-process integration
+ Fast to setup
+ Direct synchronous data
changes
- Crash in game = crash in
editor
Game
Code
Editor Process
Editor
Code
Game
Code
Editor Process
Editor
Code
In-process integration
+ Fast to setup
+ Direct synchronous data
changes
- Instability
- Enforcing code separation
Out of process integration
+ Stability
+ Cleaner code
+ Responsive UI
- Longer initial development
- Harder to debug 2
asynchronous processes
Game
Code
Editor
Code
3D Editor: Initial design
 Develop in-process with a
full game
 Goal: Out of process should
remain possible
Editing content in a running game
Required sub-systems for Level Editor
Game data
 Problem: Game reads binary game data
 Creation is destructive
 Shader compilation
 Meshes optimization
 Data packing
3D Editor: Initial design
EditorNode
 Provides all editing functionality for an
object in game
 Game object does not know of Editor
Node
 Keeps code clean, no editor specific
code interwoven in game code
Only WorldSpace in-game
 Problem: Less hierarchy in game
 Flat list of objects
 Fast and efficient
 Transforms in World Space
EditorNodeTree
 Hierarchical structure of in-game data
 Constructed from game data, reflects
hierarchy of objects in-game.
 When entering “edit mode”
 Top down (starting at root)
Accessing the EditorNodeTree
2 Editor Node Trees
Game
Code
Editor Process
Editor
Code
Making Changes to Objects
What we didn’t want
 Proxy representations
 String-based accessors
 Editor-specific boilerplate
 Code generation steps in the build
What we wanted
 Work directly with concrete objects
 Directly modify object members
 Re-use existing systems and utilities
to create and transform data
Making changes to objects
 Being able to make changes is
good, but…
“What is best in life?”
 An Undo system is essential for
users to remain in control and have
the freedom to experiment
Undo System - Goals
 Simplicity & Reliability
 No virtual ‘Do’ and ‘Undo’ functions
 No new undo code for new features
 Prevent transformation asymmetry
Undo System
 The ideal scenario:
 An undo system that automatically detects object
changes, and knows how to revert them
 The compromise, in our case:
 Beforehand, code indicates which objects will be
modified, and when the modifications are completed
Undo System - Transactions
 Describes all modifications in a change
 Commands represent individual changes
 Built on the RTTI system
 Subscribers are notified of all transactions
Transaction Notifications
Transaction Notifications
 Code Separation
 Changes can be made from anywhere
 No knowledge of do and undo in editor
code
Undo System - DiffUtil
 Building transactions is hard
 DiffUtil builds them
 Produces transactions by looking at
changes that have already happened
Undo System - DiffUtil
 Before changes are made:
 DiffUtil takes snapshot of objects’ state
 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?
 A reliable, transparent system that can
represent arbitrarily complex changes
 No distinction between do and undo
 Stable code, that changed very little
in the time since it was written
What didn’t work?
 Easy for programmers to forget to use
a DiffUtil
 Transactions validated in Debug
 But this doesn’t catch everything
 Doesn’t support filesystem operations
Transactions in the 3D Editor
Changes in the 3D Editor
 Transactions to the Game
EditorNodeTree in space conversion
Editor Process
Game
Code
Editor Process
Editor
Code
3D Editor – Applying a change in the tree
 Modify local space of
MySpotlight
MyPrefab
MySpotlight
GeoObject
3D Editor – Applying a change in the tree
 MyPrefab multiplies
transform change with it’s
local matrix
 Modified transaction passed
to MySpotLight
MyPrefab
MySpotlight
GeoObject
3D Editor – Applying a change in the tree
 MySpotlight consumes the
change
 The modified transaction is
in WorldSpace
MyPrefab
MySpotlight
GeoObject
3D Editor – Applying a change in the tree
 [Optional]: MyPrefab
invalidates cached data or
updates dependencies
MyPrefab
MySpotlight
GeoObject
Interactive changes
 Problem: Interactive changes start in-game
 Orientate an object in viewport
 Painting vegetation
 Terrain sculpting
 Etc.
Naïve implementation of tool change
 (Tool) Transactions from the Game ?
Naïve implementation of tool change
 (Tool) Transactions from the Game ?
Naïve implementation of tool change
 Who has authority over data?
 Impossible due to dataloss in conversion
 Creates a cycle going back to game
Tool changes
Solution:
 Tool does not modify data
 Editor keeps authority over data
Undoing tool changes
Undo works the same way!
GameSync
Updating structural changes in the game
GameSync
 Gamesync handles structural changes to the
game
 Pre-dates Tools Framework
 Creates patch file to apply in game
GameSync
 Create a copy of Spotlight
MyPrefab
Spotlight
GeoObject
GameSync – Analyze change
MyPrefab
Spotlight
GeoObject
CopiedSpotLight
GameSync – Patch file
MyPrefab (modified)
CopiedSpotLight
GameSync - Conversion
MyPrefab (modified)
CopiedSpotLight
GameSync
GameSync
MyPrefab
Spotlight
GeoObject
CopiedSpotLight
GameSync
GameSync – The Good
 Works on all changes throughout Editor
 Can sync to target as well (PS4)
 No game restart required
GameSync - The Bad
 Systems were not designed to work with GameSync
 The change analysis code became very complex
 Performance issues
 Inconsistent behavior
 Crashes, incomplete updates
 Low level of confidence from users
Other Tools
NodeGraph Debugger
NodeGraph Debugger
 Powerful debugging features
 Variable inspection
 Execution visualization
 Historical debugging
 Minimal involvement from the tools
team
 Almost all of the work was done by
game tech
Interactive Conversations
 A new feature for Horizon
 Free to build a workflow from scratch
 Built specifically for:
 Writers
 Quest designers
 Cinematic artists
Conversation Editor Context
Conversation Generator
 This conversation was auto-generated
 Camera cuts, animation, gestures
selected by rule-based system
 RoboVoice and lip-sync animations
created for mock-up content
Conversation Generator
 Inspired by the work of CD Projekt RED
and BioWare
 Was possible because it was easy to
build in the new framework
 Behind the Scenes of Cinematic
Dialogues in ‘The Witcher 3: Wild Hunt’
 http://www.gdcvault.com/play/1023285/
Profiler
 Built on top of an existing in-game
profiler framework
 Real-time data from any app
running the profiler framework
 Editor runs the profiler framework,
so it can profile itself!
World Map
World Map
 Visualizes game features on a 2D
world map
 Pluggable system for overlays
 Quests
 JIRA bugs
 Came online late in the project, and
wasn’t heavily used
World Map – Perf Report Overlay
Perf Report
Decima API
 C-API to expose Tools Framework
functionality
 File loading/saving
 Object manipulation
 Python wrapper
 Artists and designers can create scripts
manipulate game content
Decima API
Future goals
 Move other teams into new editor
 (VFX, Environment Art, ..)
 Build new Editor Contexts
 Entity editor
 Particle editor
 Shader/Material editor
Future goals
 Rewrite GameSync system
 Take the 3D editor out of process
 Improve UI/UX of the editor
Thanks
 Everyone at Guerrilla
 Special Thanks
 Michiel van der Leeuw
 Jelle van der Beek
 Ritesh Oedayrajsingh Varma
 Guido de Haan
 Laurens Simonis
 Kenzo ter Elst
 Johanna Persson
 Olaf Jansen
 Bryan Keiren
 Emile van der Heide
 Remco Straatman
 Stefan Reek
 Nathan Vos
We’re Hiring!
https://www.guerrilla-games.com/join
Questions?

Mais conteúdo relacionado

Mais de Guerrilla

The Real-time Volumetric Cloudscapes of Horizon Zero Dawn
The Real-time Volumetric Cloudscapes of Horizon Zero DawnThe Real-time Volumetric Cloudscapes of Horizon Zero Dawn
The Real-time Volumetric Cloudscapes of Horizon Zero DawnGuerrilla
 
The Production and Visual FX of Killzone Shadow Fall
The Production and Visual FX of Killzone Shadow FallThe Production and Visual FX of Killzone Shadow Fall
The Production and Visual FX of Killzone Shadow FallGuerrilla
 
Out of Sight, Out of Mind: Improving Visualization of AI Info
Out of Sight, Out of Mind: Improving Visualization of AI InfoOut of Sight, Out of Mind: Improving Visualization of AI Info
Out of Sight, Out of Mind: Improving Visualization of AI InfoGuerrilla
 
The Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow FallThe Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow FallGuerrilla
 
Taking Killzone Shadow Fall Image Quality Into The Next Generation
Taking Killzone Shadow Fall Image Quality Into The Next GenerationTaking Killzone Shadow Fall Image Quality Into The Next Generation
Taking Killzone Shadow Fall Image Quality Into The Next GenerationGuerrilla
 
Killzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemKillzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemGuerrilla
 
Lighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallLighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallGuerrilla
 
A Hierarchically-Layered Multiplayer Bot System for a First-Person Shooter
A Hierarchically-Layered Multiplayer Bot System for a First-Person ShooterA Hierarchically-Layered Multiplayer Bot System for a First-Person Shooter
A Hierarchically-Layered Multiplayer Bot System for a First-Person ShooterGuerrilla
 
Practical Occlusion Culling on PS3
Practical Occlusion Culling on PS3Practical Occlusion Culling on PS3
Practical Occlusion Culling on PS3Guerrilla
 
Release This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release CycleRelease This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release CycleGuerrilla
 
Killzone 2 Multiplayer Bots
Killzone 2 Multiplayer BotsKillzone 2 Multiplayer Bots
Killzone 2 Multiplayer BotsGuerrilla
 
Automatic Annotations in Killzone 3 and Beyond
Automatic Annotations in Killzone 3 and BeyondAutomatic Annotations in Killzone 3 and Beyond
Automatic Annotations in Killzone 3 and BeyondGuerrilla
 
The Creation of Killzone 3
The Creation of Killzone 3The Creation of Killzone 3
The Creation of Killzone 3Guerrilla
 
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case Study
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case StudyThe PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case Study
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case StudyGuerrilla
 
Killzone's AI: Dynamic Procedural Tactics
Killzone's AI: Dynamic Procedural TacticsKillzone's AI: Dynamic Procedural Tactics
Killzone's AI: Dynamic Procedural TacticsGuerrilla
 
The Guerrilla Guide to Game Code
The Guerrilla Guide to Game CodeThe Guerrilla Guide to Game Code
The Guerrilla Guide to Game CodeGuerrilla
 
Practical Occlusion Culling in Killzone 3
Practical Occlusion Culling in Killzone 3Practical Occlusion Culling in Killzone 3
Practical Occlusion Culling in Killzone 3Guerrilla
 
The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2Guerrilla
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Guerrilla
 

Mais de Guerrilla (19)

The Real-time Volumetric Cloudscapes of Horizon Zero Dawn
The Real-time Volumetric Cloudscapes of Horizon Zero DawnThe Real-time Volumetric Cloudscapes of Horizon Zero Dawn
The Real-time Volumetric Cloudscapes of Horizon Zero Dawn
 
The Production and Visual FX of Killzone Shadow Fall
The Production and Visual FX of Killzone Shadow FallThe Production and Visual FX of Killzone Shadow Fall
The Production and Visual FX of Killzone Shadow Fall
 
Out of Sight, Out of Mind: Improving Visualization of AI Info
Out of Sight, Out of Mind: Improving Visualization of AI InfoOut of Sight, Out of Mind: Improving Visualization of AI Info
Out of Sight, Out of Mind: Improving Visualization of AI Info
 
The Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow FallThe Next-Gen Dynamic Sound System of Killzone Shadow Fall
The Next-Gen Dynamic Sound System of Killzone Shadow Fall
 
Taking Killzone Shadow Fall Image Quality Into The Next Generation
Taking Killzone Shadow Fall Image Quality Into The Next GenerationTaking Killzone Shadow Fall Image Quality Into The Next Generation
Taking Killzone Shadow Fall Image Quality Into The Next Generation
 
Killzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo PostmortemKillzone Shadow Fall Demo Postmortem
Killzone Shadow Fall Demo Postmortem
 
Lighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallLighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow Fall
 
A Hierarchically-Layered Multiplayer Bot System for a First-Person Shooter
A Hierarchically-Layered Multiplayer Bot System for a First-Person ShooterA Hierarchically-Layered Multiplayer Bot System for a First-Person Shooter
A Hierarchically-Layered Multiplayer Bot System for a First-Person Shooter
 
Practical Occlusion Culling on PS3
Practical Occlusion Culling on PS3Practical Occlusion Culling on PS3
Practical Occlusion Culling on PS3
 
Release This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release CycleRelease This! Tools for a Smooth Release Cycle
Release This! Tools for a Smooth Release Cycle
 
Killzone 2 Multiplayer Bots
Killzone 2 Multiplayer BotsKillzone 2 Multiplayer Bots
Killzone 2 Multiplayer Bots
 
Automatic Annotations in Killzone 3 and Beyond
Automatic Annotations in Killzone 3 and BeyondAutomatic Annotations in Killzone 3 and Beyond
Automatic Annotations in Killzone 3 and Beyond
 
The Creation of Killzone 3
The Creation of Killzone 3The Creation of Killzone 3
The Creation of Killzone 3
 
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case Study
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case StudyThe PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case Study
The PlayStation®3’s SPUs in the Real World: A KILLZONE 2 Case Study
 
Killzone's AI: Dynamic Procedural Tactics
Killzone's AI: Dynamic Procedural TacticsKillzone's AI: Dynamic Procedural Tactics
Killzone's AI: Dynamic Procedural Tactics
 
The Guerrilla Guide to Game Code
The Guerrilla Guide to Game CodeThe Guerrilla Guide to Game Code
The Guerrilla Guide to Game Code
 
Practical Occlusion Culling in Killzone 3
Practical Occlusion Culling in Killzone 3Practical Occlusion Culling in Killzone 3
Practical Occlusion Culling in Killzone 3
 
The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2The Rendering Technology of Killzone 2
The Rendering Technology of Killzone 2
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2
 

Último

BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 

Último (20)

BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

Creating a Tools Pipeline for Horizon Zero Dawn

  • 1. Creating a Tools Pipeline for Horizon Zero Dawn Dan Sumaili Senior Tools Programmer Guerrilla Sander van der Steen Principal Tools Programmer Guerrilla
  • 2. Takeaways  Insight into why we rebuilt our tools  How we did it during production  How it paid off
  • 3. Overview  Our legacy tools  Rebuilding the tools  Building a 3D Editor  Editing data  Other tools  Where we are today
  • 4. In the beginning… (Nov 2013)  We had fragmented tools  Mix of languages & frameworks  Long iteration times (20-30 mins.)  Dissatisfied Users  Far behind our competition
  • 5. The CoreText Format  Intermediate plaintext format  Used for most data  Except Textures and Audio  Converted to binary for game
  • 7. CoreText Editor  Used to create & configure game data  Written in C#, WinForms, ATF  Absurdly complex code
  • 9. Maya Plugin  Exports Maya data to .CoreText  Used Decima’s Renderer  C++, Python, Maya API  Killzone Shadow Fall Art Tools  http://www.gdcvault.com/play/1020711
  • 10. State Machine Editor – ‘SMED’
  • 11. State Machine Editor – ‘SMED’  Node-based State Machine editor  Generates LUA script  Maintained by a Technical Designer  Written in Python
  • 12.
  • 14. Debug UI  In-game UI framework  Created during Shadow Fall  Programmers found it easy to use  Led to many in-game debug tools
  • 15. Horizon Zero Dawn  Horizon was new for us  New types of content  Tools team was small  Had to use time and resources efficiently
  • 16. Horizon Zero Dawn  The old ways would not scale  We must begin again…
  • 17. Tools Goals: Code  Create a Framework to build Tools  Re-use Decima engine libs  Making tools should be easy
  • 18. Tools Goals: Editor  Users need tools that fit their work  Discipline-specific ‘Editing Contexts’  Built from reusable components  User should be able to stay in one Program  Decima Editor
  • 19.
  • 20. Decima Engine  Data Serialization & Deserialization  Runtime Type Introspection (RTTI)  File I/O, Networking, Threads, Jobs  Image Readers & Writers  Compression, Hashing, Algorithms  Unit Testing Framework
  • 24. The first steps to a new editor
  • 25. Where do we begin?  Production is getting started  Users already have tools that they’re familiar with  We would need to start small and and minimize risk
  • 26. Where do we begin?  We decided to focus on the Audio Team  A small group of users with specific needs  Their workflow could be used to test the Framework’s viability
  • 27. Where do we begin?  The Audio Team primarily worked with NodeGraphs  NodeGraph is our High Performance Visual Scripting language  Generates native C++ code, that runs on target  Proven tech, used for audio in Killzone: Shadow Fall  http://www.gdcvault.com/play/1020559 [Varga, Woldhek 2014]
  • 31. Node Graph Editor Context
  • 32. Node Graph Editor  We reached feature parity within a few months  New features could be implemented easily  Programmers from other teams could also contribute
  • 33. A new workflow for Game Design Creating a 3D Editor
  • 34. Why a 3D Editor?  Maya not suitable for quest content  3D Editor was urgently needed  Focus on Object placement & creation
  • 36. Integrate only sub-systems into Editor? + Purpose build, controllable + Fast - New code-path Longer development - Visual/behavioral disparity
  • 37. Integrate full game into editor? + All game systems available + DebugUI (tools) for free + Single code path (play/edit) - Overhead of running game
  • 38. 3D Editor – Architecture Due to time constraints: Integrate full game into Editor
  • 39. How to integrate a full game into Editor? In process? Out of process? Game Code Editor Process Editor Code
  • 40. In-process integration + Fast to setup + Direct synchronous data changes - Crash in game = crash in editor Game Code Editor Process Editor Code
  • 41. Game Code Editor Process Editor Code In-process integration + Fast to setup + Direct synchronous data changes - Instability - Enforcing code separation
  • 42. Out of process integration + Stability + Cleaner code + Responsive UI - Longer initial development - Harder to debug 2 asynchronous processes Game Code Editor Code
  • 43. 3D Editor: Initial design  Develop in-process with a full game  Goal: Out of process should remain possible
  • 44. Editing content in a running game Required sub-systems for Level Editor
  • 45. Game data  Problem: Game reads binary game data  Creation is destructive  Shader compilation  Meshes optimization  Data packing
  • 47. EditorNode  Provides all editing functionality for an object in game  Game object does not know of Editor Node  Keeps code clean, no editor specific code interwoven in game code
  • 48. Only WorldSpace in-game  Problem: Less hierarchy in game  Flat list of objects  Fast and efficient  Transforms in World Space
  • 49. EditorNodeTree  Hierarchical structure of in-game data  Constructed from game data, reflects hierarchy of objects in-game.  When entering “edit mode”  Top down (starting at root)
  • 51. 2 Editor Node Trees Game Code Editor Process Editor Code
  • 52. Making Changes to Objects
  • 53. What we didn’t want  Proxy representations  String-based accessors  Editor-specific boilerplate  Code generation steps in the build
  • 54. What we wanted  Work directly with concrete objects  Directly modify object members  Re-use existing systems and utilities to create and transform data
  • 55. Making changes to objects  Being able to make changes is good, but… “What is best in life?”  An Undo system is essential for users to remain in control and have the freedom to experiment
  • 56. Undo System - Goals  Simplicity & Reliability  No virtual ‘Do’ and ‘Undo’ functions  No new undo code for new features  Prevent transformation asymmetry
  • 57. Undo System  The ideal scenario:  An undo system that automatically detects object changes, and knows how to revert them  The compromise, in our case:  Beforehand, code indicates which objects will be modified, and when the modifications are completed
  • 58. Undo System - Transactions  Describes all modifications in a change  Commands represent individual changes  Built on the RTTI system  Subscribers are notified of all transactions
  • 60. Transaction Notifications  Code Separation  Changes can be made from anywhere  No knowledge of do and undo in editor code
  • 61. Undo System - DiffUtil  Building transactions is hard  DiffUtil builds them  Produces transactions by looking at changes that have already happened
  • 62. Undo System - DiffUtil  Before changes are made:  DiffUtil takes snapshot of objects’ state  After changes:  Analyzes what has changed between the snapshot and the current state
  • 63. DiffUtil – Code Example
  • 64. Undo System – Reverting Changes
  • 65. Applying the Undo Transaction
  • 66. What worked?  A reliable, transparent system that can represent arbitrarily complex changes  No distinction between do and undo  Stable code, that changed very little in the time since it was written
  • 67. What didn’t work?  Easy for programmers to forget to use a DiffUtil  Transactions validated in Debug  But this doesn’t catch everything  Doesn’t support filesystem operations
  • 68. Transactions in the 3D Editor
  • 69. Changes in the 3D Editor  Transactions to the Game
  • 70. EditorNodeTree in space conversion Editor Process Game Code Editor Process Editor Code
  • 71. 3D Editor – Applying a change in the tree  Modify local space of MySpotlight MyPrefab MySpotlight GeoObject
  • 72. 3D Editor – Applying a change in the tree  MyPrefab multiplies transform change with it’s local matrix  Modified transaction passed to MySpotLight MyPrefab MySpotlight GeoObject
  • 73. 3D Editor – Applying a change in the tree  MySpotlight consumes the change  The modified transaction is in WorldSpace MyPrefab MySpotlight GeoObject
  • 74. 3D Editor – Applying a change in the tree  [Optional]: MyPrefab invalidates cached data or updates dependencies MyPrefab MySpotlight GeoObject
  • 75. Interactive changes  Problem: Interactive changes start in-game  Orientate an object in viewport  Painting vegetation  Terrain sculpting  Etc.
  • 76. Naïve implementation of tool change  (Tool) Transactions from the Game ?
  • 77. Naïve implementation of tool change  (Tool) Transactions from the Game ?
  • 78. Naïve implementation of tool change  Who has authority over data?  Impossible due to dataloss in conversion  Creates a cycle going back to game
  • 79. Tool changes Solution:  Tool does not modify data  Editor keeps authority over data
  • 80. Undoing tool changes Undo works the same way!
  • 82. GameSync  Gamesync handles structural changes to the game  Pre-dates Tools Framework  Creates patch file to apply in game
  • 83. GameSync  Create a copy of Spotlight MyPrefab Spotlight GeoObject
  • 84. GameSync – Analyze change MyPrefab Spotlight GeoObject CopiedSpotLight
  • 85. GameSync – Patch file MyPrefab (modified) CopiedSpotLight
  • 86. GameSync - Conversion MyPrefab (modified) CopiedSpotLight
  • 90. GameSync – The Good  Works on all changes throughout Editor  Can sync to target as well (PS4)  No game restart required
  • 91. GameSync - The Bad  Systems were not designed to work with GameSync  The change analysis code became very complex  Performance issues  Inconsistent behavior  Crashes, incomplete updates  Low level of confidence from users
  • 94. NodeGraph Debugger  Powerful debugging features  Variable inspection  Execution visualization  Historical debugging  Minimal involvement from the tools team  Almost all of the work was done by game tech
  • 95. Interactive Conversations  A new feature for Horizon  Free to build a workflow from scratch  Built specifically for:  Writers  Quest designers  Cinematic artists
  • 97. Conversation Generator  This conversation was auto-generated  Camera cuts, animation, gestures selected by rule-based system  RoboVoice and lip-sync animations created for mock-up content
  • 98. Conversation Generator  Inspired by the work of CD Projekt RED and BioWare  Was possible because it was easy to build in the new framework  Behind the Scenes of Cinematic Dialogues in ‘The Witcher 3: Wild Hunt’  http://www.gdcvault.com/play/1023285/
  • 99. Profiler  Built on top of an existing in-game profiler framework  Real-time data from any app running the profiler framework  Editor runs the profiler framework, so it can profile itself!
  • 101. World Map  Visualizes game features on a 2D world map  Pluggable system for overlays  Quests  JIRA bugs  Came online late in the project, and wasn’t heavily used
  • 102. World Map – Perf Report Overlay
  • 104. Decima API  C-API to expose Tools Framework functionality  File loading/saving  Object manipulation  Python wrapper  Artists and designers can create scripts manipulate game content
  • 106. Future goals  Move other teams into new editor  (VFX, Environment Art, ..)  Build new Editor Contexts  Entity editor  Particle editor  Shader/Material editor
  • 107. Future goals  Rewrite GameSync system  Take the 3D editor out of process  Improve UI/UX of the editor
  • 108. Thanks  Everyone at Guerrilla  Special Thanks  Michiel van der Leeuw  Jelle van der Beek  Ritesh Oedayrajsingh Varma  Guido de Haan  Laurens Simonis  Kenzo ter Elst  Johanna Persson  Olaf Jansen  Bryan Keiren  Emile van der Heide  Remco Straatman  Stefan Reek  Nathan Vos