Black Desert Online Taking MMO Development to the Next Level Dongwook Ha (dongwook@pearlabyss.com) Gwanghyeon Go (xdotdt@pearlabyss.com) 2018-03-23
Black Desert Online
Challenges Massive data and contents Many characters on screen Player characteristics Large and dynamically changing world
Massive data and contents
Web-based contents Independent development track Separated server and database Distribute network traffic Update online No need to build game client Natural multi-platform contents
Web-based contents Independent development track Separated server and database Distribute network traffic Update online No need to build game client Natural multi-platform contents
Web-based contents Independent development track Separated server and database Distribute network traffic Update online No need to build game client Natural multi-platform contents
Efficiently authoring behavior trees Over 4,400 variations of Monsters and NPCs XML-based script approach Easy to handle many conditions, branches and events Easy to reuse and extend Provide easy ways to debug and navigate script code Used for action validation check from server-side To detect hack users
Efficiently authoring behavior trees Over 4,400 variations of Monsters and NPCs XML-based script approach Easy to handle many conditions, branches and events Easy to reuse and extend Provide easy ways to debug and navigate script code Used for action validation check from server-side To detect hack users
Efficiently authoring behavior trees Over 4,400 variations of Monsters and NPCs XML-based script approach Easy to handle many conditions, branches and events Easy to reuse and extend Provide easy ways to debug and navigate script code Used for action validation check from server-side To detect hack users
Efficiently authoring behavior trees Over 4,400 variations of Monsters and NPCs XML-based script approach Easy to handle many conditions, branches and events Easy to reuse and extend Provide easy ways to debug and navigate script code Used for action validation check from server-side To detect hack users
Easy resource creation Automatic key-framing cloth animation in the production stage 1. High resolution cloth simulation 2. Compute skeletal animation approximating the simulation result
Easy resource creation Simple secondary motion by vertex painting 1. Virtual point mass is attached to each influencing bone of painted vertices 2. Point masses are physically simulated using mass spring model 3. Compute two skinning matrices from animation bones and point masses (GPU) 4. Interpolate by weight from color channel to get final skinning matrix (GPU)
Easy resource creation Simple secondary motion by vertex painting 1. Virtual point mass is attached to each influencing bone of painted vertices 2. Point masses are physically simulated using mass spring model 3. Compute two skinning matrices from animation bones and point masses (GPU) 4. Interpolate by weight from color channel to get final skinning matrix (GPU)
Easy resource creation Simple secondary motion by vertex painting 1. Virtual point mass is attached to each influencing bone of painted vertices 2. Point masses are physically simulated using mass spring model 3. Compute two skinning matrices from animation bones and point masses (GPU) 4. Interpolate by weight from color channel to get final skinning matrix (GPU)
Easy resource creation Simple secondary motion by vertex painting 1. Virtual point mass is attached to each influencing bone of painted vertices 2. Point masses are physically simulated using mass spring model 3. Compute two skinning matrices from animation bones and point masses (GPU) 4. Interpolate by weight from color channel to get final skinning matrix (GPU)
Easy resource creation Simple secondary motion by vertex painting 1. Virtual point mass is attached to each influencing bone of painted vertices 2. Point masses are physically simulated using mass spring model 3. Compute two skinning matrices from animation bones and point masses (GPU) 4. Interpolate by weight from color channel to get final skinning matrix (GPU)
Easy resource creation Simple secondary motion by vertex painting Pros: - Easy to use - Minimum simulation cost - Requires no additional bones - Skinned mesh dependent
Easy resource creation Let s run in-game simulation for cloth animation Responsive cloth Bone-based simulation for cloth-like animation Fast and stable Inspired by Meshless Deformations Based on Shape Matching, M. Müller, B. Heidelberger, M. Teschner, M. Gross. Proceedings of SIGGRAPH'05, 2005 Bone cluster based deformation for higher order bending motion
Easy resource creation Bone-based simulation for cloth-like animation 1. Driving bones are divided into overlapping clusters - Each cluster has 2~3 bones 2. Compute goal positions of bones in each cluster - Simpler shape matching - Use roughly guiding animation as shape matching target 3. Bones in the overlapping regions have multiple goal positions - Averaged 4. Integration:
Easy resource creation Bone-based simulation for cloth-like animation 1. Driving bones are divided into overlapping clusters - Each cluster has 2~3 bones 2. Compute goal positions of bones in each cluster - Simpler shape matching - Use roughly guiding animation as shape matching target 3. Bones in the overlapping regions have multiple goal positions - Averaged 4. Integration:
Easy resource creation Bone-based simulation for cloth-like animation 1. Driving bones are divided into overlapping clusters - Each cluster has 2~3 bones 2. Compute goal positions of bones in each cluster - Simpler shape matching - Use roughly guiding animation as shape matching target 3. Bones in the overlapping regions have multiple goal positions - Averaged 4. Integration:
Easy resource creation Bone-based simulation for cloth-like animation 1. Driving bones are divided into overlapping clusters - Each cluster has 2~3 bones 2. Compute goal positions of bones in each cluster - Simpler shape matching - Use roughly guiding animation as shape matching target 3. Bones in the overlapping regions have multiple goal positions - Averaged 4. Integration:
Easy resource creation Bone-based simulation for cloth-like animation Collision with body Each bone can have collision planes Pros: - Stable and fast (not a mass-spring model) - If necessary, animators can guide overall movement - Easy to implement
Many characters on screen
Animation system overview Non-uniform scaling Multi-layered Parametric blending Additive blending Inverse kinematics Skinned-mesh morphing Simulation integrated
Dynamic animation loading 16 playable classes (It s growing!) has nearly 1,500 animation clips for each over 150MB for each Characters don t share animation clips Accurate retargeting doesn t come cheap Infeasible to load all animation clips for the visible characters
Dynamic animation loading 16 playable classes (It s growing!) has nearly 1,500 animation clips for each over 150MB for each Characters don t share animation clips Accurate retargeting doesn t come cheap Infeasible to load all animation clips for the visible characters
Dynamic animation loading 16 playable classes (It s growing!) has nearly 1,500 animation clips for each over 150MB for each Characters don t share animation clips Accurate retargeting doesn t come cheap Infeasible to load all animation clips for the visible characters
Dynamic animation loading Fully dynamic loading Loading when needed, unloading when it s not Easy to see motion lag due to loading time Dynamic loading with preloaded animation packs Generated for each character in the production stage Contains first 1~2 key-frames of animation clips Play animation using the key-frames in the pack while loading the entire clip in a thread
Dynamic animation loading Fully dynamic loading Loading when needed, unloading when it s not Easy to see motion lag due to loading time Dynamic loading with preloaded animation packs Generated for each character in the production stage Contains first 1~2 key-frames of animation clips Play animation using the key-frames in the pack while loading the entire clip in a thread
Mockup models for distant characters Problems What if hundreds of players gather together Many different costumes If you are moving fast, many characters are transient Unnecessary data loading and unloading Let s render mockup models first Simplified model or default costume of the class Defer loading character data Save I/O throughput and memory
Mockup models for distant characters Problems What if hundreds of players gather together Many different costumes If you are moving fast, many characters are transient Unnecessary data loading and unloading Let s render mockup models first Simplified model or default costume of the class Defer loading character data Save I/O throughput and memory
Limiting details by distance Limit features by distance Effect / Sound Morphing / Facial animation / IK / Physics simulation and so on Limit the number of feature instances
Black Desert Mobile
Player Characteristics
Player characteristics Players want their characters to look different Players want their characters to be of high quality, have details Players want to interact with their characters and others
Player characteristics Character rendering Fake subsurface scattering for performance reason Fake eyeball specular that players can always see Cornea occlusion Classical Kajiya-Kay anisotropic hair rendering Vertically unwrapped hair texture without using direction map Hair depth fixup for post processing Random texel micro adjustment for security reason Great meshes and textures! (most important)
Player characteristics Character rendering Fake subsurface scattering for performance reason Fake eyeball specular that players can always see Cornea occlusion Classical Kajiya-Kay anisotropic hair rendering Vertically unwrapped hair texture without using direction map Hair depth fixup for post processing Random texel micro adjustment for security reason Great meshes and textures! (most important)
Player characteristics Character rendering Fake subsurface scattering for performance reason Fake eyeball specular that players can always see Cornea occlusion Classical Kajiya-Kay anisotropic hair rendering Vertically unwrapped hair texture without using direction map Hair depth fixup for post processing Random texel micro adjustment for security reason Great meshes and textures! (most important)
Player characteristics Character rendering Fake subsurface scattering for performance reason Fake eyeball specular that players can always see Cornea occlusion Classical Kajiya-Kay anisotropic hair rendering Vertically unwrapped hair texture without using direction map Hair depth fixup for post processing Random texel micro adjustment for security reason Great meshes and textures! (most important)
Player characteristics Character rendering Fake subsurface scattering for performance reason Fake eyeball specular that players can always see Cornea occlusion Classical Kajiya-Kay anisotropic hair rendering Vertically unwrapped hair texture without using direction map Hair depth fixup for post processing Random texel micro adjustment for security reason Great meshes and textures! (most important)
Player characteristics Character customization Face and body deformation (adjust bone transform) Vertex morphing for facial expression with index matching Blending among several wrinkle maps will be applied Areal mask for makeup (adjust color, intensity and reflection) Multitexturing for tattoo Skinned beard meshes Curly hair (adjust uv only) The more elements, the better it is
Player characteristics Character customization Face and body deformation (adjust bone transform) Vertex morphing for facial expression with index matching Blending among several wrinkle maps will be applied Areal mask for makeup (adjust color, intensity and reflection) Multitexturing for tattoo Skinned beard meshes Curly hair (adjust uv only) The more elements, the better it is
Player characteristics Character customization Face and body deformation (adjust bone transform) Vertex morphing for facial expression with index matching Blending among several wrinkle maps will be applied Areal mask for makeup (adjust color, intensity and reflection) Multitexturing for tattoo Skinned beard meshes Curly hair (adjust uv only) The more elements, the better it is
Player characteristics Character customization Face and body deformation (adjust bone transform) Vertex morphing for facial expression with index matching Blending among several wrinkle maps will be applied Areal mask for makeup (adjust color, intensity and reflection) Multitexturing for tattoo Skinned beard meshes Curly hair (adjust uv only) The more elements, the better it is
Player characteristics Character customization Face and body deformation (adjust bone transform) Vertex morphing for facial expression with index matching Blending among several wrinkle maps will be applied Areal mask for makeup (adjust color, intensity and reflection) Multitexturing for tattoo Skinned beard meshes Curly hair (adjust uv only) The more elements, the better it is
Player characteristics
Player characteristics Character detail My character has much more detail My character looks at me naturally (look IK) Interact with other PCs and NPCs (collision reaction) Sweats after doing hard work (sweat map) Gets wet in the water
Player characteristics Character detail My character has much more detail My character looks at me naturally (look IK) Interact with other PCs and NPCs (collision reaction) Sweats after doing hard work (sweat map) Gets wet in the water
Player characteristics
Player characteristics Character detail My character has much more detail My character looks at me naturally (look IK) Interact with other PCs and NPCs (collision reaction) Sweats after doing hard work (sweat map) Gets wet in the water
Large and dynamically changing world
Large and dynamically changing world We wanted a very long distance field We wanted players to be able to move anywhere w/o loading We wanted players to live in a continuously changing world
Large and dynamically changing world Efficient and easy world building process for speed! Voxel based terrain to make cave-style spots easier and faster Sketch Up is used for houses and castles including interiors Massive alpha blended weathering decals built-in on meshes Massive alpha blended screen space decals Efficient prefab usage with easy construction tools Fast resource and script change reflection
Large and dynamically changing world Efficient and easy world building process for speed! Voxel based terrain to make cave-style spots easier and faster Sketch Up is used for houses and castles including interiors Massive alpha blended weathering decals built-in on meshes Massive alpha blended screen space decals Efficient prefab usage with easy construction tools Fast resource and script change reflection
Large and dynamically changing world Efficient and easy world building process for speed! Voxel based terrain to make cave-style spots easier and faster Sketch Up is used for houses and castles including interiors Massive alpha blended weathering decals built-in on meshes Massive alpha blended screen space decals Efficient prefab usage with easy construction tools Fast resource and script change reflection
Large and dynamically changing world Efficient and easy world building process for speed! Voxel based terrain to make cave-style spots easier and faster Sketch Up is used for houses and castles including interiors Massive alpha blended weathering decals built-in on meshes Massive alpha blended screen space decals Efficient prefab usage with easy construction tools Fast resource and script change reflection
Large and dynamically changing world Efficient and easy world building process for speed! Voxel based terrain to make cave-style spots easier and faster Sketch Up is used for houses and castles including interiors Massive alpha blended weathering decals built-in on meshes Massive alpha blended screen space decals Efficient prefab usage with easy construction tools Fast resource and script change reflection
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded world streaming was necessary World data is separated into many square sectors Sectors are streamed by queueing always prior to characters Fast moving solution 1 - Rough first then detailed Fast moving solution 2 - Bound the player into certain range Single material LOD for long distance scenery Real time collision data construction (for size) Texture streaming (low level mipmap and albedo tex first) Balancing many threads (important for efficient CPU usage)
Large and dynamically changing world Multithreaded character streaming Similar process with world streaming Natural treatments until it is ready to be rendered Single material LOD for not fully prepared characters Texture streaming Preload animation data (few frames) Player characters first
Large and dynamically changing world Multithreaded character streaming Similar process with world streaming Natural treatments until it is ready to be rendered Single material LOD for not fully prepared characters Texture streaming Preload animation data (few frames) Player characters first
Large and dynamically changing world Multithreaded character streaming Similar process with world streaming Natural treatments until it is ready to be rendered Single material LOD for not fully prepared characters Texture streaming Preload animation data (few frames) Player characters first
Large and dynamically changing world Dynamic weather Time of day with the simplified atmospheric scattering Instanced particle clouds Instanced particle rain and snow Varying rain pools and snowdrift according to precipitation Lightning and water flowing effect
Large and dynamically changing world Dynamic weather Time of day with the simplified atmospheric scattering Instanced particle clouds Instanced particle rain and snow Varying rain pools and snowdrift according to precipitation Lightning and water flowing effect
Large and dynamically changing world Dynamic weather Time of day with the simplified atmospheric scattering Instanced particle clouds Instanced particle rain and snow Varying rain pools and snowdrift according to precipitation Lightning and water flowing effect
Large and dynamically changing world Dynamic weather Time of day with the simplified atmospheric scattering Instanced particle clouds Instanced particle rain and snow Varying rain pools and snowdrift according to precipitation Lightning and water flowing effect
Large and dynamically changing world Dynamic scene reconstruction Duration based Region based Weather elements Localized elements Easily turn on/off with switches
Large and dynamically changing world Path finding solution Our own voxel based navigation path finder Raycast, areal occlusion test Server side validation check for security reasons This information was previously made public, check below http://igc.inven.co.kr/detail.php?code=y29kzti3
Large and dynamically changing world Path finding solution Our own voxel based navigation path finder Raycast, areal occlusion test Server side validation check for security reasons This information was previously made public, check below http://igc.inven.co.kr/detail.php?code=y29kzti3
Now we are remastering Improved high dynamic range rendering Improved physically based rendering Improved SSR, SSAO, post processing with YEBIS Improved ocean rendering Voxel cone tracing Physically based atmospheric scattering with volume clouds Lots of other quality and performance tuning Console platform (XB1) Let s talk about the above at GDC 2019
Thank you! Special thanks All Pearl Abyss members!