26,412 reputation
34584
bio website reedbeta.com
location Milpitas, CA
age 28
visits member for 2 years, 11 months
seen 3 hours ago

I'm a graphics programmer, an amateur physicist, and a sci-fi nerd. I teach computers how to make pretty pictures. I'm excited by beautiful, immersive, story-driven games and interactive fiction. I enjoy messing around with esoteric ideas. I like explaining things.

I currently work for NVIDIA DevTech. Previously, I worked for Sucker Punch Productions on the Infamous series of games for PS3 and PS4.

reedbeta.com - developer blog, OpenGL demos, and other projects. @reedbeta on Twitter.


2d
comment How does Texture2D.GetData return coloured pixels?
Try i*width + j
Aug
23
comment What problem does double or triple buffering solve in modern games?
"A back buffer is just used because pushing to the monitor is slow" - this isn't really right. A back buffer is used so that we can build the next frame without having the rendering process interact with the scanout of the previous frame. We can clear the render target, draw objects in whatever order we want, etc. without messing up the image on the monitor. It's not about performance, it's about decoupling the rendering and scanout stages.
Aug
23
comment How can I use the graphics pipeline to render volumetric data based on a density function?
@danijar Yes, it has a slight advantage over using a quad because some pixels along the diagonal will be shaded twice if you use a full-screen quad. On the other hand, discarding off-screen pixels is free since the rasterizer will not generate those pixels to begin with.
Aug
21
comment CSM DX11 issues
@KaiserJohaan I don't think that's quite right. The last row should have +0.5 for both X and Y, and zero for Z.
Aug
20
comment CSM DX11 issues
@KaiserJohaan If you mean converting the post-projective XY coordinates [-1, 1] to UV coordinates [0, 1], that's still needed. The Y axis needs to be flipped though, and the Z axis shouldn't be touched since it should already be in [0, 1] from the corrected projection matrix.
Aug
20
comment Compute directional light frustum from view furstum points and light direction
"How do i transform this new AABB back to world space?" Why do you need to transform it back to world space? The AABB in light space is the frustum for the directional light, i.e. the region that will be visible when you render the shadow map.
Aug
20
answered CSM DX11 issues
Aug
20
comment Find normal based on rotation?
You'll need to convert the XYZ rotation (Euler angles) to a quaternion or matrix, and apply it to (0, 0, 1) to convert that from local to world space. You can find plenty of information on converting Euler angles to other forms of rotation, and applying rotations to vectors, with a bit of googling.
Aug
18
comment How can I simulate shattering glass?
@karlphillip I did work on a demo using PhysX Destruction, though I personally only did rendering stuff, not any physics stuff on that project. The PhysX tech works by generating pre-shattered pieces in a DCC tool, and swapping them in for the unbroken mesh when damage occurs.
Aug
17
comment How are entity systems cache-efficient?
It would be useful to define (or link to) what you mean by ECS, if you're going to compare/contrast it with general component-based design. I for one am not clear on what the distinction is. :)
Aug
16
answered Is a dynamic enviroment map using pincushion curvilinear perspective projection possible?
Aug
15
answered Plot HDR tonemap curves
Aug
6
awarded  opengl
Aug
5
comment How do games handle rendering Asian unicode text?
@HaydnV.Harach Yeah, inputting text is a problem. For chat it might work to limit things to the 1000 most common Chinese characters, or something like that; you'd have to ask someone who knows more about these languages to see if that would be viable. For the player's name, you could maybe render it with FreeType once and cache the bitmap to use as an extra "character" in your renderer.
Aug
5
answered How do games handle rendering Asian unicode text?
Aug
4
comment GGX energy conservation
@Sikowsky And you can indeed use the BRDF directly in the shader, with point lights. Point lights are kind of a limit, in which an area light gets smaller while also getting brighter to maintain the same total power. In the limit the size goes to zero and the brightness (radiance) goes to infinity. Point lights have infinite radiance (actually the radiance is a delta function) so when convolved with the NDF they do correctly output very high values—just as an extremely small, extremely bright area light physically would.
Aug
4
comment GGX energy conservation
@Sikowsky To comment on your follow-up question, "in reality" (or rather in the mathematical framework of geometric optics) the BRDF and incoming radiance have to be integrated over the whole hemisphere. Just like a probablity density has to integrate to 1, the NDF has to integrate to 1, so the total energy reflected is always ≤ the incoming energy.
Aug
4
awarded  Nice Answer
Aug
3
answered GGX energy conservation
Aug
3
comment GGX energy conservation
Ahh, area lights are a bit different from point lights. Can you say more about how you're rendering area lights? Are you using something like Brian Karis' "representative point" approximation, or something else?