Khronos Chapter Munich Vulkan Slides

from_gl_to_vulkan_slidedeck

I’ve been speaking about my Vulkan launch day contributions and my experiences moving from OpenGL to Vulkan at the Khronos Munich Chapter Grand Opening last friday at the AMD offices. This was a great event, and finally getting to know some of the people in real was an awesome personal experience. So at this point I’d like to thank all the people that helped make this event happen and all these that attended, had a real blast talking and discussing about Vulkan!

For those interested, I have added my Slides to the Vulkan github repository.

Read More

Vulkan Examples update

68747470733a2f2f7777772e6b68726f6e6f732e6f72672f6173736574732f75706c6f6164732f617069732f67646673676b6a6834353574342f676c6e6578742d6c6f676f2e706e67

The last few weeks since the Vulkan launch (one month ago) have been pretty busy. I’ve been adding new examples to to my github repository (almost at 30), fixed some bugs (thanks to everyone that has contributed!) and finally added Android support to all examples (removing the few separate Vulkan Android samples).

I also provide pre-built binaries for Windows, Linux and Android (only ARM right now) if you just want to try out the examples at vulkan.gpuinfo.org :

Note : The windows binaries require the media pack (see below) to be present for loading shaders, meshes and textures.

64-Bit Binaries (2016-03-28) ~1.5 MBytes

Note : The linux binaries require the media pack (see below) to be present for loading shaders, meshes and textures.

64-Bit Binaries (2016-03-28) ~1.6 MBytes

Note :Requires a ARM device with Vulkan support. Gamepads are supported.
Assets required (shaders, textures, models) are part of each apk, the media pack is not requried.
The archive contains two batch files for easy installation and removal of all examples at once.

ARM Binaries (2016-03-28) ~51 MBytes

Note : This archive contains all shaders, models and textures requried to run the windows and linux examples. Put the data folder to where the bin folder for windows or linux has been extracted so the examples can find the required assets.

64-Bit Binaries (2016-03-28) ~20 MBytes

Read More

Vulkan is here!

68747470733a2f2f7777772e6b68726f6e6f732e6f72672f6173736574732f75706c6f6164732f617069732f67646673676b6a6834353574342f676c6e6578742d6c6f676f2e706e67

Khronos finally launched Vulkan 1.0!

After 18 months of hard works and a huge industry-wide collaboration, this is a huge success. And this is not only an API-launch, but a hard launch with drivers for Vulkan from NVidia, AMD, Intel, etc. on mulitple platforms.

My launch contributions

Some time ago I was invited to be a part of the Vulkan Advisory Panel board. So I actually got a head-start and also released some Vulkan related stuff to the public on launch day. I even made it onto the Vulkan Launch page and was quoted in a press release by NVIDIA :)

Vulkan examples

You can find a bunch of Vulkan examples (C++) over at my github repository. They contain over two dozen examples, and even a few for getting started on Android (if you own Android hardware that supports Vulkan). Feel free to fork and contribute!

Vulkan hardware database

My OpenGL and OpenGL ES hardware database are frequently used (and quoted) by many developers, so I went on and also created a Vulkan Hardware Capability Database (and viewer). Vulkan is a bit more explicit than OpenGL and offers much more information, so once the database is filled with enough hardware reports this should become a valuable resource for developers.

 

Being part of this was a great experience, and I’d like to thank everybody on the Vulkan Working Group and Advisory panel, and the fine people over at LunarG and the IHVs I’ve worked with!

Read More

Vulkan specification complete, release imminent

68747470733a2f2f7777772e6b68726f6e6f732e6f72672f6173736574732f75706c6f6164732f617069732f67646673676b6a6834353574342f676c6e6578742d6c6f676f2e706e67

Great news! The Khronos Vulkan Working Group just announced that the specification is complete (and has entered the legal review process) and the release is imminent.

Though the initial time frame of 2015 was missed (by a bit), this should mean that Vulkan will be ready for launch in early 2016. This will include SDKs for all supported platforms, production ready drivers from several IHV, resources, tools, demos, examples and much more.

(more…)

Read More

Vulkan related works

 

68747470733a2f2f7777772e6b68726f6e6f732e6f72672f6173736574732f75706c6f6164732f617069732f67646673676b6a6834353574342f676c6e6578742d6c6f676f2e706e67

vulkan

In case you don’t follow me on twitter or aren’t watching my github repositories, I’ve been working on Vulkan related stuff over the last few months. And with Vulkan’s release approaching it’s time for a short summary on what I plan on release upon or shortly after launch of the new graphics and compute API.

Vulkan Hardware Capability Viewer

As with OpenGL and OpenGL ES I’ll also do a Vulkan Hardware Capability viewer (github). It looks (and works) pretty much like the OpenGL hardware capability viewer, also using Qt for the user interface. I plan on release it close to the launch of Vulkan with support for Windows and Linux, while Android support will follow at some later point.

It’ll also come along with an online database, accessible through gpuinfo.org, allowing you to browse devices, features, extensions, etc.

Examples and demos

Learning a new graphics (and compute) API is never easy, especially if you’re just a hobbyist and even more for an explicit API like Vulkan that greatly differs from OpenGL. But even for someone not working full time on some rendering engines  it’s not that hard to learn.

To get you started with Vulkan, and to share what I’ve learned while working with Vulkan I’ll have several open source examples ready for launch. They range from the most basic things (rendering a colored triangle) to more complex things like multi pass offscreen rendering, tessellation and compute shaders.

The examples are written in C++ and should work on Windows and Linux with Android support to follow. The github repository can be found here, though it only contains a listing of the examples with descriptions and screenshots right now. Sources will follow when Vulkan goes public.

Contributing to the Khronos Vulkan resource pages

The Khronos group recently open sourced their web pages, including those for their APIs. Every API now also has a resource page with links to tutorials, SDKs, tools, source, etc. The Vulkan one is pretty sparse right now, so if you know of any interesting links related to Vulkan, feel free to contribute to their repository.

Read More

Introducing gpuinfo.org

gpuinfoAside from playing around with a certain new API, I’ve also been working on the web front end OpenGL and OpenGL ES hardware database.

Though I redid the visual side of both some time ago they differed too much for my taste and especially the OpenGL ES database was lacking lots compared to the OpenGL one. No live search, bad visuals (especially for the reports), lacking compare features and much more.

So I did put lots of work in getting both database up to the same standards, optimize the visual presentation and also created a landing page at www.gpuinfo.org, that is home to the current hardware databases (OpenGL, OpenGL ES), with at least one new database (Vulkan) coming in the near future.

The OpenGL database is now available at opengl.gpuinfo.org. New features include a list of maximum supported OpenGL version by device and listing of compressed texture formats for comparing multiple reports.

The OpenGL ES database is located at opengles.gpuinfo.org. Aside from the complete visual overhaul, it now offers (mostly) the same functionality as the OpenGL database. All tables now support a live search (thanks to datatables), report information is now presented in tabs and the launch page has been replaced by a report listing like the one on the OpenGL database.

Source for all the pages (including gpuinfo.org) are available at my github repository, so if you find any bugs feel free to report them there.

Read More

Vulkan from the POV of a hobby 3D developer

68747470733a2f2f7777772e6b68726f6e6f732e6f72672f6173736574732f75706c6f6164732f617069732f67646673676b6a6834353574342f676c6e6578742d6c6f676f2e706e67

 

As there have been lots of new information on Vulkan, Khronos‘ new graphics and compute API I decided to do a little write up of the new API from a hobby 3D developer’s point of view.

Although I’ve been writing games, demos and applications with OpenGL for roughly 15 years now I still consider myself a hobby developer in terms of 3D graphics. My job is not depending on pushing pixels, maxing out draw calls or swizzling shader commands, and most of my work on 3D (primarily OpenGL) is done during my spare time (mostly late at night).

vulkanScene

During this years SIGGRAPH and GamesCom, Khronos showed off some stuff related to Vulkan (LunarG e.g. uploaded a video of LunarXChange, the developer platform for Vulkan) and several IHVs (e.g. PowerVR) and ISVs demoed applications and implementations.

And while it’s still a way to go before Vulkan is released to the public (should be by the end of the years) I’d like to write down a few words on the new API for hobby (OpenGL) developers that may be uncertain on whether to switch or not, or even on what Vulkan actually is.

 

(more…)

Read More

Status update

Just as the last blog post is starting to collect dust (time flies by oO) :

I’m still doing lots of 3D development during the late hours in my spare time, still with C++ (Visual Studio rocks :) ), but most of that development is done under an NDA so that’s the main reason I haven’t been updating this blog lately.

Other than that I’ve also been working on a dungeon crawler prototype using modern C++ (C++11/14) and modern OpenGL (4.4). Not much to see yet, but the first screenshot shows the latest version with omni-directional shadow maps, randomly generated dungeons, normal mapping and 3D models (using ASSIMP). I’d also like to mention G-Truc‘s excellent glm and gli libraries that I’m both using in this (and other projects).
I’ve been playing around with randomly generated dungeons a few times in the past but never got much further than some simple tech demos, so this may never become a game but rather a playground, though it already looks pretty nice.

2015-07-07 22_46_38-Dungeon Crawler Prototype - (c) 2015 by Sascha Willems 2015-06-17 21_48_05-Dungeon Crawler Prototype - (c) 2015 by Sascha Willems 2015-06-12 23_29_57-Dungeon Crawler Prototype - (c) 2015 by Sascha Willems 2015-06-05 23_07_32-Dungeon Crawler Prototype - (c) 2015 by Sascha Willems

 

So right now there’s not much new stuff on OpenGL (ES) or WebGL, but you may check out my twitter account for screenshot and ramblings on my current 3D endeavors without me getting into details. Most of the stuff I post there is not worthy of a complete blog post, so for quick updates, twitter pretty much replaced my blog.

 

Read More

Parallax offset mapping with WebGL

webgl-logo

Years ago I wrote a demo showcasing different normal mapping techniques with Delphi, but never got around cleaning up the source and releasing it. While working on my WebGL dungeon crawler prototype I dug out the old code, cleaned it up and ported it over to WebGL, so you don’t need a compiler to see it in action and play around with it.

Parallax mapping uses an additional heightmap (together with a normal map) to add more depth to flat surfaces depending on the current camera angle. It’s currently lacking shadowing, but that’s something I might add in the future.

01 03

(Left : Normal mapping , right : Parallax offset mapping)

You can get the sources from my GitHub repository : https://github.com/SaschaWillems/webgl/tree/master/parallaxmapping

(more…)

Read More

Geometry instancing with WebGL 2

webgl-logoWebGL, based on OpenGL ES, brings hardware accelerated OpenGL to your browser, and version 2.0 is around the corner (specs). I’ve been playing around with WebGL (via JavaScript) for some time now (see my GitHub WebGL repo) and recently Google’s chrome (canary) got WebGL 2 support.

WebGL 2.0 adds some interesting new features, with geometry instancing being one of them, so I sat down and wrote a small demo that shows how to render the same instance of a single mesh with differing shader attributes using instancing and only one drawcall :

gl.bindBuffer(gl.ARRAY_BUFFER, buffer with offsets);
gl.vertexAttribPointer(offset attrib location in shader, 3, gl.FLOAT, false, 12, 0);
gl.vertexAttribDivisor(offset attrib location in shader, 1);
...
gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, number of vertices to render, number of instances to render);

(more…)

Read More