Elegant, relatively simple plus cheap and useful approach to rendering of transparent objects
Playing Order 1886 and it’s graphics is something that couldn’t be created without witchery and occult rituals =) Good reason to read some tech papers from Ready At Dawn:
And I must add one more link. This is a blog of Matt Pittineo, lead graphics programmer at RaD, and I’d say that this is an extremely useful and inspiring source of information if you want to learn something about modern graphics techniques (and the source code is very clean and easy to read):
I’ve been working with this API for quite some time and if at the beginning it seemed ugly and unfamiliar later I got used to it. Nevertheless, there are several moments that still causes pain.
- Half-pixel (half-texel) offset. This is is well known topic but every time I write a posteffect shader I have to spend some time later to fix another bug related to this D3D9 feature (I’m just stupid, probably);
- You have to use FOURCC to read the depth buffer. This is a problem because even in year 2016 you will find a user with a such “GPU-driver” combination that doesn’t support this extension.
- The same bit depth for all render targets
- We don’t have texture arrays. And it’s impossible to use such constructions in a shader:
Sharing is caring. And I really appreciate the Stingray’s team idea to explain how things work in their engine.
Rendering architecture: http://bitsquid.blogspot.ru/2017/02/stingray-renderer-walkthrough.html
And video explanations about various subsystems: https://www.youtube.com/playlist?list=PLUxuJBZBzEdxzVpoBQY9agA8JUgNkeYSV
A note for myself.
If you’re going to use glBindImageTexture to bind a cubemap (I was doing a cubemap integration using a compute shader) – do not forget to set the layered flag to GL_TRUE. Otherwise, imageLoad returns only zeros.
To add a bit of consciousness to the development of my primitive rendering framework I decided to create a plan, without any dates, though, just to have an opportunity to cross out lines and see some progress:
- add serialization and loading scenes and objects from files (already implemented, to some extent);
- implement voxel cone tracing;
- check out the PBR equations I use;
- implement Frostbite-style SSR (and fix cubemaps usage for cases when SSR fail);
- add remote debugging;
- add “default” assets, like unlit shader, white (or pink) texture and so on;
- move to OpenGL 4.x;
- “vulkanify” internal structures;
- simplify code, especially initialization and how dependencies between passes and materials should be set up;
- add transparent materials;
- add compressed textures support;
- try to understand and implement this technique https://eheitzresearch.wordpress.com/415-2/
- familiarize myself with Spherical Gaussians;
I think that will be enough at least for a year =)