Skip to content

CS student · Technion
Haifa, Israel

Sohel Danial

I build graphics engines from scratch, and explain how they work on YouTube.

Now: Hooking an AI up to my 3D engine so it can direct its own scenes.

About

I'm a second-year Computer Science student at the Technion. I'm interested in what happens underneath the libraries, so I tend to build things from the ground up: a 3D engine where every pixel is computed on the CPU, my own font rasterizer and math typesetter, and a neural network trained with no ML framework.

Away from the keyboard I design parts in SolidWorks and print them: a motorised camera gimbal for the Raspberry Pi, actuators driven by an Arduino, and a self-locking worm-gear drive for a university design project. I like it when software and hardware meet.

I'm now starting a YouTube channel to explain these builds the way I wish they had been explained to me: from first principles, with real numbers on screen. I speak English, Hebrew and Arabic.

Languages
C++ · C · Python · TypeScript · Swift
Graphics
Rasterization · Shading · Anti-aliasing · Font & TeX layout
Hardware
SolidWorks · 3D printing · Arduino · Raspberry Pi · Soldering
Tools
Git · Linux · Neovim · Make · ffmpeg

Projects

A 3D engine written from scratch in C++17, built so an AI can direct the scenes. The AI describes what's in a scene in a tiny language; a solver decides where everything goes, how it moves without colliding and where the camera stands, then a CPU rasterizer draws it live.

lines of C++
16k
lines of C++
automated checks
328
automated checks
graphics libraries
0
graphics libraries
per frame
~1 ms
per frame
  • Scene language → solver → pixels. The AI writes a .dan file (sphere blue near cube, comet flies_past sun 4s-12s). It never writes a coordinate. Greedy placement, gradient refinement, motion planning and an automatic camera turn that into a layout with no overlaps and nothing hidden.
  • Every pixel computed on the CPU. Hand-written matrices, barycentric rasterization, z-buffer, Sutherland–Hodgman near-plane clipping, Blinn-Phong shading, supersampled anti-aliasing mixed in linear light, and 1080p mp4 export.
  • Its own text stack. An outline-font rasterizer (de Casteljau curves, nonzero winding, kerning) and a small TeX engine for fractions, roots and Greek letters. Formulas write themselves in and morph into the next one, like Manim.
  • Built for an AI in the loop. Live reload on save, plus a .dan.report listing every error and solver problem so the AI can fix its own scene.
  • C++17
  • SDL3
  • CPU rasterizer
  • Layout solver
  • Own TeX + font engine
  • ffmpeg
A low-poly creature model rendered with a random colour per triangle

A software rasterizer in C++17 with no graphics API and no third-party libraries. It loads an OBJ model, projects it through a perspective camera and fills every triangle into a z-buffer by hand. This is where the video renderer started.

  • Typed pipeline stages. Model, clip and screen space are separate types, so you can’t hand a vertex to the wrong stage.
  • Indexed meshes. Shared vertices are stored once and referenced by index, the same way a GPU does it.
  • One write path. set_if_nearer is the only way to touch a pixel, and it updates colour and depth together, so the two can never disagree.
  • C++17
  • Rasterization
  • Z-buffer
  • Unit tests
More on GitHub ↗

Videos

Channel launching soon

I'm starting a channel about building things from first principles: rasterizers, layout solvers, typesetting, and the hardware on my desk. No frameworks hiding the interesting part.

  • ep. 01

    Writing a 3D renderer with no graphics library

  • ep. 02

    How a solver places objects so nothing overlaps

  • ep. 03

    Typesetting math from scratch

Education

  1. 2025 — now

    B.Sc. Computer Science

    Technion, Israel Institute of Technology

    Second year at the Taub Faculty of Computer Science. Coursework includes Digital Systems & Computer Structure (single-cycle, multi-cycle and pipelined RISC-V in SystemVerilog), Introduction to Systems Programming (C/C++), Linear Algebra, Introduction to Computer Science (C) and Calculus.

    • C
    • C++
    • RISC-V
    • SystemVerilog
    • Linux
  2. 2026

    Graphics & Engineering Design

    Mechanical Engineering elective (taken by choice)

    Final project, the "Magen HaCarmel" launcher: I designed the tilt sub-assembly, a fully parametric worm and sector-gear drive. A worm drive locks itself, so the locking requirement is met by the geometry alone, with no brake.

    • SolidWorks
    • Assemblies
    • Tolerancing

Hardware builds

  1. Hardware

    Two-axis camera gimbal

    A motorised 2-axis gimbal for the Raspberry Pi Camera Module 3: mechanical design, motor control and capture logic on the Pi.

    • Raspberry Pi
    • CAD
    • Motors
  2. Hardware

    Solenoid lens shutter

    Salvaged the solenoid from an IR-cut camera module and built a mechanical filter that opens and closes in sync with image capture.

    • Salvage
    • Soldering
  3. Hardware

    Linear-actuator prototypes

    Modelled, printed and built several actuator designs, driven from an Arduino Uno in C++.

    • Arduino
    • C++
    • 3D printing

Contact

Let's talk.

Open to internships, student positions and interesting projects, and always happy to hear video ideas. My inbox is open.

Say hello