Rendering Overview
GameByte supports three rendering modes to cover any game type.
🎮Neon Pong - Graphics Primitives in Action
Loading demo...
2D Rendering (Pixi.js)
🎮2D Graphics - Shapes & Effects
Loading demo...
3D Rendering (Three.js)
🎮3D Basic Shapes Demo
Loading demo...
Hybrid Mode (2D + 3D)
🎮Hybrid Rendering Demo
Loading demo...
Rendering Modes
| Mode | Engine | Use Case |
|---|---|---|
'2d' | Pixi.js v8 | 2D games, sprites, UI |
'3d' | Three.js | 3D games, first-person, third-person |
'hybrid' | Both | 3D world with 2D UI overlay |
Quick Selection Guide
Need 3D graphics?
│
┌─────────────┼─────────────┐
│ No │ │ Yes
▼ │ ▼
Use '2d' │ Need 2D UI?
│ │
│ ┌─────────┼─────────┐
│ │ No │ │ Yes
│ ▼ │ ▼
│ Use '3d' │ Use 'hybrid'
└─────────────┘
Initializing Renderers
2D Mode (Pixi.js)
import { createGame } from '@gamebyte/framework';
const game = createGame();
await game.initialize(canvas, '2d');
// Access 2D renderer
const renderer = game.make('renderer');
3D Mode (Three.js)
const game = createGame();
await game.initialize(canvas, '3d');
// Access Three.js objects
const renderer = game.make('renderer');
const scene = renderer.getScene();
const camera = renderer.getCamera();
Hybrid Mode
const game = createGame();
await game.initialize(canvas, 'hybrid');
// Access both renderers
const renderer2D = game.make('renderer.2d');
const renderer3D = game.make('renderer.3d');
Renderer Features
2D Renderer (Pixi.js)
- WebGL/WebGPU - Hardware-accelerated rendering
- Sprites & Textures - Efficient sprite batching
- Filters - Blur, glow, displacement, custom shaders
- Masks - Alpha, graphics, and sprite masks
- Graphics API - Procedural shapes
- Text - Bitmap and canvas text
- Particles - High-performance particle systems
3D Renderer (Three.js)
- WebGL/WebGPU - Modern graphics APIs
- Geometries - Box, sphere, custom meshes
- Materials - PBR, standard, custom shaders
- Lighting - Ambient, directional, point, spot
- Shadows - Real-time shadow mapping
- Post-processing - Bloom, SSAO, color grading
- Loaders - GLTF, OBJ, FBX models
Performance Considerations
Mobile Optimization
createGame({
renderer: {
// Lower resolution for performance
resolution: Math.min(window.devicePixelRatio, 2),
// Prefer power efficiency
powerPreference: 'low-power',
// Disable antialiasing on low-end devices
antialias: !isMobile()
}
});
Batching
Pixi.js automatically batches sprites with the same texture:
// Good: Same texture = batched
sprites.forEach(s => s.texture = sharedTexture);
// Bad: Different textures = separate draw calls
sprites.forEach((s, i) => s.texture = textures[i]);
Culling
Only render what's visible:
// Enable view culling
renderer.setConfig({
culling: true,
cullPadding: 100 // pixels outside viewport
});
Renderer API
Common Methods
const renderer = game.make('renderer');
// Start/stop rendering
renderer.start();
renderer.stop();
// Resize handling
renderer.resize(width, height);
// Background color
renderer.setBackgroundColor(0x1a1a2e);
// Take screenshot
const dataUrl = renderer.screenshot();
2D-Specific
const renderer = game.make('renderer');
// Get Pixi application
const app = renderer.getApp();
// Get root container
const stage = renderer.getStage();
// Add display object
renderer.add(sprite);
3D-Specific
const renderer = game.make('renderer');
// Get Three.js objects
const scene = renderer.getScene();
const camera = renderer.getCamera();
const threeRenderer = renderer.getThreeRenderer();
// Add 3D object
renderer.add(mesh);
Next Steps
- 2D Rendering - Deep dive into Pixi.js
- 3D Rendering - Deep dive into Three.js
- Hybrid Mode - Combining 2D and 3D