Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Recommendations
Filter
tutorials game, mobile
blogthe samsung developers team works with many companies in the mobile and gaming ecosystems. we're excited to support our partner, arm, as they bring timely and relevant content to developers looking to build games and high-performance experiences. this vulkan extensions series will help developers get the most out of the new and game-changing vulkan extensions on samsung mobile devices. android is enabling a host of useful new vulkan extensions for mobile. these new extensions are set to improve the state of graphics apis for modern applications, enabling new use cases and changing how developers can design graphics renderers going forward. i have already provided information about ‘maintenance extensions’. however, another important extension that i explore in this blog is ‘legacy support extensions’. vulkan is increasingly being used as a portable “hal”. the power and flexibility of the api allows for great layered implementations. there is a lot of effort spent in the ecosystem enabling legacy graphics apis to run efficiently on top of vulkan. the bright future for driver developers is a world where gpu drivers only implement vulkan, and where legacy apis can be implemented on top of that driver. to that end, there are several features which are generally considered backwards today. they should not be used in new applications unless absolutely required. these extensions exist to facilitate old applications which need to keep running through api translation layers such as angle, dxvk, zink, and so on. vk_ext_transform_feedback speaking the name of this extension causes the general angst level to rise in a room of driver developers. in the world of direct3d, this feature is also known as stream-out. the core feature of this extension is that whenever you render geometry, you can capture the resulting geometry data (position and vertex outputs) into a buffer. the key complication from an implementation point of view is that the result is ordered. this means there is no 1:1 relation for input vertex to output data since this extension is supposed to work with indexed rendering, as well as strip types (and even geometry shaders and tessellation, oh my!). this feature was invented in a world before compute shaders were conceived. the only real method to perform buffer <-> buffer computation was to make use of transform feedback, vertex shaders and rasterizationdiscard. over time, the functionality of transform feedback was extended in various ways, but today it is essentially obsoleted by compute shaders. there are, however, two niches where this extension still makes sense - graphics debuggers and api translation layers. transform feedback is extremely difficult to emulate in the more complicated cases. setting up shaders in vertex-like shader stages, you need to set up which vertex outputs to capture to a buffer. the shader itself controls the memory layout of the output data. this is unlike other apis, where you use the graphics api to specify which outputs to capture based on the name of the variable. here is an example vulkan glsl shader: #version 450 layout(xfb_stride = 32, xfb_offset = 0, xfb_buffer = 0, location = 0) out vec4 vcolor; layout(xfb_stride = 32, xfb_offset = 16, xfb_buffer = 0, location = 1) out vec4 vcolor2; layout(xfb_buffer = 1, xfb_stride = 16) out gl_pervertex { layout(xfb_offset = 0) vec4 gl_position; }; void main() { gl_position = vec4(1.0); vcolor = vec4(2.0); vcolor2 = vec4(3.0); } the resulting spir-v will then look something like: capability transformfeedback executionmode 4 xfb decorate 8(gl_pervertex) block decorate 10 xfbbuffer 1 decorate 10 xfbstride 16 decorate 17(vcolor) location 0 decorate 17(vcolor) xfbbuffer 0 decorate 17(vcolor) xfbstride 32 decorate 17(vcolor) offset 0 decorate 20(vcolor2) location 1 decorate 20(vcolor2) xfbbuffer 0 decorate 20(vcolor2) xfbstride 32 decorate 20(vcolor2) offset 16 binding transform feedback buffers once we have a pipeline which can emit transform feedback data, we need to bind buffers: vkcmdbindtransformfeedbackbuffersext(cmd, firstbinding, bindingcount, pbuffers, poffsets, psizes); to enable a buffer to be captured, vk_buffer_usage_transform_feedback_buffer_bit_ext is used. starting and stopping capture once we know where to write the vertex output data, we will begin and end captures. this needs to be done inside a render pass: vkcmdbegintransformfeedbackext(cmd, firstcounterbuffer, counterbuffercount, pcounterbuffers, pcounterbufferoffsets); a counter buffer allows us to handle scenarios where we end a transform feedback and continue capturing later. we would not necessarily know how many bytes were written by the last transform feedback, so it is critical that we can let the gpu maintain a byte counter for us. vkcmddraw(cmd, …); vkcmddrawindexed(cmd, …); then we can start rendering. vertex outputs are captured to the buffers in-order. vkcmdendtransformfeedbackext(cmd, firstcounterbuffer, counterbuffercount, pcounterbuffers, pcounterbufferoffsets); once we are done capturing, we end the transform feedback and, with the counter buffers, we can write the new buffer offsets into the counter buffer. indirectly drawing transform feedback results this feature is a precursor to the more flexible indirect draw feature we have in vulkan, but there was a time when this feature was the only efficient way to render transform feedbacked outputs. the fundamental problem is that we do not necessarily know exactly how many primitives have been rendered. therefore, to avoid stalling the cpu, it was required to be able to indirectly render the results with a special purpose api. vkcmddrawindirectbytecountext(cmd, instancecount, firstinstance, counterbuffer, counterbufferoffset, counteroffset, vertexstride); this works similarly to a normal indirect draw call, but instead of providing a vertex count, we give it a byte count and let the gpu perform the divide instead. this is nice, as otherwise we would have to dispatch a tiny compute kernel that converts a byte count to an indirect draw. queries the offset counter is sort of like a query, but if the transform feedback buffers overflow, any further writes are ignored. the vk_query_type_transform_feedback_stream_ext queries how many primitives were generated. it also lets you query how many primitives were attempted to be written. this makes it possible to detect overflow if that is desirable. vk_ext_line_rasterization line rasterization is a tricky subject and is not normally used for gaming applications since they do not scale with resolution and their exact behavior is not consistent across all gpu implementations. in the world of cad, however, this feature is critical, and older opengl apis had extensive support for quite fancy line rendering methods. this extension essentially brings back those workstation features. advanced line rendering can occasionally be useful for debug tooling and visualization as well. the feature zoo typedef struct vkphysicaldevicelinerasterizationfeaturesext { vkstructuretype stype; void* pnext; vkbool32 rectangularlines; vkbool32 bresenhamlines; vkbool32 smoothlines; vkbool32 stippledrectangularlines; vkbool32 stippledbresenhamlines; vkbool32 stippledsmoothlines; } vkphysicaldevicelinerasterizationfeaturesext; this extension supports a lot of different feature bits. i will try to summarize what they mean below. rectangular lines vs parallelogram when rendering normal lines in core vulkan, there are two ways lines can be rendered. if vkphysicaldevicelimits::strictlines is true, a line is rendered as if the line is a true, oriented rectangle. this is essentially what you would get if you rendered a scaled and rotated rectangle yourself. the hardware just expands the line along the perpendicular axis of the line axis. in non-strict rendering, we get a parallelogram. the line is extended either in x or y directions. (from vulkan specification) bresenham lines bresenham lines reformulate the line rendering algorithm where each pixel has a diamond shaped area around the pixel and coverage is based around intersection and exiting the area. the advantage here is that rendering line strips avoids overdraw. rectangle or parallelogram rendering does not guarantee this, which matters if you are rendering line strips with blending enabled. (from vulkan specification) smooth lines smooth lines work like rectangular lines, except the implementation can render a little further out to create a smooth edge. exact behavior is also completely unspecified, and we find the only instance of the word “aesthetic” in the entire specification, which is amusing. this is a wonderfully vague word to see in the vulkan specification, which is otherwise no-nonsense normative. this feature is designed to work in combination with alpha blending since the smooth coverage of the line rendering is multiplied into the alpha channel of render target 0’s output. line stipple a “classic” feature that will make most ihvs cringe a little. when rendering a line, it is possible to mask certain pixels in a pattern. a counter runs while rasterizing pixels in order and with line stipple you control a divider and mask which generates a fixed pattern for when to discard pixels. it is somewhat unclear if this feature is really needed when it is possible to use discard in the fragment shader, but alas, legacy features from the early 90s are sometimes used. there were no shaders back in those days. configuring rasterization pipeline state when creating a graphics pipeline, you can pass in some more data in pnext of rasterization state: typedef struct vkpipelinerasterizationlinestatecreateinfoext { vkstructuretype stype; const void* pnext; vklinerasterizationmodeext linerasterizationmode; vkbool32 stippledlineenable; uint32_t linestipplefactor; uint16_t linestipplepattern; } vkpipelinerasterizationlinestatecreateinfoext; typedef enum vklinerasterizationmodeext { vk_line_rasterization_mode_default_ext = 0, vk_line_rasterization_mode_rectangular_ext = 1, vk_line_rasterization_mode_bresenham_ext = 2, vk_line_rasterization_mode_rectangular_smooth_ext = 3, } vklinerasterizationmodeext; if line stipple is enabled, the line stipple factors can be baked into the pipeline, or be made a dynamic pipeline state using vk_dynamic_state_line_stipple_ext. in the case of dynamic line stipple, the line stipple factor and pattern can be modified dynamically with: vkcmdsetlinestippleext(cmd, factor, pattern); vk_ext_index_type_uint8 in opengl and opengl es, we have support for 8-bit index buffers. core vulkan and direct3d however only support 16-bit and 32-bit index buffers. since emulating index buffer formats is impractical with indirect draw calls being a thing, we need to be able to bind 8-bit index buffers. this extension does just that. this is probably the simplest extension we have look at so far: vkcmdbindindexbuffer(cmd, indexbuffer, offset, vk_index_type_uint8_ext); vkcmddrawindexed(cmd, …); conclusion i have been through the 'maintenance' and 'legacy support' extensions that are part of the new vulkan extensions for mobile. in the next three blogs, i will go through what i see as the 'game-changing' extensions from vulkan - the three that will help to transform your games during the development process. follow up thanks to hans-kristian arntzen and the team at arm for bringing this great content to the samsung developers community. we hope you find this information about vulkan extensions useful for developing your upcoming mobile games. the original version of this article can be viewed at arm community. the samsung developers site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account or by subscribing to our monthly newsletter. visit the marketing resources page for information on promoting and distributing your apps and games. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem.
Arm Developers
tutorials game, mobile
bloganti-aliasing is an important addition to any game to improve visual quality by smoothing out the jagged edges of a scene. msaa (multisample anti-aliasing) is one of the oldest methods to achieve this and is still the preferred solution for mobile. however it is only suitable for forward rendering and, with mobile performance improving year over year, deferred rendering is becoming more common, necessitating the use of post-process aa. this leaves slim pickings as such algorithms tend to be too expensive for mobile gpus with fxaa (fast approximate anti-aliasing) being the only ‘cheap’ option among them. fxaa may be performant enough but it only has simple colour discontinuity shape detection, leading to an often unwanted softening of the image. its kernel is also limited in size, so it struggles to anti-alias longer edges effectively. space module scene with cmaa applied. conservative morphological anti-aliasing conservative morphological anti-aliasing (cmaa) is a post-process aa solution originally developed by intel for their low power integrated gpus 1. its design goals are to be a better alternative to fxaa by: being minimally invasive so it can be acceptable as a replacement in a wide range of applications, including worst case scenarios such as text, repeating patterns, certain geometries (power lines, mesh fences, foliage), and moving images. running efficiently on low-medium range gpu hardware, such as integrated gpus (or, in our case, mobile gpus). we have repurposed this desktop-developed algorithm and come up with a hybrid between the original 1.3 version and the updated 2.0 version 2 to make the best use of mobile hardware. a demo app was created using khronos’ vulkan samples as a framework (which could also be done with gles) to implement this experiment. the sample has a drop down menu for easy switching between the different aa solutions and presents a frametime and bandwidth overlay. cmaa has four basic logical steps: image analysis for colour discontinuities (afterwards stored in a local compressed 'edge' buffer). the method used is not unique to cmaa. extracting locally dominant edges with a small kernel. (unique variation of existing algorithms.) handling of simple shapes. handling of symmetrical long edge shapes. (unique take on the original mlaa shape handling algorithm.) pass 1 edge detection result captured in renderdoc. a full screen edge detection pass is done in a fragment shader and the resulting colour discontinuity values are written into a colour attachment. our implementation uses the pixels’ luminance values to find edge discontinuities for speed and simplicity. an edge exists if the contrast between neighbouring pixels is above an empirically determined threshold. pass 2 neighbouring edges considered for local contrast adaptation. a local contrast adaptation is performed for each detected edge by comparing the value of the previous pass against the values of its closest neighbours by creating a threshold from the average and largest of these, as described by the formula below. any that pass the threshold are written into an image as a confirmed edge. threshold = (avg+avgxy) * (1.0 - nondominantedgeremovalamount) + maxe * (nondominantedgeremovalamount); nondominantedgeremovalamount is another empirically determined variable. pass 3 this pass collects all the edges for each pixel from the previous pass and packs them into a new image for the final pass. this pass also does the first part of edge blending. the detected edges are used to look for 2, 3 and 4 edges in a pixel and then blend in the colours from the adjacent pixels. this helps avoid the unnecessary blending of straight edges. pass 4 the final pass does long edge blending by identifying z-shapes in the detected edges. for each detected z-shape, the length of the edge is traced in both directions until it reaches the end or until it runs into a perpendicular edge. pixel blending is then performed along the traced edges proportional to their distance from the centre. before and after of z-shape detection. results image comparison shows a typical scenario for aa. cmaa manages high quality anti-aliasing while retaining sharpness on straight edges. cmaa demonstrates itself as a superior solution to aliasing than fxaa by avoiding the latter’s limitations. it maintains a crisper look to the overall image and won’t smudge thin lines, all while still providing effective anti-aliasing to curved edges. it also provides a significant performance advantage to qualcomm devices and only a small penalty to arm. image comparison shows a weakness of fxaa where it smudges thin lined geometry into the background. cmaa shows no such weakness and retains the colour of the railing while adding anti-aliasing effectively. msaa is still a clear winner and our recommended solution if your game allows for it to be resolved within a single render pass. for any case where that is impractical, cmaa is overall a better alternative than fxaa and should be strongly considered. graph shows the increase in frametime for each aa method across a range of samsung devices. follow up this site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account or by subscribing to our monthly newsletter. visit the marketing resources page for information on promoting and distributing your apps. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem. references filip strugar and leigh davies: conservative morphological anti-aliasing (cmaa) – march 2014. filip strugar and adam t lake: conservative morphological anti-aliasing 2.0 – april 2018.
Samsung GameDev Team
success story game, mobile
blogintroduction in recent years, the mobile game market has been growing fast. along with hardware upgrades, the implementation of mobile games is more complicated, and the loading process and the display of some scenes consume a lot of cpu and gpu resources. so samsung worked with game vendors, including the tencent game performance amelioration (mtgpa) team, to improve game user experience based on scenesdk. scenesdk focuses on performance optimization, with the game vendor's cooperation, by combining the abilities of device manufacturers to control hardware resources and the abilities of games to sync up scenario information. it can maximize the game experience. currently it includes many items such as scene guarantee and frequency reduction notification. it can get game information, send a mobile device's status to a game and supports 40+ games, including many popular games. optimization solutions scene protection scene protection divides a game into different game scenes according to certain rules (such as coarse-grained loading, lobby, single game round, ultimate kill, aiming and shooting, and much more), and then provide finer-grained performance guarantees for different game scenes. considering that hardware resources are limited, if the protection of all the scenes is the same, the actual protection effect is not ideal because the hardware is fully loaded at the beginning. the system high temperature protection is triggered quickly, the cpu and gpu are forced to reduce frequency, and the rendering performance will be even worse. therefore, the game could send game events, like loading, starting, lobby or scene loading, to scenesdk on the mobile device's side. the game information is sent in the json format {sceneid: value}. it’s flexible and can be extended with more sceneids if needed. the main value information is shown in the table below. after getting the scene info, the scenesdk service changes cpu/gpu frequency to improve game performance based on different game scenarios. during gameplay, it is necessary to classify the scene according to the importance level. the strategy of hierarchical protection is slightly different according to the underlying adjustment capabilities of each manufacturer, but the core is the highest-level scene, which is fully protected. for the protection of different levels of scenes, the effect can be shown as below. for the highest priority (critical) scene, the fps (frames per second) is more stable. for the lowest level scene, fps slowly declines without affecting the experience. at the same time, the protection of the scene switching is also effective in real time. as shown in the following figure, when the scene level is switched from low (1) to critical (3), the cpu frequency starts to increase, and the fps also gradually starts to increase. the comparison is as follows: frequency reduction notification the frequency reduction notification is to inform the game of the system cpu frequency reduction. the extent of cpu frequency reduction varies from manufacturer to manufacturer. such adjustments inevitably result in equipment that just meets the performance needs or already fails to meet the performance needs of the game so that it starts to freeze or becomes stuck. therefore, if the game can adjust the configuration items related to performance consumption instantly, by temporarily reducing or disabling some functions and using such notifications, a stuck game can be avoided to ensure the best player experience. variable refresh rate a key part of the technology used in the latest samsung flagship model is the ability to not only run conventional mobile refresh rate limits, but also to dynamically modify them based on game requirements at runtime. a common misconception is that if a device has the ability to run at 120 fps, it should always do so. however, most games support multiple options that are lower than 120 fps or don’t support 120 fps. if a game does not support 120 fps, a 120 fps refresh rate is not required and may cost more power consumption. the ideal approach is to make use of the maximum refresh rate only when it has the greatest benefit. so when the game sends the json string {“target fps”: value} to the mobile device, the device changes the refresh rate to save power by not running in the highest refresh rate. summary this table shows the benefit of using scenesdk at launch time. this table shows better performance during two rounds of testing with scenesdk on and scenesdk off. this table shows lower power consumption when dynamic refresh rate is applied. overall, scenesdk could be a good option to improve your game performance. please feel free to contact us if you need more information.
Xiangguo Qi
tutorials game, mobile
blogthe samsung developers team works with many companies in the mobile and gaming ecosystems. we're excited to support our partner, arm, as they bring timely and relevant content to developers looking to build games and high-performance experiences. this vulkan extensions series will help developers get the most out of the new and game-changing vulkan extensions on samsung mobile devices. in previous blogs, we have already explored two key vulkan extension game changers that will be enabled by android r. these are descriptor indexing and buffer device address. in this blog, we explore the third and final game changer, which is 'timeline semaphores'. the introduction of timeline semaphores is a large improvement to the synchronization model of vulkan and is a required feature in vulkan 1.2. it solves some fundamental grievances with the existing synchronization apis in vulkan. the problems with vkfence and vksemaphore in earlier vulkan extensions, there are two distinct synchronization objects for dealing with cpu <-> gpu synchronization and gpu queue <-> gpu queue synchronization. the vkfence object only deals with gpu -> cpu synchronization. due to the explicit nature of vulkan, you must keep track of when the gpu completes the work you submit to it. vkqueuesubmit(queue, …, fence); the previous code is the way we would use a fence, and later this fence can be waited on. when the fence signals, we know it is safe to free resources, read back data written by gpu, and so on. overall, the vkfence interface was never a real problem in practice, except that it feels strange to have two entirely different api objects which essentially do the same thing. vksemaphore on the other hand has some quirks which makes it difficult to use properly in sophisticated applications. vksemaphore by default is a binary semaphore. the fundamental problem with binary semaphores is that we can only wait for a semaphore once. after we have waited for it, it automatically becomes unsignaled again. this binary nature is very annoying to deal with when we use multiple queues. for example, consider a scenario where we perform some work in the graphics queue, and want to synchronize that work with two different compute queues. if we know this scenario is coming up, we will then have to allocate two vksemaphore objects, signal both objects, and wait for each of them in the different compute queues. this works, but we might not have the knowledge up front that this scenario will play out. often where we are dealing with multiple queues, we have to be somewhat conservative and signal semaphore objects we never end up waiting for. this leads to another problem … a signaled semaphore, which is never waited for, is basically a dead and useless semaphore and should be destroyed. we cannot reset a vksemaphore object on the cpu, so we cannot ever signal it again if we want to recycle vksemaphore objects. a workaround would be to wait for the semaphore on the gpu in a random queue just to unsignal it, but this feels like a gross hack. it could also potentially cause performance issues, as waiting for a semaphore is a full gpu memory barrier. object bloat is another considerable pitfall of the existing apis. for every synchronization point we need, we require a new object. all these objects must be managed, and their lifetimes must be considered. this creates a lot of annoying “bloat” for engines. the timeline – fixing object bloat – fixing multiple waits the first observation we can make of a vulkan queue is that submissions should generally complete in-order. to signal a synchronization object in vkqueuesubmit, the gpu waits for all previously submitted work to the queue, which includes the signaling operation of previous synchronization objects. rather than assigning one object per submission, we synchronize in terms of number of submissions. a plain uint64_t counter can be used for each queue. when a submission completes, the number is monotonically increased, usually by one each time. this counter is contained inside a single timeline semaphore object. rather than waiting for a specific synchronization object which matches a particular submission, we could wait for a single object and specify “wait until graphics queue submission #157 completes.” we can wait for any value multiple times as we wish, so there is no binary semaphore problem. essentially, for each vkqueue we can create a single timeline semaphore on startup and leave it alone (uint64_t will not overflow until the heat death of the sun, do not worry about it). this is extremely convenient and makes it so much easier to implement complicated dependency management schemes. unifying vkfence and vksemaphore timeline semaphores can be used very effectively on cpu as well: vksemaphorewaitinfokhr info = { vk_structure_type_semaphore_wait_info_khr }; info.semaphorecount = 1; info.psemaphores = &semaphore; info.pvalues = &value; vkwaitsemaphoreskhr(device, &info, timeout); this completely removes the need to use vkfence. another advantage of this method is that multiple threads can wait for a timeline semaphore. with vkfence, only one thread could access a vkfence at any one time. a timeline semaphore can even be signaled from the cpu as well, although this feature feels somewhat niche. it allows use cases where you submit work to the gpu early, but then 'kick' the submission using vksignalsemaphorekhr. the accompanying sample demonstrates a particular scenario where this function might be useful: vksemaphoresignalinfokhr info = { vk_structure_type_semaphore_signal_info_khr }; info.semaphore = semaphore; info.value = value; vksignalsemaphorekhr(device, &info); creating a timeline semaphore when creating a semaphore, you can specify the type of semaphore and give it an initial value: vksemaphorecreateinfo info = { vk_structure_type_semaphore_create_info }; vksemaphoretypecreateinfokhr type_info = { vk_structure_type_semaphore_type_create_info_khr }; type_info.semaphoretype = vk_semaphore_type_timeline_khr; type_info.initialvalue = 0; info.pnext = &type_info; vkcreatesemaphore(device, &info, null, &semaphore); signaling and waiting on timeline semaphores when submitting work with vkqueuesubmit, you can chain another struct which provides counter values when using timeline semaphores, for example: vksubmitinfo submit = { vk_structure_type_submit_info }; submit.waitsemaphorecount = 1; submit.pwaitsemaphores = &compute_queue_semaphore; submit.pwaitdststagemask = &wait_stage; submit.commandbuffercount = 1; submit.pcommandbuffers = &cmd; submit.signalsemaphorecount = 1; submit.psignalsemaphores = &graphics_queue_semaphore; vktimelinesemaphoresubmitinfokhr timeline = { vk_structure_type_timeline_semaphore_submit_info_khr }; timeline.waitsemaphorevaluecount = 1; timeline.pwaitsemaphorevalues = &wait_value; timeline.signalsemaphorevaluecount = 1; timeline.psignalsemaphorevalues = &signal_value; submit.pnext = &timeline; signal_value++; // generally, you bump the timeline value once per submission. vkqueuesubmit(queue, 1, &submit, vk_null_handle); out of order signal and wait a strong requirement of vulkan binary semaphores is that signals must be submitted before a wait on a semaphore can be submitted. this makes it easy to guarantee that deadlocks do not occur on the gpu, but it is also somewhat inflexible. in an application with many vulkan queues and a task-based architecture, it is reasonable to submit work that is somewhat out of order. however, this still uses synchronization objects to ensure the right ordering when executing on the gpu. with timeline semaphores, the application can agree on the timeline values to use ahead of time, then go ahead and build commands and submit out of order. the driver is responsible for figuring out the submission order required to make it work. however, the application gets more ways to shoot itself in the foot with this approach. this is because it is possible to create a deadlock with multiple queues where queue a waits for queue b, and queue b waits for queue a at the same time. ease of porting it is no secret that timeline semaphores are inherited largely from d3d12’s fence objects. from a portability angle, timeline semaphores make it much easier to have compatibility across the apis. caveats as the specification stands right now, you cannot use timeline semaphores with swap chains. this is generally not a big problem as synchronization with the swap chain tends to be explicit operations renderers need to take care of. another potential caveat to consider is that the timeline semaphore might not have a direct kernel equivalent on current platforms, which means some extra emulation to handle it, especially the out-of-order submission feature. as the timeline synchronization model becomes the de-facto standard, i expect platforms to get more native support for it. conclusion all three key vulkan extension game changers improve the overall development and gaming experience through improving graphics and enabling new gaming use cases. we hope that we gave you enough samples to get you started as you try out these new vulkan extensions to help bring your games to life follow up thanks to hans-kristian arntzen and the team at arm for bringing this great content to the samsung developers community. we hope you find this information about vulkan extensions useful for developing your upcoming mobile games. the samsung developers site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account or by subscribing to our monthly newsletter. visit the marketing resources page for information on promoting and distributing your apps and games. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem.
Arm Developers
tutorials game, mobile
blogthe samsung developers team works with many companies in the mobile and gaming ecosystems. we're excited to support our partner, arm, as they bring timely and relevant content to developers looking to build games and high-performance experiences. this vulkan extensions series will help developers get the most out of the new and game-changing vulkan extensions on samsung mobile devices. android r is enabling a host of useful vulkan extensions for mobile, with three being key 'game changers'. these are set to improve the state of graphics apis for modern applications, enabling new use cases and changing how developers can design graphics renderers going forward. you can expect to see these features across a variety of android smartphones, such as the new samsung galaxy s21, and existing samsung galaxy s models like the samsung galaxy s20. the first blog explored the first game changer extension for vulkan – ‘descriptor indexing'. this blog explores the second game changer extension – ‘buffer device address.’ vk_khr_buffer_device_address vk_khr_buffer_device_address is a monumental extension that adds a unique feature to vulkan that none of the competing graphics apis support. pointer support is something that has always been limited in graphics apis, for good reason. pointers complicate a lot of things, especially for shader compilers. it is also near impossible to deal with plain pointers in legacy graphics apis, which rely on implicit synchronization. there are two key aspects to buffer_device_address (bda). first, it is possible to query a gpu virtual address from a vkbuffer. this is a plain uint64_t. this address can be written anywhere you like, in uniform buffers, push constants, or storage buffers, to name a few. the key aspect which makes this extension unique is that a spir-v shader can load an address from a buffer and treat it as a pointer to storage buffer memory immediately. pointer casting, pointer arithmetic and all sorts of clever trickery can be done inside the shader. there are many use cases for this feature. some are performance-related, and some are new use cases that have not been possible before. getting the gpu virtual address (va) there are some hoops to jump through here. first, when allocating vkdevicememory, we must flag that the memory supports bda: vkmemoryallocateinfo info = {…}; vkmemoryallocateflagsinfo flags = {…}; flags.flags = vk_memory_allocate_device_address_bit_khr; vkallocatememory(device, &info, null, &memory); similarly, when creating a vkbuffer, we add the vk_buffer_usage_shader_device_address_bit_khr usage flag. once we have created a buffer, we can query the va: vkbufferdeviceaddressinfokhr info = {…}; info.buffer = buffer; vkdevicesize va = vkgetbufferdeviceaddresskhr(device, &info); from here, this 64-bit value can be placed in a buffer. you can of course offset this va. alignment is never an issue as shaders specify explicit alignment later. a note on debugging when using bda, there are some extra features that drivers must support. since a pointer does not necessarily exist when replaying an application capture in a debug tool, the driver must be able to guarantee that virtual addresses returned by the driver remain stable across runs. to that end, debug tools supply the expected va and the driver allocates that va range. applications do not care that much about this, but it is important to note that even if you can use bda, you might not be able to debug with it. typedef struct vkphysicaldevicebufferdeviceaddressfeatures { vkstructuretype stype; void* pnext; vkbool32 bufferdeviceaddress; vkbool32 bufferdeviceaddresscapturereplay; vkbool32 bufferdeviceaddressmultidevice; } vkphysicaldevicebufferdeviceaddressfeatures; if bufferdeviceaddresscapturereplay is supported, tools like renderdoc can support bda. using a pointer in a shader in vulkan glsl, there is the gl_ext_buffer_reference extension which allows us to declare a pointer type. a pointer like this can be placed in a buffer, or we can convert to and from integers: #version 450 #extension gl_ext_buffer_reference : require #extension gl_ext_buffer_reference_uvec2 : require layout(local_size_x = 64) in; // these define pointer types. layout(buffer_reference, std430, buffer_reference_align = 16) readonly buffer readvec4 { vec4 values[]; }; layout(buffer_reference, std430, buffer_reference_align = 16) writeonly buffer writevec4 { vec4 values[]; }; layout(buffer_reference, std430, buffer_reference_align = 4) readonly buffer unalignedvec4 { vec4 value; }; layout(push_constant, std430) uniform registers { readvec4 src; writevec4 dst; } registers; placing raw pointers in push constants avoids all indirection for getting to a buffer. if the driver allows it, the pointers can be placed directly in gpu registers before the shader begins executing. not all devices support 64-bit integers, but it is possible to cast uvec2 <-> pointer. doing address computation like this is fine. uvec2 uadd_64_32(uvec2 addr, uint offset) { uint carry; addr.x = uaddcarry(addr.x, offset, carry); addr.y += carry; return addr; } void main() { uint index = gl_globalinvocationid.x; registers.dst.values[index] = registers.src.values[index]; uvec2 addr = uvec2(registers.src); addr = uadd_64_32(addr, 20 * index); cast a uvec2 to address and load a vec4 from it. this address is aligned to 4 bytes. registers.dst.values[index + 1024] = unalignedvec4(addr).value; } pointer or offsets? using raw pointers is not always the best idea. a natural use case you could consider for pointers is that you have tree structures or list structures in gpu memory. with pointers, you can jump around as much as you want, and even write new pointers to buffers. however, a pointer is 64-bit and a typical performance consideration is to use 32-bit offsets (or even 16-bit offsets) if possible. using offsets is the way to go if you can guarantee that all buffers live inside a single vkbuffer. on the other hand, the pointer approach can access any vkbuffer at any time without having to use descriptors. therein lies the key strength of bda. extreme hackery: physical pointer as specialization constants this is a life saver in certain situations where you are desperate to debug something without any available descriptor set. a black magic hack is to place a bda inside a specialization constant. this allows for accessing a pointer without using any descriptors. do note that this breaks all forms of pipeline caching and is only suitable for debug code. do not ship this kind of code. perform this dark sorcery at your own risk: #version 450 #extension gl_ext_buffer_reference : require #extension gl_ext_buffer_reference_uvec2 : require layout(local_size_x = 64) in; layout(constant_id = 0) const uint debug_addr_lo = 0; layout(constant_id = 1) const uint debug_addr_hi = 0; layout(buffer_reference, std430, buffer_reference_align = 4) buffer debugcounter { uint value; }; void main() { debugcounter counter = debugcounter(uvec2(debug_addr_lo, debug_addr_hi)); atomicadd(counter.value, 1u); } emitting spir-v with buffer_device_address in spir-v, there are some things to note. bda is an especially useful feature for layering other apis due to its extreme flexibility in how we access memory. therefore, generating bda code yourself is a reasonable use case to assume as well. enables bda in shaders. _opcapability physicalstoragebufferaddresses opextension "spv_khr_physical_storage_buffer"_ the memory model is physicalstoragebuffer64 and not logical anymore. _opmemorymodel physicalstoragebuffer64 glsl450_ the buffer reference types are declared basically just like ssbos. _opdecorate %_runtimearr_v4float arraystride 16 opmemberdecorate %readvec4 0 nonwritable opmemberdecorate %readvec4 0 offset 0 opdecorate %readvec4 block opdecorate %_runtimearr_v4float_0 arraystride 16 opmemberdecorate %writevec4 0 nonreadable opmemberdecorate %writevec4 0 offset 0 opdecorate %writevec4 block opmemberdecorate %unalignedvec4 0 nonwritable opmemberdecorate %unalignedvec4 0 offset 0 opdecorate %unalignedvec4 block_ declare a pointer to the blocks. physicalstoragebuffer is the storage class to use. optypeforwardpointer %_ptr_physicalstoragebuffer_writevec4 physicalstoragebuffer %_ptr_physicalstoragebuffer_readvec4 = optypepointer physicalstoragebuffer %readvec4 %_ptr_physicalstoragebuffer_writevec4 = optypepointer physicalstoragebuffer %writevec4 %_ptr_physicalstoragebuffer_unalignedvec4 = optypepointer physicalstoragebuffer %unalignedvec4 load a physical pointer from pushconstant. _%55 = opaccesschain %_ptr_pushconstant__ptr_physicalstoragebuffer_writevec4 %registers %int_1 %56 = opload %_ptr_physicalstoragebuffer_writevec4 %55_ access chain into it. _%66 = opaccesschain %_ptr_physicalstoragebuffer_v4float %56 %int_0 %40_ aligned must be specified when dereferencing physical pointers. pointers can have any arbitrary address and must be explicitly aligned, so the compiler knows what to do. opstore %66 %65 aligned 16 for pointers, spir-v can bitcast between integers and pointers seamlessly, for example: %61 = opload %_ptr_physicalstoragebuffer_readvec4 %60 %70 = opbitcast %v2uint %61 // do math on %70 %86 = opbitcast %_ptr_physicalstoragebuffer_unalignedvec4 %some_address conclusion we have already explored two key vulkan extension game changers through this blog and the previous one. the third and final part of this game changer blog series will explore ‘timeline semaphores’ and how developers can use this new extension to improve the development experience and enhance their games. follow up thanks to hans-kristian arntzen and the team at arm for bringing this great content to the samsung developers community. we hope you find this information about vulkan extensions useful for developing your upcoming mobile games. the samsung developers site has many resources for developers looking to build for and integrate with samsung devices and services. stay in touch with the latest news by creating a free account or by subscribing to our monthly newsletter. visit the marketing resources page for information on promoting and distributing your apps and games. finally, our developer forum is an excellent way to stay up-to-date on all things related to the galaxy ecosystem.
Arm Developers
tutorials game
blogadaptive scalable texture compression (astc) is an advanced lossy texture compression format, developed by arm and amd and released as royalty-free open standard by the khronos group. it supports a wide range of 2d and 3d color formats with a flexible choice of bitrates, enabling content creators to compress almost any texture asset, using a level of compression appropriate to their quality and performance requirements. astc is increasingly becoming the texture compression format of choice for mobile 3d applications using the opengl es and vulkan apis. astc’s high compression ratios are a perfect match for the mobile market that values smaller download sizes and optimized memory usage to improve energy efficiency and battery life. astc 2d color formats and bitrates astcenc 2.0 the ‘astcenc’ astc compression tool was first developed by arm while astc was progressing through the khronos standardization process seven years ago. astcenc has become widely used as the de facto reference encoder for astc, as it leverages all format features, including the full set of available block sizes and color profiles, to deliver high-quality encoded textures that are possible when effectively using astc’s flexible capabilities. today, arm is delighted to announce astcenc 2.0! this is a major update which provides multiple significant improvements for middleware and content creators. apache 2.0 open source license the original astcenc software was released under an arm end user license agreement. to make it easier for developers to use, adapt, and contribute to astcenc development, including integration of the compressor into application runtimes, arm relicensed the astcenc 1.x source code on github in january 2020 under the standard apache 2.0 open source license. the new astcenc 2.0 source code is now also available on github under apache 2.0. compression performance astcenc 1.x emphasized high image quality over fast compression speed. some developers have told arm they would love to use astcenc for its superior image quality, but compression was too slow to use in their tooling pipelines. the importance of this was reflected in the recent astc developer survey organized by khronos where developer responses rated compression speed above image quality in the list of factors that determine texture format choices. for version 2.0, arm reviewed the heuristics and quality refinement passes used by the astcenc compressor—optimizing those that were adding value and removing those that simply didn’t justify their added runtime cost. in addition, hand-coded vectorized code was added to the most compute intensive sections of the codec, supporting sse4.2 and avx2 simd instruction sets. overall, these optimizations have resulted in up to 3x faster compression times when using avx2, while typically losing less than 0.1 db psnr in image quality. a very worthwhile tradeoff for most developers. astcenc 2.0 - significantly faster astc encoding command line improvements the tool now supports a clearer set of compression modes that directly map to astc format profiles exposed by the khronos api support and api extensions. textures compressed using the ldr compression modes (linear or srgb) will be compatible with all hardware implementing opengl es 3.2, the opengl es khr_texture_compression_astc_ldr extension, or the vulkan astc optional feature. textures compressed using the hdr compression mode will require hardware implementing an appropriate api extension, such as khr_texture_compression_astc_hdr. in addition, astcenc 2.0 now supports commonly requested input and output file formats: loading ldr images in bmp, jpeg, png, and tga formats loading hdr images in openexr and radiance hdr formats loading compressed textures in the “.astc” file format provided by astcenc, and the dds and ktx container formats storing ldr images into bmp, png, and tga formats storing hdr images into openexr and radiance hdr formats storing compressed texturesinto the “.astc” file format provided by astcenc, and the dds or ktx container formats core codec library finally, the core codec is now separable from the command line front-end logic, enabling the astcenc compressor to be integrated directly into applications as a library. the core codec library interface api provides a programmatic mechanism to manage codec configuration, texture compression, and texture decompression. this api enables use of the core codec library to process data stored in memory buffers, leaving file management to the application. it supports parallel processing for compression of a single image with multiple threads or compressing multiple images in parallel. using astcenc 2.0 you can download astcenc 2.0 on github today, with full source code and pre-built binaries available for windows, macos, and linux hosts. for more information about using the tool, please refer to the project documentation: getting started: learn about the high-level operation of the compressor. format overview: learn about the astc data format and how the underlying encoding works. efficient encoding: learn about using the command line to effectively compress textures, and the encoding and sampling needed to get functional equivalents to other texture formats that exist on the market today. arm have also published an astc guide, which gives an overview of the format and some of the available tools, including astcenc . arm astc guide: an overview of astc and available astc tools. if you have any questions, feedback, or pull requests, please get in touch via the github issue tracker or the arm mali developer community forums: https://github.com/arm-software/astc-encoder https://community.arm.com/graphics/ khronos® and vulkan® are registered trademarks, and anari™, webgl™, gltf™, nnef™, openvx™, spir™, spir-v™, sycl™, openvg™ and 3d commerce™ are trademarks of the khronos group inc. openxr™ is a trademark owned by the khronos group inc. and is registered as a trademark in china, the european union, japan and the united kingdom. opencl™ is a trademark of apple inc. and opengl® is a registered trademark and the opengl es™ and opengl sc™ logos are trademarks of hewlett packard enterprise used under license by khronos. all other product names, trademarks, and/or company names are used solely for identification and belong to their respective owners.
Peter Harris
Learn Developers Podcast
docseason 1, episode 8 previous episode | episode index | next episode this is a transcript of one episode of the samsung developers podcast, hosted by and produced by tony morelan a listing of all podcast transcripts can be found here host tony morelan senior developer evangelist, samsung developers instagram - twitter - linkedin guest andy beaudoin microsoft/turn 10 studios in this episode of pow, i interview andy beaudoin, principal design director at turn 10 studios, the microsoft team behind the mega successful racing game, forza andy and i sat down to chat about their latest addition to the forza franchise, forza street, and how they specifically designed this game for play on mobile devices listen download this episode topics covered turn 10 studios samsung partnership forza motorsport forza street soundtrack galaxy s10 optimizations galaxy gamedev more about forza street forza street is an all-new forza experience where players collect and assemble a lineup of cars to compete in quick, cinematic races it’s a fun experience for new forza fans and experienced drivers alike and is the first forza game designed specifically with mobile devices in mind transcript note transcripts are provided by an automated service and reviewed by the samsung developers web team inaccuracies from the transcription process do occur, so please refer to the audio if you are in doubt about the transcript tony morelan 0 02 hey, i'm tony morelan this is pow! podcast of wisdom from the samsung developer program, where we talk about the latest tech trends and get insight into all the opportunities available for developers looking to create for samsung on today's show, i interview andy beaudoin principal design director at turn 10 studios, the microsoft team behind the mega successful racing game forza andy and i sat down to chat about their latest addition to the forza franchise, forza street, and how they specifically designed this game for play on mobile devices and all of the music in this episode? it's the official soundtrack from forza street enjoy tony morelan 0 40 andy, thanks for coming on the podcast the first question i'm going to ask you is who is andy beaudoin? andy beaudoin 0 47 hi tony andy beaudoin is me i'm a principal design director at turn 10 studios i've been making games for about two and a half years decades, around 2324 years i grew up in the bay area, which i believe is near and dear to you as well and yeah, so i'm a father of two lovely and very ambitious little kids and i live up here in seattle, and i like to explore the outdoors when i'm not making games tony morelan 1 19 excellent i'm sure it's absolutely beautiful up there so getting outside must be a ton of fun what is your job title at turn 10? andy beaudoin 1 27 i am a principal design director so i work in the part of the company and the part of turn 10 that isn't motorsport so we have a big motorsport team that's responsible for that title and we work with another term development team over in the uk playground studios who are the ones who make the horizon series and then my group works on forza street, which is the new mobile title we released and also, i'm responsible for some of the other parts of the franchise from a design perspective so we're kind of the floating design team out on the third floor of our studio tony morelan 2 04 so what was your journey to the to the team at turn 10? how did you actually land that position? andy beaudoin 2 11 so we can go way back to the beginning andy beaudoin 2 15 i started at turn 10 about five years ago i came to microsoft, right out of sony had been working on a game with sony called mag was part of the socom franchise it was part of the studio in this area that worked on the socom franchise for sony and so from there, i came to microsoft and i worked in xp la, which was the xbox live arcade about 10 years ago and that was some of the first digital distributed games on the xbox and i was really excited to come here and really kind of work on what i saw was the future of games where it was not all about buying a box product at the store and bringing it home but these light quick, easy to download and easily accessible games were really compelling to me at the time so it was fun to come in and work on that aspect of the business and then soon after that, i got back into the larger scale games worked on a game called quantum break with a really fun team main gravity there out of finland and so i work with that team for a few years and then after that, i want to travel a little bit less with young kids and so i had an opportunity to come join, turn 10 studios, which is great, given i started my career off electronic arts working on the need for speed series 20 some odd years ago wow so it's been really fun to come and come back and come full circle to the racing the racing genre it's been a great time tony morelan 3 42 that's great so turn 10 studios, it's part of microsoft, correct? andy beaudoin 3 46 absolutely yeah it's a studio that was created within microsoft, specifically to give really a top tier racing title to be a showcase for the graphics technology of our xbox devices so just turn 10 studios working pretty much independently from microsoft or is it all part of the big masterplan team, we're part of the xbox organization so we're definitely well integrated into xbox, which is, you know, part of microsoft as a whole, the way that we're treated within the larger organization, we do operate relatively independently of course, we have our business goals that we have to try to achieve and we do a whole lot to try to promote our hardware, like i mentioned and of course, we're integrated into kind of the grand more strategic plans of microsoft all up, but they're pretty hands off and let us really do what we need to do creatively to make fantastic experiences for the people that play our games tony morelan 4 45 so i'm a huge fan of the forza franchise have actually spent a ton of hours playing forza motorsport so awesome absolutely blast of a game tons of fun so tell me the history of forces streets andy beaudoin 4 57 and forza the streets have very different products for us so the team that i'm most connected to at the studio is a small team that started off actually with a product called forza motorsport six apex and so this was our attempts to one of the things i love about turn 10 is it's a very future focused studio i'm very pragmatic so we're not afraid to take risks, but we also really take one step at a time, walk, crawl, fly so with forza motorsport six apex, our team, it was a small team, i was the only designer on the team we got together and we had a mission which was take forza motorsport six, and see if you can create a smaller bit more bite sized experience using all the assets from that game and then release it on windows for free it wasn't truly a free to play game there was, i think, one or two little things you could spend some money on the game, but it largely was something we built and released for free and the reason we did that was so that we could learn how to ship forts in our forza engine on pc i mentioned before that our studio really has been at the forefront of trying to showcase the xbox device so our technology in our forza engine was really optimized down to every little bit of metal to be just as performant as it could be on xbox so it was a it was a decent amount of work to get it to work on the pc not that i mean, there's a lot of shared hardware between the two so it's not that it didn't work but there are things that we wanted to do to really make it a true pc experience, support for keyboard support for mouse support for different graphics settings, since there's such a wide array of pc devices so anyway, long story short, this was an investment the studio made, so we can ship something on pc for free, and then lay the groundwork for the next motorsport and the next horizon all of which have also shipped on pc so how long ago was that when the force apex when you guys were working on that about three and a half four years ago, if i recall correctly so following up on that the team moved on to the next adventure, which was okay now that we've got four to showing up on two platforms, xbox and pc, obviously the next big opportunity for us to take the franchise that we love the cars, we love, the racing we love and reach a much larger audience was to live to mobile devices and so with forza street, we set out to design an experience that was mobile first, which is kind of funny because we actually released it on pc first i'll get to that in a minute but the core experience itself was designed to be really, really mobile friendly, because we knew that this is a game we wanted to get onto mobile devices so we could reach the millions and millions of people out there that love cars, and primarily game on mobile devices tony morelan 7 49 so you said the team was small starting off his team started to grow a bit what's the what's the size of your team right now working on forza street andy beaudoin 7 56 we have grown a bit so the core leadership team is here handful of people and we work with a developer out of the uk, a team that we've worked with now for a handful of years, and they do the heavy lifting on development we also have our services team internally, which does all of our back-end technology and that's all handled on the turn 10 sides so it's a partnership between the software developer in the uk as well as our internal teams my team is primarily a leadership team where we have a handful of individuals that spend most of their time looking at street but also have some other shared responsibilities in the studio tony morelan 8 36 so let's talk about forza street on the galaxy store andy beaudoin 8 38 one of the coolest things if you have a galaxy device and download the game on the galaxy stores, then you get a freebie you get a unique car that's delivered to you after you've downloaded the game and after you fire it up and that's the 2015 ford mustang gt so that's cool right out of the gate we give you a little bit of nod for pulling the game down the store other than that the game is compatible with all devices what's really fun about street is that you can download it on your galaxy store, you can play for a while, if you register and connect with xbox live, you can then go to a tablet and play with all the same progress there if you've got a windows pc, you can pull up the game on your windows pc and play it there a lot of the folks in the studio myself included tend to do different activities on the different devices so if i really want to get into the race, oftentimes i'll sit in my big gaming pc and i'll see it and it's full you know, i think i'm running it to k or something like that really, really high def play but then from outside of my kids and they're doing stuff i can also sneak in a bunch of races on my i've got an s 10 personal device i can play in plays great and looks great there it's a very continuous experience tony morelan 9 45 so you know, recently we released the s20 so can you tell me what was done to optimize for the street for the 21st off andy beaudoin 9 52 i have to say i'm super jealous because i literally bought my ass 10 right before we started working with you guys and he found out about the device oh, they just waited an extra month but the s 10 scream and it's already doing great for me so the s 20 i'm not an engineer, so i won't be able to get into all the nuts and bolts of it but my understanding what they did is they worked with the samsung team to really optimize the experience to run and refresh rates higher than 60 hertz, which is kind of, on, you know, xbox and console gaming 60 hertz is, is the target and a lot of games don't even achieve that so on the s20, i believe we're running at about 96 hertz, if i'm if i'm not mistaken so really fast refresh another bit of work that was done to work with the s20 has taken advantage of the game sdk that your team provides this has been a new learning opportunity for us coming from console and pc to mobile is that you really have to think about things like battery life and heat management and all of those elements, which was kind of a new set of challenges for us to think about and using some of these optimizations, working with your team you working with the game sdk, we were able to find ways to kick it up to 96 hertz when we need to when we're in the race, we want that really, really crisp response rate but then when you're in some of the menus, we can also vary our resolution or vary our refresh rate so that you're getting the best of both worlds both long battery life really well managed heat profile on the device, but also something that looks incredible when you're racing and need all that really fast response or in the main menus, where we can go to a higher resolution, we can actually show a lot of nuance in the car and all the different effects on the car and you don't necessarily need to be pushing the same refresh rate and it still is a great experience and you're also doing a better job of managing your resources so that's been a really good partnership for us and out of that came, you know, optimizations to the game even beyond just the device that we're really able to take advantage of thanks to the support from, from the tech team from samsung tony morelan 11 57 that's great you know, having played the game on the s20 i can tell you it is absolutely beautiful andy beaudoin 12 03 so you're telling me i should upgrade? tony morelan 12 04 yeah, definitely need to upgrade your, your device yeah, it's a ton of fun and it is i mean it is just a beautiful game so well done so for those people out there that own an s 20 are there any special perks for them when they download the game? andy beaudoin 12 22 absolutely so not only do you get the 2015 ford mustang gt from downloading through the store, but you also get the 2015 chevy corvette 06 with a custom paint job, you'll get some in game credits and you'll get some gold and it's a really good start to the game the corvette is a is a really high-end sports car in the game and it's one that's going to be really set up to be upgraded in a really compelling fashion so with that extra golden extra credits you're getting a good jumpstart on building out your awesome collection of cars and of course the street tony morelan 12 55 you know, one thing that really stood out for me when i played the game, it was the art behind if it wasn't just straight cars and a beautiful road, there was a lot of intel put into the artistic approach to this game we talked a little bit about the art that was used to enforce the street andy beaudoin 13 10 yeah, absolutely so at turn 10, we've got this creative concept called the emotional core and so whenever we do a new product line, we spend time thinking about emotionally what do we want players to take away from the experience so if you look at motor sport, it's got a very different aesthetic from horizon, for example, and which is different from sports history and so we started that off and some of the terms that we looked at and for our emotional core was street were evocative and stylish from the beginning, we wanted it to kind of feel like a high gloss you know, red carpet, hip hop, music video where, you know, the streets are all wet, not for any reason other than cars just look great on wet streets so really trying to push that feel of this being a high production as opposed to motorsport, which is all about photorealistic down the track heat coming off, this needed to look like, you know, you had a film producer that was there trying to put everything just in the right place so we're trying to capture that bond so from there we started to think about, you know, what kind of aesthetic would look good, what kinds of environments would look good the game takes place evening and tonight just because it looks great with the neon and feels different from other titles as well and all that led us down the path of trying to think of what are the best locations that can try to encapsulate this, this type of look and feel and that's where we landed with miami tony morelan 14 37 so did you guys do any in person the photo research? andy beaudoin 14 40 i did not but yeah, the development team and our art director took a trip down to miami and really spent some time both looking at the amazing car culture down there there's some really high-end automotive shops down there and you know, it's a great place to drive it's a great place it's nice weather there's a great beach scene is a really cool edm kind of dance nightclub scene with a lot of that kind of cuban vibe mixed in so it's just a really cool it hits that emotional core of really being stylish and so i know that the team took away a lot of that a lot of the music that's in the game is kind of inspired by that trap, kind of edm meets hip hop type of vibe, which is just pulsing through the streets of miami, so i'm bummed i missed it but here's a pretty cool, pretty cool research trip tony morelan 15 28 yeah and i will say that i actually helped teach a course in design for samsung, in miami oh, cool this past year so having played the game after i was in miami, i totally recognize some of the streets that i was racing down as the streets that i was on when i was helping teach this course in miami, so ods did a great job with that cool will the game be adding any additional locations for racing or is it primarily right now just focused on the miami scene? andy beaudoin 15 56 right now we're focused on miami the game if the game is built to be a live operations game, and that means that we're intending to continue to invest in the game both from our resources standpoint as well as time standpoint to continue to change the game over time, every three to six weeks, we bring a new event into the game, so that players who play the game over a long period of time, we'll always have something new to do, there's, of course, a good story that you can play through that's got a significant amount of content there's a rivals mode, which has, you know, the ability to pit your car collection up against those of other players and in the world and then every month or so, we're going to release a new event with new cars, new content, new ways to play new ways to win so with that ethos of this is something that, you know, launching the game is just the start of the life of a mobile game and so, the future is pretty wide open, we're going to see what our players do, what they like to play and where they want to take the game and try to manage what we do with the game in the future accordingly tony morelan 16 58 got it getting back a little bit to the graphics are you able to leverage from any of your existing forza titles or with all the graphics or the created fresh new for forza street? it's a mix andy beaudoin 17 07 we have an amazing library of cars at turn 10 as part of the forza franchise, we're knocking on 1000 and so when we started with fort st, and one of the things we want to do is try to find a way to take advantage of all that hard work that went into making those cars amazing so the team created a new pipeline by which we could take cars that were ready for forza motorsport, and put them through a process to get them game ready into st so all the cars started off in motorsport they've gone through this process, there's some hand touching that has to go into make them as efficient as we want them to be on the mobile platforms but yeah, they've got the same cars you know, all the shaders are carried over and there's a lot of similarities there the environments themselves were all custom built for street and to take advantage of again of how mobile devices work the footprint wanted to keep on the mobile devices and things like that so it's a really cool blend of both existing assets and art and new stuff tony morelan 18 07 you know, another aspect of the game that really stands out is music so is this music written specifically for forza street? or did you just license existing songs? andy beaudoin 18 14 now it was all written like i mentioned, we had really good inspiration from the music scene that is kind of alive and well in miami and we had a soundtrack that was created specifically for the game five of the tracks came from a team called heavy duty projects and their music production company based in la, and new york, and they've got some award-winning composers and music producers and so it was great to work with that team and then there was a sixth track, which was from pete international airport, which is a solo project of peter holmstrom and he's best known for his work with the dandy warhols so that's, that's great it's kind of this fun, different mix tony morelan 18 52 yeah, i'm a big fan of dandy warhols do you know anything about that relationship? and how did that come about? andy beaudoin 18 58 yeah, so our audio director for this studios a guy named mixer as well and he's phenomenally talented he's a great guitar player and he's also really gotten me into the rabbit hole of guitar pedals so i have him to thank for the board i have on my floor that i'm nowhere near talented enough to use, but i believe he's good friends with peter and they've known each other for years and work together and nick was in the music scene over in the uk a couple of decades ago, too so there's, i think a long-term relationship that is has led to that partnership tony morelan 19 27 that's great so let's talk a little bit more about how the team created the audio and the sound for the game were these effects that were pulled from other forza games or did you create any of these audio clips specifically for street andy beaudoin 19 39 definitely both new and harvested from existing forts of stuff so we've got probably 15 or more years of sound recording that's gone into the forza franchise, all the different cars, the different squeak, squeals turbos, you know, one of the cool things about forza street is that even though it's a mobile game, and it's a timing based game, rather than a full on, you know, track based steering game, it's still running for it's a physics and one of the cool elements of that is that we get to use all that physics data that's coming out of our physics simulation to drive the audio so all the audio for the cars, how they move how they sound comes from the original games, obviously, with some modifications to optimize them for mobile devices but you know, if you've got a turbo on the car, there's actually a part simulation running out of the hood that's saying there's a turbo that kicks off the turbo sounds and there's a lot of this nuance that that we get to pull out of our cars audibly because we're built on the back of that really rich and robust for it's a physics system andy beaudoin 20 43 so is the audio for the most part computer generated or these literally like you know, sound tech guy with a mic out in front of a, you know, chevy corvette recording the exhaust andy beaudoin 20 54 it sound tech guy out there, and with the chevy corvette, in fact, one of the funny stories i think that the audio team, too took a little bit of flak from our studio head, alan hartman because back in the day, i think it was his rs four he had it was really souped up and i think they put it on the dyno and ran it a little bit too hard to try to capture the sounds and might have done a bit of damage to it so we're all in as a studio and trying to make sure that the audio scape is the best it can be tony morelan 21 19 that's awesome so do you feel that you know, the realistic graphics that you have in the game that realistic sounds, you know, does that help users become more engaged? or do you think they want more of that sort of arcade style? andy beaudoin 21 32 yeah, i think there's a good overlap between the racing players that wants simulation and the racing players that want arcade obviously, there are little niches that just you know, some players that just want one or another but as you know, i've played in i've worked on racing games for over 20 years now and you know, need for speeds got a style that i think is really compelling and cool it provides one experience for us has got its own style there's the asphalt games on mobile that are great and provide a different experience we've tried to with street stay true to forza and to the fort's of brand, and that to us means, you know, we want to be a best in class experience with high quality, high quality graphics, high quality experience so that there's this immersive sensation to us we also want to be authentic so we want our cars to look and feel like the real things, they want to have weight, they want to have mass so those are those two things keep us from going too far down the over the top, because then we start to stray from what we think 40 is and what customers expect so even though we've created a racing experience with street, where you interact very differently, you're not steering the car down the track, you're really just focused it's a timing game, which we think is a really great match for how people play on mobile but it's still the cars have mass like i mentioned, they're still running forward to physics, they're still throwing up smoke when they lose grip and all that kind of stuff and if you hit your boost too late going into a corner, your car's going to go sideways and hit the wall all those things carry through that immersive sense of weight and that one would expect from a forex title tony morelan 23 04 yeah and i can i can attest to that as far as going into a turn too late and with my boost and ending up in the in the wall there and seeing myself crash so yeah, it's nice and realistic so obviously a huge collection of cars that you've licensed so tell me is it difficult to license these cars? i mean, obviously forges a big brand but is that something that's a challenge when you're trying to bring in new cars to the game? andy beaudoin 23 26 i don't know that's a challenge i think the biggest challenge we have is that we have an incredible list of partners in the forza franchise and these are partners brands that we've worked with for years and we have amazing support mclaren’s an example where we, right now we're running an event that's really celebrating the mclaren brand and that was a team that was really eager to work with us, and to get their name and get their brand in our game and also to co-promoter so it's been a really good partnership so i wouldn't say it's difficult i think the complexity comes in that we've got these long-standing relationships with partners and now we're bringing in a mobile game so we've got business structures and deals that are built upon console and built upon that type of business model and so a lot of the discussions or licensing team has been having with partners has been trying to give an understanding of how the mobile space is a bit different than what we've got in our existing agreements and it's not that the manufacturers are pretty used to working with mobile titles and you know, mclaren’s, and other in other mobile titles as well but to think about how we take existing franchise level agreements and make them work with now a mobile game as well has meant some just reeducation, i guess, in realignment of how we work with existing deals so it really the only complexity is that we have a whole franchise that we're licensing for, rather than a particular game, which just means we have a few more considerations, then, you know, some of the smaller teams working on a mobile game line tony morelan 24 53 i'm sure that you've got some updates that you can't quite share publicly yet but are there any anything that you can share? that we get for the straight users excited about andy beaudoin 25 03 i think the biggest thing is that, like i mentioned earlier, we're going to be releasing new stuff every month, every month and change so the game and how it looks today is not what it's going to look like in a couple of weeks it's not what it's going to look like in six months so you know, hop in now so you got a chance to win i think we had a few days left on the mclaren event so you can get some of those awesome mclaren's there's never a better time to win them and then following that, there'll be something else to win and the game is continuously growing we've been out on mobile for, you know, worldwide for just a little bit over a month, just shy of two months now so we've been learning a ton from how people are playing our game and we're going to take that information and continue to make the game better our goal is to make people that play the game feel like this is a place that they can have as a home for their mobile racing fix for months, years to come so that's our top priority is making it a place that people want to stay and enjoy staying and feeling your time is really well spent so that's a north star where you keep driving for andy beaudoin 26 05 yeah, i'd love to hear that, you know, it's kind of nice to because if it's a game that that you can set down for a moment, and then know that next time you pick it up is something new and fresh that just gives you a good reason to grab your device and get back into playing absolutely tony morelan 26 18 any other games coming from xbox studios that are coming to mobile that you can talk about andy beaudoin 26 22 nothing that i'm able to speak about, i can just kind of focus on what we're doing with forza i mean, you've seen gears has released a mobile game recently, which is great and, you know, we've got a couple of other titles mine crafts out there as well i think we're just speaking to the fact that a whole bunch of people play games on mobile and so with our goal of trying to entertain customers everywhere and meet people where they are and entertain them with xbox titles, i think that's kind of an indication of where we're at now and i would expect more things from us on the mobile space in the future tony morelan 26 56 so what advice would you give developers looking to bring their games to the galaxy store? andy beaudoin 27 01 biggest thing i would say is don't hesitate to reach out to the team for advice and support we were really impressed with the level of support we got from the tech support team over there in the in the uk when we're they were working with our partners that the guys came on site for a period of time helped us optimize helped us point out some ways that we can make the game better so i would reach out to the team earlier and see if there are any ways that they can kind of partner earlier on we had a great experience working with samsung on pre-registrations and a lot of people that pre-registered the game, which meant that as soon as we launched worldwide, we had a really big cohort of folks coming in, which is really valuable for us, you know, to climb the charts and make sure that we're in a good position to drive organic acquisition so yeah, i think reach out early try to engage the team as much as possible early on, and don't discount the amount of pre-registrations you can get from a really good partnership with samsung tony morelan 27 59 it's great to hear why would you say that it's important that developers do offer their game on the galaxy store? andy beaudoin 28 04 again, it's another surface area that, you know, again, i'm biased because the galaxy device, but it's yeah, it's a hugely popular device, hugely popular suite of devices the galaxy store sits on every one of those devices you know, it's also if i remember correctly, we had really good product placement as well, when the game went live i think the team did a really good job of promoting forza street, which not only gave us the strong registrations that we had when we went live, but we also got some really good organics installs when the game went live as well so i think that the format of the store is really good to promoting the visuals of the game it's really focused, and we had a great experience with it so tony morelan 28 45 excellent all right so tell me in forza street, what is your favorite car to drive? andy beaudoin 28 51 my highest rated cars the boss 302 that is my highest pi car okay it's a tough question i've got the 99 spider which is my epic supercar that it's taking me a little bit longer to upgrade because it's hard to get those epics and you need to duplicate cars in order to upgrade them but andy beaudoin 29 11 yeah, it's passion versus functionality that's a challenging one tony morelan 29 15 all right so in real life, what would be your favorite car to drive? andy beaudoin 29 18 so i've got an s for now it's 2013 so it's a little bit longer in the tooth i've been pining after an rs five sport back for many, many years, but i've not yet gotten to the spot where i can i can make that transition but my wife and i have a plan and someday in the future, i hope to have an rs five sport back i'm a father of two i like we've discussed mountain biking, i like to ride mountain bikes my bike in the back of my house for having that sport back would make it even easier to throw my bike in the back of the car and go out for a ride afterwards so that's my current, my current object of my desire tony morelan 29 54 yeah so as you'd mentioned, we both are big fans of mountain biking you obviously being up there in the northwest you've got some beautiful trails to ride me being in california we've got a lot of great trails out here so i'm going to ask you, when you're not doing your day to day job with turn 10 studios, what do you like to do for fun? andy beaudoin 30 12 for fun, i got to kind of primary hobbies and that's music and mountain biking and probably equally skilled at both, which means i'm not particularly skilled at either now i love i play with some guys at work i play some really poor guitar and sing it mediocre lee for them but that's a lot of fun we just do a bunch of covers and get together every week or two and get together and jam but yeah, mountain biking is kind of the biggest passion right now and i started that a couple years ago, just looking at what's in my backyard up here in the northwest and how many amazing trails are to ride and i grew up in the bay area and so i grew up kind of in the bmx and skateboarding era in the 80s and so you know, in my now mid 40s, to discover that there's this awesome thing where you can take bikes and go off jumps and, and you don't look completely silly at my age doing that was pretty captivating tony morelan 31 01 now i will say andy is currently wearing an arm brace so it sounds like you're having a little too much fun maybe out there on the trails andy beaudoin 31 09 yeah, i need to learn to slow down i've had a couple of crashes over the past six months i'm nursing a broken collarbone right now, which doesn't hurt that much, but keeps me off the bike for a couple of months so looking forward to getting healed and maybe going slightly slower off jumps next time tony morelan 31 24 nice nice that sounds fine why are you going to take that passion and then bring it into the video world forza street? andy beaudoin 31 30 that's cool yeah, i know it's a little bit less dangerous to racing horses straight than it is on a bike so but yeah, they both they both hit the same endorphins for sure tony morelan 31 38 that's wonderful okay, andy, want to absolutely thank you and appreciate you taking the time to join me today on this podcast, tons of fun love what the guys are doing over there turn 10 studios and forza street super fun game to play so go download it have a blast, and we'll talk to you soon awesome thanks so much tony's a pleasure outro 31 55 looking to start creating for samsung download the latest tools to code your next app or get software for designing apps without coding at all sell your apps to the world on the samsung galaxy store check out developer samsung com today and start your journey with samsung the pow! podcast is brought to you by the samsung developer program and produced by tony morelan
We use cookies to improve your experience on our website and to show you relevant advertising. Manage you settings for our cookies below.
These cookies are essential as they enable you to move around the website. This category cannot be disabled.
These cookies collect information about how you use our website. for example which pages you visit most often. All information these cookies collect is used to improve how the website works.
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and tailor the website to provide enhanced features and content for you.
These cookies gather information about your browser habits. They remember that you've visited our website and share this information with other organizations such as advertisers.
You have successfully updated your cookie preferences.