What s New in Metal, Part 2
|
|
- Melvin Hodges
- 5 years ago
- Views:
Transcription
1 Graphics and Games #WWDC15 What s New in Metal, Part 2 Session 607 Dan Omachi GPU Software Frameworks Engineer Anna Tikhonova GPU Software Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
2
3
4
5 MetalKit Utility functionality for Metal Apps
6 MetalKit
7 MetalKit MetalKit provides efficient implementations for commonly used scenarios Less effort to get up and rendering Increased performance and stability
8 MetalKit Overview
9 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes
10 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes Texture Loader Metal texture object creation from image files
11 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes Texture Loader Metal texture object creation from image files Model I/O Integration Load and manage mesh data for Metal rendering
12 MetalKit View Overview Simplest way to get Metal rendering on screen
13 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X
14 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X Manages render targets Creates render pass descriptors
15 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X Manages render targets Creates render pass descriptors Multiple draw loop modes supported Timer, event, or explicitly driven draw loop
16 MetalKit View Setup Approaches to using MTKView
17 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size
18 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size
19 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize
20 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize
21 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize
22 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
23 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
24 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
25 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
26 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
27 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
28 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }
29 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
30 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
31 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
32 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
33 Managing Drawables
34 Managing Drawables Limited pool of drawables
35 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline
36 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Application
37 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Application GPU
38 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Frame 3 Application GPU Display
39 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Frame 3 Frame 4 Application GPU Display
40 Application Frame
41 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable
42 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable
43 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
44 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
45 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
46 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
47 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
48 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
49 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
50 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
51 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable
52 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
53 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
54 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];
55 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit]; }
56 MetalKit Texture Loader
57 MetalKit Texture Loader Texture loading made simple Give a reference, get a Metal texture
58 MetalKit Texture Loader Texture loading made simple Give a reference, get a Metal texture Fast and fully featured Asynchronously decodes files and creates textures Support for common image file formats including JPG, TIFF, and PNG Also support for PVR and KTX texture file formats
59 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];
60 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];
61 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];
62 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl fileurl options:nil completionhandler:mycompletionhandler];
63 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil nil completionhandler:mycompletionhandler];
64 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = 2. Load texture [[MTKTextureLoader alloc] initwithdevice:device]; [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler]; mycompletionhandler
65 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan
66 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible
67 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible Offline baking operations Static ambient occlusion Light map generation Voxelization of meshes
68 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible Offline baking operations Static ambient occlusion Light map generation Voxelization of meshes Allows you to focus on your rendering code
69 MetalKit and Model I/O Utilities to efficiently use Model I/O with Metal Optimized loading of Model I/O meshes into Metal buffers Encapsulation of mesh data for Metal Functions to prepare mesh data for Metal pipelines
70 Rendering a Model I/O Asset
71 Rendering a Model I/O Asset
72 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
73 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
74 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
75 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
76 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
77 Setup for Model Rendering Pipeline setup Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
78 Setup for Model Rendering Pipeline setup Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing
79 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }
80 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }
81 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }
82 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }
83 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }
84 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };
85 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };
86 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };
87 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };
88 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; MTLVertexDescriptor *metalvertexdesc = [MTLVertexDescriptor new];
89 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[0].format = MTLVertexFormatFloat3; metalvertexdesc.attributes[0].offset = 0;
90 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[0].format = MTLVertexFormatFloat3; metalvertexdesc.attributes[0].offset = 0; 0 : position Float3
91 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3
92 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4
93 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4
94 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4 12
95 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4
96 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
97 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
98 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 16
99 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.layouts[0].stride = 20; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
100 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.layouts[0].stride = 20; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 20
101 Vertex Array Layout 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
102 Vertex Array Layout 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
103 Vertex Array Layout
104 Vertex Array Layout...
105 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor error:error];
106 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor error:error];
107 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor renderpipelinedescriptor error:error];
108 Setup for Model Rendering Asset initialization Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
109 Setup for Model Rendering Asset initialization Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
110 Setup for Model Rendering Asset initialization Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
111 Setup for Model Rendering Asset initialization Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
112 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor
113 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh
114 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh Metal Vertex Descriptor Describes the layout of vertex attribute inputs to a render state pipeline
115 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh Metal Vertex Descriptor Describes the layout of vertex attribute inputs to a render state pipeline Intentionally designed to look similar Both contain an array of attribute and buffer layout objects Simplifies translation from one type to other
116 Asset Initialization Defaults and layout efficiency Each attribute in a Model I/O Vertex Descriptor has an identifying string-based name Model I/O assigns a default name if one does not exist in the model file - Names texturecoordinate, color - Model I/O defines these with the string-based MDLVertexAttribute name constants
117 Asset Initialization Defaults and layout efficiency Each attribute in a Model I/O Vertex Descriptor has an identifying string-based name Model I/O assigns a default name if one does not exist in the model file - Names texturecoordinate, color - Model I/O defines these with the string-based MDLVertexAttribute name constants Custom MDLVertexDescriptor recommended By default, Model I/O loads vertices as high-precision floating point types Feed pipelines with the smallest type that meets your precision requirements Improves vertex bandwidth efficiency
118 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2
119 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
120 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
121 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); metalvertexdesc modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
122 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
123 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
124 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;
125 Asset Initialization MetalKit Mesh Buffer Allocator MTKMeshBufferAllocator *mtkbufferallocator = [[MTKMeshBufferAllocator alloc] initwithdevice:metaldevice];
126 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];
127 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];
128 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];
129 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];
130 MetalKit Meshes Initialization Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
131 MetalKit Meshes Initialization Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
132 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
133 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
134 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
135 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
136 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
137 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
138 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh
139 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh
140 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh
141 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh
142 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh
143 Mesh
144 Mesh VertexBuffers
145 VertexBuffers Mesh VertexDescriptor
146 VertexBuffers Mesh VertexDescriptor
147 VertexBuffers Mesh VertexDescriptor Submesh
148 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh
149 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh
150 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh Draw Properties
151 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh Draw Properties
152 Mesh Rendering with Metal Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
153 Mesh Rendering with Metal Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator
154 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
155 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
156 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
157 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
158 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
159 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }
160 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }
161 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }
162 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }
163 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype submesh indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; submesh }
164 MetalKit Essentials
165 Metal Performance Shaders Anna Tikhonova GPU Software Frameworks Engineer
166 Metal Performance Shaders Introduction A framework of data-parallel algorithms for the GPU CPU-style library for the GPU
167 Metal Performance Shaders Introduction Optimized for ios Available in ios 9 for the A8 processor ipad Air 2 iphone 6 Plus iphone 6
168 Metal Performance Shaders Introduction Designed to integrate easily into your Metal applications As simple as calling a library function
169 Metal Performance Shaders Supported image operators Histogram, Equalization, and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel
170 Metal Performance Shaders Supported image operators Histogram, Equalization, and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel
171 Equalization
172 Equalization
173 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel
174 Lanczos Resampling
175 Lanczos Resampling
176 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel
177 Thresholding
178 Thresholding
179 Thresholding and Sobel
180 Thresholding and Sobel
181 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel
182 Gaussian Blur
183 Gaussian Blur
184 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
185 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
186 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
187 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
188 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
189 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Command Buffer // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
190 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];
191 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer Dispatch Kernel Dispatch Kernel source: sourcetexture destination: destinationtexture];
192 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer Dispatch Kernel Dispatch Kernel source: sourcetexture destination: destinationtexture];
193 Using Metal Performance Shaders Use a blur filter Command Buffer Draw Draw Draw Dispatch Kernel Dispatch Kernel // Create a filter object MPSImageGaussianBlur *blurfilter [[MPSImageGaussianBlur alloc] initwithdevice: device Encode MPS Blur // filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture
194 Using Metal Performance Shaders Use a blur filter Command Buffer Draw Draw Draw Dispatch Kernel Dispatch Kernel // Create a filter object MPSImageGaussianBlur *blurfilter [[MPSImageGaussianBlur alloc] initwithdevice: device Encode MPS Blur // filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture Commit
195 Download Sample Code MetalPerformanceShadersHelloWorld
196 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations
197 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations
198 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations
199 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations
200 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations
201 Optimized Gaussian Blur Statistics
202 Optimized Gaussian Blur Statistics 49 Metal kernels 2000 Lines of kernel code 821 Different Gaussian filter implementations
203 Demo
204 Filter Performance Not capped by screen refresh rate Smaller is better 16.6 ms = 60 FPS ms Sigma (Blur Radius)
205 A Few More Details
206 Source offset and Destination cliprect Filter properties Source Destination
207 Source offset and Destination cliprect Filter properties Source cliprect Destination
208 Source offset and Destination cliprect Filter properties offset Source cliprect Destination
209 Source offset and Destination cliprect Filter properties offset Source cliprect Destination
210 Source offset and Destination cliprect Filter properties offset Source cliprect Destination
211 In-place Operation Save memory Source == Destination
212 In-place Operation Save memory cliprect Source == Destination
213 In-place Operation Save memory offset cliprect Source == Destination
214 In-place Operation Save memory offset cliprect Source == Destination
215 In-place Operation Save memory offset cliprect Source == Destination
216 In-place Operation How? // Encode filter in-place in a Metal command buffer [blurfilter encodetocommandbuffer: commandbuffer inplacetexture: sourcetexture fallbackcopyallocator: myallocator];
217 In-place Operation How? // Encode filter in-place in a Metal command buffer [blurfilter encodetocommandbuffer: commandbuffer inplacetexture: sourcetexture fallbackcopyallocator: myallocator]; It s not always possible for Metal Performance Shaders filters to run in-place Depends on filter, filter parameters and properties Copy allocator will create a destination texture, so operation can proceed out-of-place
218 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; }; return destinationtexture;
219 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; // Use Metal encoder to initialize the destinationtexture from // sourcetexture, if necessary }; return destinationtexture;
220 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; // Use Metal encoder to initialize the destinationtexture from // sourcetexture, if necessary }; return destinationtexture;
221 Summary Make use of the new Metal support frameworks Robust, optimized, easy to integrate Faster bring-up of your application Less code to write and maintain Give us your feedback!
222 More Information Metal Documentation and Videos Apple Developer Forums Developer Technical Support General Inquiries Allan Schaffer, Game Technologies Evangelist
223 Related Sessions Managing 3D Assets with Model I/O Mission Tuesday 2:30PM What s New in Metal, Part 1 Presidio Tuesday 3:30PM Metal Performance Optimization Techniques Pacific Heights Friday 11:00AM
224 Related Labs Metal Lab Graphics D Friday 12:00PM
225
Metal for OpenGL Developers
#WWDC18 Metal for OpenGL Developers Dan Omachi, Metal Ecosystem Engineer Sukanya Sudugu, GPU Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationWorking with Metal Overview
Graphics and Games #WWDC14 Working with Metal Overview Session 603 Jeremy Sandmel GPU Software 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationFrom Art to Engine with Model I/O
Session Graphics and Games #WWDC17 From Art to Engine with Model I/O 610 Nick Porcino, Game Technologies Engineer Nicholas Blasingame, Game Technologies Engineer 2017 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in Metal. Part 2 #WWDC16. Graphics and Games. Session 605
Graphics and Games #WWDC16 What s New in Metal Part 2 Session 605 Charles Brissart GPU Software Engineer Dan Omachi GPU Software Engineer Anna Tikhonova GPU Software Engineer 2016 Apple Inc. All rights
More informationWorking With Metal Advanced
Graphics and Games #WWDC14 Working With Metal Advanced Session 605 Gokhan Avkarogullari GPU Software Aaftab Munshi GPU Software Serhat Tekin GPU Software 2014 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in Core Image
Media #WWDC15 What s New in Core Image Session 510 David Hayward Engineering Manager Tony Chu Engineer Alexandre Naaman Lead Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display
More informationIntroducing Metal 2. Graphics and Games #WWDC17. Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer
Session Graphics and Games #WWDC17 Introducing Metal 2 601 Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display
More informationMetal for Ray Tracing Acceleration
Session #WWDC18 Metal for Ray Tracing Acceleration 606 Sean James, GPU Software Engineer Wayne Lister, GPU Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationMetal. GPU-accelerated advanced 3D graphics rendering and data-parallel computation. source rebelsmarket.com
Metal GPU-accelerated advanced 3D graphics rendering and data-parallel computation source rebelsmarket.com Maths The heart and foundation of computer graphics source wallpoper.com Metalmatics There are
More informationIntegrating Apps and Content with AR Quick Look
Session #WWDC18 Integrating Apps and Content with AR Quick Look 603 David Lui, ARKit Engineering Dave Addey, ARKit Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not
More informationIntroducing the Photos Frameworks
Media #WWDC14 Introducing the Photos Frameworks Session 511 Adam Swift ios Photos Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationBuilding Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer
Featured #WWDC15 Building Watch Apps Session 108 Neil Desai watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Agenda
More informationBuilding a Game with SceneKit
Graphics and Games #WWDC14 Building a Game with SceneKit Session 610 Amaury Balliet Software Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationThe Application Stage. The Game Loop, Resource Management and Renderer Design
1 The Application Stage The Game Loop, Resource Management and Renderer Design Application Stage Responsibilities 2 Set up the rendering pipeline Resource Management 3D meshes Textures etc. Prepare data
More informationCopyright Khronos Group Page 1
Gaming Market Briefing Overview of APIs GDC March 2016 Neil Trevett Khronos President NVIDIA Vice President Developer Ecosystem ntrevett@nvidia.com @neilt3d Copyright Khronos Group 2016 - Page 1 Copyright
More informationCreating Great App Previews
Services #WWDC14 Creating Great App Previews Session 304 Paul Turner Sr. Operations Manager itunes Digital Supply Chain Engineering 2014 Apple Inc. All rights reserved. Redistribution or public display
More informationMetal Feature Set Tables
Metal Feature Set Tables apple Developer Feature Availability This table lists the availability of major Metal features. OS ios 8 ios 8 ios 9 ios 9 ios 9 ios 10 ios 10 ios 10 ios 11 ios 11 ios 11 ios 11
More informationSceneKit: What s New Session 604
Graphics and Games #WWDC17 SceneKit: What s New Session 604 Thomas Goossens, SceneKit engineer Amaury Balliet, SceneKit engineer Anatole Duprat, SceneKit engineer Sébastien Métrot, SceneKit engineer 2017
More informationBuilding Visually Rich User Experiences
Session App Frameworks #WWDC17 Building Visually Rich User Experiences 235 Noah Witherspoon, Software Engineer Warren Moore, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public
More informationWhat s New in SpriteKit
Graphics and Games #WWDC16 What s New in SpriteKit Session 610 Ross Dexter Games Technologies Engineer Clément Boissière Games Technologies Engineer 2016 Apple Inc. All rights reserved. Redistribution
More informationWhat's New in UIKit Dynamics and Visual Effects Session 229
App Frameworks #WWDC15 What's New in UIKit Dynamics and Visual Effects Session 229 Michael Turner UIKit Engineer David Duncan UIKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public
More informationMysteries of Auto Layout, Part 1
App Frameworks #WWDC15 Mysteries of Auto Layout, Part 1 Session 218 Jason Yao Interface Builder Engineer Kasia Wawer ios Keyboards Engineer 2015 Apple Inc. All rights reserved. Redistribution or public
More informationAdopting Advanced Features of the New UI
Frameworks #WWDC14 Adopting Advanced Features of the New UI Session 220 Chris Dreessen AppKit Software Engineer! Corbin Dunn AppKit Software Engineer 2014 Apple Inc. All rights reserved. Redistribution
More informationAdvanced Scrollviews and Touch Handling Techniques
Frameworks #WWDC14 Advanced Scrollviews and Touch Handling Techniques Session 235 Josh Shaffer ios Apps and Frameworks Engineer Eliza Block ios Apps and Frameworks Engineer 2014 Apple Inc. All rights reserved.
More informationBest practices for effective OpenGL programming. Dan Omachi OpenGL Development Engineer
Best practices for effective OpenGL programming Dan Omachi OpenGL Development Engineer 2 What Is OpenGL? 3 OpenGL is a software interface to graphics hardware - OpenGL Specification 4 GPU accelerates rendering
More informationUsing Metal 2 for Compute
Session Graphics and Games #WWDC17 Using Metal 2 for Compute 608 Anna Tikhonova, GPU Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationUnderstanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics. Sean Ellis Consultant Graphics Engineer ARM, Maidenhead
Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics Sean Ellis Consultant Graphics Engineer ARM, Maidenhead Introduction M3G 1.x Recap ARM M3G Integration M3G 2.0 Update
More informationCopyright Khronos Group, Page Graphic Remedy. All Rights Reserved
Avi Shapira Graphic Remedy Copyright Khronos Group, 2009 - Page 1 2004 2009 Graphic Remedy. All Rights Reserved Debugging and profiling 3D applications are both hard and time consuming tasks Companies
More informationAccessibility on OS X
Frameworks #WWDC14 Accessibility on OS X New Accessibility API Session 207 Patti Hoa Accessibility Engineer! Chris Dolan Accessibility Engineer 2014 Apple Inc. All rights reserved. Redistribution or public
More informationMore frames per second. Alex Kan and Jean-François Roy GPU Software
More frames per second Alex Kan and Jean-François Roy GPU Software 2 OpenGL ES Analyzer Tuning the graphics pipeline Analyzer demo 3 Developer preview Jean-François Roy GPU Software Developer Technologies
More informationStreaming Massive Environments From Zero to 200MPH
FORZA MOTORSPORT From Zero to 200MPH Chris Tector (Software Architect Turn 10 Studios) Turn 10 Internal studio at Microsoft Game Studios - we make Forza Motorsport Around 70 full time staff 2 Why am I
More informationImage Processing Tricks in OpenGL. Simon Green NVIDIA Corporation
Image Processing Tricks in OpenGL Simon Green NVIDIA Corporation Overview Image Processing in Games Histograms Recursive filters JPEG Discrete Cosine Transform Image Processing in Games Image processing
More informationCreating Complications with ClockKit Session 209
App Frameworks #WWDC15 Creating Complications with ClockKit Session 209 Eliza Block watchos Engineer Paul Salzman watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display
More informationNVIDIA Parallel Nsight. Jeff Kiel
NVIDIA Parallel Nsight Jeff Kiel Agenda: NVIDIA Parallel Nsight Programmable GPU Development Presenting Parallel Nsight Demo Questions/Feedback Programmable GPU Development More programmability = more
More informationPowerVR Hardware. Architecture Overview for Developers
Public Imagination Technologies PowerVR Hardware Public. This publication contains proprietary information which is subject to change without notice and is supplied 'as is' without warranty of any kind.
More informationProfiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer
Developer Tools #WWDC15 Profiling in Depth Do you know where your code is? Session 412 Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer 2015 Apple Inc. All rights reserved.
More informationEnhancing Traditional Rasterization Graphics with Ray Tracing. March 2015
Enhancing Traditional Rasterization Graphics with Ray Tracing March 2015 Introductions James Rumble Developer Technology Engineer Ray Tracing Support Justin DeCell Software Design Engineer Ray Tracing
More informationWhat s New in SpriteKit
Graphics and Games #WWDC14 What s New in SpriteKit Session 606 Norman Wang Game Technologies 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationDesigning for Apple Watch
Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationGetting fancy with texture mapping (Part 2) CS559 Spring Apr 2017
Getting fancy with texture mapping (Part 2) CS559 Spring 2017 6 Apr 2017 Review Skyboxes as backdrops Credits : Flipmode 3D Review Reflection maps Credits : NVidia Review Decal textures Credits : andreucabre.com
More informationCore ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML
System Frameworks #WWDC17 Core ML in Depth Krishna Sridhar, Core ML Zach Nation, Core ML 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationKenneth Dyke Sr. Engineer, Graphics and Compute Architecture
Kenneth Dyke Sr. Engineer, Graphics and Compute Architecture 2 Supporting multiple GPUs in your application Finding all renderers and devices Responding to renderer changes Making use of multiple GPUs
More informationWhat s New in Xcode App Signing
Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.
More informationWatchKit In-Depth, Part 2
App Frameworks #WWDC15 WatchKit In-Depth, Part 2 Session 208 Nathan de Vries watchos Engineer Chloe Chang watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationAdapting to the New UI of OS X Yosemite
Frameworks #WWDC14 Adapting to the New UI of OS X Yosemite Session 209 Mike Stern User Experience Evangelist! Rachel Goldeen Cocoa Software Engineer! Patrick Heynen Cocoa Engineering Manager 2014 Apple
More informationSceneKit in Swift Playgrounds
Session Graphics and Games #WWDC17 SceneKit in Swift Playgrounds 605 Michael DeWitt, Gem Collector Lemont Washington, Draw Call Blaster 2017 Apple Inc. All rights reserved. Redistribution or public display
More informationEECS 487: Interactive Computer Graphics
EECS 487: Interactive Computer Graphics Lecture 21: Overview of Low-level Graphics API Metal, Direct3D 12, Vulkan Console Games Why do games look and perform so much better on consoles than on PCs with
More informationOctree-Based Sparse Voxelization for Real-Time Global Illumination. Cyril Crassin NVIDIA Research
Octree-Based Sparse Voxelization for Real-Time Global Illumination Cyril Crassin NVIDIA Research Voxel representations Crane et al. (NVIDIA) 2007 Allard et al. 2010 Christensen and Batali (Pixar) 2004
More informationCSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling
CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2017 Announcements Project 3 due Monday Nov 13 th at
More informationLeveraging Touch Input on ios
App Frameworks #WWDC16 Leveraging Touch Input on ios And getting the most out of Apple Pencil Session 220 Dominik Wagner UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display
More informationios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility
App Frameworks #WWDC15 ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationSECTION 5 IMAGE PROCESSING 2
SECTION 5 IMAGE PROCESSING 2 5.1 Resampling 3 5.1.1 Image Interpolation Comparison 3 5.2 Convolution 3 5.3 Smoothing Filters 3 5.3.1 Mean Filter 3 5.3.2 Median Filter 4 5.3.3 Pseudomedian Filter 6 5.3.4
More informationIntroducing On Demand Resources
App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution
More informationPowerVR Framework. October 2015
PowerVR Framework October 2015 Gerry Raptis Leading Developer Technology Engineer, PowerVR Graphics PowerVR Tools and SDK Overview Tools Development Debugging Optimisation Authoring SDK Development Learning
More informationWed, October 12, 2011
Practical Occlusion Culling in Killzone 3 Michal Valient Lead Tech, Guerrilla B.V. Talk takeaway Occlusion culling system used in Killzone 3 The reasons why to use software rasterization (Some) technical
More informationWhat s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer
App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome
More informationNetworking with NSURLSession
System Frameworks #WWDC15 Networking with NSURLSession Session 711 Luke Case Software Engineer Andreas Garkuscha Software Engineer Dan Vinegrad Software Engineer 2015 Apple Inc. All rights reserved. Redistribution
More informationInside VR on Mobile. Sam Martin Graphics Architect GDC 2016
Inside VR on Mobile Sam Martin Graphics Architect GDC 2016 VR Today Emerging technology Main mobile VR ecosystems Google Cardboard Samsung GearVR In this talk: Latency Multiple views Performance tuning
More informationStoryboards and Controllers on OS X
Frameworks #WWDC14 Storyboards and Controllers on OS X Contain yourself Session 212 Mike Swingler Interface Builder Engineer Raleigh Ledet AppKit Engineer 2014 Apple Inc. All rights reserved. Redistribution
More informationE6895 Advanced Big Data Analytics Lecture 8: GPU Examples and GPU on ios devices
E6895 Advanced Big Data Analytics Lecture 8: GPU Examples and GPU on ios devices Ching-Yung Lin, Ph.D. Adjunct Professor, Dept. of Electrical Engineering and Computer Science IBM Chief Scientist, Graph
More informationRendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane
Rendering Pipeline Rendering Converting a 3D scene to a 2D image Rendering Light Camera 3D Model View Plane Rendering Converting a 3D scene to a 2D image Basic rendering tasks: Modeling: creating the world
More informationEnabling immersive gaming experiences Intro to Ray Tracing
Enabling immersive gaming experiences Intro to Ray Tracing Overview What is Ray Tracing? Why Ray Tracing? PowerVR Wizard Architecture Example Content Unity Hybrid Rendering Demonstration 3 What is Ray
More informationEnhancing Traditional Rasterization Graphics with Ray Tracing. October 2015
Enhancing Traditional Rasterization Graphics with Ray Tracing October 2015 James Rumble Developer Technology Engineer, PowerVR Graphics Overview Ray Tracing Fundamentals PowerVR Ray Tracing Pipeline Using
More informationWhat s New in NSCollectionView Session 225
App Frameworks #WWDC15 What s New in NSCollectionView Session 225 Troy Stephens Application Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationVoxel Cone Tracing and Sparse Voxel Octree for Real-time Global Illumination. Cyril Crassin NVIDIA Research
Voxel Cone Tracing and Sparse Voxel Octree for Real-time Global Illumination Cyril Crassin NVIDIA Research Global Illumination Indirect effects Important for realistic image synthesis Direct lighting Direct+Indirect
More informationWindowing System on a 3D Pipeline. February 2005
Windowing System on a 3D Pipeline February 2005 Agenda 1.Overview of the 3D pipeline 2.NVIDIA software overview 3.Strengths and challenges with using the 3D pipeline GeForce 6800 220M Transistors April
More informationDominic Filion, Senior Engineer Blizzard Entertainment. Rob McNaughton, Lead Technical Artist Blizzard Entertainment
Dominic Filion, Senior Engineer Blizzard Entertainment Rob McNaughton, Lead Technical Artist Blizzard Entertainment Screen-space techniques Deferred rendering Screen-space ambient occlusion Depth of Field
More informationMonetize and Promote Your App with iad
Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationCase 1:17-cv SLR Document 1-3 Filed 01/23/17 Page 1 of 33 PageID #: 60 EXHIBIT C
Case 1:17-cv-00064-SLR Document 1-3 Filed 01/23/17 Page 1 of 33 PageID #: 60 EXHIBIT C Case 1:17-cv-00064-SLR Document 1-3 Filed 01/23/17 Page 2 of 33 PageID #: 61 U.S. Patent No. 7,633,506 VIZIO / Sigma
More informationMastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs
Mastering Xcode for iphone OS Development Part 1 Todd Fernandez Sr. Manager, IDEs 2 3 Customer Reviews Write a Review Current Version (1) All Versions (24) Gorgeous and Addictive Report a Concern by Play
More informationMastering UIKit on tvos
App Frameworks #WWDC16 Mastering UIKit on tvos Session 210 Justin Voss UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationGPU Accelerating Speeded-Up Robust Features Timothy B. Terriberry, Lindley M. French, and John Helmsen
GPU Accelerating Speeded-Up Robust Features Timothy B. Terriberry, Lindley M. French, and John Helmsen Overview of ArgonST Manufacturer of integrated sensor hardware and sensor analysis systems 2 RF, COMINT,
More informationIntroducing the Contacts Framework
App Frameworks #WWDC15 Introducing the Contacts Framework For OS X, ios, and watchos Session 223 Bruce Stadnyk ios Contacts Engineer Dave Dribin OS X Contacts Engineer Julien Robert ios Contacts Engineer
More informationUsing and Extending the Xcode Source Editor
Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.
More informationGame Graphics & Real-time Rendering
Game Graphics & Real-time Rendering CMPM 163, W2018 Prof. Angus Forbes (instructor) angus@ucsc.edu Lucas Ferreira (TA) lferreira@ucsc.edu creativecoding.soe.ucsc.edu/courses/cmpm163 github.com/creativecodinglab
More informationProfiling and Debugging Games on Mobile Platforms
Profiling and Debugging Games on Mobile Platforms Lorenzo Dal Col Senior Software Engineer, Graphics Tools Gamelab 2013, Barcelona 26 th June 2013 Agenda Introduction to Performance Analysis with ARM DS-5
More informationDirectX 11 First Elements
DirectX 11 First Elements 0. Project changes changed Dx11Base.h void Update( float dt ); void Render( ); to virtual void Update( float dt ) = 0; virtual void Render( ) = 0; new App3D.h #ifndef _APP_3D_H_
More informationGPU Memory Model Overview
GPU Memory Model Overview John Owens University of California, Davis Department of Electrical and Computer Engineering Institute for Data Analysis and Visualization SciDAC Institute for Ultrascale Visualization
More informationDeus Ex is in the Details
Deus Ex is in the Details Augmenting the PC graphics of Deus Ex: Human Revolution using DirectX 11 technology Matthijs De Smedt Graphics Programmer, Nixxes Software Overview Introduction DirectX 11 implementation
More informationCS8803SC Software and Hardware Cooperative Computing GPGPU. Prof. Hyesoon Kim School of Computer Science Georgia Institute of Technology
CS8803SC Software and Hardware Cooperative Computing GPGPU Prof. Hyesoon Kim School of Computer Science Georgia Institute of Technology Why GPU? A quiet revolution and potential build-up Calculation: 367
More informationWhat s New in CloudKit
System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationMastering Drag and Drop
Session App Frameworks #WWDC17 Mastering Drag and Drop 213 Tom Adriaenssen, UIKit Wenson Hsieh, WebKit Robb Böhnke, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationMastering Xcode for iphone OS Development Part 2. Marc Verstaen Sr. Manager, iphone Tools
Mastering Xcode for iphone OS Development Part 2 Marc Verstaen Sr. Manager, iphone Tools 2 Tale of Two Sessions Part 1: Orientation: Tour of complete development cycle Part 2: Mastery: Details of several
More informationCSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012
CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012 Announcements Homework project #2 due this Friday, October
More informationAdvanced Debugging and the Address Sanitizer
Developer Tools #WWDC15 Advanced Debugging and the Address Sanitizer Finding your undocumented features Session 413 Mike Swingler Xcode UI Infrastructure Anna Zaks LLVM Program Analysis 2015 Apple Inc.
More informationHow to Work on Next Gen Effects Now: Bridging DX10 and DX9. Guennadi Riguer ATI Technologies
How to Work on Next Gen Effects Now: Bridging DX10 and DX9 Guennadi Riguer ATI Technologies Overview New pipeline and new cool things Simulating some DX10 features in DX9 Experimental techniques Why This
More informationCreating Photo and Video Effects Using Depth
Session #WWDC18 Creating Photo and Video Effects Using Depth 503 Emmanuel Piuze-Phaneuf, Core Image Ron Sokolovsky, Video Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display
More informationInter-Process Communication and Synchronization of Processes, Threads and Tasks: Lesson-1: PROCESS
Inter-Process Communication and Synchronization of Processes, Threads and Tasks: Lesson-1: PROCESS 1 Process Concepts 2 Process A process consists of executable program (codes), state of which is controlled
More informationAccessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility
Frameworks #WWDC14 Accessibility on ios Developing for everyone Session 210 Clare Kasemset ios Accessibility 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationPower, Performance, and Diagnostics
Core OS #WWDC14 Power, Performance, and Diagnostics What's new in GCD and XPC Session 716 Daniel Steffen Darwin Runtime Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not
More informationCSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation
CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2013 Announcements Project 2 due Friday, October 11
More informationAdding Advanced Shader Features and Handling Fragmentation
Copyright Khronos Group, 2010 - Page 1 Adding Advanced Shader Features and Handling Fragmentation How to enable your application on a wide range of devices Imagination Technologies Copyright Khronos Group,
More informationIOS PERFORMANCE. Getting the most out of your Games and Apps
IOS PERFORMANCE Getting the most out of your Games and Apps AGENDA Intro to Performance The top 10 optimizations for your games and apps Instruments & Example Q&A WHO AM I? Founder of Prop Group www.prop.gr
More informationSpring 2011 Prof. Hyesoon Kim
Spring 2011 Prof. Hyesoon Kim Application Geometry Rasterizer CPU Each stage cane be also pipelined The slowest of the pipeline stage determines the rendering speed. Frames per second (fps) Executes on
More informationMali Developer Resources. Kevin Ho ARM Taiwan FAE
Mali Developer Resources Kevin Ho ARM Taiwan FAE ARM Mali Developer Tools Software Development SDKs for OpenGL ES & OpenCL OpenGL ES Emulators Shader Development Studio Shader Library Asset Creation Texture
More informationAdaptive Point Cloud Rendering
1 Adaptive Point Cloud Rendering Project Plan Final Group: May13-11 Christopher Jeffers Eric Jensen Joel Rausch Client: Siemens PLM Software Client Contact: Michael Carter Adviser: Simanta Mitra 4/29/13
More informationCSE 167: Introduction to Computer Graphics Lecture #9: Visibility. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018
CSE 167: Introduction to Computer Graphics Lecture #9: Visibility Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018 Announcements Midterm Scores are on TritonEd Exams to be
More informationWhat s New in ARKit 2
Session #WWDC18 What s New in ARKit 2 602 Arsalan Malik, ARKit Engineer Reinhard Klapfer, ARKit Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationAdvances in AVFoundation Playback
Media #WWDC16 Advances in AVFoundation Playback Waiting, looping, switching, widening, optimizing Session 503 Sam Bushell Media Systems Architect 2016 Apple Inc. All rights reserved. Redistribution or
More informationHardware Accelerated Volume Visualization. Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences
Hardware Accelerated Volume Visualization Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences A Real-Time VR System Real-Time: 25-30 frames per second 4D visualization: real time input of
More information