Hot answers tagged

9

As mentioned in the comments, I would highly suggest starting with Full Volumetric Scattering. This is two fold: Since you are doing path tracing, adding volumetrics isn't super difficult. Fully understanding how full volumetric scattering works will be a great basis for understanding the estimations. In addition, it can provide great "references" to see if ...


7

It's not quite correct, today, to think of compute shaders as being "in the shader pipeline" in the same sense that your vertex and fragment shaders are literally hooked up into a pipeline. Compute shaders are not "hooked up" to anything currently, cannot drive rasterization, or directly consume the outputs of rasterization. What it allows you to do, ...


4

In general, you should not see significant performance differences running identical compute shaders via one API vs. another; in the end they’re running the same instructions on the same hardware. It’s possible for vendor-provided toolkits like CUDA or MetalPerformanceShaders to have more efficient implementations of a given algorithm on that vendor’s ...


4

The issue was caused by an incorrect calculation of the reflection direction vector. With D ray direction and N the normal vector: R = D - 2 * dot(D, N) * N The issue was caused by calculating the components of R as follows: R[i] = D[i] - 2 * (D[i] * N[i]) * N[i] It took me a while to find the mistake because this produced a correct reflection with the ...


4

Core OpenGL has no mechanism for this. The ARB_compute_variable_group_size extension provides such a feature. It doesn't allow for indirect compute operations though. It doesn't seem to have much AMD support though (outside of open source Linux drivers). And Intel support is nil.


4

To first clear your confusion around the terms: GPGPU stands for General Purpose computing on GPUs CUDA is the specific NVIDIA API to perform GPGPU only on their hardware OpenGL is a graphics specific API and is vendor independent OpenCL is a parallel programming compute API and is vendor independent Compute Shaders are a way to perform general purpose ...


4

For cases where the diffusion approximation is preferred over full volumetric path tracing, the method published by Solid Angle is fairly efficient: https://www.solidangle.com/research/s2013_bssrdf_slides.pdf It is implemented in the Arnold render engine, Blender's Cycles, and pbrt, the latter being open source. The file which implements it in PBRT is here:...


3

If your goal is to learn GPU programming, it doesn't matter at all whether you have DDR3 or GDDR5 memory. The way you program it isn't going to change based on how fast the memory is. It will affect performance, but if that's not a primary consideration for you, then you don't need to worry about it. Do make sure that you get a GPU that supports the latest ...


2

You need nvidia-docker. If your ssh server is in a Docker instance, you can assign each one to a different GPU. Then just set things up so only one team is sshing into each Docker instance. You don't need to do anything fancy with cudaSetDevice(), or risk students using the wrong device and messing things up for others, because each instance looks like it ...


2

CUDA is only available on nvidia cards. The open technology is OpenCL: https://es.wikipedia.org/wiki/OpenCL Another alternative is to use Compute Shaders. DirectX, OpenGL, and Vulkan all support compute shaders


1

If you look closely at the edge of the sphere, in the first image it is sharp, and in the second image it's blurry, blending into the background color. This suggests to me that it's not the texture, but the ray distribution on the image plane that's the issue. The second image might be distributing rays over a larger area per pixel, for instance by using a ...


1

I managed to fix it. It was indeed related to repeating random sequences. The problem was the following. curandState* randState is an array of curandStates, and most calls to curand_* require a pointer of a curandState. I was sending the randState, the array, to curand_* functions and not for example, a pointer of one of its members. Now most of my images ...


1

In addition to the more direct existing answer, there is a way to work around this in unextended OpenGL to some degree, feeding from the fact that in contrast to CUDA OpenGL compute shaders are not pre-compiled with application build (well, they can nowadays, but aren't by default). Instead you usually compile your compute shaders at some point during ...


Only top voted, non community-wiki answers of a minimum length are eligible