Presentation from DICE Coder's Day (2010 November) by Johan Torp:
This talk is about making object-oriented code more cache-friendly and how we can incrementally move towards parallelizable data-oriented designs. Filled with production code examples from Frostbite’s pathfinding implementation.
Presentation from DICE Coder's Day (2010 November) by Andreas Fredriksson in the Frostbite team.
Goes into detail about Scope Stacks, which are a systems programming tool for memory layout that provides
• Deterministic memory map behavior
• Single-cycle allocation speed
• Regular C++ object life cycle for objects that need it
This makes it very suitable for games.
There are a lot of articles about games. Most of these are about particular aspects of a game like rendering or physics. All engines, however, have a binding structure that ties all aspects of the game together. Usually there is a base class (Object, Actor or Entity are common names) that all objects in the game derive from, but very little is written on the subject. Only very recently a couple of talks on game|tech have briefly touched on the subject. Still, choosing a structure to build your game on is very important. The end user might not “see” the difference between a good and a bad structure, but this choice will affect many aspects of the development process. A good structure will reduce risk and increase the efficiency of the team.
Decima Engine: Visibility in Horizon Zero DawnGuerrilla
Download the full presentation here: http://www.guerrilla-games.com/read/decima-engine-visibility-in-horizon-zero-dawn
Abstract: Horizon Zero Dawn presented the Decima engine with new challenges in rendering large and dense environments. In particular, we needed to be able to quickly query a very large set of potential objects to find which should be visible. This talk looks at the problems we faced moving from more constrained Killzone levels to Horizon's open world, and our approach to fast visibility queries using the PS4's asynchronous compute hardware. It also covers our recent work on efficiently collecting batches of object instances during the query to reduce load on the entire rendering pipeline. A basic familiarity with GPU compute will be helpful to get the most out of this talk.
Presentation from DICE Coder's Day (2010 November) by Andreas Fredriksson in the Frostbite team.
Goes into detail about Scope Stacks, which are a systems programming tool for memory layout that provides
• Deterministic memory map behavior
• Single-cycle allocation speed
• Regular C++ object life cycle for objects that need it
This makes it very suitable for games.
There are a lot of articles about games. Most of these are about particular aspects of a game like rendering or physics. All engines, however, have a binding structure that ties all aspects of the game together. Usually there is a base class (Object, Actor or Entity are common names) that all objects in the game derive from, but very little is written on the subject. Only very recently a couple of talks on game|tech have briefly touched on the subject. Still, choosing a structure to build your game on is very important. The end user might not “see” the difference between a good and a bad structure, but this choice will affect many aspects of the development process. A good structure will reduce risk and increase the efficiency of the team.
Decima Engine: Visibility in Horizon Zero DawnGuerrilla
Download the full presentation here: http://www.guerrilla-games.com/read/decima-engine-visibility-in-horizon-zero-dawn
Abstract: Horizon Zero Dawn presented the Decima engine with new challenges in rendering large and dense environments. In particular, we needed to be able to quickly query a very large set of potential objects to find which should be visible. This talk looks at the problems we faced moving from more constrained Killzone levels to Horizon's open world, and our approach to fast visibility queries using the PS4's asynchronous compute hardware. It also covers our recent work on efficiently collecting batches of object instances during the query to reduce load on the entire rendering pipeline. A basic familiarity with GPU compute will be helpful to get the most out of this talk.
Game engines have long been in the forefront of taking advantage of the ever increasing parallel compute power of both CPUs and GPUs. This talk is about how the parallel compute is utilized in practice on multiple platforms today in the Frostbite game engine and how we think the parallel programming models, hardware and software in the industry should look like in the next 5 years to help us make the best games possible
Optimizing the Graphics Pipeline with Compute, GDC 2016Graham Wihlidal
With further advancement in the current console cycle, new tricks are being learned to squeeze the maximum performance out of the hardware. This talk will present how the compute power of the console and PC GPUs can be used to improve the triangle throughput beyond the limits of the fixed function hardware. The discussed method shows a way to perform efficient "just-in-time" optimization of geometry, and opens the way for per-primitive filtering kernels and procedural geometry processing.
Takeaway:
Attendees will learn how to preprocess geometry on-the-fly per frame to improve rendering performance and efficiency.
Intended Audience:
This presentation is targeting seasoned graphics developers. Experience with DirectX 12 and GCN is recommended, but not required.
A description of the next-gen rendering technique called Triangle Visibility Buffer. It offers up to 10x - 20x geometry compared to Deferred rendering and much higher resolution. Generally it aligns better with memory access patterns in modern GPUs compared to Deferred Lighting like Clustered Deferred Lighting etc.
Game engines have long been in the forefront of taking advantage of the ever
increasing parallel compute power of both CPUs and GPUs. This talk is about how the
parallel compute is utilized in practice on multiple platforms today in the Frostbite game
engine and how we think the parallel programming models, hardware and software in
the industry should look like in the next 5 years to help us make the best games possible.
Talk by Yuriy O’Donnell at GDC 2017.
This talk describes how Frostbite handles rendering architecture challenges that come with having to support a wide variety of games on a single engine. Yuriy describes their new rendering abstraction design, which is based on a graph of all render passes and resources. This approach allows implementation of rendering features in a decoupled and modular way, while still maintaining efficiency.
A graph of all rendering operations for the entire frame is a useful abstraction. The industry can move away from “immediate mode” DX11 style APIs to a higher level system that allows simpler code and efficient GPU utilization. Attendees will learn how it worked out for Frostbite.
OpenGL 4.4 provides new features for accelerating scenes with many objects, which are typically found in professional visualization markets. This talk will provide details on the usage of the features and their effect on real-life models. Furthermore we will showcase how more work for rendering a scene can be off-loaded to the GPU, such as efficient occlusion culling or matrix calculations.
Video presentation here: http://on-demand.gputechconf.com/gtc/2014/video/S4379-opengl-44-scene-rendering-techniques.mp4
Volumetric Lighting for Many Lights in Lords of the FallenBenjamin Glatzel
In this session I’m going to give you an in-depth insight into the design and the implementation of the volumetric lighting system we’ve developed for ‘Lords of the Fallen’. The system allows the simulation of countless volumetric lighting effects in parallel while still being a feasible solution on next-gen consoles.
This presentation was held at the Digital Dragons 2014 conference.
Videos shown during the talk are available here: http://bglatzel.movingblocks.net/publications
A technical deep dive into the DX11 rendering in Battlefield 3, the first title to use the new Frostbite 2 Engine. Topics covered include DX11 optimization techniques, efficient deferred shading, high-quality rendering and resource streaming for creating large and highly-detailed dynamic environments on modern PCs.
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Unity Technologies
This session addresses how we are expanding the scope of the Burst Compiler to enable even the most demanding, hand-coded engine and gameplay problems to be expressed in HPC# via direct CPU intrinsics. Andreas shares the reasoning and use cases; as well as discussing implementation challenges, debugging, and performance along with comparisons to C++ code.
Speaker: Andreas Fredriksson - Unity
Watch the session on YouTube: https://youtu.be/BpwvXkoFcp8
Secrets of CryENGINE 3 Graphics TechnologyTiago Sousa
In this talk, the authors will describe an overview of a different method for deferred lighting approach used in CryENGINE 3, along with an in-depth description of the many techniques used. Original file and videos at http://crytek.com/cryengine/presentations
The goal of this session is to demonstrate techniques that improve GPU scalability when rendering complex scenes. This is achieved through a modular design that separates the scene graph representation from the rendering backend. We will explain how the modules in this pipeline are designed and give insights to implementation details, which leverage GPU''s compute capabilities for scene graph processing. Our modules cover topics such as shader generation for improved parameter management, synchronizing updates between scenegraph and rendering backend, as well as efficient data structures inside the renderer.
Video here: http://on-demand.gputechconf.com/gtc/2013/video/S3032-Advanced-Scenegraph-Rendering-Pipeline.mp4
Talk by Graham Wihlidal (Frostbite Labs) at GDC 2017.
Checkerboard rendering is a relatively new technique, popularized recently by the introduction of the PlayStation 4 Pro. Many modern game engines are adding support for it right now, and in this talk, Graham will present an in-depth look at the new implementation in Frostbite, which is used in shipping titles like 'Battlefield 1' and 'Mass Effect Andromeda'. Despite being conceptually simple, checkerboard rendering requires a deep integration into the post-processing chain, in particular temporal anti-aliasing, dynamic resolution scaling, and poses various challenges to existing effects. This presentation will cover the basics of checkerboard rendering, explain the impact on a game engine that powers a wide range of titles, and provide a detailed look at how the current implementation in Frostbite works, including topics like object id, alpha unrolling, gradient adjust, and a highly efficient depth resolve.
Ever wondered how to use modern OpenGL in a way that radically reduces driver overhead? Then this talk is for you.
John McDonald and Cass Everitt gave this talk at Steam Dev Days in Seattle on Jan 16, 2014.
ECS (Part 1/3) - Introduction to Data-Oriented DesignPhuong Hoang Vu
ECS (Part 1/3) - Introduction to Data-Oriented Design.
Some small experiments to verify CPU Cache problems, SOA vs AOS and some other problems from OOP approach.
Then basic things about DOD.
By Kristoffer Benjaminsson, CTO, Easy.
This talk presents the telemetry system used in Battlefield Heroes and how it helps the team make technical decisions in order to provide the best service possible. We will show real life examples of how telemetry helped improve matchmaking, reduce latency for players and help find false alarms from the cheat detection system. We will also discuss how telemetry can be used in development for catching bugs and support game designers in their work.
Game engines have long been in the forefront of taking advantage of the ever increasing parallel compute power of both CPUs and GPUs. This talk is about how the parallel compute is utilized in practice on multiple platforms today in the Frostbite game engine and how we think the parallel programming models, hardware and software in the industry should look like in the next 5 years to help us make the best games possible
Optimizing the Graphics Pipeline with Compute, GDC 2016Graham Wihlidal
With further advancement in the current console cycle, new tricks are being learned to squeeze the maximum performance out of the hardware. This talk will present how the compute power of the console and PC GPUs can be used to improve the triangle throughput beyond the limits of the fixed function hardware. The discussed method shows a way to perform efficient "just-in-time" optimization of geometry, and opens the way for per-primitive filtering kernels and procedural geometry processing.
Takeaway:
Attendees will learn how to preprocess geometry on-the-fly per frame to improve rendering performance and efficiency.
Intended Audience:
This presentation is targeting seasoned graphics developers. Experience with DirectX 12 and GCN is recommended, but not required.
A description of the next-gen rendering technique called Triangle Visibility Buffer. It offers up to 10x - 20x geometry compared to Deferred rendering and much higher resolution. Generally it aligns better with memory access patterns in modern GPUs compared to Deferred Lighting like Clustered Deferred Lighting etc.
Game engines have long been in the forefront of taking advantage of the ever
increasing parallel compute power of both CPUs and GPUs. This talk is about how the
parallel compute is utilized in practice on multiple platforms today in the Frostbite game
engine and how we think the parallel programming models, hardware and software in
the industry should look like in the next 5 years to help us make the best games possible.
Talk by Yuriy O’Donnell at GDC 2017.
This talk describes how Frostbite handles rendering architecture challenges that come with having to support a wide variety of games on a single engine. Yuriy describes their new rendering abstraction design, which is based on a graph of all render passes and resources. This approach allows implementation of rendering features in a decoupled and modular way, while still maintaining efficiency.
A graph of all rendering operations for the entire frame is a useful abstraction. The industry can move away from “immediate mode” DX11 style APIs to a higher level system that allows simpler code and efficient GPU utilization. Attendees will learn how it worked out for Frostbite.
OpenGL 4.4 provides new features for accelerating scenes with many objects, which are typically found in professional visualization markets. This talk will provide details on the usage of the features and their effect on real-life models. Furthermore we will showcase how more work for rendering a scene can be off-loaded to the GPU, such as efficient occlusion culling or matrix calculations.
Video presentation here: http://on-demand.gputechconf.com/gtc/2014/video/S4379-opengl-44-scene-rendering-techniques.mp4
Volumetric Lighting for Many Lights in Lords of the FallenBenjamin Glatzel
In this session I’m going to give you an in-depth insight into the design and the implementation of the volumetric lighting system we’ve developed for ‘Lords of the Fallen’. The system allows the simulation of countless volumetric lighting effects in parallel while still being a feasible solution on next-gen consoles.
This presentation was held at the Digital Dragons 2014 conference.
Videos shown during the talk are available here: http://bglatzel.movingblocks.net/publications
A technical deep dive into the DX11 rendering in Battlefield 3, the first title to use the new Frostbite 2 Engine. Topics covered include DX11 optimization techniques, efficient deferred shading, high-quality rendering and resource streaming for creating large and highly-detailed dynamic environments on modern PCs.
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Unity Technologies
This session addresses how we are expanding the scope of the Burst Compiler to enable even the most demanding, hand-coded engine and gameplay problems to be expressed in HPC# via direct CPU intrinsics. Andreas shares the reasoning and use cases; as well as discussing implementation challenges, debugging, and performance along with comparisons to C++ code.
Speaker: Andreas Fredriksson - Unity
Watch the session on YouTube: https://youtu.be/BpwvXkoFcp8
Secrets of CryENGINE 3 Graphics TechnologyTiago Sousa
In this talk, the authors will describe an overview of a different method for deferred lighting approach used in CryENGINE 3, along with an in-depth description of the many techniques used. Original file and videos at http://crytek.com/cryengine/presentations
The goal of this session is to demonstrate techniques that improve GPU scalability when rendering complex scenes. This is achieved through a modular design that separates the scene graph representation from the rendering backend. We will explain how the modules in this pipeline are designed and give insights to implementation details, which leverage GPU''s compute capabilities for scene graph processing. Our modules cover topics such as shader generation for improved parameter management, synchronizing updates between scenegraph and rendering backend, as well as efficient data structures inside the renderer.
Video here: http://on-demand.gputechconf.com/gtc/2013/video/S3032-Advanced-Scenegraph-Rendering-Pipeline.mp4
Talk by Graham Wihlidal (Frostbite Labs) at GDC 2017.
Checkerboard rendering is a relatively new technique, popularized recently by the introduction of the PlayStation 4 Pro. Many modern game engines are adding support for it right now, and in this talk, Graham will present an in-depth look at the new implementation in Frostbite, which is used in shipping titles like 'Battlefield 1' and 'Mass Effect Andromeda'. Despite being conceptually simple, checkerboard rendering requires a deep integration into the post-processing chain, in particular temporal anti-aliasing, dynamic resolution scaling, and poses various challenges to existing effects. This presentation will cover the basics of checkerboard rendering, explain the impact on a game engine that powers a wide range of titles, and provide a detailed look at how the current implementation in Frostbite works, including topics like object id, alpha unrolling, gradient adjust, and a highly efficient depth resolve.
Ever wondered how to use modern OpenGL in a way that radically reduces driver overhead? Then this talk is for you.
John McDonald and Cass Everitt gave this talk at Steam Dev Days in Seattle on Jan 16, 2014.
ECS (Part 1/3) - Introduction to Data-Oriented DesignPhuong Hoang Vu
ECS (Part 1/3) - Introduction to Data-Oriented Design.
Some small experiments to verify CPU Cache problems, SOA vs AOS and some other problems from OOP approach.
Then basic things about DOD.
By Kristoffer Benjaminsson, CTO, Easy.
This talk presents the telemetry system used in Battlefield Heroes and how it helps the team make technical decisions in order to provide the best service possible. We will show real life examples of how telemetry helped improve matchmaking, reduce latency for players and help find false alarms from the cheat detection system. We will also discuss how telemetry can be used in development for catching bugs and support game designers in their work.
Talk from SIGGRAPH 2010 and the <a />Beyond Programmable Shading course</a>
Also see <a />publications.dice.se</a> for more material and other DICE talks.
This session presents a detailed programmer oriented overview of our SPU based shading system implemented in DICE's Frostbite 2 engine and how it enables more visually rich environments in BATTLEFIELD 3 and better performance over traditional GPU-only based renderers. We explain in detail how our SPU Tile-based deferred shading system is implemented, and how it supports rich material variety, High Dynamic Range Lighting, and large amounts of light sources of different types through an extensive set of culling, occlusion and optimization techniques.
This keynote explores the development of the AI in Battlefield: Bad Company and Battlefield: Bad Company 2 and what caused the difference in quality between the games. It describes challenges in the development of the games and the design philosophies we used to overcome them.
See http://publications.dice.se for the .ppt file and extra movies.
With the highest-quality video options, Battlefield 3 renders its Screen-Space Ambient Occlusion (SSAO) using the Horizon-Based Ambient Occlusion (HBAO) algorithm. For performance reasons, the HBAO is rendered in half resolution using half-resolution input depths. The HBAO is then blurred in full resolution using a depth-aware blur. The main issue with such low-resolution SSAO rendering is that it produces objectionable flickering for thin objects (such as alpha-tested foliage) when the camera and/or the geometry are moving. After a brief recap of the original HBAO pipeline, this talk describes a novel temporal filtering algorithm that fixed the HBAO flickering problem in Battlefield 3 with a 1-2% performance hit in 1920x1200 on PC (DX10 or DX11). The talk includes algorithm and implementation details on the temporal filtering part, as well as generic optimizations for SSAO blur pixel shaders. This is a joint work between Louis Bavoil (NVIDIA) and Johan Andersson (DICE).
Slides from Elisabetta Silli's talk in the GDC Europe 2010 panel about level design.
Movie content can be found on:
http://publications.dice.se
Part designer, part producer, programmer and artist, what is it that makes a level designer effective? The short answer: knowing how to balance all of these roles to maximum effect! This session will examine situations from three AAA games, and the specific challenges they brought about and the solutions required to surmount them. Are level design approaches for radically different games inherently similar, or do accepted methods need to be drastically altered to fit the unique nature of the project? An examination of Alan Wake, Mirror's Edge, and Brink will help answer this question, and many others.
The past few years have seen a sharp increase in the complexity of rendering algorithms used in modern game engines. Large portions of the rendering work are increasingly written in GPU computing languages, and decoupled from the conventional “one-to-one” pipeline stages for which shading languages were designed. Following Tim Foley’s talk from SIGGRAPH 2016’s Open Problems course on shading language directions, we explore example rendering algorithms that we want to express in a composable, reusable and performance-portable manner. We argue that a few key constraints in GPU computing languages inhibit these goals, some of which are rooted in hardware limitations. We conclude with a call to action detailing specific improvements we would like to see in GPU compute languages, as well as the underlying graphics hardware.
This talk was originally given at SIGGRAPH 2017 by Andrew Lauritzen (EA SEED) for the Open Problems in Real-Time Rendering course.
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseSages
Szybkie wprowadzenie do technologii Pig i Hive z ekosystemu Hadoop. Prezentacja wykonana w ramach warsztatów Codepot w dniu 29.08.2015. Prezentacja wykonana przez Radosława Stankiewicza oraz Bartłomieja Tartanusa.
How to Leverage Go for Your Networking NeedsDigitalOcean
Watch this Tech Talk: https://do.co/video_singuva
Highlights from Sneha Inguva’s networking journey through Go. Sneha discusses the useful packages, key learnings, and struggles faced while building a variety of networking services within and outside of DigitalOcean. Walk away with a clear understanding of how to specifically leverage Go for your own networking needs.
About the Presenter
Sneha Inguva is a Software Engineer on the Networking team at DigitalOcean. She enjoys building cloud products by day and debugging ominous context-canceled errors by night. In her spare time, she professionally lounges around with her cat.
New to DigitalOcean? Get US $100 in credit when you sign up: https://do.co/deploytoday
To learn more about DigitalOcean: https://www.digitalocean.com/
Follow us on Twitter: https://twitter.com/digitalocean
Like us on Facebook: https://www.facebook.com/DigitalOcean
Follow us on Instagram: https://www.instagram.com/thedigitalocean/
We're hiring: http://do.co/careers
Node has captured the attention of early adopters by clearly differentiating itself as being asynchronous from the ground up while remaining accessible. Now that server side JavaScript is at the cutting edge of the asynchronous, real time web, it is in a much better position to establish itself as the go to language for also making synchronous, CRUD webapps and gain a stronger foothold on the server.
This talk covers the current state of server side JavaScript beyond Node. It introduces Common Node, a synchronous CommonJS compatibility layer using node-fibers which bridges the gap between the different platforms. We look into Common Node's internals, compare its performance to that of other implementations such as RingoJS and go through some ideal use cases.
Project Loom is one of the most important change coming to JDK. The talk explores the Constraints and benefits of the request pre thread model and why there is a big push towards Aysnc frameworks.
How Project Loom and Structured Concurrency And Project Loom gives a new design paradigm to write scalable maintainable code
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"DataStax Academy
The ColumnFamily data model and wide-row support provides the ability to store and access data efficiently in a de-normalized state. Recent enhancements for CQL's spare tables and built-in indexing provide the capability to store data in a manner similar to that of relational databases. For many use cases hybrid approaches are needed, because complete de-normalization is appropriate for some access patterns whereas more structured data is appropriate for others. At times a single logical event becomes multiple insertions across multiple column families. Likewise a user request might require a several reads across different column families. This talk describes some of these scenarios and demonstrates how advanced operations such multiple step procedures, filtering, intersection, and paging can be implemented client side or server side with the help of the IntraVert plugin.
How to Hack a Road Trip with a Webcam, a GSP and Some Fun with Nodepdeschen
Part of a presentation @ nodemtl meetup. Presenting Kerouac, a real-time webapp featuring a remote GPS tracking device, a webcam and a whole lot of Node.js magic covering some basics of Node.js such as: event emitters and process spawning.
Один из основных мотивов добавления в Java 8 лямбда-выражений — упростить написание многопоточных программ. На примере несложной вычислительной задачи я покажу эволюцию средств Java для многопоточности. Начнём с Java Threads, а закончим лямбда-выражениями и Stream API. Ну и в результате посмотрим, что и как вышло.
GDC2019 - SEED - Towards Deep Generative Models in Game DevelopmentElectronic Arts / DICE
Deep learning is becoming ubiquitous in Machine Learning (ML) research, and it's also finding its place in industry-related applications. Specifically, deep generative models have proven incredibly useful at generating and remixing realistic content from scratch, making themselves a very appealing technology in the field of AI-enhanced content authoring. As part of this year's Machine Learning Tutorial at the Game Developers Conference 2019 (GDC), Jorge Del Val from SEED will cover in an accessible manner the fundamentals of deep generative modeling, including some common algorithms and architectures. He will also discuss applications to game development and explore some recent advances in the field.
The attendee will gain basic understanding of the fundamentals of generative models and how to implement them. Also, attendees will grasp potential applications in the field of game development to inspire their work and companies. This talk does not require a mathematical or machine learning background, although previous knowledge on either of those is beneficial.
Henrik Halén (Lead Rendering Programmer) at Electronic Arts presented "Style and Gameplay in the Mirror's Edge" at SIGGRAPH 2010's Stylized Rendering in Games. https://www.cs.williams.edu/~morgan/SRG10/
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray TracingElectronic Arts / DICE
Graham Wihlidal and Colin Barré-Brisebois of SEED attended SyysGraph 2018 in Helsinki and presented to the group. The first section described aspects of Halcyon's rendering architecture, including information on explicit heterogeneous and virtual multi-GPU, render graph, and the remote render proxy backend. The second section discussed real-time ray tracing approaches and current open problems. The following day, this presentation was also given as a lecture at Aalto University.
Graham Wihlidal from SEED attended the Munich Khronos Meetup and presented some aspects of Halcyon's rendering architecture, as well as details of the Vulkan implementation. Graham presented components like high-level render command translation, render graph, and shader compilation.
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time RaytracingElectronic Arts / DICE
Real-time raytracing holds the promise of simplifying rendering pipelines, eliminating artist-intensive workflows, and ultimately delivering photorealistic images. This talk by Tomasz Stachowiak provides a glimpse of the future through the lens of SEED's PICA PICA demo: a game made for artificial intelligence agents, with procedural level assembly, and no precomputation. We dive into technical details of several advanced rendering algorithms, and discuss how Microsoft's DirectX Raytracing technology allows for their intuitive implementation. Several challenges remain -- we will take a look at some of them, discuss how real-time raytracing fits in the spectrum of solutions, and start to plot the course towards robust and artist-friendly image synthesis.
CEDEC 2018 - Functional Symbiosis of Art Direction and ProceduralismElectronic Arts / DICE
This talk by SEED's Anastasia Opara covers the approach for procedural layout generation and placement in Project PICA PICA. The project posed a unique challenge as the levels were not created for humans, but for self-learning AI agents. Therefore, the level system had be flexible to meet the agents’ needs and ensure navigability, gameplay elements as well as adhere to the art direction.
We used Houdini from the very early stages to the final release: from co-creating art-direction to exporting final levels into our in-house RnD engine Halcyon. From this talk, you will learn how in a team of only 3 artists we created a functional symbiosis of art direction and procedural system in under 2 months as well as what challenges and solutions we had during our ‘procedural journey’.
At SIGGRAPH 2018, Colin Barré-Brisebois presented PICA PICA running on NVIDIA's new Turing architecture, with performance comparisons with Volta. Developed by Henrik Halén of SEED a technique for real-time raytraced transparent shadows was also presented, as well as an experiment with rough glass.
SIGGRAPH 2018 - Full Rays Ahead! From Raster to Real-Time RaytracingElectronic Arts / DICE
In this presentation part of the "Introduction to DirectX Raytracing" course, Colin Barré-Brisebois of SEED discusses some of the challenges the team had to go through when going from raster to real-time raytracing for Project PICA PICA.
For this year's keynote at High Performance Graphics 2018, Colin Barré-Brisebois from SEED discussed the state of the art in real-time game ray tracing. He explored some of the connections between offline and real-time game ray tracing, and presented some of the open problems. Colin exposed a few potential solutions to those problems, and also proposed a call-to-arms on topics where the ray tracing research community and the games industry should unite in order to solve such open problems.
EPC 2018 - SEED - Exploring The Collaboration Between Proceduralism & Deep Le...Electronic Arts / DICE
Proceduralism is a powerful language of rules, dependencies and patterns that can generate content indistinguishable from a manually produced one. Yet there are new opportunities that hold a great potential to enhance the existing techniques. In this talk, SEED's Anastasia Opara shares some of the early tests of marrying Proceduralism and Deep Learning and discusses how it can contribute to the current workflows.
You can view a recording of the presentation from 2018's Everything Procedural Conference here:
https://www.youtube.com/watch?v=dpYwLny0P8M
This talk provides additional details around the hybrid real-time rendering pipeline we developed at SEED for Project PICA PICA.
At Digital Dragons 2018, we presented how leveraging Microsoft's DirectX Raytracing enables intuitive implementations of advanced lighting effects, including soft shadows, reflections, refractions, and global illumination. We also dove into the unique challenges posed by each of those domains, discussed the tradeoffs, and evaluated where raytracing fits in the spectrum of solutions.
Human mechanisms of representing the surrounding world in a form of ‘language’ is an outstanding ability that enables us to store the information as internal compact abstractions. Proceduralism is also a form of language, where we view the world through rules, dependencies and patterns. And though rules are often perceived as something rigid, their engineering is a fluid and creative task, where analyzing our own thought framework often fuels the design process.
In this talk, we present results from the real-time raytracing research done at SEED, a cross-disciplinary team working on cutting-edge, future graphics technologies and creative experiences at Electronic Arts. We explain in detail several techniques from “PICA PICA”, a real-time raytracing experiment featuring a mini-game for self-learning AI agents in a procedurally-assembled world. The approaches presented here are intended to inspire developers and provide a glimpse of a future where real-time raytracing powers the creative experiences of tomorrow.
A Certain Slant of Light - Past, Present and Future Challenges of Global Illu...Electronic Arts / DICE
Global illumination (GI) has been an ongoing quest in games. The perpetual tug-of-war between visual quality and performance often forces developers to take the latest and greatest from academia and tailor it to push the boundaries of what has been realized in a game product. Many elements need to align for success, including image quality, performance, scalability, interactivity, ease of use, as well as game-specific and production challenges.
First we will paint a picture of the current state of global illumination in games, addressing how the state of the union compares to the latest and greatest research. We will then explore various GI challenges that game teams face from the art, engineering, pipelines and production perspective. The games industry lacks an ideal solution, so the goal here is to raise awareness by being transparent about the real problems in the field. Finally, we will talk about the future. This will be a call to arms, with the objective of uniting game developers and researchers on the same quest to evolve global illumination in games from being mostly static, or sometimes perceptually real-time, to fully real-time.
This presentation was given at SIGGRAPH 2017 by Colin Barré-Brisebois (EA SEED) as part of the Open Problems in Real-Time Rendering course.
This talk presents the approach Frostbite took to add support for HDR displays. It will summarize Frostbite's previous post processing pipeline and what the issues were. Attendees will learn the decisions made to fix these issues, improve the color grading workflow and support high quality HDR and SDR output. This session will detail the display mapping used to implement the"grade once, output many" approach to targeting any display and why an ad-hoc approach as opposed to filmic tone mapping was chosen. Frostbite retained 3D LUT-based grading flexibility and the accuracy differences of computing these in decorrelated color spaces will be shown. This session will also include the main issues found on early adopter games, differences between HDR standards, optimizations to achieve performance parity with the legacy path and why supporting HDR can also improve the SDR version.
Takeaway
Attendees will learn how and why Frostbite chose to support High Dynamic Range [HDR] displays. They will understand the issues faced and how these were resolved. This talk will be useful for those still to support HDR and provide discussion points for those who already do.
Intended Audience
The intended audience is primarily rendering engineers, technical artists and artists; specifically those who focus on grading and lighting and those interested in HDR displays. Ideally attendees will be familiar with color grading and tonemapping.
Talk by Fabien Christin from DICE at GDC 2016.
Designing a big city that players can explore by day and by night while improving on the unique visual from the first Mirror's Edge game isn't an easy task.
In this talk, the tools and technology used to render Mirror's Edge: Catalyst will be discussed. From the physical sky to the reflection tech, the speakers will show how they tamed the new Frostbite 3 PBR engine to deliver realistic images with stylized visuals.
They will talk about the artistic and technical challenges they faced and how they tried to overcome them, from the simple light settings and Enlighten workflow to character shading and color grading.
Takeaway
Attendees will get an insight of technical and artistic techniques used to create a dynamic time of day system with updating radiosity and reflections.
Intended Audience
This session is targeted to game artists, technical artists and graphics programmers who want to know more about Mirror's Edge: Catalyst rendering technology, lighting tools and shading tricks.
Presentation by Andrew Hamilton and Ken Brown from DICE at GDC 2016.
Photogrammetry has started to gain steam within the Games Industry in recent years. At DICE, this technique was first used on Battlefield and they fully embraced the technology and workflow for Star Wars: Battlefront. This talk will cover their research and development, planning and production, techniques, key takeaways and plans for the future. The speakers will cover photogrammetry as a technology, but more than that, show that it's not a magic bullet but instead a tool like any other that can be used to help achieve your artistic vision and craft.
Takeaway
Come and learn how (and why) photogrammetry was used to create the world of Star Wars. This talk will cover Battlefront's use of of the technology from pre-production to launch as well as some of their philosophies around photogrammetry as a tool. Many visuals will be included!
Intended Audience
A content creator friendly talk intended for pretty much any developer, especially those involved in 3D content creation. It is not a technical talk focused on the code or engineering of photogrammetry. The speakers will quickly cover all basics, so absolutely no prerequisite knowledge required.
Skeem Saam in June 2024 available on ForumIsaac More
Monday, June 3, 2024 - Episode 241: Sergeant Rathebe nabs a top scammer in Turfloop. Meikie is furious at her uncle's reaction to the truth about Ntswaki.
Tuesday, June 4, 2024 - Episode 242: Babeile uncovers the truth behind Rathebe’s latest actions. Leeto's announcement shocks his employees, and Ntswaki’s ordeal haunts her family.
Wednesday, June 5, 2024 - Episode 243: Rathebe blocks Babeile from investigating further. Melita warns Eunice to stay clear of Mr. Kgomo.
Thursday, June 6, 2024 - Episode 244: Tbose surrenders to the police while an intruder meddles in his affairs. Rathebe's secret mission faces a setback.
Friday, June 7, 2024 - Episode 245: Rathebe’s antics reach Kganyago. Tbose dodges a bullet, but a nightmare looms. Mr. Kgomo accuses Melita of witchcraft.
Monday, June 10, 2024 - Episode 246: Ntswaki struggles on her first day back at school. Babeile is stunned by Rathebe’s romance with Bullet Mabuza.
Tuesday, June 11, 2024 - Episode 247: An unexpected turn halts Rathebe’s investigation. The press discovers Mr. Kgomo’s affair with a young employee.
Wednesday, June 12, 2024 - Episode 248: Rathebe chases a criminal, resorting to gunfire. Turf High is rife with tension and transfer threats.
Thursday, June 13, 2024 - Episode 249: Rathebe traps Kganyago. John warns Toby to stop harassing Ntswaki.
Friday, June 14, 2024 - Episode 250: Babeile is cleared to investigate Rathebe. Melita gains Mr. Kgomo’s trust, and Jacobeth devises a financial solution.
Monday, June 17, 2024 - Episode 251: Rathebe feels the pressure as Babeile closes in. Mr. Kgomo and Eunice clash. Jacobeth risks her safety in pursuit of Kganyago.
Tuesday, June 18, 2024 - Episode 252: Bullet Mabuza retaliates against Jacobeth. Pitsi inadvertently reveals his parents’ plans. Nkosi is shocked by Khwezi’s decision on LJ’s future.
Wednesday, June 19, 2024 - Episode 253: Jacobeth is ensnared in deceit. Evelyn is stressed over Toby’s case, and Letetswe reveals shocking academic results.
Thursday, June 20, 2024 - Episode 254: Elizabeth learns Jacobeth is in Mpumalanga. Kganyago's past is exposed, and Lehasa discovers his son is in KZN.
Friday, June 21, 2024 - Episode 255: Elizabeth confirms Jacobeth’s dubious activities in Mpumalanga. Rathebe lies about her relationship with Bullet, and Jacobeth faces theft accusations.
Monday, June 24, 2024 - Episode 256: Rathebe spies on Kganyago. Lehasa plans to retrieve his son from KZN, fearing what awaits.
Tuesday, June 25, 2024 - Episode 257: MaNtuli fears for Kwaito’s safety in Mpumalanga. Mr. Kgomo and Melita reconcile.
Wednesday, June 26, 2024 - Episode 258: Kganyago makes a bold escape. Elizabeth receives a shocking message from Kwaito. Mrs. Khoza defends her husband against scam accusations.
Thursday, June 27, 2024 - Episode 259: Babeile's skillful arrest changes the game. Tbose and Kwaito face a hostage crisis.
Friday, June 28, 2024 - Episode 260: Two women face the reality of being scammed. Turf is rocked by breaking
Maximizing Your Streaming Experience with XCIPTV- Tips for 2024.pdfXtreame HDTV
In today’s digital age, streaming services have become an integral part of our entertainment lives. Among the myriad of options available, XCIPTV stands out as a premier choice for those seeking seamless, high-quality streaming. This comprehensive guide will delve into the features, benefits, and user experience of XCIPTV, illustrating why it is a top contender in the IPTV industry.
From Slave to Scourge: The Existential Choice of Django Unchained. The Philos...Rodney Thomas Jr
#SSAPhilosophy #DjangoUnchained #DjangoFreeman #ExistentialPhilosophy #Freedom #Identity #Justice #Courage #Rebellion #Transformation
Welcome to SSA Philosophy, your ultimate destination for diving deep into the profound philosophies of iconic characters from video games, movies, and TV shows. In this episode, we explore the powerful journey and existential philosophy of Django Freeman from Quentin Tarantino’s masterful film, "Django Unchained," in our video titled, "From Slave to Scourge: The Existential Choice of Django Unchained. The Philosophy of Django Freeman!"
From Slave to Scourge: The Existential Choice of Django Unchained – The Philosophy of Django Freeman!
Join me as we delve into the existential philosophy of Django Freeman, uncovering the profound lessons and timeless wisdom his character offers. Through his story, we find inspiration in the power of choice, the quest for justice, and the courage to defy oppression. Django Freeman’s philosophy is a testament to the human spirit’s unyielding drive for freedom and justice.
Don’t forget to like, comment, and subscribe to SSA Philosophy for more in-depth explorations of the philosophies behind your favorite characters. Hit the notification bell to stay updated on our latest videos. Let’s discover the principles that shape these icons and the profound lessons they offer.
Django Freeman’s story is one of the most compelling narratives of transformation and empowerment in cinema. A former slave turned relentless bounty hunter, Django’s journey is not just a physical liberation but an existential quest for identity, justice, and retribution. This video delves into the core philosophical elements that define Django’s character and the profound choices he makes throughout his journey.
Link to video: https://youtu.be/GszqrXk38qk
Hollywood Actress - The 250 hottest galleryZsolt Nemeth
Hollywood Actress amazon album eminent worldwide media, female-singer, actresses, alhletina-woman, 250 collection.
Highest and photoreal-print exclusive testament PC collage.
Focused television virtuality crime, novel.
The sheer afterlife of the work is activism-like hollywood-actresses point com.
173 Illustrate, 250 gallery, 154 blog, 120 TV serie logo, 17 TV president logo, 183 active hyperlink.
HD AI face enhancement 384 page plus Bowker ISBN, Congress LLCL or US Copyright.
Meet Crazyjamjam - A TikTok Sensation | Blog EternalBlog Eternal
Crazyjamjam, the TikTok star everyone's talking about! Uncover her secrets to success, viral trends, and more in this exclusive feature on Blog Eternal.
Source: https://blogeternal.com/celebrity/crazyjamjam-leaks/
From the Editor's Desk: 115th Father's day Celebration - When we see Father's day in Hindu context, Nanda Baba is the most vivid figure which comes to the mind. Nanda Baba who was the foster father of Lord Krishna is known to provide love, care and affection to Lord Krishna and Balarama along with his wife Yashoda; Letter’s to the Editor: Mother's Day - Mother is a precious life for their children. Mother is life breath for her children. Mother's lap is the world happiness whose debt can never be paid.
Scandal! Teasers June 2024 on etv Forum.co.zaIsaac More
Monday, 3 June 2024
Episode 47
A friend is compelled to expose a manipulative scheme to prevent another from making a grave mistake. In a frantic bid to save Jojo, Phakamile agrees to a meeting that unbeknownst to her, will seal her fate.
Tuesday, 4 June 2024
Episode 48
A mother, with her son's best interests at heart, finds him unready to heed her advice. Motshabi finds herself in an unmanageable situation, sinking fast like in quicksand.
Wednesday, 5 June 2024
Episode 49
A woman fabricates a diabolical lie to cover up an indiscretion. Overwhelmed by guilt, she makes a spontaneous confession that could be devastating to another heart.
Thursday, 6 June 2024
Episode 50
Linda unwittingly discloses damning information. Nhlamulo and Vuvu try to guide their friend towards the right decision.
Friday, 7 June 2024
Episode 51
Jojo's life continues to spiral out of control. Dintle weaves a web of lies to conceal that she is not as successful as everyone believes.
Monday, 10 June 2024
Episode 52
A heated confrontation between lovers leads to a devastating admission of guilt. Dintle's desperation takes a new turn, leaving her with dwindling options.
Tuesday, 11 June 2024
Episode 53
Unable to resort to violence, Taps issues a verbal threat, leaving Mdala unsettled. A sister must explain her life choices to regain her brother's trust.
Wednesday, 12 June 2024
Episode 54
Winnie makes a very troubling discovery. Taps follows through on his threat, leaving a woman reeling. Layla, oblivious to the truth, offers an incentive.
Thursday, 13 June 2024
Episode 55
A nosy relative arrives just in time to thwart a man's fatal decision. Dintle manipulates Khanyi to tug at Mo's heartstrings and get what she wants.
Friday, 14 June 2024
Episode 56
Tlhogi is shocked by Mdala's reaction following the revelation of their indiscretion. Jojo is in disbelief when the punishment for his crime is revealed.
Monday, 17 June 2024
Episode 57
A woman reprimands another to stay in her lane, leading to a damning revelation. A man decides to leave his broken life behind.
Tuesday, 18 June 2024
Episode 58
Nhlamulo learns that due to his actions, his worst fears have come true. Caiphus' extravagant promises to suppliers get him into trouble with Ndu.
Wednesday, 19 June 2024
Episode 59
A woman manages to kill two birds with one stone. Business doom looms over Chillax. A sobering incident makes a woman realize how far she's fallen.
Thursday, 20 June 2024
Episode 60
Taps' offer to help Nhlamulo comes with hidden motives. Caiphus' new ideas for Chillax have MaHilda excited. A blast from the past recognizes Dintle, not for her newfound fame.
Friday, 21 June 2024
Episode 61
Taps is hungry for revenge and finds a rope to hang Mdala with. Chillax's new job opportunity elicits mixed reactions from the public. Roommates' initial meeting starts off on the wrong foot.
Monday, 24 June 2024
Episode 62
Taps seizes new information and recruits someone on the inside. Mary's new job
As a film director, I have always been awestruck by the magic of animation. Animation, a medium once considered solely for the amusement of children, has undergone a significant transformation over the years. Its evolution from a rudimentary form of entertainment to a sophisticated form of storytelling has stirred my creativity and expanded my vision, offering limitless possibilities in the realm of cinematic storytelling.
Are the X-Men Marvel or DC An In-Depth Exploration.pdfXtreame HDTV
The world of comic books is vast and filled with iconic characters, gripping storylines, and legendary rivalries. Among the most famous groups of superheroes are the X-Men. Created in the early 1960s, the X-Men have become a cultural phenomenon, featuring in comics, animated series, and blockbuster movies. A common question among newcomers to the comic book world is: Are the X-Men Marvel or DC? This article delves into the history, creators, and significant moments of the X-Men to provide a comprehensive answer.
In the vast landscape of cinema, stories have been told, retold, and reimagined in countless ways. At the heart of this narrative evolution lies the concept of a "remake". A successful remake allows us to revisit cherished tales through a fresh lens, often reflecting a different era's perspective or harnessing the power of advanced technology. Yet, the question remains, what makes a remake successful? Today, we will delve deeper into this subject, identifying the key ingredients that contribute to the success of a remake.
Panchayat Season 3 - Official Trailer.pdfSuleman Rana
The dearest series "Panchayat" is set to make a victorious return with its third season, and the fervor is discernible. The authority trailer, delivered on May 28, guarantees one more enamoring venture through the country heartland of India.
Jitendra Kumar keeps on sparkling as Abhishek Tripathi, the city-reared engineer who ends up functioning as the secretary of the Panchayat office in the curious town of Phulera. His nuanced depiction of a young fellow exploring the difficulties of country life while endeavoring to adjust to his new environmental factors has earned far and wide recognition.
Neena Gupta and Raghubir Yadav return as Manju Devi and Brij Bhushan Dubey, separately. Their dynamic science and immaculate acting rejuvenate the hardships of town administration. Gupta's depiction of the town Pradhan with an ever-evolving outlook, matched with Yadav's carefully prepared exhibition, adds profundity and credibility to the story.
New Difficulties and Experiences
The trailer indicates new difficulties anticipating the characters, as Abhishek keeps on wrestling with his part in the town and his yearnings for a superior future. The series has reliably offset humor with social editorial, and Season 3 looks ready to dig much more profound into the intricacies of rustic organization and self-awareness.
Watchers can hope to see a greater amount of the enchanting and particular residents who have become fan top picks. Their connections and the one of a kind cut of-life situations give a reviving and interesting portrayal of provincial India, featuring the two its appeal and its difficulties.
A Mix of Humor and Heart
One of the signs of "Panchayat" is its capacity to mix humor with sincere narrating. The trailer features minutes that guarantee to convey giggles, as well as scenes that pull at the heartstrings. This equilibrium has been a critical calculate the show's prosperity, resounding with crowds across different socioeconomics.
Creation Greatness
The creation quality remaining parts first rate, with the beautiful setting of Phulera town filling in as a scenery that upgrades the narrating. The meticulousness in portraying provincial life, joined with sharp composition and solid exhibitions, guarantees that "Panchayat" keeps on hanging out in the packed web series scene.
Expectation and Delivery
As the delivery date draws near, expectation for "Panchayat" Season 3 is at a record-breaking high. The authority trailer has previously created critical buzz, with fans enthusiastically anticipating the continuation of Abhishek Tripathi's excursion and the new undertakings that lie ahead in Phulera.
All in all, the authority trailer for "Panchayat" Season 3 recommends that watchers are in for another drawing in and engaging ride. Yet again with its charming characters, convincing story, and ideal mix of humor and show, the new season is set to enamor crowds. Write in your schedules and prepare to get back to the endearing universe of "Panchayat."
Tom Selleck Net Worth: A Comprehensive Analysisgreendigital
Over several decades, Tom Selleck, a name synonymous with charisma. From his iconic role as Thomas Magnum in the television series "Magnum, P.I." to his enduring presence in "Blue Bloods," Selleck has captivated audiences with his versatility and charm. As a result, "Tom Selleck net worth" has become a topic of great interest among fans. and financial enthusiasts alike. This article delves deep into Tom Selleck's wealth, exploring his career, assets, endorsements. and business ventures that contribute to his impressive economic standing.
Follow us on: Pinterest
Early Life and Career Beginnings
The Foundation of Tom Selleck's Wealth
Born on January 29, 1945, in Detroit, Michigan, Tom Selleck grew up in Sherman Oaks, California. His journey towards building a large net worth began with humble origins. , Selleck pursued a business administration degree at the University of Southern California (USC) on a basketball scholarship. But, his interest shifted towards acting. leading him to study at the Hills Playhouse under Milton Katselas.
Minor roles in television and films marked Selleck's early career. He appeared in commercials and took on small parts in T.V. series such as "The Dating Game" and "Lancer." These initial steps, although modest. laid the groundwork for his future success and the growth of Tom Selleck net worth. Breakthrough with "Magnum, P.I."
The Role that Defined Tom Selleck's Career
Tom Selleck's breakthrough came with the role of Thomas Magnum in the CBS television series "Magnum, P.I." (1980-1988). This role made him a household name and boosted his net worth. The series' popularity resulted in Selleck earning large salaries. leading to financial stability and increased recognition in Hollywood.
"Magnum P.I." garnered high ratings and critical acclaim during its run. Selleck's portrayal of the charming and resourceful private investigator resonated with audiences. making him one of the most beloved television actors of the 1980s. The success of "Magnum P.I." played a pivotal role in shaping Tom Selleck net worth, establishing him as a major star.
Film Career and Diversification
Expanding Tom Selleck's Financial Portfolio
While "Magnum, P.I." was a cornerstone of Selleck's career, he did not limit himself to television. He ventured into films, further enhancing Tom Selleck net worth. His filmography includes notable movies such as "Three Men and a Baby" (1987). which became the highest-grossing film of the year, and its sequel, "Three Men and a Little Lady" (1990). These box office successes contributed to his wealth.
Selleck's versatility allowed him to transition between genres. from comedies like "Mr. Baseball" (1992) to westerns such as "Quigley Down Under" (1990). This diversification showcased his acting range. and provided many income streams, reinforcing Tom Selleck net worth.
Television Resurgence with "Blue Bloods"
Sustaining Wealth through Consistent Success
In 2010, Tom Selleck began starring as Frank Reagan i
9. Find path Load / unload nav mesh section Add / remove obstacles Path invalidation detection Can go-tests “Raycasts”, circle tests, triangle tests NAVPOWER OPERATIONS
10. Pathfinder - find path, path invalidation, circle tests, raycasts Random position generator - can go-tests Manager - load nav mesh, obstacles, destruction, updates Left some raycasts synchronous ABSTRACTIONS
11. interfacePathfinder { public: virtualPathHandle* findPath(constPathfindingPosition& start, constPathfindingPosition& end, Optional<float> corridorRadius, PathHandle::StateListener* listener) = 0; /// More efficient version of findPath when start is the end of a previous path /// /// @pre lastPath->getState() == PathHandle::ValidPath virtualPathHandle* findPathFromDestination(PathHandle* lastPath, constPathfindingPosition& end, Optional<float> corridorRadius, PathHandle::StateListener* listener) = 0; virtualvoidreleasePath(PathHandle* path) = 0; virtualboolcanGoStraight(Vec3Refstart, Vec3Refend, Vec3* collision = nullptr) const = 0; }; Pathfinder INTERFACE
15. typedef eastl::vector<CorridorNode> Corridor; ScratchPadArena scratch; Corridor corridor(scratch); corridor.resize(navPowerPath.size()); // Will allocate memory using the scratch pad CORRIDOR STEP Copy all new NavPower paths -> temporary representation Drop unnecessary points Corridor adjust paths who requested it Copy temporaries -> PathHandles
16. constCorridorHandleVector::iteratorallBegin = all.begin(), allEnd = all.end(); constCorridorHandlePtrVector::iteratoradjustBegin = adjust.begin(), adjustEnd = adjust.end(); for (CorridorHandleVector::iteratorit=allBegin; it!=allEnd; ++it) dropUnnecessaryPoints(it->corridor, scratchPad); for (CorridorHandlePtrVector::iteratorit=adjustBegin; it!=adjustEnd; ++it) shrinkEndPoints((**it).corridor, m_id); for (CorridorHandlePtrVector::iteratorit=adjustBegin; it!=adjustEnd; ++it) calculateCornerDisplacements((**it).corridor); for (CorridorHandlePtrVector::iteratorit=adjustBegin; it!=adjustEnd; ++it) displaceCorners((**it).corridor, m_id); for (CorridorHandlePtrVector::iteratorit=adjustBegin; it!=adjustEnd; ++it) shrinkSections((**it).corridor, m_id); for (CorridorHandleVector::iteratorit=allBegin; it!=allEnd; ++it) copyCorridorToHandle(it->corridor, *it->handle); } CORRIDOR STEP 2-4
17. NavPOWER MANAGEr voidNavPowerManager::update(floatframeTime) { m_streamingManager.update(); m_destructionManager.update(); m_obstacleManager.update(); bfx::SystemSimulate( frameTime); for (PathfinderVector::const_iteratorit=m_pathfinders.begin(), ...) (**it).updatePaths(); for (PathfinderVector::const_iteratorit=m_pathfinders.begin(), ...) (**it).notifyPathListeners(); for (PositionGeneratorVector::const_iteratorit=m_positionGenerators.begin(), end = ...) (**it).update(); }
18. Keep pathfinding code/data cache hot Avoid call sites cache running cold Easier to jobify / SPUify Easy to timeslice BATCHING BENEFITS
19. Manager Random position generator Pathfinder Asynchronous Collect destruction messages, process in batch Runs ~1/sec. Allows synchronous decisions Decision making assumes success
20. LESS SIMPLIFIED ARCHITECTURE SCRIPTING SERVER CLIENT AI DECISION MAKING PATH FOLLOWING PATHFINDING NAVPOWER LOCOMOTION LOCOMOTION DRIVING Waypoints Waypoint Data VEHICLE INPUT ANIMATION CorridorRadii
21. Each server tick 1. Each AI decision making 2. Pathfinding manager update All pathfinding requests All corridor adjustments All PathHandle notifications -> path following -> server locomotion 3. Network pulse. Server locomotion -> client locomotion 4. ...rest of tick My precious latency
22. Callbacks. Delay? Fire in batch? Handle+poll instead of callbacks. Poll in batch. Record messages, process all once a frame Check success / failure next frame Pre-calculate what you’re likely to need Con: Callstack won’t tell you everything. ...but can we afford deep callstacks? Asynchronous EXAMPLES
24. new / push_back() / insert() / resize() Stop and think! Where is the memory allocated? Pre-allocated containers? Scratch pad? Can I resize()/reserve() immediately? Can I use Optional<T> instead of ScopedPtr<T>? Can I use vectors instead of list / set / map? BE NICE TO YOUR MEMORY
25. Let’s not abandon OO nor rewrite the world Start small, batch a bit, resolve inputs, avoid deep dives, grow from there Much easer to rewrite a system in a DO fashion afterwards Let’s START MOVING
26. AI decision making – pathfinding – animation Code: Handles, arena, scratch pad, fixed_vector, batch processing Latency analysis, asyncpatterns Thinkaboutdepth/width of calls, try staywithin your system, resolveearly, new/push_back() = think SUMMARY
WelcomeWe have a lot of OO code in Frostbite that’s not very cache friendly. Sometimes it’s OO for good reasons, sometimes it’s because we’re used to coding that way.I’ll talk about how we can write more cache friendly code in the middle of OO systems and start moving towards data oriented designs
We’ll spend most of our time on concrete examples from the pathfinding code.I’ll start by explaining how AI decision making, pathfinding and animation works togetherThen we'll move on and look at actual Frostbite code. Talk a bit about memory allocations, cache locality, asynchronous patterns, latency and so on. I've set aside some time for questions at the end
The pathfinding runtime sits between a bunch of OO systems, so we can’t make it fully data oriented without rewriting some of them too.What we _can_ do is collect all pathfinding operation from each individual OO bot and sort them on type. Then we can process all of the same type at the same time which gives us very good cache locality. We can also minimize memory allocations&fragmentation and avoid cache misses that way.Then we have a few steps inside the pathfinding which is written in a dataoriented way. But in the end we have to return to the OO world again.
Before we dive into the code I want to explain what the code does.Say we have this level with a bot over here and he...
... _decides_ to go into cover over here. The pathfindeing needs to find a path to get from A to B and then it’s the animation system’s responsability to follow this path.What we have at our disposal is a nav mesh. It looks like this
It’s a set of 3D polygons which describes where bots can walk.NavPower does a search in this mesh to figure out how to get from A to B.
It returns a path, a list of straight lines that you should walk along to get to your destination.But humans do not walk on perfectly straight lines, we tend to move in a smoother fashion. The animation system wants to diverge a bit from the path to look natural.If have two obstacles and and a path that looks like this, the animation system might want to move more like the blue lineSo to give the animation system a bit of freedom to move around...
... we build a corridor the animation system can move within. So we move points away from corners a bit, give them a radius which says how tight the passage is.We also drop some unnecessary points that the pathfinding system produces
Finding a path from A to B is the most important operation that NavPower does.Naturally we load and unload the nav mesh. The nav mesh is split into a grid to support incremental rebuilds.We can add and remove obstacles that actually cut up the nav mesh at run time. We use it for slow moving vehicles & bangers so bots can walk around them. We might use them for destruction too, but pretty heavy operation. We detect if a path has gotten blocked by an obstacle, so we can pathfind againWe ask NavPower if it’s possible to go from point A to point B. When AI needs to select a random position he can first test and see that he can reach it before he pathfinds. We also perform a kind of ray casts, and tests to see if circles and triangles can fit onto the nav mesh.Now, to get good instruction and data cache locality inside NavPower we want to collect these operations and process them in a batch.Each frame we collect all pathfinding requests and process them together, collect all obstacles you want to add and feed them to NavPower.
When we changed our pathfinding implementation ...I started by goiing through all AI code and looked at how we used pathfinding. I simplified some things, disabled some others (frontline cover search) and abstracted the remaining use cases into three thingsFirst we have the pathfinder. It allows you to find paths, keeps track that they don’t get invalidated and they also build the corridors.Then there’s the random position generator. Each bot keeps a few randomized positions around that it know it can reach. Finally we have the global manager. It loads &unloads nav meshes. It creates&removes obstacles, it’ll handle destruction, also updates the other thingiesFew synchronous raycasts in some AI behaviours that was a bit tricky to collect and batch process. They didn’t run very often, just not worth the worth the effort, let them be synchronous
The patfindiner gives you a path from start to end and you can optionally build a corridor around it. It returns a handle which we will look at soonThen there is a more efficient versions which continues to search from the end of a previous path. When you’ve reached your destination you release your path and the pathfinder will stop checking if the path has been invalidated. Finally I’ve exposed these synchronous ray cast that some behaviours needed here.
The path handle is just a struct. It consists of a bunch of waypoints, the radii of the corridor and a state. Pretty typical pattern. You have a fixed set of handles that you reuse, so you don’t need to do any memory allocations. Ask for a handle, communicate by both parties polling and writing to the handle.But in this case we have an OO-style listener? Why don’t I poll state variable for updates?Well, I want to minimize latency and make sure that the animation system gets the result as soon as possible. But it’s not too bad, I collect and call all onStateChanged calls at the same time = good cache coherency
Fixed_vectors here are growable. If there’s less than 16 waypoints, which it is in 98% of the cases, they will use the memory allocated inside the path handle. If 16 not enough, this space is wasted because they need to allocate a contigous chunk of memory elsewhere. If it overshoots, allocate memory inside the pathfindingArena(). This is good because we won’t fragment other systems. We can more easily track memory usage and fragmentation one system at a time. These allocations have nasty life time 2-10 seconds -> causes a lot of fragmentation
Let’s look at the pathfinder implementation.The updatePaths function polls all navpower paths, creates the corridor for them and then copies the result to the PathHandles. notifyPathListeners simply notifies all path listeners whose path handles have changed state.It keeps an array of all the NavPower paths it needs.It a number of PathHandles and pointers to path handle listeners too.You use the same index into all of these containers, i.e. The NavPower path number 4 is associated with PathHandle 4 and PathHandle listener nr 4.There is a bitmask which says which of these indices in currently use.There are also some _non-growable_ fixed_vectors that contain all the paths that has been update this frame.All of these containers store their contents inside NavPowerPathfinder. Their storage is pre-allocated, sizes are fixed. You overshoot, you crash. The Full control over memory usage, no allocations, no fragmentation and very good data locality.But you should be careful so you don’t consume too much memory. It’s good practice to do a rough estimate on how big these containers are. Sizeof(NavPowerPathfinder) ~ 25kb
Let’s go a bit deeper and look at the corridor. It does four things:It copies all new navpower paths to an intermediate representation suited for corridor calculations.For each path we then it drops all of those extra points that NavPower generated each time we crossed a nav mesh polygonNext, we create the actual corridor for the paths that supplied the optional corridor radiusFinally we copy the results to the PathHandlesNow, ordinary Heap allocations are pretty expensive. They have to be threadsafe _and_ they have to find a good slot in the perhaps fragmented memory you have left. In this case we just want some temporary memory, use it a short while, and then throw it away.And that’s exactly what the scratch pad is for. The scratch pad is a chunk of memory we’ve set aside for short lived allocations. It uses a simple & cheap linear allocator. It allocates a fairly large block, I think it’s 128kb, when you create a ScratchPadArena. Whenever you allocate something it just increments a pointer. And when it goes out of scope, it’s destructed will return the entire block in one call. It never tries to reclaim the memory you release, so if you new and immediately delete a pointer that memory wont be released until you destroy the scratchpadarena.A typical use case is to create a ScratchPadArena on the stack and pass it to a container constructor. This container will then use this allocator you gave it when you call push_back/insert/resize or other operations that needs to allocate memory.Step number one will create several corridors on the scratch pad. Let’s look at the code for step 2,3 and 4
We have two vectors, one contain all of the paths in this intermediate corridor representation. The other contain pointers to all of corridors that need adjustment.Then we just loop over all of the corridors and do one operation at a time.One of these corridors might look like this. We have a start point and an end point and a bunch of intermediate points with the corridor radius set originally.First we drop all intermediate points for all corridors..Shrink. Haven’t actually implemented yetThe good thing about doing it this way is that we do all circle test at the same time, then we do all corner displacements and so on.Writing the code this way is not a whole lot more complicated, you just add some extra for loops
Let’s zoom out and what the manager does each updateAdds and removes all obstaclesThis call does we pathfinding&string-pulingThen we poll the pathfinding handles and do the corridor adjustments We have several pathfinders, on for the infantry nav mesh, one for a tank nav meshThen we update all path listenersThen we generate random positions. So they will be available
The biggest performance benefit of doing calculation this way is on heavy frames. It’ll be much cache friendlier to handle a frame where you spawn 10 vehicles and they all create an obstacle each.You keep running the same code over and over and it’s hot. If you instead would add an obstacle immediately when you spawn a vehicle, you would go deep into NavPower, run into lots of cache misses and once you return back to spawn you might have evicted most spawn related code and data because you touched so much code and data inside NavPower.Even if you just have say two path requests, one destruction event and some random positions to generate. Well then you will keep generic NavPower system code hot if you execute them together. And more importantly, you won’t make AI decision making code&data cold by taking deep dives into a call stack.Easier to jobify/timesilceNot a lot of extra work to write code this way, sometimes it’s even simpler and takes less code. I.e. AI decision making is easy to understand if we can see all its inputs and all its outputs.
All pathfinding abstraction are asynchronous, but in different waysMost of what the manager does is pretty natural to do once per frame. One thing it does it collect destruction messages and then batch processRandom position generator runs about We’ve looked at how the pathfinder is implemented but we haven’t talked about how it’s used.AI Decision making decides it want to go somewhere, goes into its movement behaviour and happily assumes it moves. And in 99% of the cases it will work, cause either scripted waypoints or randomly selected positions we can reach. In the cases it doesn’t, well the AI will think he’s moving for a frame or two but that’snot really a problem.
If you want to look at the real code there’s a bit more functionality and layers you should know about.You can input scripted sequences, there is a path following layer, you can steer both vehicles and infantry.We use a server-client model and we only run AI and pathfinding on the server. Beside from actual waypoints we have the corridor radius and scripted data. The scripted data informs the bot that this waypoint is a vault point or that the bot should stop and pause a few seconds.We don’t really use them until in the locomotion code. So each step here only works with the data it needs.Even in the object oriented part of the code, where there is one instance per bot, the data is represented as three separate vectors and each step only touches the information it needs.Pathfinding only takes waypoints as input in the form of start and ends of a scripted segment. And it returns new waypoints and radii. These radii are just passed on to the locomotion client.When you have this many steps and you start making them asynchronous you have to be careful to not introduce needless latency.
Each server tick we first let all AI think which may result in path requests Directly afterwards we update the pathfinding manager.It will process all pathfinding requests, then do all corridor adjustments, then do all path handle notifications.These are OO-style synchronous callbacks, so they will immediately go down thorugh the path following layer and into the server locomotion component and set data. Go back and forth up and down. Not a problem, small often identical stack, cache will be hot!The network pulse will send the data off to the client side.So there is no extra latency involved here
Let’s recap on some of the super simple patterns we’ve seen.Callbacks are the classical OO async mechanism. When we use them we do not have to fire them immediately. If you expect several of the same type to happen each frame or you know they will dive into a really deep callstack or touch a lot of data, it can be worthwhile to delay them.You can use handles and polling instead of callbacks. Checking a flag is much cheaper than a virtual callback.Similar for messages, you do not have to act immediately.If it’s not too difficult to recover from failure, you can just assume an operation succeeds if you need to make it asynchronousIn some cases you can even pre-calculate information you’re likely to need. Can’t place break point and get vertical slice of 10 systems... But...can we really afford such deep calls given the price of memory access?
Other than pre-calculating things you should also pre-fetch it.When you’re writing data-oriented code you have a clear set of inputs and you make sure you have them available before you start working. We can often do the same thing in OO code.For instance we need to use a PathFollower in basically every frame in AI decision making code. It’s hidden deep in the component hiearchy. So instead of digging it out each time we need it, we do it once when the bot changes vehicle and the AI code will then use this reference to access the pathfollower
New/push_back(): Good place to stop and thinkWhere is the memory allocated? Did I specify an arena?Can I use pre-allocated containers and skip allocations alltogether?If not, can I use the scratch pad?Can I resize or reserve the memory immediately, so I don’t have to grow it incrementally and make many small allocations.Optional is a preallocated container with 0 or 1 element, can I use that instead of a ScopedPtr and save a dynamic allocation?Once you’ve done this 5 times you will do it in your sleep
We first looked at how AI decision making, pathfinding & animation worked togetherWe saw how the pathfinding use cases were grouped into some async abstractionsWe looked at a lot of codeWe saw a latency analysis