Create a 3D Game Engine for Pebble

39
Create a 3D Game Engine for Pebble Shipeng Xu 29 Oct 2016 http://BillHsu.github.io

Transcript of Create a 3D Game Engine for Pebble

Page 1: Create a 3D Game Engine for Pebble

Create a 3D Game Engine for Pebble

Shipeng Xu 29 Oct 2016

http://BillHsu.github.io

Page 2: Create a 3D Game Engine for Pebble

my facebook, yesterday morning

Page 3: Create a 3D Game Engine for Pebble

What we need to do..

• Generic way of rendering 3D images for Pebble

• Flexible

• High frame rates

Page 4: Create a 3D Game Engine for Pebble
Page 5: Create a 3D Game Engine for Pebble

6096 vertices

Page 6: Create a 3D Game Engine for Pebble
Page 7: Create a 3D Game Engine for Pebble

Pebble Time Specs

Page 8: Create a 3D Game Engine for Pebble

Display

• 64-color epaper, always on

• Resolution: 144x168

• Pixel density: 182 ppi

From https://www.ifixit.com/Teardown/Pebble+Time+Teardown/42382

Page 9: Create a 3D Game Engine for Pebble

Processors/Wireless

• ST Micro STM32F439ZG 180 MHz ARM

• Speed limited to 100 MHz imposed

• Texas Instruments CC2564B Bluetooth Module

• Lattice LP1K FPGA(!)

• No GPU/Graphic Card

From https://www.ifixit.com/Teardown/Pebble+Time+Teardown/42382

Page 10: Create a 3D Game Engine for Pebble

Pebble Development

Page 11: Create a 3D Game Engine for Pebble

Pebble APIs• Watch side APIs

• C API

• JavaScript API(via JerryScript)

• Phone side APIs

• PebbleKit JS

• PebbleKit iOS

• PebbleKit Android

Page 12: Create a 3D Game Engine for Pebble

Pebble Cloud IDE

https://cloudpebble.net

Page 13: Create a 3D Game Engine for Pebble

Let’s design the 3D game engine for Pebble!

Page 14: Create a 3D Game Engine for Pebble

Review our goals

• Generic way of rendering 3D images for Pebble

• Flexible

• High frame rates

Page 15: Create a 3D Game Engine for Pebble

Two ways• Phone side rendering

• Render image on phone

• Send the image over to watch to display

• Watch side rendering

• Send the 3D vertices to watch

• Rendering done on the watch side

Page 16: Create a 3D Game Engine for Pebble

Phone Side Rendering

Page 17: Create a 3D Game Engine for Pebble

Send image to watch via Bluetooth

Phone renders the 3D image

Watch will display the image from phone

123

Page 18: Create a 3D Game Engine for Pebble

Pebble Display

144 px

168 px

A R G BBits 2 2 2 2

Page 19: Create a 3D Game Engine for Pebble

Pebble Display• Each pixel will take 1 byte(8 bits)

• 2 bit alpha(not been used)

• 2 bit red, 2 bit green, 2 bit blue

• Display resolution 144x168

• One frame will take..

• 144x168 = 24192 Bytes = 23.625 KB

Page 20: Create a 3D Game Engine for Pebble

Pebble Bluetooth

Texas Instruments CC2564B Bluetooth and Dual-Mode Controller

Bluetooth 2.1 (default, max data rate: 3 Mbps.), Bluetooth 4.0 (iOS7+ uses LE for Notifications)

Page 21: Create a 3D Game Engine for Pebble

Pebble Bluetooth

• 3 Mbps ~= 360 KB per second

• One image frame will take..

• 144x168 = 24192 Bytes = 23.625 KB

• We can get more than 10 frames per second!

Page 22: Create a 3D Game Engine for Pebble

If message size is more than ~1.8 KB..

Page 23: Create a 3D Game Engine for Pebble

Send a 144x168 image

Due to PebbleOS’s limitation, a single frame needs to call sendAppMessage 14 times…

Page 24: Create a 3D Game Engine for Pebble

3D Rendering

Page 25: Create a 3D Game Engine for Pebble

PebbleKit JS• WebSockets

• XMLHttpRequest

• Geolocation

• LocalStorage

• No WebGL :( …

Page 26: Create a 3D Game Engine for Pebble

Triangles!

Page 27: Create a 3D Game Engine for Pebble
Page 28: Create a 3D Game Engine for Pebble

Rasterisation

Page 29: Create a 3D Game Engine for Pebble

Graphics Pipeline

Page 30: Create a 3D Game Engine for Pebble

A 3D renderer in JavaScript

https://github.com/billhsu/renderer.js

https://www.youtube.com/watch?v=pUKUM6oUYNM

(Thanks engineers.sg)

Page 31: Create a 3D Game Engine for Pebble

Performance

3D rendering Sending buffer

Time 0.24 sec 8.46 sec

Tested on iPhone 6S with iOS 10.1 and Pebble Time with Firmware version 4.2.0

Page 32: Create a 3D Game Engine for Pebble

Reduce image resolution

• Originally 144x168

• Reduce to 36x42

• 36 * 42 = 1512

• Less than 1.8KB (Yay!)

• Image could be sent in one message

Page 33: Create a 3D Game Engine for Pebble
Page 34: Create a 3D Game Engine for Pebble

Performance with reduced image resolution

3D rendering Sending buffer

Time 0.13 sec 0.41 sec

Tested on iPhone 6S with iOS 10.1 and Pebble Time with Firmware version 4.2.0

Page 35: Create a 3D Game Engine for Pebble
Page 36: Create a 3D Game Engine for Pebble
Page 37: Create a 3D Game Engine for Pebble

Watch Side Rendering

• Frame rate should be better

• Geometry limitation

• JerryScript may not work

Page 38: Create a 3D Game Engine for Pebble

Summary

• [√] Generic way of rendering 3D images for Pebble

• [√] Flexible

• [?] High frame rates

Page 39: Create a 3D Game Engine for Pebble

Thanks!

• http://BillHsu.github.io/

• https://github.com/billhsu/pebble3d