27,017 reputation
34988
bio website reedbeta.com
location Milpitas, CA
age 28
visits member for 3 years, 3 months
seen Dec 16 at 21:05

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.


Oct
7
comment Deferred rendering and gaussian blur - artifacts
I'm confused by your description of your render passes. Is fbo2 the temporary texture that you render to during the blur? Do you have multiple temporary textures, each with its own fbo? Or are you attempting to re-use the same temporary texture / fbo for multiple passes (which won't generally work, and could explain the artifacts)?
Sep
15
comment Ambient occlusion: Correct culling after anisotropy correction
Also, I saw you cross-posted this to Stack Overflow. That's frowned upon - you should pick the site best suited to the question (which is this one) and post it only there.
Sep
15
comment Ambient occlusion: Correct culling after anisotropy correction
What is "the anisotropy correction"?
Aug
28
comment How does Texture2D.GetData return coloured pixels?
Try i*width + j
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
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
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
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
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?
Aug
3
comment GGX energy conservation
This seems to be an exact duplicate of GGX specular BRDF is way over 1! BTW, the short answer is: this is perfectly OK and expected. It's supposed to go over 1 and have large values in the specular hotspot.
Aug
3
comment How can I use the graphics pipeline to render volumetric data based on a density function?
Mantle doesn't change the graphics pipeline as exposed by OpenGL and DirectX, or let you "make your own pipeline". It's simply a lower-CPU-overhead interface to the same hardware.
Aug
3
comment How can I use the graphics pipeline to render volumetric data based on a density function?
@TheLightSpark Right, you wouldn't pass strings to the shader (shading languages don't even have a string type), you'd want to generate and compile shader code for your desired functions. That can be done at runtime if necessary.
Aug
1
comment Can't sample texture in HLSL using DX11
In PS_INPUT, are those actually floats? They should be float4 and float2 respectively.
Jul
24
comment OpenGL render to texture causing edge artifacts
That's very odd that changing the color buffer format would have that result. After all the screen is not a 32F buffer, but you could render to the screen without those artifacts. Using a 32F buffer will also hurt performance if you are rendering a lot to it (though it might not matter for you now).