Qt Quick 3D - Volumetric Rendering Example

I made a volume ray-caster example, and it is part of Qt since version 6.7. The video below shows it rendering a few examples. If you wanna try it out, just download the latest version of Qt with QtQuick3D and it will be a part of the examples. You can find a detailed explanation of the source code at the official qt documentation.

Qt World Summit 22 Presentation

This is a video link to the presentation called “Taking 3D Content to the Next Level with Physics, Global Illumination, Reflections and Spatial Audio” at Qt World Summit 22, that I was a part of. In my segment I present the Qt Quick 3D Physics module introduced in Qt 6.4. A new high-level API for physics simulation with support for simulating static and dynamic rigid bodies, collision shapes, and a character controller.

Qt Quick 3D Physics in Qt 6.4

NOTE: This is a copy-pasted version of my blog post on the Qt blog.

Qt 6.4 includes the new module Qt Quick 3D Physics as tech preview. As the name implies, this is a module that adds physical simulation capabilities on top of Qt Quick 3D. In particular, it enables rigid body simulation using simple primitives (spheres, boxes, planes and capsules) as well as convex- and triangle meshes and heightmaps. Physical properties such as mass, density, gravity and friction are customizable. This makes it possible to create physically correct behavior in 3D scenes without having to handcraft animations.

Adding physics to your scene is quite easy. The following snippet is all it takes to create and render a whole scene with a plane and a box interacting with each other:

import QtQuick
import QtQuick3D
import QtQuick3D.Physics

Window {
    visible: true
    DynamicsWorld {}

    View3D {
        anchors.fill: parent

        PerspectiveCamera {
            position: Qt.vector3d(0, 100, 500)
            clipFar: 5000
            clipNear: 1
        }

        DirectionalLight {
            eulerRotation.x: -45
            eulerRotation.y: 45
            castsShadow: true
        }

        StaticRigidBody {
            position: Qt.vector3d(0, 0, 0)
            eulerRotation: Qt.vector3d(-90, 0, 0)
            collisionShapes: PlaneShape {}
            Model {
                source: "#Rectangle"
                scale: Qt.vector3d(10, 10, 10)
                materials: PrincipledMaterial {
                    baseColor: "green"
                }
                castsShadows: false
                receivesShadows: true
            }
        }

        DynamicRigidBody {
            position: Qt.vector3d(0, 200, 0)
            collisionShapes: BoxShape {}
            Model {
                source: "#Cube"
                materials: PrincipledMaterial {
                    baseColor: "yellow"
                }
            }
        }
    }
}

And this is how it looks:

Simple Physics scene

Qt Quick 3D Physics is a pure QML API and is currently available as a tech preview in Qt 6.4. The documentation comes with a handful of explanatory examples showing off the different capabilities of the module. This is the best place to start if you want to try it out yourself. There is a lot more that could be said about this module but since a picture says a thousand words I imagine this video of the examples will say even more.

I hope you found this blog post interesting and I look forward to seeing what you will create with this new module.

Four years of Hacktoberfest

Hacktoberfest is a month-long initiative where people are encouraged to contribute to open source software. The rules are that if you do four pull requests on GitHub during the month you beat the challenge and win a t-shirt. Since I have participated and managed to do this four years in a row, from 2016 to 2019, I wanted to look back on how I actually managed to do it. I have broken down the challenges by each year.

2016

This year was quite easy. I did all four PRs for get-flash-videos, a project I had been using and contributing to before.

2017

This year, I did four PRs in four different projects (1, 2, 3, 4). One was for get-flash-videos but the other three were for projects I was using personally or wanted to try out.

2018

This year I did a lot of PRs since Brayns, the software I was working full-time on, is hosted on GitHub.

2019

This year three PRs were done for vcpkg, and one for glbinding. The fixes in vcpkg were for packages I was using and the PR in glbinding was just a documentation fix.

So, what can we learn from this? I believe we can conclude that the way I managed to complete these challenges and contribute was simply by using said software enough to find the bugs and fix them. For me, these years of Hacktoberfest has been a nice way of pushing myself to do some free software contributions.

IEEEVis 2019 Short paper published

Me and a few of my colleagues have published a paper for the IEEEVis 2019 conference. The paper is about using Signed-distance functions for rendering neurons, which is a technique I developed for Brayns. The paper is titled “High Fidelity Visualization of Large Scale Digitally Reconstructed Brain Circuitry with Signed Distance Functions” and you can read it here.