Nikos Papadopoulos
Author portrait

I'm a software engineer drawn to complex problems and elegant solutions. While I specialize in computer graphics, I enjoy navigating diverse domains of software development, blending creativity with a structured approach to problem-solving.

My blog is where curiosity meets the keyboard; a space to explore ideas in science, technology, and beyond. When the sky is clear, I trade code for constellations, diving into astrophotography through the lens of a telescope. I also enjoy creative writing, especially science fiction, as it allows me to create compelling characters, build imaginative worlds, and explore ideas that push the boundaries of reality.

Fatherhood, more than any technical pursuit, has deeply shaped how I think and work. It's taught me patience, the art of prioritisation, and a calm, thoughtful way of approaching challenges, lessons that subtly influence everything I build, both in code and in life.

Projects

CSR2

Natural Motion

external link trailer

Setting a new standard in visuals, CSR 2 delivers hyper-real drag racing to the palms of your hands. Compete against live players across the world with your custom built supercars including LaFerrari, McLaren P1™, Koenigsegg One:1 and many more.

project image

Samsung S10 AR Emoji

Samsung Electronics

external link

The new version of the AR Emoji is released with the Samsung Galaxy S10 range of devices. Samsung's avatars are integrated in the camera app and allow the user to create a virtual presence character that is adopted to their own characteristics.

project image

Pokémon Art Academy

Kuju / Headstrong Games

external link trailer

Pokémon Art Academy is an educational drawing video game developed by Headstrong Games and published by Nintendo for the Nintendo 3DS. It is a spin-off of the Art Academy series featuring characters from the Pokémon media franchise.

project image

VBS Tactics

Bohemia Interactive Simulations

external link trailer document

VBS Tactics allows users to conduct real-time tactical exercises up to the company level. Its intuitive interface can be used to configure doctrine-based orders of battle, plan a mission, execute it in real time, and review the results in after-action review.

project image

XTracer

Personal Project

external link media

An experimental offline renderer based on path tracing.

project image

GoveeWatch

Personal Project

external link

A curses application that picks up bluetooth broadcasts from Govee thermometer / hydrometer devices and displays readings at real-time.

project image

Euclid

Personal Project

external link

A command line frontend for chat GPT. It implements two modes. One for one-off queries, and one for persistent conversations.

project image

Asciimg

Personal Project

external link

Asciimg is a small utility that allows displaying images in a command line terminal.

project image

Technical Blog

0x03b
A condensed guide to React hooks
web dev react
A quick reference guide to React hooks. When to use useState, useEffect, useRef, useMemo & more. Includes comparison tablew, real examples, and common gotchas to look out for.
0x03a
Simulating the Seestar S50 in Stellarium
astrophotography telescopes
Learn how to set up the Seestar S50 smart telescope in Stellarium using accurate sensor and telescope parameters. This guide covers both standard and 2x mosaic modes to help you simulate your field of view for better astrophotography planning.
0x039
Generating audio transcripts
media audio
This short write-up offers a quick overview of a simple method you can use to create a transcript from either a video or an audio file, which may be helpful in a variety of contexts such as documentation, content analysis, or accessibility.
0x038
Implementing a todo app, Part 1: The Backend
webdev backend
Part 1 of a blog post series on full stack development, where I walk through the process of building a simple task management app. This chapter focuses on implementation of the backend services.
0x037
Speech synthesis for web applications
web audio speech synthesis
I've introduced a feature that lets you listen to my blog's content being read aloud. This post explains how I implemented it using the Speech Synthesis Web API, which requires minimal code and works on most modern browsers.
0x036
Gameboy Development, Part 1: Hello World!
gamedev assembly gameboy
A step-by-step guide for creating a 'hello world' ROM for the Nintendo Gameboy in assembly
0x035
Working with encrypted file archives
sysadmin encryption
A brief guide on encrypting and decrypting tar archives with gpg
0x034
ZEXMTE BT-506 in Debian
sysadmin hardware bluetooth
A guide on how to make the ZEXMTE BT-506 dongle work in Debian
0x033
Notifications Using Telegram
notifications bots telegram
A tutorial on using telegram to generate notifications
0x032
Docker in Debian
sysadmin docker
Notes on using Docker in Debian
0x031
Getting creative with asciimg
graphics ascii
A fun experiment in using text to render animated images in a terminal
0x030
Lossy Compression of Unsigned Float Numbers
math compression
Notes on a lossy unsigned float number compression technique
0x02f
Shadow Mapping
graphics real time shadows
A short introduction of shadow mapping and how to implement it
0x02e
Peripage bluetooth printing via the terminal
hardware bluetooth peripage
A tutorial on interfacing a peripage printer via the command line
0x02d
Using Yubikey FIDO2 to login in Debian/GDM
sysadmin security authentication
A brief guide on using Yubikey as an authentication method with GDM
0x02c
Intel's Panel Self Refresh (PSR) Feature
gpu drivers
Ai brief guide on resolving Intel's PSR issues
0x02b
Midjourney
ai midjourney
A brief post on generating images with Midjourney
0x02a
Brachiograph plotter
hardware
Brief notes on building a brachiograph plotter
0x029
Normal Map Blending
graphics math
A brief survey of normal blending techniques
0x028
Notes on Unreal Engine 5, Nanite
graphics lighting unreal engine
A collection of notes on Nanite gather from resources online
0x027
Reviving old software to run on a modern machine
sysadmin retro
A short case study on how to bring old software back to life
0x026
Creating floppy disk images in Linux
sysadmin retro
A short guide on creating floppy disk images in Linux
0x025
The De Moivre theorem
graphics math
Theory and implementation of the De Moivre theorem
0x024
Macro-Photography with a Mobile Phone (Part 2)
photography
Another way to turn your mobile phone into a macro camera
0x023
Macro-Photography using a Mobile Phone
photography
A simple way to turn your mobile phone into a macro camera
0x022
Classic Demo Effects, Twister
graphics gfx
The classic demoscene effect explained and implemented in GLSL
0x021
Irradiance Encoding, Spherical Harmonics
graphics lighting math
Spherical Harmonics are a type of Spherical Radial Basis Function that can be used to encode signals defined on a sphere in a compact way. This makes them an excellent fit for encoding a variety of datasets commonly used in real time graphics.
0x020
Irradiance Encoding, Ambient Cube
graphics lighting math
In Half-Life 2, a directional ambient term is precomputed across the environments and stored in the ambient cube lighting encoding. This post goes over the theory behind the ambient cubes technique and presents an implementation in GLSL.
0x01f
Generative art
graphics generative art
Generative art is an algorithmic approach to creating unique and dynamic works of art. As technology progresses, it continues to evolve, allowing artists to explore new forms and patterns beyond traditional methods.
0x01e
Full Screen Pass Without Explicit Geometry
graphics opengl directx
A brief explanation on how to render a full screen pass efficiently in OpenGL and DirectX
0x01d
Elementary Cellular Automaton, Rule 126
graphics automatons
Wolfram's infamous rule 126 explained in plain terms
0x01c
Classic Demo Effects, Fire
graphics gfx
The classic demoscene effect explained and implemented in GLSL
0x01b
OpenGL Geometry
graphics opengl
A brief survey of various ways OpenGL can draw geometry
0x01a
Half-Space Test
graphics math
An explanation of the math behind half-space testing
0x019
Distributed Ray-Tracing
graphics ray-tracing
An overview of how distributed ray-tracing enhances realism by addressing the limits of traditional ray-tracing, using Monte Carlo sampling to simulate effects like soft shadows, gloss, depth of field, and motion blur.
0x018
Historical Computer Gemerated Animations
graphics
A listing of CGI films, that played a pivotal role in the history of computer graphics
0x017
Lindenmayer Systems
graphics l-systems
L-Systems are a mathematical framework for modeling organic structures and fractals. They generate complex patterns and are used in graphics, biology, and procedural generation. In this blog post I share some examples and how to implement them.
0x016
Interpolation Methods
graphics math
A collection of useful interpolation methods, theory and implementation
0x015
Optical Illusions, Lightness Constancy
graphics illusions
Lightness constancy allows us to perceive surface brightness as stable despite changes in lighting. The Checker Shadow Illusion highlights how context, shadows, and spatial cues trick the brain into seeing identical shades as different.
0x014
BTRFS, Quick Start
sysadmin filesystems
A brief guide on using BTRFS
0x013
Useful Functions for Graphics
math
A listing of useful math formulas and their plots
0x012
Generating Stereo Anaglyphs with ImageMagick
graphics stereo rendering
How to generate stereo anaglyphs with ImageMagick
0x011
Raytracing, Ray-Plane Testing
graphics ray-tracing
Ray to Plane intersection testing, theory and implementation
0x010
Sampling a Disk, Vogel's Distribution Method
graphics math
There are many ways to spread points across the surface of a disk but doing so in an even distribution can be challenging. Vogel’s method solves that problem elegantly. In this blog post, I explore the underlying math and show how to implement it.
0x00f
Visibility Culling
graphics
A listing of visibility culling techniques
0x00e
Sprite Encoding / Decoding Using Literals
graphics sprites data encoding
A simple approach for sprite texture encoding
0x00d
Edge Detection Using the Sobel Operator
graphics gfx post-process
The Sobel operator explained and implemented in GLSL
0x00c
Math Operations using Matrices
math
A listing of mathematical matrices commonly used in Graphics
0x00b
Color Grading, An Artist Driven Approach
graphics gfx post-process
A simple method of implementing color grading
0x00a
Law of Reflection
graphics math
The physics law of reflection, theory and implementation
0x009
PostFX, Pixelize
graphics gfx post-process
Implementation of pixelization effects in GLSL
0x008
Anti-Aliasing, FXAA
graphics post-process
A high level explanation of FXAA and how to implement it in GLSL
0x007
NCF, A Minimalistic Meta-Language
script languages
A short guide on NCF specification and how to use it in your own projects
0x006
Metaballs
graphics gfx
Metaballs, what are they and how to make them
0x005
Pseudo 3D Tunnel Effect
graphics gfx
The classic demoscene effect explained and implemented in GLSL
0x004
Conway's Game of Life
graphics automatons
A GPU implementation of Conway's game of life
0x003
Fractals, Mandelbrot & Julia Sets
graphics fractals
Theory and GPU implementation of the Mandelbrot and Julia fractal sets
0x002
C/C++ Embedded Files
c c++
A summary of different approaches for embedding files within c / c++ code
0x001
Primus Under Debian/Sid
gpu drivers linux opengl
A short guide on enabling and using Primus under Debian Sid
00000
GNU Make, Parallel Processing
gnu make
Parallel processing with GNU Make