SlideShare a Scribd company logo
「Press Button, Drink Coffee」
An overview of
UE4 build pipeline and maintenance
#UE4 | @UNREALENGINE
Introduction
Axel Riffard
Epic Games Japan
Support Engineer
● French 🇫🇷
● Twitter : @AxRiff
● Hobbies : Whisky, Cats and Disneyland
● Currently Playing: Dragon Quest XI, COD Mobile, The Witcher III (Switch)
#UE4 | @UNREALENGINE
FIRST OF ALL …
#UE4 | @UNREALENGINE
HELL YEAH POLAND !
#UE4 | @UNREALENGINE
Ruiner !
Frostpunk !
Dead Island !
Dying Light !
The Vanishing of Ethan Carter !
And …
#UE4 | @UNREALENGINE
Geralt of Rivia !
<3
#UE4 | @UNREALENGINE
Ok, back on topic
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Disclaimer
There is no such thing as THE perfect pipeline.
Rely on experience ! In this session, I will only talk to you about mine and
give you a few best practices. But donʼt trust me, trust yourself !
#UE4 | @UNREALENGINE
Agenda
●CI : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
Agenda
●CI : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Dev
2
Dev
1
Dev
3
Versioning
System
Why ?
#UE4 | @UNREALENGINE
● Local build breaks after updating
● Finding the bad commit wastes time
● Communication issues, fights in the team
● Non technical members are scared to commit things
● Building locally every time is a waste
Consequences
#UE4 | @UNREALENGINE
CI Software
CI = Continuous Integration
A combination of software and hardware allowing to merge the team source
code and assets several times every day.
#UE4 | @UNREALENGINE
Why ?
Dev
2
Dev
1
Dev
3
Versioning
System
#UE4 | @UNREALENGINE
Software
#UE4 | @UNREALENGINE
CI Software
In 2019, there is no bad choice.
I have worked with both TeamCity and Jenkins, and was satisfied with
both of them
#UE4 | @UNREALENGINE
CI Software
Jenkins TeamCity
#UE4 | @UNREALENGINE
Jenkins
#UE4 | @UNREALENGINE
Jenkins
Merits︓
● Free Open Source
● Plenty of documentation and plugins
● Huge Community
Drawbacks︓
● Commercial Support exists but is complicated
● Some plugins are unreliable
#UE4 | @UNREALENGINE
TeamCity
#UE4 | @UNREALENGINE
TeamCity
Merits :
● Building pipelines is crazy fast
● Technical support is great
Drawbacks :
● Limitations on the Free version
#UE4 | @UNREALENGINE
CI Software
Every advice can be applied to TeamCity, or any CI solution.
Also, totally unrelated, but this cat looks like Jenkins mascot, so Iʼm going
to use him instead.
#UE4 | @UNREALENGINE
Hardware
#UE4 | @UNREALENGINE
Build Machine
Master → Manages the tasks.
Slave → Does the tasks.
#UE4 | @UNREALENGINE
Build Machine
VersioningDEV PC
CI Server
Master
Slack
Commit
Slave 1 Slave 2 Slave 3
Company
Server
Poll
Distribute
Versioning
#UE4 | @UNREALENGINE
Build Machine – How many
Prototyping Stage :
● Just the Master
Production Stage :
● One Master
● One slave for every release platform
#UE4 | @UNREALENGINE
Build Machine - OS
Master︓Win64 or Linux
Slave︓Win64(for platforms SDK), MacOS for Apple Platforms
#UE4 | @UNREALENGINE
Build Machine - Windows
Storage︓SSD
Memory ︓32GB or more
CPU︓i7 / i9
#UE4 | @UNREALENGINE
Build Machine - MacOS
No C++ and Shader compiling distribution on Mac,
So get as many cores as you can for your CPU.
If itʼs just for a build machine, no need for GPU.
High spec Mac Mini is good enough.
#UE4 | @UNREALENGINE
Agenda
●Continuous Integration : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
Building in UE4
● Engine and Editor
● Game sources
● Game Assets (lights, shaders, etc.)
● Tools
#UE4 | @UNREALENGINE
Build Commands
Find all the command lines here
https://github.com/AxRiff/UnrealEngineJenkins
#UE4 | @UNREALENGINE
UnrealAutomationTool
UnrealAutomationTool is a complete system to build and test your games
inside of Unreal Engine
UE4 is mainly written in C++, but UnrealAutomationTool is made in C#
#UE4 | @UNREALENGINE
UnrealAutomationTool
Depending on your company size, type of project, workflow, etc., you can
use different parts of UnrealAutomationTool
● BuildGraph Custom Script
● BuildGraph InstalledBuild Script
● BuildCookRun Command Line Tool
#UE4 | @UNREALENGINE
BuildGraph
#UE4 | @UNREALENGINE
BuildGraph
BuildGraph is a script based build automation system inside of
UnrealAutomationTool
● XML
● By Epic for Epic
● Original approach
#UE4 | @UNREALENGINE
BuildGraph
Youʼve got plenty of sample codes in
Engine/Build/Graph/Examples/
#UE4 | @UNREALENGINE
BuildGraph
Merits :
● Reduce dependency on CI framework.
● Work on it locally -> No more Jenkins master
● XML Based : easy to read and write
● Platform Agnostic
● Can be shared between projects
Drawbacks :
● Steep learning curve at first
#UE4 | @UNREALENGINE
BuildGraph
● Agents: Group of nodes being executed on the same build machine
● Nodes: Sequence of Tasks
● Tasks: Build Process Step (Updating, Compiling, etc)
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<Agent Name="Default Agent" Type="CompileWin64">
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)"
Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files"
Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64"
Configuration="Development" Tag="#ToolBinaries"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64"
Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64"
Configuration="Development" Tag="#EditorBinaries"/>
</Node>
#UE4 | @UNREALENGINE
BuildGraph
<Agent Name="Default Agent" Type="CompileWin64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
</Agent>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="GameTarget" Values="$(GameTargets)">
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile $(GameTarget) $(TargetPlatform)"
Requires="Compile Tools Win64"
Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)">
<Compile Target="$(GameTarget)" Platform="$(TargetPlatform)"
Configuration="Development"
Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries"
Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/>
</ForEach>
</ForEach>
#UE4 | @UNREALENGINE
InstalledBuild
#UE4 | @UNREALENGINE
InstalledBuild
● Think of it as your own Unreal Launcher
● Created by Epic to deploy a non editable engine
Engine/Build/InstalledEngineBuild.xml
● Easy to use for Designers and Artists
● Engine build only. Canʼt use it to build a project.
#UE4 | @UNREALENGINE
InstalledBuild
Installed Build mains steps
1. Update Version File
2. Compile UnrealHeaderTool Win64
3. Compile UE4Editor Win64
4. Compile UE4Game Win64
5. Compile UE4Game (Platform)
6. Build Tools Win64
7. Build Tools CS
8. Make Feature Packs
9. Build DDC Win64
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
InstalledBuild
Engine/Build/BatchFiles/RunUAT.bat BuildGraph
-target”Make Installed Build Win64”
-script=/Engine/Build/InstalledEngineBuild.xml
-clean
#UE4 | @UNREALENGINE
BuildCookRun
#UE4 | @UNREALENGINE
BuildCookRun
#UE4 | @UNREALENGINE
BuildCookRun
● Script located at /Engine/Build/BatchFiles/
● From build to package, do anything
● Highly customizable
● Command line based : nostalgic feeling ! <3
#UE4 | @UNREALENGINE
BuildCookRun, BuildGraph, InstalledBuild
● Depending on the situation, the best choice will differ
● I think adaptability is the most important thing in game dev, so I
personally use BuildCookRun most of the time.
#UE4 | @UNREALENGINE
Agenda
●CI : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
Command Lines
#UE4 | @UNREALENGINE
Engine DLL Build
If you donʼt edit the Engine a lot, trigger it manually
If you extend the Engine a lot, do it once a day. Morning or Lunch Time
is preferred
#UE4 | @UNREALENGINE
Build Machine
Jenkins Build
Commit to
Source Control
Update
Notify
#UE4 | @UNREALENGINE
Build Command
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -
project=Samples/StarterContent/StarterContent.uproject -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -build
ENGINE_ROOT=EngineRoot
ENGINE_COMPILATION_TARGET=Development
ENGINE_PLATFORM_TARGET=Win64
Yup, thatʼs a little hard to read
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
You need a uproject to use RunUAT. You
can use a sample project or blank one !
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=Samples/StarterContent/StarterContent.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
Project DLL build
Poll every 10 minutes to build
Jenkins Build
Commit to
Source Control
Update
Notify
#UE4 | @UNREALENGINE
Build Command
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project= project=%GAME_SUB_PATH%/%GAME_NAME%.uproject -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -build
ENGINE_ROOT=EngineRoot
ENGINE_COMPILATION_TARGET=Development
ENGINE_PLATFORM_TARGET=Win64
GAME_SUB_PATH=C:/GamePath
GAME_NAME=GameName
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=C:/PathToTheGame/GameName.uproject
-platform=Win64
-clientconfig=Development
-build
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Packaging
#UE4 | @UNREALENGINE
Nightly Build
● Well, itʼs build every night.
● Development, Test(for profiling), Shipping for every release platform.
Time doesnʼt matter, so clean build
#UE4 | @UNREALENGINE
Nightly Build Flow
ZipJenkins Build
Copy to
Shared Folder
Update
Notify
#UE4 | @UNREALENGINE
Build Command
%ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -
project=%GAME_SUB_PATH%/%GAME_NAME%.uproject -noP4 -
platform=%ENGINE_PLATFORM_TARGET% -
clientconfig=%ENGINE_COMPILATION_TARGET% -cook -allmaps -build -stage
-pak -archive -archivedirectory=%TEMP_DIR%
ENGINE_ROOT=PathToYourEngine
GAME_SUB_PATH=PathToYourProject
GAME_NAME=UprojectFileWithoutTheExtension
ENGINE_COMPILATION_TARGET=Development|Shipping|etc
ENGINE_PLATFORM_TARGET=Win64|etc
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
Argument to zip all the assets in one “pak” file
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-archivedirectory=C:/TempDirectory/
#UE4 | @UNREALENGINE
Build Command
robocopy %ARCHIVE_DIR%/latest %ARCHIVE_DIR%/%ENGINE_PLATF
ORM_TARGET%/archive /E /IS /MOV
set PATH=%PATH%;C:/Program Files/7-Zip/
7z.exe a -tzip -mmt -
mx1 %ARCHIVE_DIR%/latest/%BUILD_NUMBER%.zip %TEMP_DIR%/
exit 0
#UE4 | @UNREALENGINE
Build Command
Wait a sec !!
#UE4 | @UNREALENGINE
Build Command
https://github.com/electronicarts/EACopy
Twitter : @honk_dice
EA DICE Studios has open sourced EACopy, a faster alternative to
robocopy !
Give it a try !!!
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Incremental Build
● Manual Trigger
● For those “Hey mate, I need to show the build in 40 minutes to our
investor / boss / publisher, do smth plz lolwut”
● Contrary to the nightly build, faster is better so …
● Use -partialgc
● Donʼt make it clean
#UE4 | @UNREALENGINE
Incremental Build Flow
Jenkins Build
Send to
DevKit
Update
Notify
For DevKit deployment, check your platform
But you might get an idea
/Engine/Source/Programs/AutomationTool/PlatformName/PlatformNamePlatfo
rm.Automation.cs
#UE4 | @UNREALENGINE
Build Command
Engine/Build/BatchFiles/RunUAT.bat BuildCookRun
-project=GamePath/GameName.uproject
-noP4
-platform=Win64
-clientconfig=Development
-cook
-allmaps
-build
-stage
-pak
-archive
-partialgc
-archivedirectory=C:/TempDirectory/
Instead of cleaning the memory when you run out of it, it will free it
up at the end of the packaging process
#UE4 | @UNREALENGINE
#UE4 | @UNREALENGINE
Jenkins Plugins
#UE4 | @UNREALENGINE
Plugins
Build Pipeline Plugin
https://wiki.jenkins.io/display/JENKINS/Build+Pipeline+Plugin
#UE4 | @UNREALENGINE
Plugins
Jenkins Slack Plugin
https://github.com/jenkinsci/slack-plugin
#UE4 | @UNREALENGINE
Plugins
Retaliation
https://github.com/codedance/Retaliation
#UE4 | @UNREALENGINE
Agenda
●CI : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
Other CI Jobs
#UE4 | @UNREALENGINE
Commandlet
Command Line Applet is a command program to be run inside of Unreal
Engine environment.
#UE4 | @UNREALENGINE
Shared DDC
Derived Data Cache (DDC) is a feature to keep assets that were
prepared for every platform.
To make it simple, itʼs an asset caching feature.
#UE4 | @UNREALENGINE
Shared DDC
Shared
FolderDev PC 1
Copy Built Asset
Build Assets on
1st launch
#UE4 | @UNREALENGINE
Shared DDC
Shared
Folder
Dev PC 5Dev PC 4
Dev PC 3Dev PC 2
Copy Built Asset
#UE4 | @UNREALENGINE
Shared DDC
Shared
FolderDev PC 4
Modify / Add
Asset
Copy Built Asset
#UE4 | @UNREALENGINE
Shared DDC
https://docs.unrealengine.com/en-
US/Engine/Basics/DerivedDataCache/index.html
BaseEngine.ini
[InstalledDerivedDataBackendGraph]
MinimumDaysToKeepFile=7
Root=(Type=KeyLength, Length=120, Inner=AsyncPut)
AsyncPut=(Type=AsyncPut, Inner=Hierarchy)
Hierarchy=(Type=Hierarchical, Inner=Boot, Inner=Pak, Inner=EnginePak, Inner=Local, Inner=Shared)
Boot=(Type=Boot, Filename=%GAMEDIR%DerivedDataCache/Boot.ddc, MaxCacheSize=256)
Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true,
UnusedFileAge=17, FoldersToClean=-1, Path=../../../Engine/DerivedDataCache)
Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19,
FoldersToClean=-1, Path=//mystudio.net/DDC, EnvPathOverride=UE-SharedDataCachePath)
AltShared=(Type=FileSystem, ReadOnly=true, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19,
FoldersToClean=-1, Path=//mystudio.net/DDC2, EnvPathOverride=UE-SharedDataCachePath2)
Pak=(Type=ReadPak, Filename=%GAMEDIR%DerivedDataCache/DDC.ddp)
EnginePak=(Type=ReadPak, Filename=../../../Engine/DerivedDataCache/DDC.ddp)
#UE4 | @UNREALENGINE
Argument Type Comment
ReadOnly Bool Make it false when Shared
Clean Bool Delete files that went over UnusedFileAge limit
Flush Bool Delete all DDC
DeleteUnused Bool Il false, never deletes old assets (overrides UnusedFileAge and Clean)
UnusedFileAge Int Limit of days after which an asset will be deleted, Fortnite sets it to 10.
FoldersToClean Int Max limit of folders to be flushed each time. 0 or -1 means no limit.
Shared DDC
#UE4 | @UNREALENGINE
Shared DDC
// Flush and Clean argument DerivedDataBackends.cpp:553
if( bFlush )
{
IFileManager::Get().DeleteDirectory( *(Path / TEXT(“”)), false, true );
}
else if( bClean )
{
DeleteOldFiles( *Path );
}
/** Delete the old files in a directory **/
void DeleteOldFiles(const TCHAR* Directory)
{
float MinimumDaysToKeepFile = 7;
GConfig->GetFloat( *GraphName, TEXT("MinimumDaysToKeepFile"), MinimumDaysToKeepFile, GEngineIni );
check(MinimumDaysToKeepFile > 0.0f); // sanity
//@todo
}
#UE4 | @UNREALENGINE
Shared DDC
//@todo
#UE4 | @UNREALENGINE
Shared DDC
UE4Editor-cmd.exe ProjectName –run=DerivedDataCache -fill
del /s /q c:/ServerShareDDCPath/*
#UE4 | @UNREALENGINE
Lighting Build
● All lights except the ones calculated in real time are to be built.
● Of course, Epic is providing the tools for it.
But …
#UE4 | @UNREALENGINE
Lighting Build
#UE4 | @UNREALENGINE
Itʼs SUPER heavy and slow
Let your CI pipe do it !
Lighting Build
#UE4 | @UNREALENGINE
Lighting Build
UE4Editor-cmd.exe ProjectName -run=resavepackages
-buildlighting -allowcommandletrendering
#UE4 | @UNREALENGINE
Lighting Build
There are times you want to check the lights in the editor / game
In this case, build locally, and Swarm is your new BFF
#UE4 | @UNREALENGINE
Lighting Build - Swarm
With Swarm, you can distribute the task of
building lights between the computers of your
team.
You will need a Coordinator. Your Jenkins master
should do the trick.
https://wiki.unrealengine.com/Swarm_Agent_Trou
bleshooting
#UE4 | @UNREALENGINE
Lighting Build - Swarm
Engine/Binaries/DotNET/SwarmCoordinator.exe
Engine/Binaries/DotNET/SwarmAgent.exe
To add it at startup,
Create a shortcut the the Agent and copy it here.
%APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup
#UE4 | @UNREALENGINE
Lighting Build - Swarm
#UE4 | @UNREALENGINE
Redirectors
● When you move or rename an asset in the editor, a Redirector is created to
know the ”new address”
● Super convenient feature but it has a tendency to bug, so you will need to
clean them up frequently
● Once a month is fine, but do it once a week in the critical phases of the
project (alpha, beta, gold, patch release)
https://docs.unrealengine.com/en-US/Engine/Basics/Redirectors/index.html
#UE4 | @UNREALENGINE
Redirectors
UE4Editor-cmd.exe ProjectName -run=fixupredirects
#UE4 | @UNREALENGINE
Agenda
●CI : What is it ?
●UnrealAutomationTool
●Building the Engine and your Project
●The other stuff
●The Unreal Way
#UE4 | @UNREALENGINE
The Unreal Way :
Fortnite
#UE4 | @UNREALENGINE
Fortnite
● Only engineers have Visual Studio
● We are building with BuildGraph managed by ElectricCommander
● We are heavily using UnrealGameSync
#UE4 | @UNREALENGINE
Iteration
Iteration can seem complicated without Visual Studio.
But actually, itʼs pretty manageable.
● Heavily rely on PIE for testing
● Leverage your CI software properly
#UE4 | @UNREALENGINE
Testing a Level on Device
So letʼs say your artist has just changed a characterʼs hair color and
wants to see how it looks on the release platform screen before
committing…
First, create an incremental build task on your CI software, and commit
the binaries to Project/Binaries/PlatformName
#UE4 | @UNREALENGINE
Custom Launch Profile
Then in the editor, click on the triangle on
the right side of of “Launch”, scroll down
and create a new Custom Launch Profile
Stored in
/Engine/Programs/UnrealFrontend/Profiles
In the profile, untick the Build step, and
then you can deploy the currently edited
level on the machine connected to the
computer, even without Visual Studio.
Magic !!
#UE4 | @UNREALENGINE
Build Machine Jobs
What I think a UE4 build pipeline should have :
● Engine Build
● Project Build
● Nightly Package
● Incremental Package
● Incremental Package for the Device Launcher
● Lightmaps Build
● Fixup Redirectors Command
● SharedDDC Cleanup Command
● SharedDDC Fillup Command
Any suggestion on what to add ? Tell me in Q&A !!!
#UE4 | @UNREALENGINE
Versioning
● Epic uses Perforce. If you want to be as close as possible to our
workstyle, you know what to do
● SVN might be a little slow, but it is very reliable and still heavily used
● GIT is free, modern design choices and is very used for mobile and
social games (in Japan !)
SVN and Perforce have Editor support !
GIT too, but itʼs still experimental !
#UE4 | @UNREALENGINE
UnrealGameSync
Made by Epic for Epic. Heavily used on Fortnite
Itʼs Perforce only, and it allows non technical staff not to have to deal with
P4V
#UE4 | @UNREALENGINE
UnrealGameSync
#UE4 | @UNREALENGINE
UnrealGameSync
P4 Server
Sync
Get
Engine
Local Builds
(Binary Engine)
Build Machine
#UE4 | @UNREALENGINE
UnrealGameSync
Get the latest version anytime on GitHub and Perforce.
UGS dev is unrelated to UE4, so always get the latest version even if
youʼve locked your engine version !
https://docs.unrealengine.com/latest/en/Programming/Deployment/Unre
alGameSync/Reference/
#UE4 | @UNREALENGINE
https://github.com/gpageot/JenkinsUE4
Twitter : @GregoryPAGEOT
https://github.com/AxRiff/UnrealEngineJenkins
Twitter : @AxRiff
https://github.com/electronicarts/EACopy
Twitter : @honk_dice
Manga by @shiba_zushi, Technical Artist at Epic Games Japan.
Links
#UE4 | @UNREALENGINE
Merci !

More Related Content

What's hot

UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
エピック・ゲームズ・ジャパン Epic Games Japan
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
 
非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen
エピック・ゲームズ・ジャパン Epic Games Japan
 
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
エピック・ゲームズ・ジャパン Epic Games Japan
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編) UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編)
エピック・ゲームズ・ジャパン Epic Games Japan
 
はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話
エピック・ゲームズ・ジャパン Epic Games Japan
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
com044
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編
エピック・ゲームズ・ジャパン Epic Games Japan
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
エピック・ゲームズ・ジャパン Epic Games Japan
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
エピック・ゲームズ・ジャパン Epic Games Japan
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4.17で入る新機能を一気に紹介・解説!
UE4.17で入る新機能を一気に紹介・解説!UE4.17で入る新機能を一気に紹介・解説!
UE4.17で入る新機能を一気に紹介・解説!
エピック・ゲームズ・ジャパン Epic Games Japan
 

What's hot (20)

UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
UE4を用いたTPS制作事例 EDF:IR パラメータ管理実装実例
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
 
非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen非同期ロード画面 Asynchronous Loading Screen
非同期ロード画面 Asynchronous Loading Screen
 
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
Online MultiPlay Game Design
 
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
[IGF2018] UE4でAndroidアプリを開発する際に知っておきたいパフォーマンス改善テクニック + INDIE GAMES FESTIVAL 2...
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法
 
UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編) UE4における大規模背景制作事例(コリジョン編)
UE4における大規模背景制作事例(コリジョン編)
 
はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話はじめてアンリアルエンジンで海戦をつくってみたときのお話
はじめてアンリアルエンジンで海戦をつくってみたときのお話
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
 
UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編UE4における大規模背景制作事例 描画特殊表現編
UE4における大規模背景制作事例 描画特殊表現編
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について猫でも分かる UE4の新しいサンプル「Action RPG」について
猫でも分かる UE4の新しいサンプル「Action RPG」について
 
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
 
Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!Unreal Engine最新機能 アニメーション+物理ショーケース!
Unreal Engine最新機能 アニメーション+物理ショーケース!
 
UE4.17で入る新機能を一気に紹介・解説!
UE4.17で入る新機能を一気に紹介・解説!UE4.17で入る新機能を一気に紹介・解説!
UE4.17で入る新機能を一気に紹介・解説!
 

Similar to Press Button, Drink Coffee : An Overview of UE4 build pipeline and maintenance

Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Jessica Tams
 
Luis cataldi-siggraph 2015
Luis cataldi-siggraph 2015Luis cataldi-siggraph 2015
Luis cataldi-siggraph 2015
Luis Cataldi
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
Gerke Max Preussner
 
Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Vasilis Kamakaris
 
Migrating to real time - Learning Unreal Engine 4
Migrating to real time - Learning Unreal Engine 4Migrating to real time - Learning Unreal Engine 4
Migrating to real time - Learning Unreal Engine 4
Luis Cataldi
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4
Martin Pernica
 
Using FireMonkey as a game engine
Using FireMonkey as a game engineUsing FireMonkey as a game engine
Using FireMonkey as a game engine
pprem
 
Accelerate Your Game Development on Android*
Accelerate Your Game Development on Android*Accelerate Your Game Development on Android*
Accelerate Your Game Development on Android*
Intel® Software
 
Programming the Real World: Javascript for Makers
Programming the Real World: Javascript for MakersProgramming the Real World: Javascript for Makers
Programming the Real World: Javascript for Makers
pchristensen
 
Practical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on Mobiles
Valentin Simonov
 
Implementing OpenCL support in GEGL and GIMP
Implementing OpenCL support in GEGL and GIMPImplementing OpenCL support in GEGL and GIMP
Implementing OpenCL support in GEGL and GIMP
lgworld
 
Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*
Intel® Software
 
AGDK tutorial step by step
AGDK tutorial step by stepAGDK tutorial step by step
AGDK tutorial step by step
Jungsoo Nam
 
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
CODE BLUE
 
Climberreport
ClimberreportClimberreport
Climberreport
LuckyTolani1
 
Unreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkUnreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game Framework
Nick Pruehs
 
EOS On-boarding ~サンプルを動かしてみよう~
EOS On-boarding ~サンプルを動かしてみよう~EOS On-boarding ~サンプルを動かしてみよう~
EOS On-boarding ~サンプルを動かしてみよう~
エピック・ゲームズ・ジャパン Epic Games Japan
 
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...Gerke Max Preussner
 
Raphael Morgan, Product Manager, AirConsole
Raphael Morgan, Product Manager, AirConsoleRaphael Morgan, Product Manager, AirConsole
Raphael Morgan, Product Manager, AirConsole
White Nights Conference
 
Dublin Unity User Group Meetup Sept 2015
Dublin Unity User Group Meetup Sept 2015Dublin Unity User Group Meetup Sept 2015
Dublin Unity User Group Meetup Sept 2015
Dominique Boutin
 

Similar to Press Button, Drink Coffee : An Overview of UE4 build pipeline and maintenance (20)

Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
 
Luis cataldi-siggraph 2015
Luis cataldi-siggraph 2015Luis cataldi-siggraph 2015
Luis cataldi-siggraph 2015
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
 
Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Endless runner game in unreal engine 4
Endless runner game in unreal engine 4
 
Migrating to real time - Learning Unreal Engine 4
Migrating to real time - Learning Unreal Engine 4Migrating to real time - Learning Unreal Engine 4
Migrating to real time - Learning Unreal Engine 4
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4
 
Using FireMonkey as a game engine
Using FireMonkey as a game engineUsing FireMonkey as a game engine
Using FireMonkey as a game engine
 
Accelerate Your Game Development on Android*
Accelerate Your Game Development on Android*Accelerate Your Game Development on Android*
Accelerate Your Game Development on Android*
 
Programming the Real World: Javascript for Makers
Programming the Real World: Javascript for MakersProgramming the Real World: Javascript for Makers
Programming the Real World: Javascript for Makers
 
Practical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on MobilesPractical Guide for Optimizing Unity on Mobiles
Practical Guide for Optimizing Unity on Mobiles
 
Implementing OpenCL support in GEGL and GIMP
Implementing OpenCL support in GEGL and GIMPImplementing OpenCL support in GEGL and GIMP
Implementing OpenCL support in GEGL and GIMP
 
Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*
 
AGDK tutorial step by step
AGDK tutorial step by stepAGDK tutorial step by step
AGDK tutorial step by step
 
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
[CB21] MUSHIKAGO: IT and OT Automation Penetration testing Tool Using Game AI...
 
Climberreport
ClimberreportClimberreport
Climberreport
 
Unreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game FrameworkUnreal Engine Basics 01 - Game Framework
Unreal Engine Basics 01 - Game Framework
 
EOS On-boarding ~サンプルを動かしてみよう~
EOS On-boarding ~サンプルを動かしてみよう~EOS On-boarding ~サンプルを動かしてみよう~
EOS On-boarding ~サンプルを動かしてみよう~
 
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...
 
Raphael Morgan, Product Manager, AirConsole
Raphael Morgan, Product Manager, AirConsoleRaphael Morgan, Product Manager, AirConsole
Raphael Morgan, Product Manager, AirConsole
 
Dublin Unity User Group Meetup Sept 2015
Dublin Unity User Group Meetup Sept 2015Dublin Unity User Group Meetup Sept 2015
Dublin Unity User Group Meetup Sept 2015
 

More from エピック・ゲームズ・ジャパン Epic Games Japan

初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
エピック・ゲームズ・ジャパン Epic Games Japan
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
エピック・ゲームズ・ジャパン Epic Games Japan
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
エピック・ゲームズ・ジャパン Epic Games Japan
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
エピック・ゲームズ・ジャパン Epic Games Japan
 
猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTERUnreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
エピック・ゲームズ・ジャパン Epic Games Japan
 

More from エピック・ゲームズ・ジャパン Epic Games Japan (20)

初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
 
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
 
猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道猫でもわかる Epic MegaGrants 応募への道
猫でもわかる Epic MegaGrants 応募への道
 
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTERUnreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
Unreal Engine と XR でつくる「働く」の未来 | UNREAL FEST EXTREME 2020 WINTER
 

Recently uploaded

Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 

Recently uploaded (20)

Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 

Press Button, Drink Coffee : An Overview of UE4 build pipeline and maintenance

  • 1. 「Press Button, Drink Coffee」 An overview of UE4 build pipeline and maintenance
  • 2. #UE4 | @UNREALENGINE Introduction Axel Riffard Epic Games Japan Support Engineer ● French 🇫🇷 ● Twitter : @AxRiff ● Hobbies : Whisky, Cats and Disneyland ● Currently Playing: Dragon Quest XI, COD Mobile, The Witcher III (Switch)
  • 5. #UE4 | @UNREALENGINE Ruiner ! Frostpunk ! Dead Island ! Dying Light ! The Vanishing of Ethan Carter ! And …
  • 7. #UE4 | @UNREALENGINE Ok, back on topic
  • 9. #UE4 | @UNREALENGINE Disclaimer There is no such thing as THE perfect pipeline. Rely on experience ! In this session, I will only talk to you about mine and give you a few best practices. But donʼt trust me, trust yourself !
  • 10. #UE4 | @UNREALENGINE Agenda ●CI : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 11. #UE4 | @UNREALENGINE Agenda ●CI : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 14. #UE4 | @UNREALENGINE ● Local build breaks after updating ● Finding the bad commit wastes time ● Communication issues, fights in the team ● Non technical members are scared to commit things ● Building locally every time is a waste Consequences
  • 15. #UE4 | @UNREALENGINE CI Software CI = Continuous Integration A combination of software and hardware allowing to merge the team source code and assets several times every day.
  • 16. #UE4 | @UNREALENGINE Why ? Dev 2 Dev 1 Dev 3 Versioning System
  • 18. #UE4 | @UNREALENGINE CI Software In 2019, there is no bad choice. I have worked with both TeamCity and Jenkins, and was satisfied with both of them
  • 19. #UE4 | @UNREALENGINE CI Software Jenkins TeamCity
  • 21. #UE4 | @UNREALENGINE Jenkins Merits︓ ● Free Open Source ● Plenty of documentation and plugins ● Huge Community Drawbacks︓ ● Commercial Support exists but is complicated ● Some plugins are unreliable
  • 23. #UE4 | @UNREALENGINE TeamCity Merits : ● Building pipelines is crazy fast ● Technical support is great Drawbacks : ● Limitations on the Free version
  • 24. #UE4 | @UNREALENGINE CI Software Every advice can be applied to TeamCity, or any CI solution. Also, totally unrelated, but this cat looks like Jenkins mascot, so Iʼm going to use him instead.
  • 26. #UE4 | @UNREALENGINE Build Machine Master → Manages the tasks. Slave → Does the tasks.
  • 27. #UE4 | @UNREALENGINE Build Machine VersioningDEV PC CI Server Master Slack Commit Slave 1 Slave 2 Slave 3 Company Server Poll Distribute Versioning
  • 28. #UE4 | @UNREALENGINE Build Machine – How many Prototyping Stage : ● Just the Master Production Stage : ● One Master ● One slave for every release platform
  • 29. #UE4 | @UNREALENGINE Build Machine - OS Master︓Win64 or Linux Slave︓Win64(for platforms SDK), MacOS for Apple Platforms
  • 30. #UE4 | @UNREALENGINE Build Machine - Windows Storage︓SSD Memory ︓32GB or more CPU︓i7 / i9
  • 31. #UE4 | @UNREALENGINE Build Machine - MacOS No C++ and Shader compiling distribution on Mac, So get as many cores as you can for your CPU. If itʼs just for a build machine, no need for GPU. High spec Mac Mini is good enough.
  • 32. #UE4 | @UNREALENGINE Agenda ●Continuous Integration : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 33. #UE4 | @UNREALENGINE Building in UE4 ● Engine and Editor ● Game sources ● Game Assets (lights, shaders, etc.) ● Tools
  • 34. #UE4 | @UNREALENGINE Build Commands Find all the command lines here https://github.com/AxRiff/UnrealEngineJenkins
  • 35. #UE4 | @UNREALENGINE UnrealAutomationTool UnrealAutomationTool is a complete system to build and test your games inside of Unreal Engine UE4 is mainly written in C++, but UnrealAutomationTool is made in C#
  • 36. #UE4 | @UNREALENGINE UnrealAutomationTool Depending on your company size, type of project, workflow, etc., you can use different parts of UnrealAutomationTool ● BuildGraph Custom Script ● BuildGraph InstalledBuild Script ● BuildCookRun Command Line Tool
  • 38. #UE4 | @UNREALENGINE BuildGraph BuildGraph is a script based build automation system inside of UnrealAutomationTool ● XML ● By Epic for Epic ● Original approach
  • 39. #UE4 | @UNREALENGINE BuildGraph Youʼve got plenty of sample codes in Engine/Build/Graph/Examples/
  • 40. #UE4 | @UNREALENGINE BuildGraph Merits : ● Reduce dependency on CI framework. ● Work on it locally -> No more Jenkins master ● XML Based : easy to read and write ● Platform Agnostic ● Can be shared between projects Drawbacks : ● Steep learning curve at first
  • 41. #UE4 | @UNREALENGINE BuildGraph ● Agents: Group of nodes being executed on the same build machine ● Nodes: Sequence of Tasks ● Tasks: Build Process Step (Updating, Compiling, etc)
  • 42. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent>
  • 43. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent> <Agent Name="Default Agent" Type="CompileWin64">
  • 44. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node>
  • 45. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node>
  • 46. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node>
  • 47. #UE4 | @UNREALENGINE BuildGraph <Agent Name="Default Agent" Type="CompileWin64"> <!-- Update the engine version files --> <Node Name="Update Version Files"> <SetVersion Change="$(Change)" Branch="$(EscapedBranch)" Licensee="$(Licensee)" If="$(Versioned)"/> </Node> <!-- Compile the tool executables --> <Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries"> <Compile Target="UnrealHeaderTool" Platform="Win64" Configuration="Development" Tag="#ToolBinaries"/> </Node> <!-- Compile the editor executable --> <Node Name="Compile $(EditorTarget) Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries"> <Compile Target="$(EditorTarget)" Platform="Win64" Configuration="Development" Tag="#EditorBinaries"/> </Node> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach> </Agent> <!-- Compile the game targets --> <Property Name="GameBinaries" Value=""/> <ForEach Name="GameTarget" Values="$(GameTargets)"> <ForEach Name="TargetPlatform" Values="$(TargetPlatforms)"> <Node Name="Compile $(GameTarget) $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_$(GameTarget)_$(TargetPlatform)"> <Compile Target="$(GameTarget)" Platform="$(TargetPlatform)" Configuration="Development" Tag="#GameBinaries_$(GameTarget)_$(TargetPlatform)"/> </Node> <Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_$(GameTarget)_$(TargetPlatform);"/> </ForEach> </ForEach>
  • 49. #UE4 | @UNREALENGINE InstalledBuild ● Think of it as your own Unreal Launcher ● Created by Epic to deploy a non editable engine Engine/Build/InstalledEngineBuild.xml ● Easy to use for Designers and Artists ● Engine build only. Canʼt use it to build a project.
  • 50. #UE4 | @UNREALENGINE InstalledBuild Installed Build mains steps 1. Update Version File 2. Compile UnrealHeaderTool Win64 3. Compile UE4Editor Win64 4. Compile UE4Game Win64 5. Compile UE4Game (Platform) 6. Build Tools Win64 7. Build Tools CS 8. Make Feature Packs 9. Build DDC Win64
  • 51. #UE4 | @UNREALENGINE InstalledBuild Engine/Build/BatchFiles/RunUAT.bat BuildGraph -target”Make Installed Build Win64” -script=/Engine/Build/InstalledEngineBuild.xml -clean
  • 52. #UE4 | @UNREALENGINE InstalledBuild Engine/Build/BatchFiles/RunUAT.bat BuildGraph -target”Make Installed Build Win64” -script=/Engine/Build/InstalledEngineBuild.xml -clean
  • 53. #UE4 | @UNREALENGINE InstalledBuild Engine/Build/BatchFiles/RunUAT.bat BuildGraph -target”Make Installed Build Win64” -script=/Engine/Build/InstalledEngineBuild.xml -clean
  • 54. #UE4 | @UNREALENGINE InstalledBuild Engine/Build/BatchFiles/RunUAT.bat BuildGraph -target”Make Installed Build Win64” -script=/Engine/Build/InstalledEngineBuild.xml -clean
  • 57. #UE4 | @UNREALENGINE BuildCookRun ● Script located at /Engine/Build/BatchFiles/ ● From build to package, do anything ● Highly customizable ● Command line based : nostalgic feeling ! <3
  • 58. #UE4 | @UNREALENGINE BuildCookRun, BuildGraph, InstalledBuild ● Depending on the situation, the best choice will differ ● I think adaptability is the most important thing in game dev, so I personally use BuildCookRun most of the time.
  • 59. #UE4 | @UNREALENGINE Agenda ●CI : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 61. #UE4 | @UNREALENGINE Engine DLL Build If you donʼt edit the Engine a lot, trigger it manually If you extend the Engine a lot, do it once a day. Morning or Lunch Time is preferred
  • 62. #UE4 | @UNREALENGINE Build Machine Jenkins Build Commit to Source Control Update Notify
  • 63. #UE4 | @UNREALENGINE Build Command %ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun - project=Samples/StarterContent/StarterContent.uproject - platform=%ENGINE_PLATFORM_TARGET% - clientconfig=%ENGINE_COMPILATION_TARGET% -build ENGINE_ROOT=EngineRoot ENGINE_COMPILATION_TARGET=Development ENGINE_PLATFORM_TARGET=Win64 Yup, thatʼs a little hard to read
  • 64. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=Samples/StarterContent/StarterContent.uproject -platform=Win64 -clientconfig=Development -build
  • 65. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=Samples/StarterContent/StarterContent.uproject -platform=Win64 -clientconfig=Development -build You need a uproject to use RunUAT. You can use a sample project or blank one !
  • 66. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=Samples/StarterContent/StarterContent.uproject -platform=Win64 -clientconfig=Development -build
  • 67. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=Samples/StarterContent/StarterContent.uproject -platform=Win64 -clientconfig=Development -build
  • 68. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=Samples/StarterContent/StarterContent.uproject -platform=Win64 -clientconfig=Development -build
  • 69. #UE4 | @UNREALENGINE Project DLL build Poll every 10 minutes to build Jenkins Build Commit to Source Control Update Notify
  • 70. #UE4 | @UNREALENGINE Build Command %ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project= project=%GAME_SUB_PATH%/%GAME_NAME%.uproject - platform=%ENGINE_PLATFORM_TARGET% - clientconfig=%ENGINE_COMPILATION_TARGET% -build ENGINE_ROOT=EngineRoot ENGINE_COMPILATION_TARGET=Development ENGINE_PLATFORM_TARGET=Win64 GAME_SUB_PATH=C:/GamePath GAME_NAME=GameName
  • 71. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=C:/PathToTheGame/GameName.uproject -platform=Win64 -clientconfig=Development -build
  • 74. #UE4 | @UNREALENGINE Nightly Build ● Well, itʼs build every night. ● Development, Test(for profiling), Shipping for every release platform. Time doesnʼt matter, so clean build
  • 75. #UE4 | @UNREALENGINE Nightly Build Flow ZipJenkins Build Copy to Shared Folder Update Notify
  • 76. #UE4 | @UNREALENGINE Build Command %ENGINE_ROOT%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun - project=%GAME_SUB_PATH%/%GAME_NAME%.uproject -noP4 - platform=%ENGINE_PLATFORM_TARGET% - clientconfig=%ENGINE_COMPILATION_TARGET% -cook -allmaps -build -stage -pak -archive -archivedirectory=%TEMP_DIR% ENGINE_ROOT=PathToYourEngine GAME_SUB_PATH=PathToYourProject GAME_NAME=UprojectFileWithoutTheExtension ENGINE_COMPILATION_TARGET=Development|Shipping|etc ENGINE_PLATFORM_TARGET=Win64|etc
  • 77. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 78. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 79. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 80. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 81. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 82. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 83. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 84. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 85. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 86. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/ Argument to zip all the assets in one “pak” file
  • 87. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 88. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -archivedirectory=C:/TempDirectory/
  • 89. #UE4 | @UNREALENGINE Build Command robocopy %ARCHIVE_DIR%/latest %ARCHIVE_DIR%/%ENGINE_PLATF ORM_TARGET%/archive /E /IS /MOV set PATH=%PATH%;C:/Program Files/7-Zip/ 7z.exe a -tzip -mmt - mx1 %ARCHIVE_DIR%/latest/%BUILD_NUMBER%.zip %TEMP_DIR%/ exit 0
  • 90. #UE4 | @UNREALENGINE Build Command Wait a sec !!
  • 91. #UE4 | @UNREALENGINE Build Command https://github.com/electronicarts/EACopy Twitter : @honk_dice EA DICE Studios has open sourced EACopy, a faster alternative to robocopy ! Give it a try !!!
  • 93. #UE4 | @UNREALENGINE Incremental Build ● Manual Trigger ● For those “Hey mate, I need to show the build in 40 minutes to our investor / boss / publisher, do smth plz lolwut” ● Contrary to the nightly build, faster is better so … ● Use -partialgc ● Donʼt make it clean
  • 94. #UE4 | @UNREALENGINE Incremental Build Flow Jenkins Build Send to DevKit Update Notify For DevKit deployment, check your platform But you might get an idea /Engine/Source/Programs/AutomationTool/PlatformName/PlatformNamePlatfo rm.Automation.cs
  • 95. #UE4 | @UNREALENGINE Build Command Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=GamePath/GameName.uproject -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -archive -partialgc -archivedirectory=C:/TempDirectory/ Instead of cleaning the memory when you run out of it, it will free it up at the end of the packaging process
  • 98. #UE4 | @UNREALENGINE Plugins Build Pipeline Plugin https://wiki.jenkins.io/display/JENKINS/Build+Pipeline+Plugin
  • 99. #UE4 | @UNREALENGINE Plugins Jenkins Slack Plugin https://github.com/jenkinsci/slack-plugin
  • 101. #UE4 | @UNREALENGINE Agenda ●CI : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 103. #UE4 | @UNREALENGINE Commandlet Command Line Applet is a command program to be run inside of Unreal Engine environment.
  • 104. #UE4 | @UNREALENGINE Shared DDC Derived Data Cache (DDC) is a feature to keep assets that were prepared for every platform. To make it simple, itʼs an asset caching feature.
  • 105. #UE4 | @UNREALENGINE Shared DDC Shared FolderDev PC 1 Copy Built Asset Build Assets on 1st launch
  • 106. #UE4 | @UNREALENGINE Shared DDC Shared Folder Dev PC 5Dev PC 4 Dev PC 3Dev PC 2 Copy Built Asset
  • 107. #UE4 | @UNREALENGINE Shared DDC Shared FolderDev PC 4 Modify / Add Asset Copy Built Asset
  • 108. #UE4 | @UNREALENGINE Shared DDC https://docs.unrealengine.com/en- US/Engine/Basics/DerivedDataCache/index.html BaseEngine.ini [InstalledDerivedDataBackendGraph] MinimumDaysToKeepFile=7 Root=(Type=KeyLength, Length=120, Inner=AsyncPut) AsyncPut=(Type=AsyncPut, Inner=Hierarchy) Hierarchy=(Type=Hierarchical, Inner=Boot, Inner=Pak, Inner=EnginePak, Inner=Local, Inner=Shared) Boot=(Type=Boot, Filename=%GAMEDIR%DerivedDataCache/Boot.ddc, MaxCacheSize=256) Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true, UnusedFileAge=17, FoldersToClean=-1, Path=../../../Engine/DerivedDataCache) Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19, FoldersToClean=-1, Path=//mystudio.net/DDC, EnvPathOverride=UE-SharedDataCachePath) AltShared=(Type=FileSystem, ReadOnly=true, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19, FoldersToClean=-1, Path=//mystudio.net/DDC2, EnvPathOverride=UE-SharedDataCachePath2) Pak=(Type=ReadPak, Filename=%GAMEDIR%DerivedDataCache/DDC.ddp) EnginePak=(Type=ReadPak, Filename=../../../Engine/DerivedDataCache/DDC.ddp)
  • 109. #UE4 | @UNREALENGINE Argument Type Comment ReadOnly Bool Make it false when Shared Clean Bool Delete files that went over UnusedFileAge limit Flush Bool Delete all DDC DeleteUnused Bool Il false, never deletes old assets (overrides UnusedFileAge and Clean) UnusedFileAge Int Limit of days after which an asset will be deleted, Fortnite sets it to 10. FoldersToClean Int Max limit of folders to be flushed each time. 0 or -1 means no limit. Shared DDC
  • 110. #UE4 | @UNREALENGINE Shared DDC // Flush and Clean argument DerivedDataBackends.cpp:553 if( bFlush ) { IFileManager::Get().DeleteDirectory( *(Path / TEXT(“”)), false, true ); } else if( bClean ) { DeleteOldFiles( *Path ); } /** Delete the old files in a directory **/ void DeleteOldFiles(const TCHAR* Directory) { float MinimumDaysToKeepFile = 7; GConfig->GetFloat( *GraphName, TEXT("MinimumDaysToKeepFile"), MinimumDaysToKeepFile, GEngineIni ); check(MinimumDaysToKeepFile > 0.0f); // sanity //@todo }
  • 112. #UE4 | @UNREALENGINE Shared DDC UE4Editor-cmd.exe ProjectName –run=DerivedDataCache -fill del /s /q c:/ServerShareDDCPath/*
  • 113. #UE4 | @UNREALENGINE Lighting Build ● All lights except the ones calculated in real time are to be built. ● Of course, Epic is providing the tools for it. But …
  • 115. #UE4 | @UNREALENGINE Itʼs SUPER heavy and slow Let your CI pipe do it ! Lighting Build
  • 116. #UE4 | @UNREALENGINE Lighting Build UE4Editor-cmd.exe ProjectName -run=resavepackages -buildlighting -allowcommandletrendering
  • 117. #UE4 | @UNREALENGINE Lighting Build There are times you want to check the lights in the editor / game In this case, build locally, and Swarm is your new BFF
  • 118. #UE4 | @UNREALENGINE Lighting Build - Swarm With Swarm, you can distribute the task of building lights between the computers of your team. You will need a Coordinator. Your Jenkins master should do the trick. https://wiki.unrealengine.com/Swarm_Agent_Trou bleshooting
  • 119. #UE4 | @UNREALENGINE Lighting Build - Swarm Engine/Binaries/DotNET/SwarmCoordinator.exe Engine/Binaries/DotNET/SwarmAgent.exe To add it at startup, Create a shortcut the the Agent and copy it here. %APPDATA%/Microsoft/Windows/Start Menu/Programs/Startup
  • 121. #UE4 | @UNREALENGINE Redirectors ● When you move or rename an asset in the editor, a Redirector is created to know the ”new address” ● Super convenient feature but it has a tendency to bug, so you will need to clean them up frequently ● Once a month is fine, but do it once a week in the critical phases of the project (alpha, beta, gold, patch release) https://docs.unrealengine.com/en-US/Engine/Basics/Redirectors/index.html
  • 122. #UE4 | @UNREALENGINE Redirectors UE4Editor-cmd.exe ProjectName -run=fixupredirects
  • 123. #UE4 | @UNREALENGINE Agenda ●CI : What is it ? ●UnrealAutomationTool ●Building the Engine and your Project ●The other stuff ●The Unreal Way
  • 124. #UE4 | @UNREALENGINE The Unreal Way : Fortnite
  • 125. #UE4 | @UNREALENGINE Fortnite ● Only engineers have Visual Studio ● We are building with BuildGraph managed by ElectricCommander ● We are heavily using UnrealGameSync
  • 126. #UE4 | @UNREALENGINE Iteration Iteration can seem complicated without Visual Studio. But actually, itʼs pretty manageable. ● Heavily rely on PIE for testing ● Leverage your CI software properly
  • 127. #UE4 | @UNREALENGINE Testing a Level on Device So letʼs say your artist has just changed a characterʼs hair color and wants to see how it looks on the release platform screen before committing… First, create an incremental build task on your CI software, and commit the binaries to Project/Binaries/PlatformName
  • 128. #UE4 | @UNREALENGINE Custom Launch Profile Then in the editor, click on the triangle on the right side of of “Launch”, scroll down and create a new Custom Launch Profile Stored in /Engine/Programs/UnrealFrontend/Profiles In the profile, untick the Build step, and then you can deploy the currently edited level on the machine connected to the computer, even without Visual Studio. Magic !!
  • 129. #UE4 | @UNREALENGINE Build Machine Jobs What I think a UE4 build pipeline should have : ● Engine Build ● Project Build ● Nightly Package ● Incremental Package ● Incremental Package for the Device Launcher ● Lightmaps Build ● Fixup Redirectors Command ● SharedDDC Cleanup Command ● SharedDDC Fillup Command Any suggestion on what to add ? Tell me in Q&A !!!
  • 130. #UE4 | @UNREALENGINE Versioning ● Epic uses Perforce. If you want to be as close as possible to our workstyle, you know what to do ● SVN might be a little slow, but it is very reliable and still heavily used ● GIT is free, modern design choices and is very used for mobile and social games (in Japan !) SVN and Perforce have Editor support ! GIT too, but itʼs still experimental !
  • 131. #UE4 | @UNREALENGINE UnrealGameSync Made by Epic for Epic. Heavily used on Fortnite Itʼs Perforce only, and it allows non technical staff not to have to deal with P4V
  • 133. #UE4 | @UNREALENGINE UnrealGameSync P4 Server Sync Get Engine Local Builds (Binary Engine) Build Machine
  • 134. #UE4 | @UNREALENGINE UnrealGameSync Get the latest version anytime on GitHub and Perforce. UGS dev is unrelated to UE4, so always get the latest version even if youʼve locked your engine version ! https://docs.unrealengine.com/latest/en/Programming/Deployment/Unre alGameSync/Reference/
  • 135. #UE4 | @UNREALENGINE https://github.com/gpageot/JenkinsUE4 Twitter : @GregoryPAGEOT https://github.com/AxRiff/UnrealEngineJenkins Twitter : @AxRiff https://github.com/electronicarts/EACopy Twitter : @honk_dice Manga by @shiba_zushi, Technical Artist at Epic Games Japan. Links