tag:blogger.com,1999:blog-77735329933034887592024-03-13T19:17:26.922+01:00Icare3D BlogResearch, Computer Graphics and GPUCyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.comBlogger73125tag:blogger.com,1999:blog-7773532993303488759.post-88008583587190344012018-09-19T21:06:00.001+02:002018-10-11T15:18:18.061+02:00NVIDIA Turing Vulkan/OpenGL extensions<div class="separator" style="clear: both; text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzG9KGuKYUZ5ATkehogi_Jq90lQqnqVK8lWeibwR1hN6F4VEE6D_6XVlUX_3TZdTtNj6zVIYUOhSkoFDVMss3NH_i6MYYmLPXHyShN0LGQeJV2bi4k3eDBz1xFXssBPjG3EL0o1ziNGic/s1600/QuadroTuring01.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1443" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzG9KGuKYUZ5ATkehogi_Jq90lQqnqVK8lWeibwR1hN6F4VEE6D_6XVlUX_3TZdTtNj6zVIYUOhSkoFDVMss3NH_i6MYYmLPXHyShN0LGQeJV2bi4k3eDBz1xFXssBPjG3EL0o1ziNGic/s200/QuadroTuring01.jpg" width="200" /></a>NVIDIA just launched the TU102/TU104 (GeForce RTX 2080ti/2080), first GPUs based on the <b>Turing</b> architecture. This new architecture brings hardware ray-tracing acceleration, as well as many other new and really cool graphics features. A good high-level overview of the architecture and new graphics features can be found in the <a href="https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf" target="_blank">Turing Architecture whitepaper</a> as well as this <a href="https://devblogs.nvidia.com/nvidia-turing-architecture-in-depth/" target="_blank">blog post</a>. Most of these features are exposed through both <b>Vulkan</b> and <b>OpenGL</b> extensions, and I will quickly go through each of them in this post. A big thanks to the many people at NVIDIA who worked hard to provide us with these extensions !</div>
<br />
Most features split into a Vulkan or OpenGL -specific extension (<span style="font-family: "courier new" , "courier" , monospace;">GL_*/VK_*</span>), and a GLSL or SPIR-V shader extension (<span style="font-family: "courier new" , "courier" , monospace;">GLSL_*/SPV_*</span>).<br />
<br />
<ul></ul>
<h2>
Ray-Tracing Acceleration</h2>
<ul>
<li><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NVX_raytracing" target="_blank"><span style="font-family: "courier new" , "courier" , monospace;">VK_NVX_raytracing</span></a> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nvx/GLSL_NVX_raytracing.txt" target="_blank">GLSL_NVX_raytracing</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NVX_raytracing.html" target="_blank">SPV_NVX_raytracing</a></span>)</li>
</ul>
<div style="text-align: justify;">
<a href="https://devblogs.nvidia.com/wp-content/uploads/2018/03/raytrace_01-625x630.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="630" data-original-width="625" height="200" src="https://devblogs.nvidia.com/wp-content/uploads/2018/03/raytrace_01-625x630.png" width="198" /></a>Turing brings hardware acceleration for ray-tracing through dedicated units called RT cores. The RT cores provide BVH traversal as well as ray-triangle intersection. This acceleration is exposed in Vulkan through a new ray-tracing pipeline, associated with a series of new shader stages. This programming model maps the DXR (DirectX Ray-Tracing) model, which is quickly described in <a href="https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-ray-tracing/">this blog post</a>, and <a href="https://devblogs.nvidia.com/vulkan-raytracing/">this blog post</a> details the Vulkan implementation.<br />
<br />
<div style="text-align: left;">
A GTC 2018 presentation about Vulkan Ray-Tracing can also be found there: <a href="http://on-demand.gputechconf.com/gtc/2018/video/S8521/">http://on-demand.gputechconf.com/gtc/2018/video/S8521/</a> (Slides <a href="http://on-demand.gputechconf.com/gtc/2018/presentation/s8521-advanced-graphics-extensions-for-vulkan.pdf" target="_blank">here</a>).<br />
This blog post details </div>
<br /></div>
<br />
<h2>
Mesh Shading </h2>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJsCUF4Ac_2SMc7HgenyAOz4YdV3MH4SFl9CEIpa3epK0tFQW7Hmb8-tFBtqtFUVdY0fbU7jeiB4Il6xgNnsbjVDJCytTXUvf0lcDpoCHx8CUgYcY3fpTqa8Q0E_RhsOnZwlgE0N8yCbc/s1600/Meshlets2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="471" data-original-width="1600" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJsCUF4Ac_2SMc7HgenyAOz4YdV3MH4SFl9CEIpa3epK0tFQW7Hmb8-tFBtqtFUVdY0fbU7jeiB4Il6xgNnsbjVDJCytTXUvf0lcDpoCHx8CUgYcY3fpTqa8Q0E_RhsOnZwlgE0N8yCbc/s640/Meshlets2.png" width="640" /></a></div>
<br />
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_mesh_shader" target="_blank">VK_NV_mesh_shader</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_mesh_shader.txt" target="_blank">GL_NV_mesh_shader</a></span> <span style="font-size: small;">(<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_mesh_shader.txt" target="_blank">GLSL_NV_mesh_shader</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_mesh_shader.html" target="_blank">SPV_NV_mesh_shader</a></span>)</span></li>
</ul>
<ul>
</ul>
<div style="text-align: justify;">
<br />
This is a new programmable geometry pipeline which replaces the traditional VS/HS/DS/GS pipeline with basically a Compute-based programming model. This new pipeline is based on two shader stages, a Task Shader and a Mesh Shader (separated by an expansion stage), which are used to ultimately generate a compact mesh description called a Meshlet. A Meshlet is a mini indexed geometry representation which is maintained on chip and is directly fed to the rasterizer for consumption. This exposes a very flexible and very efficient model with Compute Shader features and generic cooperative thread groups (workgroups, shared memory, barrier synchronizations...). Applications are endless, and this can for instance be used to implement efficient culling or LOD schemes, or perform procedural geometry generation.</div>
<div style="text-align: left;">
<br />
Many details can be found in this excellent blog post by Christoph Kubisch: <a href="https://devblogs.nvidia.com/introduction-turing-mesh-shaders/">https://devblogs.nvidia.com/introduction-turing-mesh-shaders/</a></div>
<div style="text-align: left;">
As well as in his Siggraph 2018 presentation: <a href="http://on-demand.gputechconf.com/siggraph/2018/video/sig1811-3-christoph-kubisch-mesh-shaders.html">http://on-demand.gputechconf.com/siggraph/2018/video/sig1811-3-christoph-kubisch-mesh-shaders.html</a><br />
<br />
A full OpenGL sample code which implements a <a href="http://onrendering.com/data/papers/isubd/isubd.pdf">compute-based adaptive tessellation technique</a> can also be found there: <a href="https://github.com/jdupuy/opengl-framework/tree/master/demo-isubd-terrain">https://github.com/jdupuy/opengl-framework/tree/master/demo-isubd-terrain</a><br />
<h2>
Variable Rate Shading</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_shading_rate_image" target="_blank">VK_NV_shading_rate_image</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shading_rate_image.txt" target="_blank">GL_NV_shading_rate_image</a></span> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shading_rate_image.txt" target="_blank">GLSL_NV_shading_rate_image</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shading_rate.html" target="_blank">SPV_NV_shading_rate</a></span>)</li>
</ul>
<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHeefiXf14L1xsyJz2VOjS5Ryt4aQav6QW_2bUxjmduiyaEX0F4ajeJUuaPxR4oFl6qDcdkpXAKfMtk98NifSYC8isOKeuix4e7Cs2L5c2l2nHRONcLwBXVS8m0iUTvCgSNw-wnAuLVIg/s1600/VRS2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="420" data-original-width="605" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHeefiXf14L1xsyJz2VOjS5Ryt4aQav6QW_2bUxjmduiyaEX0F4ajeJUuaPxR4oFl6qDcdkpXAKfMtk98NifSYC8isOKeuix4e7Cs2L5c2l2nHRONcLwBXVS8m0iUTvCgSNw-wnAuLVIg/s320/VRS2.png" width="320" /></a>This is a very powerful hardware feature which allows the application to dynamically control the number of fragment shader invocations (independently of the visibility rate) and vary this <i>shading rate</i> across the framebuffer. The <i>shading rate</i> is controlled using a texture image ("Shading Rate Image", 8b/texel) where each texel specifies an independent shading rate for blocks of 16x16 pixels. The rate is actually specified indirectly
using 8b indices into a palette which is specified per-viewport and stores the actual
shading rate flags.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Not only the feature allows to vary the MSAA shading rate per-pixel (allowing 1x,4x,8x, and now even 16x SSAA, but with a maximum of 8x depth test and color storage), but it also allows to drop the shading rate below one invocation per-pixel, down to one invocation per block of 4x4 pixels (through one per 1x2, 2x1, 2x2, 2x4 and 4x2 pixels) and even zero invocation. </div>
<div style="text-align: justify;">
<br />
The GLSL extensions also exposes intrinsics allowing fragment shaders to read the effective fragment size in pixels (<span style="font-family: "courier new" , "courier" , monospace;">gl_FragmentSizeNV</span>) as well as the number of fragment shader invocation for a fully covered pixel (<span style="font-family: "courier new" , "courier" , monospace;">gl_InvocationsPerPixelNV</span>). This opens the road to many new algorithms and more efficient implementations of optimized shading rate techniques, like Foveated Rendering, Lens Adaptation (for VR), Content or Motion Adaptive Shading.</div>
More info on Variable Rate Shading in this blog post:<a href="https://devblogs.nvidia.com/turing-variable-rate-shading-vrworks/"> https://devblogs.nvidia.com/turing-variable-rate-shading-vrworks/</a><br />
<h2>
Exclusive Scissor Test</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_scissor_exclusive" target="_blank">VK_NV_scissor_exclusive</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_scissor_exclusive.txt" target="_blank">GL_NV_scissor_exclusive</a></span></li>
</ul>
<div style="text-align: justify;">
This adds a second per-viewport scissor test, which culls fragments *inside* (exclusive) the specified rectangle, unlike the standard scissor test which culls *outside* (inclusive). This can be used for instance to implement more efficient multi-resolution foveated-rendering techniques (in conjunction with Variable Rate Shading), where raster passes fill concentric strips of pixels by enabling both inclusive and exclusive scissor tests.</div>
<br />
<h2>
Texture Access Footprint</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_shader_image_footprint" target="_blank">VK_NV_shader_image_footprint</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_shader_texture_footprint.txt" target="_blank">GL_NV_shader_texture_footprint</a></span> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_shader_texture_footprint.txt" target="_blank">GLSL_NV_shader_texture_footprint</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shader_image_footprint.html" target="_blank">SVP_NV_shader_image_footprint</a></span>)</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeug52RI0zAftuBlATnKkTG60WQVPNKkARjdn4FqNGrYH6fmQiI0CMjU72xgIT21pK4ebTXUvPE9q-CcvqYPescUiRDrHcdEKLedx6TVj_ZP4IBO_eiug9xBKMVeLI4P42sP9HBCj9_xY/s1600/TexFootprint2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="304" data-original-width="308" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeug52RI0zAftuBlATnKkTG60WQVPNKkARjdn4FqNGrYH6fmQiI0CMjU72xgIT21pK4ebTXUvPE9q-CcvqYPescUiRDrHcdEKLedx6TVj_ZP4IBO_eiug9xBKMVeLI4P42sP9HBCj9_xY/s200/TexFootprint2.png" width="200" /></a></div>
<div style="text-align: justify;">
These extensions expose a set of GLSL (and SPIR-V) query functions which report the texture-space footprints of texture lookups, ie. some data identifying the set of all texels that may be accessed in order to return a filtered result for the corresponding texture accesses (which can use anisotropic-filtering and potentially cover large footprints). Footprints are returned and represented as an LOD value, an anchor point and a 64-bit bitfield where each bit represents coverage for a group of neighboring texel (in 2D, group granularity can range from 2x2 to 256x256 texels). </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
This is actually an important component for implementing multi-pass decoupled and texture-space shading pipelines, where a restricted set of actually visible pixels must be determined in order to efficiently perform shading in a subsequent pass.</div>
<br />
<h2>
Derivatives in Compute Shader </h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_compute_shader_derivatives" target="_blank">VK_NV_compute_shader_derivatives</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_compute_shader_derivatives.txt" target="_blank">GL_NV_compute_shader_derivatives</a></span> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_compute_shader_derivatives.txt" target="_blank">GLSL_NV_compute_shader_derivatives</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_compute_shader_derivatives.html" target="_blank">SPV_NV_compute_shader_derivatives</a></span>)</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizwbhl3BefpUN556sW03snoUdxp7uKkDiJyPXstFQvHr8BbrLW1ud6Im03fYEtdnf8aXA8VmXtpmA5Fai-WUo2lDPzmDFIRDFQ-PR4ve0HM54siHq2oRCcrhyfNfhgNwyl_t2VI4wOARI/s1600/ComputeQuad.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="329" data-original-width="329" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizwbhl3BefpUN556sW03snoUdxp7uKkDiJyPXstFQvHr8BbrLW1ud6Im03fYEtdnf8aXA8VmXtpmA5Fai-WUo2lDPzmDFIRDFQ-PR4ve0HM54siHq2oRCcrhyfNfhgNwyl_t2VI4wOARI/s200/ComputeQuad.png" width="150" /></a></div>
<div style="text-align: justify;">
These extensions bring Compute even closer to Graphics by adding support for Quad-based derivatives in Compute Shaders, using the x and y coordinates of the local workgroup invocation ID. This allows Compute Shaders to use both built-in derivative functions like dFdx(), as well as texture lookup functions using automatic LOD computation, and the texture level of detail query function (<span style="font-family: "courier new" , "courier" , monospace;">textureQueryLod()</span>). <br />
Two layout qualifiers are provided allowing to specify Quad arrangements based on a linear index or 2D indices.</div>
<br />
<br />
<h2>
Shader Subgroup Operations</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_shader_subgroup_partitioned" target="_blank">VK_NV_shader_subgroup_partitioned</a> / <a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt" target="_blank">GL_NV_shader_subgroup_partitioned</a></span> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shader_subgroup_partitioned.html" target="_blank">SPV_NV_shader_subgroup_partitioned</a></span>)</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
These shader extensions provide a series of ballot-based partitioning and scan/reduce operations which operate on "subgroups" of shader invocations. This can be used for instance to implement clustering and de-duplication operations on sets of values distributed among different shader invocations.</div>
<br />
<h2>
Barycentric Coordinates and manual attributes interpolation</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_fragment_shader_barycentric" target="_blank">VK_NV_fragment_shader_barycentric</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_fragment_shader_barycentric.txt" target="_blank">GL_NV_fragment_shader_barycentric</a></span> (<span style="font-family: "courier new" , "courier" , monospace;"><a href="https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_fragment_shader_barycentric.txt" target="_blank">GLSL_NV_fragment_shader_barycentric</a> / <a href="http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_fragment_shader_barycentric.html" target="_blank">SPV_NV_fragment_shader_barycentric</a></span>)</li>
</ul>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://www.scratchapixel.com/images/upload/ray-triangle/barycentriccolor.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="348" data-original-width="300" height="200" src="https://www.scratchapixel.com/images/upload/ray-triangle/barycentriccolor.png" width="171" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Illustration courtesy of Jean-Colas Prunier, <br /><a href="https://www.scratchapixel.com/">https://www.scratchapixel.com/</a></i></td></tr>
</tbody></table>
<div style="text-align: justify;">
This feature exposes barycentric coordinates as Fragment Shader input in GLSL (and SPIR-V), and provides the ability for a Fragment Shader to directly fetch raw per-vertex values in order to perform manual barycentric interpolation. </div>
<div style="text-align: justify;">
A three-component vector built-in input <span style="font-family: "courier new" , "courier" , monospace;">gl_BaryCoordNV</span> provides
perspective-corrected barycentric coordinates (<span style="font-family: "courier new" , "courier" , monospace;">gl_BaryCoordNoPerspNV</span> for non- perspective-correct). Per-vertex inputs use the same brackets array syntax as for Tesselation and Geometry Shader inputs, and a <span style="font-family: "courier new" , "courier" , monospace;">pervertexNV</span> qualifier is added to identify input blocs and variables which read raw per-vertex values from the vertices of the original primitive.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
This feature potentially allows more efficient data passing to the Fragment Shader using compact or compressed data formats for instance. It could also allow interpolation from vertex values fetched directly from memory, user defined interpolations, or various reconstructions and computations using raw attributes accessed from the three vertices.</div>
<br />
<h2>
Ptex Hardware Acceleration</h2>
<ul>
<li><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_corner_sampled_image" target="_blank"><span style="font-family: "courier new" , "courier" , monospace;">VK_NV_corner_sampled_image</span></a></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20X5aW9WW3D6XrYbINfIEknd1AQt69689dLdyKxwXFy59oaEzCRKZzfrIrghSTz442svKad_CQa2Tzk3R_tse4a8hpHAtaHLDB4Z4rHb9fkS2dYI9bUKc-OqUAYP0q8hOW1Y4PkQb70c/s1600/ptex.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="893" data-original-width="966" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg20X5aW9WW3D6XrYbINfIEknd1AQt69689dLdyKxwXFy59oaEzCRKZzfrIrghSTz442svKad_CQa2Tzk3R_tse4a8hpHAtaHLDB4Z4rHb9fkS2dYI9bUKc-OqUAYP0q8hOW1Y4PkQb70c/s200/ptex.png" width="200" /></a></div>
<div style="text-align: justify;">
An corner-sampled image has texels centered on integer coordinates instead of being halfway, which allows edge sampling coordinates to filter to the exact texels on the edge of the texture. This facilitates implementing Ptex (Per-face Texture [<a href="http://ptex.us/ptexpaper.html" target="_blank">Burley and Lacewell 2008</a>], cf. <a href="https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Borderless%20Ptex.pdf">https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/Borderless%20Ptex.pdf</a>) texturing in real-time applications by providing proper filtering and interpolation. Ptex uses separate textures for each face of a subdivision surface or polygon mesh, and sample locations are placed at pixel corners, maintaining continuity between adjacent patches by duplicating values along shared edges.</div>
<br />
<br /></div>
<h2>
Representative Fragment Test</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_representative_fragment_test" target="_blank">VK_NV_representative_fragment_test</a></span> / <a href="https://www.khronos.org/registry/OpenGL/extensions/NV/NV_representative_fragment_test.txt" target="_blank"><span style="font-family: "courier new" , "courier" , monospace;">GL_NV_representative_fragment_test</span></a></li>
</ul>
<div style="text-align: justify;">
<br />
This extension has been designed to allow optimizing occlusion queries techniques which rely on per-fragment recording of visible primitives. It allows the hardware to stop generating fragments and stop emitting fragment shader invocations for a given primitive as long as a single fragment has passed early depth and stencil tests. This reduced subset of fragment shader invocation can then be used to record visible primitives in a more performant way. This is only a performance optimization, and no guarantee is given on the number of discarded fragments and consequently the number of fragment shader invocations that will actually be executed.</div>
A typical use case for this feature can be found in this occlusion culling sample code: <a href="https://github.com/nvpro-samples/gl_occlusion_culling">https://github.com/nvpro-samples/gl_occlusion_culling</a><br />
<br />
<h2>
Multi-View Rendering</h2>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><a href="https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_KHR_multiview" target="_blank">VK_KHR_multiview</a> / <a href="https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview.txt" target="_blank">GL_OVR_multiview</a></span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogs.nvidia.com/wp-content/uploads/2018/08/20-vr-realism.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="450" data-original-width="800" height="112" src="https://blogs.nvidia.com/wp-content/uploads/2018/08/20-vr-realism.png" width="200" /></a></div>
<div style="text-align: justify;">
Pascal Simultaneous Multi-Projection (SMP) and stereo view features allowed broadcasting the same geometric data for rasterization to multiple views (up to 2) and viewports (up to 16) with very limited possibilities of per-view (and viewport) variations (an horizontal position offset per-view and xyz swizzle per-viewport + viewport attributes). Turing generalizes and improves over this feature by allowing to specify fully independent per-view attribute values (including vertex positions) and exposes up to 4 views. No new extension is provided, but the feature is exposed transparently as an optimization to the existing standardized Vulkan VK_KHR_multiview and OpenGL GL_OVR_multiview extensions.<br />
More info on Multi-View Rendering in this bog post: <a href="https://devblogs.nvidia.com/turing-multi-view-rendering-vrworks/">https://devblogs.nvidia.com/turing-multi-view-rendering-vrworks/</a> </div>
<br />Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-1399305947431064132014-09-19T19:47:00.000+02:002015-09-14T22:16:19.920+02:00NVIDIA Maxwell OpenGL extensions<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpFt80wYBL0t2Lhlzq6fUFT3qFU-wcKbajrI9wjAsGymy6rAZBd9L36vdAmxRRVEZlTEXrEdEt73iDO50y-ol8t4r6mm9ENAjkd_zDZtPrYXJrN20cpjDgxdJNggC1GORu6wkSzaOtSY/s1600/GM204Die.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpFt80wYBL0t2Lhlzq6fUFT3qFU-wcKbajrI9wjAsGymy6rAZBd9L36vdAmxRRVEZlTEXrEdEt73iDO50y-ol8t4r6mm9ENAjkd_zDZtPrYXJrN20cpjDgxdJNggC1GORu6wkSzaOtSY/s1600/GM204Die.jpg" width="200" /></a></div>
<div style="text-align: justify;">
NVIDIA just launched the second-generation <a href="http://devblogs.nvidia.com/parallelforall/maxwell-most-advanced-cuda-gpu-ever-made/" target="_blank">Maxwell architecture</a> with the GM204 GPU, which is I believe, an incredible chip. The Maxwell 2 architecture is both highly energy efficient (~2x perf/watt of Kepler in games), and provides a lot of very exciting new graphics features (<a href="http://www.anandtech.com/show/8526/nvidia-geforce-gtx-980-review/4" target="_blank">some of them are exposed in Direct3D</a>). These features are exposed in form of new OpenGL extensions in the <a href="http://www.nvidia.com/Download/index.aspx?lang=en-us" target="_blank">R344 driver</a> that was released today, and the specification for all NVIDIA supported GL extensions can be found <a href="https://developer.nvidia.com/nvidia-opengl-specs" target="_blank">here</a>. NVIDIA also released <a href="https://developer.nvidia.com/gameworks-opengl-samples" target="_blank">new SDK samples</a> using these extensions.</div>
<br />
<h2>
<span style="font-size: x-large;">List of new extensions</span></h2>
<ul>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_post_depth_coverage.txt" target="_blank">EXT_post_depth_coverage</a> </li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_raster_multisample.txt" target="_blank"> EXT_raster_multisample</a></li>
<li> <a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_sparse_texture2.txt" target="_blank">EXT_sparse_texture2</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_texture_filter_minmax.txt" target="_blank"> EXT_texture_filter_minmax</a></li>
<li> <a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_conservative_raster.txt" target="_blank">NV_conservative_raster</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fill_rectangle.txt" target="_blank"> NV_fill_rectangle</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fragment_coverage_to_color.txt" target="_blank"> NV_fragment_coverage_to_color</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fragment_shader_interlock.txt" target="_blank"> NV_fragment_shader_interlock</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_framebuffer_mixed_samples.txt" target="_blank"> NV_framebuffer_mixed_samples</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_geometry_shader_passthrough.txt" target="_blank"> NV_geometry_shader_passthrough</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_sample_locations.txt" target="_blank"> NV_sample_locations</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_sample_mask_override_coverage.txt" target="_blank"> NV_sample_mask_override_coverage</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_shader_atomic_fp16_vector.txt" target="_blank"> NV_shader_atomic_fp16_vector</a></li>
<li><a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_path_rendering_shared_edge.txt" target="_blank"> NV_path_rendering_shared_edge</a></li>
<li><a href="https://www.opengl.org/registry/specs/NV/viewport_array2.txt" target="_blank"> NV_viewport_array2</a></li>
</ul>
<h2>
<span style="font-size: large;"> </span></h2>
<h2>
<span style="font-size: x-large;">Quick description of the new extensions</span></h2>
<h4>
<span style="font-size: large;">Multisampling</span></h4>
<ul>
<li><span style="font-size: large;"><b>Target-independent multisampling control and mixed samples</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_framebuffer_mixed_samples.txt" target="_blank">NV_framebuffer_mixed_samples</a> + <a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_raster_multisample.txt" target="_blank">EXT_raster_multisample</a>):</li>
</ul>
<div style="text-align: justify;">
<a href="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagMixedSamples.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="73" src="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagMixedSamples.jpg" width="320" /></a>This feature adds a lot of flexibility to the multi-sampled rasterization. It decouples the rasterization sampling frequency (which can be set explicitly) from the actual framebuffer storage.
This enables rasterization to operate at higher sampling frequency than the one of the target render color buffers.
It supports both depth and stencil testing at this frequency, if the corresponding depth and stencil buffers are sampled accordingly (it must be a multiple of the number of samples in the color buffers). <br />
There are still some constraints; All color buffers must have the same number of samples, and the raster sample count must match the depth and stencil buffer sample count if depth or stencil test is enabled, and it must be higher or equal to the color buffer sample count.
<br />
<br />
A new “coverage reduction stage” is introduced in the per-fragment operations (after the fragment shader in early-z mode, after the depth-test in late-z), which converts a set of covered raster/depth/stencil samples to a set of covered color samples.
There is an implementation-dependent association of raster samples to color samples. The reduced "color coverage" is computed such that the coverage bit for each color sample is 1 if any of the associated bits in the fragment's coverage is set, and 0 otherwise.
This feature can be used in conjunction with the coverage to color feature (cf. below), in order to get the FS output coverage mask automatically transformed into a color by ROP.
According to <a href="http://www.anandtech.com/show/8526/nvidia-geforce-gtx-980-review/4" target="_blank">AnandTech</a>, when rasterizing with explicit multisampling and no render-target, Maxwell allows evaluating primitive coverage at 16x MSAA.<br />
<br />
Note that <span style="font-family: "Courier New",Courier,monospace;">EXT_raster_multisample</span> is equivalent to "<i>Target-Independent Rasterization</i>" in Direct3D 11.1, which allows using multiple raster samples with a single color sample, as long as depth and stencil tests are disabled, and it is actually a subset of <span style="font-family: "Courier New",Courier,monospace;">NV_framebuffer_mixed_samples</span> which is more general and exposes more flexibility.</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Coverage to color conversion</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fragment_coverage_to_color.txt" target="_blank">NV_fragment_coverage_to_color</a>):</li>
</ul>
<div style="text-align: justify;">
This allows using ROP to automatically convert the post depth-/stencil-/alpha- test coverage mask into a color and write it into a color render target.
This conversion is performed before the new coverage reduction stage (cf. <span style="font-family: "Courier New",Courier,monospace;">NV_framebuffer_mixed_samples</span>) and can be useful in order to save coverage in the context of deferred shading.</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Post-depth coverage</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_post_depth_coverage.txt" target="_blank">EXT_post_depth_coverage</a>):</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagPostDepthCvg.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="107" src="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagPostDepthCvg.jpg" width="320" /></a></div>
When operating in early-depth mode (<span style="font-family: "Courier New",Courier,monospace;">layout(early_fragment_tests) in;</span>, see <a href="https://www.opengl.org/wiki/Early_Fragment_Test" target="_blank">here</a> for more information),
this extension allows the fragment shader to get the post depth-test coverage mask of the current fragment as input (<span style="font-family: "Courier New",Courier,monospace;">gl_SampleMaskIn[]</span>, for which only sample passing the depth-test are set),
unlike the standard GL 4.5 behavior which provides the pre- depth-test coverage (actual triangle coverage).
</div>
<br />
<br />
<ul>
<li> <span style="font-size: large;"><b>Multisample coverage override</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_sample_mask_override_coverage.txt" target="_blank">NV_sample_mask_override_coverage</a>)</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagCovgOverride.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="71" src="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagCovgOverride.jpg" width="320" /></a></div>
With standard OpenGL, the Fragment Shader output coverage mask (<span style="font-family: "Courier New",Courier,monospace;">gl_SampleMask[]</span>) is ANDed with the actual primitive input coverage mask before being used in subsequent pipeline stages.
This extension disables this AND operation, which allows the fragment shader to entirely override the primitive coverage, and enables setting coverage bits that are not present in the input mask.
This is actually very nice, because it allows using the output coverage as a way to dynamically route color output values into arbitrary sample locations inside a multisampled render target.
</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Programmable sample locations</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_sample_locations.txt" target="_blank">NV_sample_locations</a>):</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrpPlLodcjxyZQYWsyAK5CB0GYT_zrcK7hg9-I_0spSg4p2e00WQJhCt5owm5O_nHz4EU4SXmQ4wYt4kOh5liesizGswc6_U_0DP3LG9vtFzJhxpw8EfaGsvniTMbPPtdaLTQmzWnntgg/s1600/ProgSampling.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrpPlLodcjxyZQYWsyAK5CB0GYT_zrcK7hg9-I_0spSg4p2e00WQJhCt5owm5O_nHz4EU4SXmQ4wYt4kOh5liesizGswc6_U_0DP3LG9vtFzJhxpw8EfaGsvniTMbPPtdaLTQmzWnntgg/s1600/ProgSampling.jpg" width="200" /></a></div>
Allows applications to explicitly set the location of sub-pixel samples for multisample rasterization, providing fully programmable sampling patterns. Sampling patterns can be defined within a grid of adjacent pixels, which depends on the number of samples. According to provided queries, the sub-pixel positions are snapped to a 16x16 sub-pixel grid.
</div>
<br />
<br />
<h4>
<span style="font-size: large;">Rasterization </span></h4>
<ul>
<li><span style="font-size: large;"><b>Conservative rasterization</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_conservative_raster.txt" target="_blank">NV_conservative_raster</a>):</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtEeg8q-eaPrkoZMC6WWDDK0KfgyRZdTjFOWW6mYKzmO5tW_BYMZCManKb42WSiXdZYGQoFoD_a-ibpuHCEG1z_2va-QEq2JE849S7kTnoco6UTewpDjZwXWeCJ_sRtOqNe7qgsxvYj9U/s1600/Conrast.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtEeg8q-eaPrkoZMC6WWDDK0KfgyRZdTjFOWW6mYKzmO5tW_BYMZCManKb42WSiXdZYGQoFoD_a-ibpuHCEG1z_2va-QEq2JE849S7kTnoco6UTewpDjZwXWeCJ_sRtOqNe7qgsxvYj9U/s1600/Conrast.jpg" width="200" /></a></div>
This is a really great feature. It allows Rasterization to generate fragments for any pixel touched by a triangle, even if no sample location is covered on the pixel.
A new control is also provided to modify the window coordinate snapping precision in order to allow the application to match conservative rasterization triangle snapping with the snapping that would have occurred at higher resolution.
Polygons with zero area generate no fragments. Any location within a pixel may be used for interpolating attributes, potentially causing attribute extrapolation if outside the triangle.
This can be useful for binning purpose for instance (using one pixel per-tile).
</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Fragment Shader Interlock</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fragment_shader_interlock.txt" target="_blank">NV_fragment_shader_interlock</a>):</li>
</ul>
<div style="text-align: justify;">
This extension exposes an hardware-accelerate critical section for the fragment shader, allowing hazard-free read-modify-write operations on a per-pixel basis.
It also allows enforcing primitive-ordering for threads entering the critical section.
It provides new GLSL calls <span style="font-family: "Courier New",Courier,monospace;">beginInvocationInterlockNV()</span> and <span style="font-family: "Courier New",Courier,monospace;">endInvocationInterlockNV()</span> defining a critical section which is guaranteed to be executed only for one fragment at a time.
Interlock can be done on a per-pixel or a per-sample basis if multi-sampled rasterization is used.
This feature is useful for algorithms that need to access per-pixel data structures via shader load and store operations, while avoiding race conditions. Obvious applications are OIT and programmable blending for instance.
</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Screen-space bounding-box rasterization</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_fill_rectangle.txt" target="_blank">NV_fill_rectangle</a>):</li>
</ul>
<div style="text-align: justify;">
This allows rasterizing the axis-aligned screen-space bounding box of submitted triangles, disregarding the actual triangle edges.
It can be useful for drawing a full-screen quad without an generating an internal edge for instance, or for more efficiently drawing user interfaces.
</div>
<br />
<br />
<h4>
<span style="font-size: large;">Geometry processing </span></h4>
<ul>
<li><span style="font-size: large;"><b>Geometry Shader Passthrough</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_geometry_shader_passthrough.txt" target="_blank">NV_geometry_shader_passthrough</a>):</li>
</ul>
<div style="text-align: justify;">
This extension allows making geometry shaders more efficient in the case where they are pass-through, ie. there is a one-to-one mapping between input and output primitives.
In this case, per-vertex attributes are simply copied from the input primitive into the output primitive, and the geometry shader is only used to set per-primitive attributes (like <span style="font-family: "Courier New",Courier,monospace;">gl_Layer, gl_ViewportMask[]</span> ... ), which can be computed from the input vertex attributes.
</div>
<br />
<ul>
<li><span style="font-size: large;"><b>Viewport Multicast</b></span> (<a href="https://www.opengl.org/registry/specs/NV/viewport_array2.txt" target="_blank">NV_viewport_array2</a>):</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjklT52wjLOeVulW38aW6AmNMw_ymh6AtKk_1UYg5m1vHXIxDDkopZrIgJwLK-sEqyxTDmaVI2F0I3BfQGOgvYi4bMwAnTOIiMUYciX7nCpcqu6URF8Q83lnVwQhZakFSSjs5dptM3BBnE/s1600/csm.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjklT52wjLOeVulW38aW6AmNMw_ymh6AtKk_1UYg5m1vHXIxDDkopZrIgJwLK-sEqyxTDmaVI2F0I3BfQGOgvYi4bMwAnTOIiMUYciX7nCpcqu6URF8Q83lnVwQhZakFSSjs5dptM3BBnE/s1600/csm.png" width="200" /></a></div>
Viewport multicast allows automatically broadcasting the same primitive to multiple viewports (and/or multiple layers when using layered render-targets) simultaneously, in order to be rasterized multiple times.
It is exposed through a new <span style="font-family: "Courier New",Courier,monospace;">gl_ViewportMask[]</span> GLSL output attribute which is available in both the vertex shader and the geometry shader.
This can be especially powerful when combined to the new passthrough geometry shader. A sample using it for speeding-up cascaded shadow maps is available <a href="https://github.com/NVIDIAGameWorks/OpenGLSamples/tree/master/samples/gl4-maxwell/CascadedShadowMapping" target="_blank">here</a>.</div>
<h4>
<span style="font-size: large;">Texturing</span> </h4>
<ul>
<li><span style="font-size: large;"><b>Enhanced sparse textures</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_sparse_texture2.txt" target="_blank">EXT_sparse_texture2</a>) :</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyLFkRY4_Qv91W5YpfKsRxCsXHMCrfbqzG0OJ_3bArQlaxeoaNeIcHY4exS68hrqxQJ78baJJ6C_U7bBFgSj3wGYdXqMibILjFtRmhCB8J4KRr2zJbmOE-pi72EO5hmeVrZW-0KE9NQGU/s1600/VTR.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyLFkRY4_Qv91W5YpfKsRxCsXHMCrfbqzG0OJ_3bArQlaxeoaNeIcHY4exS68hrqxQJ78baJJ6C_U7bBFgSj3wGYdXqMibILjFtRmhCB8J4KRr2zJbmOE-pi72EO5hmeVrZW-0KE9NQGU/s1600/VTR.jpg" width="200" /></a></div>
This extension improves on <a href="https://www.opengl.org/registry/specs/ARB/sparse_texture.txt" target="_blank"><span style="font-family: "Courier New",Courier,monospace;">ARB_sparse_texture</span></a>, which separates the allocation of virtual address space from the physical memory of textures, and provides the ability to sparsely allocate the physical backing-store of 2D/3D/2DArray textures on a per-tile basis.
This new extension adds the ability to retrieve texture access residency information from GLSL, to specify minimum allocated LOD to texture fetches and to return a constant zero value for lookups into unallocated pages. It also adds support for multi-sampled textures.
</div>
<br />
<br />
<ul>
<li><span style="font-size: large;"><b>Texture Filter min/max</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_EXT_texture_filter_minmax.txt" target="_blank">EXT_texture_filter_minmax</a>):</li>
</ul>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagTexMinMax.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://developer.nvidia.com/sites/default/files/akamai/gameworks/images/maxwellblog/DiagTexMinMax.jpg" width="175" /></a></div>
This exposes a new sampler parameter which allows performing a min or max reduction operation on the values sampled inside a texture filtering footprint, instead of the regular linear interpolation.
It is supported for all kind of textures, as well as anisotropic filtering.
</div>
<br />
<br />
<h4>
<span style="font-size: large;">Atomics</span> </h4>
<ul>
<li><span style="font-size: large;"><b>FP16 global atomics</b></span> (<a href="https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_shader_atomic_fp16_vector.txt" target="_blank">NV_shader_atomic_fp16_vector</a>) :</li>
</ul>
<div style="text-align: justify;">
This extension provides a set of new atomic operations operating on 2 and 4 components vectors of 16b floating point values for images, bindless pointers to global memory and storage buffers.<br />
<br />
<br /></div>
Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-3898118748763274422012-06-08T18:31:00.000+02:002012-10-25T12:09:00.510+02:00Unreal Engine 4 : real-time GI using voxel cone-tracing !<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM4MUqG_jr2cZ_zIC_BbdCTkmmA-ojAoV2hC2P6UXN7l9WX0oJ0sv2hZyBusP1fVKqj4Bs_aes9zgz5pZ2gZVBWxOY4bZnQITHMDPF0ILNqRYEu1T5bdEtec9VOszPQ-tgaiP4IaZAE68/s1600/UE4-Showcase.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM4MUqG_jr2cZ_zIC_BbdCTkmmA-ojAoV2hC2P6UXN7l9WX0oJ0sv2hZyBusP1fVKqj4Bs_aes9zgz5pZ2gZVBWxOY4bZnQITHMDPF0ILNqRYEu1T5bdEtec9VOszPQ-tgaiP4IaZAE68/s320/UE4-Showcase.jpg" width="320" /></a>EPIC games just released two impressive videos presenting their new <a href="http://www.unrealengine.com/unreal_engine_4">UE4 game engine</a> featuring real-time global illumination that supports diffuse and specular bounces on dynamic scenes.<br />
<br />
According to <a href="http://www.geforce.com/whats-new/articles/stunning-videos-show-unreal-engine-4s-next-gen-gtx-680-powered-real-time-graphics/">this interview of Tim Sweeney</a>, their technique is called SVOGI (Sparse Voxel Octree Global Illumination) and... it is based on the <a href="http://www.icare3d.org/research-cat/publications/interactive-indirect-illumination-using-voxel-cone-tracing.html">voxel cone-tracing</a> technique we published last year at Pacific Graphics ! :-D<br />
<br />
That's really awesome to see research results being used so quickly in a game engine ! Beyond the <a href="http://research.nvidia.com/publication/interactive-indirect-illumination-using-voxel-cone-tracing">paper</a>, you can find more details about our voxel cone-tracing approach in my <a href="http://blog.icare3d.org/2012/05/gtc-2012-talk-octree-based-sparse.html">GTC 2012 talk</a>, my <a href="http://maverick.inria.fr/Publications/2011/CNSGE11a/">Siggraph talk</a>, as well as in my <a href="http://maverick.inria.fr/Publications/2011/Cra11/">Ph.D thesis on GigaVoxels</a>.</div>
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/dD9CPqSKjTU" width="560"></iframe>
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/MOvfn1p92_8" width="560"></iframe>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com6tag:blogger.com,1999:blog-7773532993303488759.post-26999974493817356842012-05-18T03:19:00.000+02:002012-08-03T20:47:27.802+02:00GTC 2012 Talk: "Octree-Based Sparse Voxelization for Real-Time Global Illumination"<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwdz84DyvifzpTy_W2PAxR317t50Mqojd85xJRcGZtq5v86hkGkRCMx8zt4EzgQ7isgxYf-ElSgkIjfhSE-vDLKXX4JhsWqtd_wHh1EFdrvmrDm28CxUDqDsRRyGLY5Jj8DfI3Sa0_8S0/s1600/OpenGL_Insight_Cover.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwdz84DyvifzpTy_W2PAxR317t50Mqojd85xJRcGZtq5v86hkGkRCMx8zt4EzgQ7isgxYf-ElSgkIjfhSE-vDLKXX4JhsWqtd_wHh1EFdrvmrDm28CxUDqDsRRyGLY5Jj8DfI3Sa0_8S0/s200/OpenGL_Insight_Cover.png" width="161" /></a>This week I gave a talk at the NVIDIA <a href="http://www.gputechconf.com/">GPU Technology Conference</a> about a fast sparse voxelization technique that I worked on at NVIDIA in the context of my <a href="http://research.nvidia.com/publication/interactive-indirect-illumination-using-voxel-cone-tracing">real-time global illumination approach</a> (using voxel cone-tracing inside a sparse voxel octree).
</div>
<br />
<div style="text-align: justify;">
Slides: <a href="http://www.icare3d.org/research/GTC2012_Voxelization_public.pptx">(PPTX, 50MB)</a>, <a href="http://www.icare3d.org/research/GTC2012_Voxelization_public.pdf">(PDF, 7MB)</a></div>
<div style="text-align: left;">
Video (if you want to enjoy my french accent): <a href="http://www.gputechconf.com/gtcnew/on-demand-gtc.php?sessionTopic=&searchByKeyword=&submit=&select=+&sessionEvent=&sessionYear=&sessionFormat=#1465">http://www.gputechconf.com/</a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: justify;">
In this talk I first give an overview of the real-time GI approach, before quickly detailing the new GPU voxelization and octree construction algorithm.</div>
<br />
This sparse voxelization technique will be published in the <a href="http://www.openglinsights.com/">OpenGL Insights</a> book that will be out for Siggraph.<br />
<br />
[UPDADE 07/12] The book chapter in <a href="http://openglinsights.com/">OpenGL Insights</a> has been published online <a href="http://www.seas.upenn.edu/%7Epcozzi/OpenGLInsights/OpenGLInsights-SparseVoxelization.pdf">here</a>. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM4KTkPVX0UUKwv7mSFNi7oUQZAH-xNyJTub8coehB-82peV7pWLkTleTPfx4btK4zkKSIv-JGoOWmp09POI4kkdDUd186Aa2ljMzckg-StQreZqkZk15Fl3QRBPfLTalNcxZx4xmwf9k/s1600/GIVoxels+2012-04-11+16-01-43-31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM4KTkPVX0UUKwv7mSFNi7oUQZAH-xNyJTub8coehB-82peV7pWLkTleTPfx4btK4zkKSIv-JGoOWmp09POI4kkdDUd186Aa2ljMzckg-StQreZqkZk15Fl3QRBPfLTalNcxZx4xmwf9k/s640/GIVoxels+2012-04-11+16-01-43-31.png" width="550" /></a></div>
<br />Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com7tag:blogger.com,1999:blog-7773532993303488759.post-63008541943434204402012-01-26T03:01:00.000+01:002012-02-04T22:27:23.155+01:00Ph.D thesis: GigaVoxels<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVqPwO_DRbogVxB7vcxHp0digu45-qZedVG3jTpQwMIIXy2TUJoR0ThcRrMlnlWqa5nCVWJO0K3ToHek-ejDDXmIS7SDlbomdRQh3YthtpabTaiKcR2CGLNH379tg1k3MLs9xYwUc9HU/s1600/A_cudaGigaVoxels_LionOctree_01.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVqPwO_DRbogVxB7vcxHp0digu45-qZedVG3jTpQwMIIXy2TUJoR0ThcRrMlnlWqa5nCVWJO0K3ToHek-ejDDXmIS7SDlbomdRQh3YthtpabTaiKcR2CGLNH379tg1k3MLs9xYwUc9HU/s200/A_cudaGigaVoxels_LionOctree_01.png" width="200" /></a>I defended my Ph.D thesis on GigaVoxels last July, and the document is now online.<br />
<br />
You can download it there:<br />
<a href="http://maverick.inria.fr/Publications/2011/Cra11/">GigaVoxels: A Voxel-Based Rendering Pipeline For Efficient Exploration Of Large And Detailed Scenes</a><br />
<br />
You can also check my other publications on my <a href="http://maverick.inria.fr/Membres/Cyril.Crassin/">Ph.D webpage</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ql1pvMqucXIS13NKk2H371f191TMC-6LrhfK-55flT4sHv_PxHWidDi4zyIux8YCK9pEA1RJqAK4GjpSzW4gOAWCYCoMqR3ZQE7MHCgBIuAZhyyh0xl99PdXY2X2d8li3EtSUb3MNrY/s1600/Sierpinski_Montage1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ql1pvMqucXIS13NKk2H371f191TMC-6LrhfK-55flT4sHv_PxHWidDi4zyIux8YCK9pEA1RJqAK4GjpSzW4gOAWCYCoMqR3ZQE7MHCgBIuAZhyyh0xl99PdXY2X2d8li3EtSUb3MNrY/s200/Sierpinski_Montage1.jpg" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiFtk55ZpSrKWEMCbnksruwyLjxrTmGU7Bq0bMiq-BpohGmbttKQY4OzF7Idd08fnlTTPbLf_oVrRWPN7ZuANibw6524HsIMCd-gzkI0LgcxI1rThlLEt6-w3Xvwm74q4FMjEOtJqUHvs/s1600/BlastedBunny2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiFtk55ZpSrKWEMCbnksruwyLjxrTmGU7Bq0bMiq-BpohGmbttKQY4OzF7Idd08fnlTTPbLf_oVrRWPN7ZuANibw6524HsIMCd-gzkI0LgcxI1rThlLEt6-w3Xvwm74q4FMjEOtJqUHvs/s200/BlastedBunny2.png" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigl6u3yixJvGegRyMmeSli5WJ3PJGByvB9Nz-tR8VURjuT7pJUETe92-zGrmaHxAbUIwlWIw5C0vGTDqMDbkM4EymIZL1_7Av9SzgL-yrSibgmjkzU8vhHrHHtfYtCk7uJwo0Csq_fEn8/s1600/CNSGE11_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigl6u3yixJvGegRyMmeSli5WJ3PJGByvB9Nz-tR8VURjuT7pJUETe92-zGrmaHxAbUIwlWIw5C0vGTDqMDbkM4EymIZL1_7Av9SzgL-yrSibgmjkzU8vhHrHHtfYtCk7uJwo0Csq_fEn8/s200/CNSGE11_04.jpg" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKUTZZ0d39Cuy5qBuIZUET86MrYBgbqGh1gwxVpdIbrJQhq1Odf7AVKOh4cS4iCpy9GQn3fpWds5AeBCqxyMQqcZ_Gq-djfI8qFKczCPKlhPJ_iVPX515S_ZcvIbHn3r2b4dHWYK-Z4Mc/s1600/cudaGigaVoxel_Coral01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKUTZZ0d39Cuy5qBuIZUET86MrYBgbqGh1gwxVpdIbrJQhq1Odf7AVKOh4cS4iCpy9GQn3fpWds5AeBCqxyMQqcZ_Gq-djfI8qFKczCPKlhPJ_iVPX515S_ZcvIbHn3r2b4dHWYK-Z4Mc/s200/cudaGigaVoxel_Coral01.png" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5SUicjyS0yRnmDOmrd4n1ISk1PXYRoMpXZ_UMc2Zyb_4SqhML-_xcjSMETAoFrnzxFoORNHNzNo2_wsUVcHPQotvgR1PPuBAFKNNtQJmsB2hSDX7KhUbWRUn8eQAx6Rba3_hwMd_4hPw/s1600/GigaBroccoli5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5SUicjyS0yRnmDOmrd4n1ISk1PXYRoMpXZ_UMc2Zyb_4SqhML-_xcjSMETAoFrnzxFoORNHNzNo2_wsUVcHPQotvgR1PPuBAFKNNtQJmsB2hSDX7KhUbWRUn8eQAx6Rba3_hwMd_4hPw/s200/GigaBroccoli5.png" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXlNbo-Pwn6NE4qLxyk7xOQfl9SmqE497ONqh70sPaHg7YMMc0kEhCkV1Cj-cwqquFdKIgRMBpH2Z261Try_GCHP1QutUgHDvdeIQR0IHI5F9KoveHlTWzUuy2kuq0Piuqf_Eq1NyZRas/s1600/GigaVoxels_Bones01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXlNbo-Pwn6NE4qLxyk7xOQfl9SmqE497ONqh70sPaHg7YMMc0kEhCkV1Cj-cwqquFdKIgRMBpH2Z261Try_GCHP1QutUgHDvdeIQR0IHI5F9KoveHlTWzUuy2kuq0Piuqf_Eq1NyZRas/s200/GigaVoxels_Bones01.jpg" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQWwy8Eazmsc3vS1_MS_bSQ4GaqoOeDJsqlvGircTfvKwxhuwfEbbyD39SyLmt1wNfcf-qmN_hpBWhEbzH0kU8JObVqQVh2u2D2pz6MVjwqzKrOY6hyydG_Wm-cdgLJe8g5uCK9E58M8/s1600/GIVoxels_New1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQWwy8Eazmsc3vS1_MS_bSQ4GaqoOeDJsqlvGircTfvKwxhuwfEbbyD39SyLmt1wNfcf-qmN_hpBWhEbzH0kU8JObVqQVh2u2D2pz6MVjwqzKrOY6hyydG_Wm-cdgLJe8g5uCK9E58M8/s200/GIVoxels_New1.png" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaJyv4HxS9iYvKh29uu5FM39dVy0evEce0_ttIj483u3T2q3JMz7KHokiDdo4y-OOYUcUEM440W_JxXZRefmD78onLXuEZaWGBf9wjLRmubnO2kECylcWtUxdM0ATDpnpnS4UFBCcnzm4/s1600/VoxelGI_VideoShot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaJyv4HxS9iYvKh29uu5FM39dVy0evEce0_ttIj483u3T2q3JMz7KHokiDdo4y-OOYUcUEM440W_JxXZRefmD78onLXuEZaWGBf9wjLRmubnO2kECylcWtUxdM0ATDpnpnS4UFBCcnzm4/s200/VoxelGI_VideoShot2.png" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaBMSsFbjK0eNieeQcLSoXc5QpZ-EPX6EAuMjHKytqqzKeMEn7abgOzxxau9RomydFgd3asl8QLC626xE4vSAuDob-Hp9vo2b8XJ0Y_1EfmCo8lxWhgfrGGn0kf0gEjqThB7KLRCgWqX8/s1600/VoxelGI_VideoShot12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaBMSsFbjK0eNieeQcLSoXc5QpZ-EPX6EAuMjHKytqqzKeMEn7abgOzxxau9RomydFgd3asl8QLC626xE4vSAuDob-Hp9vo2b8XJ0Y_1EfmCo8lxWhgfrGGn0kf0gEjqThB7KLRCgWqX8/s200/VoxelGI_VideoShot12.png" /></a>
</div>
<br />Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com15tag:blogger.com,1999:blog-7773532993303488759.post-60962301991000424722011-12-02T19:00:00.001+01:002012-01-26T19:52:13.599+01:00Interview on 3DVF<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAya4kpJY5ZgkQDGo4AnX4qLI1t-Cv63CvjHFaHeeBjLviEEk9DdCvMuRmYgOUUrWuAjZI-z_XeS1CNHswIqPri3M1CfgJ1TdxXNSeJpuM6XdQu5l75fRTAg7ZCiHRYJjKl6BxyrUyxKQ/s1600/3DVFLogo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAya4kpJY5ZgkQDGo4AnX4qLI1t-Cv63CvjHFaHeeBjLviEEk9DdCvMuRmYgOUUrWuAjZI-z_XeS1CNHswIqPri3M1CfgJ1TdxXNSeJpuM6XdQu5l75fRTAg7ZCiHRYJjKl6BxyrUyxKQ/s1600/3DVFLogo.png" /></a></div>
<div style="text-align: justify;">
I gave an interview to 3DVF, a great French community website dedicated to image synthesis, and numerical creation in general. The interview is mainly centered around our voxel-based GI approach, as well as my former INRIA research team and computer graphics research in France.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
The interview be read <a href="http://www.3dvf.com/actualite-2363-interview-cyril-crassin.html">here</a> (in French).</div>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-26061514810895941602011-11-09T23:42:00.000+01:002011-11-09T23:42:28.268+01:00Ph.D defended and postoc at NVIDIA Research<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjFW62AWlTgwt5BKn5WVh_REkf2lNA6iD_fauJ1UaOPx6dLgPrnQRl9GXU-qpiaewc77_M49iIvA65N2VacIKOq_LjTP3ZJh25_Kz8Tt-316m20kzKuF0f2PiV835rFSxk7BlXM3wsBxo/s1600/nvidia-official-3d-logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjFW62AWlTgwt5BKn5WVh_REkf2lNA6iD_fauJ1UaOPx6dLgPrnQRl9GXU-qpiaewc77_M49iIvA65N2VacIKOq_LjTP3ZJh25_Kz8Tt-316m20kzKuF0f2PiV835rFSxk7BlXM3wsBxo/s200/nvidia-official-3d-logo.jpg" width="200" /></a></div>
<div style="text-align: justify;">
I did not take time to report on this before, but I defended my Ph.D thesis on GigaVoxels at INRIA this summer (my thesis will be soon available <a href="http://maverick.inria.fr/Membres/Cyril.Crassin/thesis/">there</a>), and I started a one year postdoc at <a href="http://research.nvidia.com/users/cyril-crassin">NVIDIA Research</a> in the SF bay area. There, I continue working on voxel representations, of course :-D</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Even if I am now an NVIDIA employee, this continue to be a personal blog, all the things I publish here are totally mine and my opinions do not necessarily reflect the ones from my employer !</div>
<br />Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com1tag:blogger.com,1999:blog-7773532993303488759.post-73483630923761993082011-09-30T11:06:00.000+02:002011-09-30T20:34:21.010+02:00Real-Time Shadows Book<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzIHkKN9uqzxLScaEh3fM3-nDL11WhQJ8bKFS4Is-DGDCYeB2aS3NhLqZNOm1KWAYtsjX2J0Qisjm87Pe4jeb7kgMcrr50yunFlscrgyzY_h-b-7LIBXOn9RQSkjiQj6rDI3C9CoOGeoM/s1600/realtimeshadows.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzIHkKN9uqzxLScaEh3fM3-nDL11WhQJ8bKFS4Is-DGDCYeB2aS3NhLqZNOm1KWAYtsjX2J0Qisjm87Pe4jeb7kgMcrr50yunFlscrgyzY_h-b-7LIBXOn9RQSkjiQj6rDI3C9CoOGeoM/s320/realtimeshadows.png" width="180" /></a></div>
<div style="text-align: justify;">
Just a quick post to recommend you the great book "Real-time shadows" that details, explore and greatly explain a large number of relevant techniques for real-time shadow rendering, which we all know must be one of the most prolific field in computer graphics !</div>
<div style="text-align: justify;">
In addition, this book is written by 4 leading experts of the field: Elmar Eisemann, Michael Schwarz, Ulf Assarsson and Michael Wimmer.</div>
<div style="text-align: justify;">
For me, it is now THE reference on shadows rendering !</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
More info on the <a href="http://www.realtimeshadows.com/">book website</a>. and a good description on the <a href="http://www.crcpress.com/ecommerce_product/product_detail.jsf?isbn=9781568814384">publisher's website</a>. Of course it can be bought on <a href="http://www.amazon.com/gp/product/1568814380/ref=s9_simh_gw_p14_d0_g14_i1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0E1ZMJPVAG6TF4SEPE2G&pf_rd_t=101&pf_rd_p=470938631&pf_rd_i=507846">amazon</a>.</div>
Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-82438855794327976702011-09-13T22:30:00.002+02:002011-09-30T20:34:51.933+02:00Siggraph 2011 Slides<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwzoIvJx4csOYxdCHF41uFzjECus7IX8kGQqB3g4msLMCkeqIEQthKGe41EILa1pEPP5J0iFzqp3KvFI_Wcb8QP-UoF-nUKIlo0lS4MJ8Pap0zPUcvaeNEB-Iwg8rHVst_HF9ar-pArgg/s1600/VancouverOrca.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwzoIvJx4csOYxdCHF41uFzjECus7IX8kGQqB3g4msLMCkeqIEQthKGe41EILa1pEPP5J0iFzqp3KvFI_Wcb8QP-UoF-nUKIlo0lS4MJ8Pap0zPUcvaeNEB-Iwg8rHVst_HF9ar-pArgg/s200/VancouverOrca.jpg" width="200" /></a></div>
Here is a quick list of interesting Siggraph 2011 courses and talks available online.<br />
<br />
<span style="font-size: large;"><b>Courses/Talks :</b></span><br />
<a href="http://advances.realtimerendering.com/s2011/index.html">Advances in Real-Time Rendering in Games</a><br />
<a href="http://bps11.idav.ucdavis.edu/">Beyond Programmable Shading</a><br />
<a href="http://www.cs.uiowa.edu/%7Ecwyman/publications/talks/s2011/">State-of-the-Art: Interactive Global Illumination</a><br />
<a href="http://bulletphysics.org/siggraph2011/">Destruction and Dynamics for Film and Game Production</a><br />
<a href="http://iryoku.com/aacourse/">Filtering Approaches for Real-Time Anti-Aliasing</a><br />
<a href="http://magnuswrenninge.com/productionvolumerendering">Production Volume Rendering</a><br />
<a href="http://sites.google.com/site/s2011compilers/">Compiler Technology for Rendering</a><br />
<a href="http://pub.ist.ac.at/group_wojtan/meshyfluidscourse/meshyfluidscourse.html">Liquid Simulation with mesh-based Surface Tracking</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOfNrHWO-fD31_AxhyRNXjforbkbDtLo0Iriqa8ks48253Ks27sWdmgTo3zNO-Qnu0VusMOCS-ZKa5MJSE6BuQrMAkmu3IvSpfwJmDqh4m5IUVi_qVnhyphenhyphenvorkPBQZJjo34Dtkfkt7CdXI/s1600/GL42_tshirt.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOfNrHWO-fD31_AxhyRNXjforbkbDtLo0Iriqa8ks48253Ks27sWdmgTo3zNO-Qnu0VusMOCS-ZKa5MJSE6BuQrMAkmu3IvSpfwJmDqh4m5IUVi_qVnhyphenhyphenvorkPBQZJjo34Dtkfkt7CdXI/s200/GL42_tshirt.jpg" width="190" /></a></div>
<span style="font-size: large;"><b>Companies:</b></span><br />
<a href="http://crytek.com/cryengine/presentations">CRYTEK</a><br />
NVIDIA <a href="http://developer.nvidia.com/siggraph-2011">Slides</a> , <a href="http://fullviewmedia.com/fb/nvidia/archive/video.html">Videos</a><br />
<a href="http://software.intel.com/en-us/articles/siggraph-2011-event/%20">INTEL</a><br />
<br />
<span style="font-size: large;"><b>OpenGL/OpenCL :</b></span><br />
OpenGL BOF <a href="http://www.khronos.org/developers/library/2011-siggraph-opengl-bof%20">Slides</a><br />
<a href="http://www.daveshreiner.com/SIGGRAPH/s11/">Introduction to Modern OpenGL Programming</a><br />
OpenCL BOF <a href="http://www.khronos.org/developers/library/2011-siggraph-opencl-bof">Slides</a> <br />
<br />
<span style="font-size: large;"><b>Others:</b></span><br />
<a href="http://highperformancegraphics.org/program.php">HPG 2011</a> <br />
<br />
Also a great list with more posters and talks is available on <a href="http://blog.selfshadow.com/2011/08/13/hpg-siggraph-2011/">Stephen Hill's Blog</a><br />
There is also my talk on <a href="http://artis.imag.fr/Publications/2011/CNSGE11a/">Interactive Indirect Illumination Using Voxel Cone Tracing</a> :-)Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-29616311867292071972011-08-08T17:54:00.004+02:002011-08-08T18:38:25.303+02:00OpenGL 4.2 specification released<div class="separator" style="clear: both; text-align: center;"><a href="http://www.opengl.org/img/opengl_logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="97" src="http://www.opengl.org/img/opengl_logo.jpg" width="220" /></a></div><div style="text-align: justify;">Specifications can be found in the GL registry: <a href="http://www.opengl.org/registry/">http://www.opengl.org/registry/</a></div><div style="text-align: justify;">NVIDIA drivers already supporting it as well as new ARB extensions can be found there: <a href="http://developer.nvidia.com/opengl-driver">http://developer.nvidia.com/opengl-driver</a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">A full and very good review can be found on <i>G-Truc Creation</i>: <a href="http://www.g-truc.net/post-0414.html">http://www.g-truc.net/post-0414.html</a><br />
Among interesting things, the <a href="http://developer.download.nvidia.com/opengl/specs/GL_ARB_shader_atomic_counters.txt">shader_atomic_counters</a>, <a href="http://developer.download.nvidia.com/opengl/specs/GL_ARB_conservative_depth.txt">conservative depth</a>, <a href="http://developer.download.nvidia.com/opengl/specs/GL_ARB_transform_feedback_instanced.txt">instanced transformed feedback</a>, the integration of <a href="http://developer.download.nvidia.com/opengl/specs/GL_ARB_shader_image_load_store.txt">shader_image_load_store</a> and more !<br />
<br />
And congrats to <a href="http://www.g-truc.net/">Christophe</a> for his first credit in the spec :-D</div>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com2tag:blogger.com,1999:blog-7773532993303488759.post-21797739981622818772011-08-04T17:55:00.002+02:002012-11-02T12:33:06.749+01:00"Interactive Indirect Illumination Using Voxel Cone Tracing" paper accepted at Pacific Graphics 2011<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj68ad75ICcf3XqVBLztbCVlykg0EoQZSgwWz7OaFCNYuFtgYPXG50HSIyarmuUgMbk74CNrpygJ_oJpeMkfYtSn86N5k0FNQ_1GgXwLuCDpF2XMhyphenhyphenRg5SPBZMi9_sm517QaFfgyHSmUAc/s1600/VoxelGI_VideoShot2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj68ad75ICcf3XqVBLztbCVlykg0EoQZSgwWz7OaFCNYuFtgYPXG50HSIyarmuUgMbk74CNrpygJ_oJpeMkfYtSn86N5k0FNQ_1GgXwLuCDpF2XMhyphenhyphenRg5SPBZMi9_sm517QaFfgyHSmUAc/s200/VoxelGI_VideoShot2.png" width="200" /></a></div>
<div style="text-align: justify;">
I am glad to announce that our paper <i>"Interactive Indirect Illumination Using Voxel Cone Tracing"</i> (cf. my previous post <a href="http://blog.icare3d.org/2011/06/interactive-indirect-illumination-and.html">http://blog.icare3d.org/2011/06/interactive-indirect-illumination-and.html</a>) has been accepted at Pacific Graphics 2011 !</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can find the authors version of the paper on my research page :<br />
<a href="http://www.icare3d.org/research-cat/publications/interactive-indirect-illumination-using-voxel-cone-tracing.html">http://www.icare3d.org/research-cat/publications/interactive-indirect-illumination-using-voxel-cone-tracing.html</a><br />
On my INRIA webpage: </div>
<div style="text-align: justify;">
<a href="http://artis.imag.fr/Publications/2011/CNSGE11b/">http://artis.imag.fr/Publications/2011/CNSGE11b/</a></div>
<div style="text-align: justify;">
It is also on my NVIDIA webpage:<br />
<a href="http://research.nvidia.com/publication/interactive-indirect-illumination-using-voxel-cone-tracing">http://research.nvidia.com/publication/interactive-indirect-illumination-using-voxel-cone-tracing</a></div>
<div style="text-align: justify;">
<br />
Also, don't forget to attend my talk if you are going to <b>Siggraph 2011</b> !</div>
<div style="text-align: justify;">
<i><span class="date-display-single">Tuesday, 9 August <span class="date-display-start">9:00 am</span><span class="date-display-separator"> - </span><span class="date-display-end">10:30 am</span></span> | West Building, Rooms 109/110</i></div>
Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com2tag:blogger.com,1999:blog-7773532993303488759.post-7211341037037706062011-06-26T16:58:00.002+02:002012-01-26T04:10:18.874+01:00Free 3D meshes linksI started to compile links to websites where free 3D models can be found. If you know other good websites, feal free to post them in the comments :-)<br />
<br />
<b>Static models and scenes:</b><br />
<ul>
<li>Great collection of models for scientific publications on Morgan McGuire webpage: <a href="http://graphics.cs.williams.edu/data/meshes.xml">http://graphics.cs.williams.edu/data/meshes.xml </a></li>
<li>3D Render challenge: <a class="external free" href="http://www.3drender.com/challenges/" rel="nofollow">http://www.3drender.com/challenges/</a> </li>
<li> Crytek: <a class="external free" href="http://www.crytek.com/cryengine/cryengine3/downloads" rel="nofollow">http://www.crytek.com/cryengine/cryengine3/downloads</a> </li>
<li> Keenan Crane : <a class="external free" href="http://www.cs.caltech.edu/%7Ekeenan/models.html" rel="nofollow">http://www.cs.caltech.edu/~keenan/models.html</a> </li>
<li> Sibenik model: <a class="external free" href="http://hdri.cgtechniques.com/%7Esibenik2/download/" rel="nofollow">http://hdri.cgtechniques.com/~sibenik2/download/</a> </li>
<li> AIM@Shape : <a class="external free" href="http://shapes.aimatshape.net/" rel="nofollow">http://shapes.aimatshape.net/</a> </li>
<li> Characters Creative Common: <a class="external free" href="http://artist-3d.com/" rel="nofollow">http://artist-3d.com/</a> </li>
<li> Characters: <a class="external free" href="http://www.3dvalley.com/3d-models/characters" rel="nofollow">http://www.3dvalley.com/3d-models/characters</a> </li>
<li> Blender files: <a class="external free" href="http://www.blendswap.com/3D-models/category/featured/" rel="nofollow">http://www.blendswap.com/3D-models/category/featured/</a> </li>
<li> Archive 3D: <a class="external free" href="http://archive3d.net/" rel="nofollow">http://archive3d.net/</a></li>
</ul>
<br />
<b>Animated models and scenes:</b><br />
<b></b><br />
<ul>
<li>Ingo Wald: <a class="external free" href="http://www.sci.utah.edu/%7Ewald/animrep/" rel="nofollow">http://www.sci.utah.edu/~wald/animrep/</a> </li>
<li>MIT CSAIL 1: <a class="external free" href="http://people.csail.mit.edu/drdaniel/mesh_animation/index.html" rel="nofollow">http://people.csail.mit.edu/drdaniel/mesh_animation/index.html</a> </li>
<li>MIT CSAIL 2: <a class="external free" href="http://people.csail.mit.edu/drdaniel/dynamic_shape/index.html" rel="nofollow">http://people.csail.mit.edu/drdaniel/dynamic_shape/index.html</a></li>
<li>MIT Animals and Face: <a href="http://people.csail.mit.edu/sumner/research/deftransfer/data.html%20">http://people.csail.mit.edu/sumner/research/deftransfer/data.html</a></li>
<li>Face data: <a href="http://grail.cs.washington.edu/software-data/stfaces/index.html">http://grail.cs.washington.edu/software-data/stfaces/index.html</a> </li>
<li>Pants: <a href="http://www.ryanmwhite.com/research/cloth_cap.html">http://www.ryanmwhite.com/research/cloth_cap.html</a> </li>
</ul>
<br />
<ul></ul>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com6tag:blogger.com,1999:blog-7773532993303488759.post-38473296379074835282011-06-24T15:02:00.004+02:002012-11-02T12:34:02.483+01:00Interactive Indirect Illumination and Ambient Occlusion Using Voxel Cone Tracing<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl5x4Gkkm80NRFC2V8XQp2USEHk5_TlwRU_9tjqSmLtTwrvpSda6TCM4WTgaTzipR7qdQyHUIqIo1ZtfX5AwBrsOn5FPleV4j5f2-1dlS_fj38wK3436aVG2TDuVM9sUAefvGLe4DZeow/s1600/SiggraphRepImage.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl5x4Gkkm80NRFC2V8XQp2USEHk5_TlwRU_9tjqSmLtTwrvpSda6TCM4WTgaTzipR7qdQyHUIqIo1ZtfX5AwBrsOn5FPleV4j5f2-1dlS_fj38wK3436aVG2TDuVM9sUAefvGLe4DZeow/s320/SiggraphRepImage.jpg" width="320" /></a></div>
I am happy to present you a new approach to compute indirect illumination and ambient occlusion in real-time using a pre-filtered geometry representation stored inside a sparse voxel octree, as well as a new approximate voxel-based cone-tracing. The sparse voxel octree is used as a proxy for occlusion information and indirect illumination, it supports dynamic objects and environments thanks to a new very fast voxelization algorithm that updates the octree structure and pre-filter geometry and lighting information.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
This work has been done in collaboration with Miguel Sainz and Simon Green from NVIDIA, as well as Fabrice Neyret from CNRS and Elmar Eisemann from ParisTech.</div>
<div style="text-align: justify;">
<br />
<b>The paper ha been published at Pacific Graphic. You can find the authors version of it on my research page:</b><br />
<a href="http://www.icare3d.org/research-cat/publications/interactive-indirect-illumination-using-voxel-cone-tracing.html">http://www.icare3d.org/research-cat/publications/interactive-indirect-illumination-using-voxel-cone-tracing.html</a><b> </b><br />
<br /></div>
I also presented this work as a talk at <a href="https://artis.imag.fr/Publications/2011/CNSGE11a/"><b>Siggraph 2011 in Vancouver</b></a> as well as a <a href="http://artis.imag.fr/Publications/2011/CNSGE11/">poster at I3D 2011</a>.<br />
<br />
<i>[Update 30/06/2011]: </i>Benoit Rogez wrote a very good article about our approach on 3DVF (in French) : <a href="http://www.3dvf.com/actualite-1187-cyril-crassin-nouvelle-methode-d-illumination-globale-et-d-ao-temps-reel.html">here</a><br />
<i>[Update 10/06/2012]: </i>More details on the algorithm and the fast voxelization and octree construction can be found in my <a href="http://blog.icare3d.org/2012/05/gtc-2012-talk-octree-based-sparse.html">GTC 2012 presentation</a>.<br />
<br />
<span style="font-size: large;"><b>Indirect lighting (global illumination):</b></span><br />
High quality video: <a href="http://artis.imag.fr/Membres/Cyril.Crassin/GIVoxels/Siggraph11_GI1.mov">http://artis.imag.fr/Membres/Cyril.Crassin/GIVoxels/Siggraph11_GI1.mov</a><br />
<br />
<iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/fAsg_xNzhcQ" width="480"></iframe><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTDgltLIbS4Q6i91R9dplMHnI6cbhEFmhaCOef71iYD6ZE5tbhQPjwde6oqD_6De-C_io_PfhSxRc20cBCl0tjRRNV8ngU_VxhXKq9CNp7Hm4sTTlN1OuygE_LG0Nwkd5Gge8yn23aBkE/s1600/VoxelGI_VideoShot2.png" imageanchor="1" style="float: left; margin-bottom: 0em; margin-right: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTDgltLIbS4Q6i91R9dplMHnI6cbhEFmhaCOef71iYD6ZE5tbhQPjwde6oqD_6De-C_io_PfhSxRc20cBCl0tjRRNV8ngU_VxhXKq9CNp7Hm4sTTlN1OuygE_LG0Nwkd5Gge8yn23aBkE/s200/VoxelGI_VideoShot2.png" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT7A_Ju1ZkKgVyhlr_Aok5OGpnHpRNLbvXj2K1TEf4nOF6RVhLhfeeqXlUd9-bJhPrjhWJRLT8-UolE-bumKB_1X2IHrpvqEa6-l1xLYo6uMEx-bJFF8gp2pn7ZHG_c8g1ZR6D5lwNM5w/s1600/VoxelGI_VideoShot4.png" imageanchor="1" style="float: left; margin-bottom: 0em; margin-right: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT7A_Ju1ZkKgVyhlr_Aok5OGpnHpRNLbvXj2K1TEf4nOF6RVhLhfeeqXlUd9-bJhPrjhWJRLT8-UolE-bumKB_1X2IHrpvqEa6-l1xLYo6uMEx-bJFF8gp2pn7ZHG_c8g1ZR6D5lwNM5w/s200/VoxelGI_VideoShot4.png" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZumyWU1Rpmry7UU89bLnMuss4JkbzTWK1UlAc02h1rFOge7r5sFQ1vW_gdBjGdXgFztvLC5qjZ5-O7qG1oPl7veBo3VwtiwlxTmAe8OgGHeNN9UThBWwWBzVNbdpeYCwFDqVulUHw4s/s1600/VoxelGI_VideoShot3.png" imageanchor="1" style="float: left; margin-bottom: 0em; margin-right: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZumyWU1Rpmry7UU89bLnMuss4JkbzTWK1UlAc02h1rFOge7r5sFQ1vW_gdBjGdXgFztvLC5qjZ5-O7qG1oPl7veBo3VwtiwlxTmAe8OgGHeNN9UThBWwWBzVNbdpeYCwFDqVulUHw4s/s200/VoxelGI_VideoShot3.png" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOzqI7g5SDX6s_9xxJ74An36QzGYv7Yqvb4HT2B6jSbTW19su4UT-XJC9LZ7wtcVPdt9qi5vhs8nzylq2dk4OcE156RdJ5Nx09y_SYrwI6hMs-NdXHBoN0RmYol1URGbqc6lhrFvTjE00/s1600/VoxelGI_VideoShot1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOzqI7g5SDX6s_9xxJ74An36QzGYv7Yqvb4HT2B6jSbTW19su4UT-XJC9LZ7wtcVPdt9qi5vhs8nzylq2dk4OcE156RdJ5Nx09y_SYrwI6hMs-NdXHBoN0RmYol1URGbqc6lhrFvTjE00/s320/VoxelGI_VideoShot1.png" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTAugO8qw5WSpziIOytEnfTKpPdslDlkkx-VAVieZKXe0wQ5vBGwhuk7kazlg_KuO61TN0xtJ8qPk-Y4gZiXr0KQj5LCt7ooe7mf8ZCZBF_ivYtLuNuBQT-zrT0lErAYpvudgzHvmxqY/s1600/CNSGE11_04.jpg" imageanchor="1" style="margin-left: 0em; margin-right: 0em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYTAugO8qw5WSpziIOytEnfTKpPdslDlkkx-VAVieZKXe0wQ5vBGwhuk7kazlg_KuO61TN0xtJ8qPk-Y4gZiXr0KQj5LCt7ooe7mf8ZCZBF_ivYtLuNuBQT-zrT0lErAYpvudgzHvmxqY/s320/CNSGE11_04.jpg" /></a><br />
<br />
<br />
<span style="font-size: large;"><b>Ambient occlusion:</b></span><br />
High quality video: <a href="http://artis.imag.fr/Membres/Cyril.Crassin/GIVoxels/Siggraph11_AO1.mov">http://artis.imag.fr/Membres/Cyril.Crassin/GIVoxels/Siggraph11_AO1.mov</a><br />
<iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/QNQtwzVGmsM" width="480"></iframe><br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCbSJPLGBwMZZgFm4ixeuM7XPGZUEJCIgLfhR_AF6_X0rOcZIjJTU2_RMqsAP7eg3kcUqVUK9hnwWf4xnA-eGY6Qr_8RQK5YiK4hIXrjNYsoVHRKSNMg83ZwBGtBnrZbV51_-uTcWI3F8/s1600/vlc+2011-06-07+16-09-53-95.png" imageanchor="1" style="float: left; margin-bottom: 0em; margin-left: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCbSJPLGBwMZZgFm4ixeuM7XPGZUEJCIgLfhR_AF6_X0rOcZIjJTU2_RMqsAP7eg3kcUqVUK9hnwWf4xnA-eGY6Qr_8RQK5YiK4hIXrjNYsoVHRKSNMg83ZwBGtBnrZbV51_-uTcWI3F8/s320/vlc+2011-06-07+16-09-53-95.png" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVWbMZOfyvSsG5hhFXXKsqv5VolYkBkVqd3mZJZmqVNXktLWyYBokhjoULX1uv-JnFewGMDYKLJYVUbVdYfNXFpuZ3fAennKOkB000qQg7dXmJYCorNRsliJ_FBuKmwf3niBUilL7eEM/s1600/VoxelGI_VideoShot12.png" imageanchor="1" style="float: left; margin-bottom: 0em; margin-right: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVWbMZOfyvSsG5hhFXXKsqv5VolYkBkVqd3mZJZmqVNXktLWyYBokhjoULX1uv-JnFewGMDYKLJYVUbVdYfNXFpuZ3fAennKOkB000qQg7dXmJYCorNRsliJ_FBuKmwf3niBUilL7eEM/s320/VoxelGI_VideoShot12.png" /></a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdhCqe6mreo9vaqEC_z-9UElphX7RYip54AWQpN9fWpGKR2_cLEf-2YSSUtK3onlnPZ63cIT3xZyW94qXtrw7sMRxdQiqyfoMAX1vWQi1t9ePlEwutmomLxzAB4IG5oYATGSoalxx_CYo/s1600/VoxelGI_VideoShot11.png" imageanchor="1" style="float: left; margin-left: 0em; margin-right: 0em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdhCqe6mreo9vaqEC_z-9UElphX7RYip54AWQpN9fWpGKR2_cLEf-2YSSUtK3onlnPZ63cIT3xZyW94qXtrw7sMRxdQiqyfoMAX1vWQi1t9ePlEwutmomLxzAB4IG5oYATGSoalxx_CYo/s320/VoxelGI_VideoShot11.png" style="cursor: move;" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4tOh0JnMdviBXK3g0BYfigVYbFANC-Wls85T9ibbbv4PNpltiW4QJxYmiA1Jf4OPzxmbk7VfUxvDkFfEE-sFyM3zgLqmedczb3hw1GDHc1_XVGVLJ7O0GnbcdjWAEATg4PLHFsY79aJo/s1600/CNSGE11_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4tOh0JnMdviBXK3g0BYfigVYbFANC-Wls85T9ibbbv4PNpltiW4QJxYmiA1Jf4OPzxmbk7VfUxvDkFfEE-sFyM3zgLqmedczb3hw1GDHc1_XVGVLJ7O0GnbcdjWAEATg4PLHFsY79aJo/s320/CNSGE11_05.jpg" width="320" /></a></div>
Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com25tag:blogger.com,1999:blog-7773532993303488759.post-73669863320867164592011-04-05T05:37:00.001+02:002011-04-05T05:38:47.787+02:00The vicious circle of generalization @AltDevBlogADay<span style="font-size: small;">Full story <a href="http://altdevblogaday.org/2011/04/01/vicious-circle-of-generalization/">here</a> :-D</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWf61j3gwvUDUcx0pdttAEtB34ERHSZImgD_RpiPmDFiEojx_K93TUWYT3-85kyv5BVITCWhUrBLl7fvIWG-N44BEZm9LJTDdsn0_y_05yw95WmDjc8UM_XAVZdY56UA8FPyMlbezSLo/s1600/ViciousCircleOfGeneralization.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWf61j3gwvUDUcx0pdttAEtB34ERHSZImgD_RpiPmDFiEojx_K93TUWYT3-85kyv5BVITCWhUrBLl7fvIWG-N44BEZm9LJTDdsn0_y_05yw95WmDjc8UM_XAVZdY56UA8FPyMlbezSLo/s400/ViciousCircleOfGeneralization.png" width="400" /></a></div><br />
<br />
This can be described as vicious circle of generalization:<br />
<ol><li>We want the code to be as generalized as possible.</li>
<li>We design everything future-proof and extendible.</li>
<li>When a feature request arrives, <span style="text-decoration: line-through;">we’re doomed</span> we need to change a lot of code.</li>
<li>Why?</li>
<li>Because everything was designed as generalized as possible.</li>
<li><tt>goto 1; </tt></li>
</ol>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-3648353728034838292011-03-10T13:02:00.004+01:002011-03-21T08:31:18.931+01:00GDC 2011 Technical PresentationsGDC 2011 is over now and presentations start to appear on-line :-)<br />
<br />
DICE: <a href="http://publications.dice.se/">http://publications.dice.se/</a><br />
NVIDIA: <a href="http://www.nvidia.com/object/gdc2011.html">http://www.nvidia.com/object/gdc2011.html</a><br />
AMD: <a href="http://developer.amd.com/documentation/presentations/Pages/default.aspx#GDC">http://developer.amd.com/documentation/presentations/Pages/default.aspx#GDC</a> <br />
INTEL: <a href="http://software.intel.com/en-us/articles/intelgdc2011/">http://software.intel.com/en-us/articles/intelgdc2011/</a><br />
Khronos on OpenGL: <a href="http://www.khronos.org/library/detail/2011-gdc-opengl">http://www.khronos.org/library/detail/2011-gdc-opengl</a><br />
<br />
More links can be found on this blog: <a href="http://msinilo.pl/blog/?p=724">http://msinilo.pl/blog/?p=724 </a>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com3tag:blogger.com,1999:blog-7773532993303488759.post-2831203699124544432011-03-10T12:53:00.001+01:002011-03-10T12:55:53.830+01:00Season of next-gen game enginesThis is the season of the new game engines : Dice Frostbite 2, Crytek CryEngine 3 and Epic Unreal Engine 3 !<br />
<br />
<iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/uA378g_gD1I" frameborder="0" allowfullscreen></iframe><br />
<br />
<iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/dtlqujRQiXg" frameborder="0" allowfullscreen></iframe><br />
<br />
<iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/XgS67BwPfFY" frameborder="0" allowfullscreen></iframe>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-50449182888499763162011-03-04T12:33:00.003+01:002011-03-04T12:42:21.837+01:00CUDA 4.0 RC Released to Registered DevelopersHere it is, CUDA 4.0 RC just got released to NVIDIA Registered developers.<br />
<br />
<b>Interesting stuff from the CUDA manual:</b><br />
<ul><li>Layered Textures Support (GL_TEXTURE_1D/2D_ARRAY) : New <span style="font-family: "Courier New",Courier,monospace;">tex.a1d/.a2d</span> modifiers in PTX. But unfortunately the surface instruction do not support them yet, Grrrr<br />
Layered textures are created using <span style="font-family: "Courier New",Courier,monospace;">cudaMalloc3DArray()</span> with the <span style="font-family: "Courier New",Courier,monospace;">cudaArrayLayered</span> flag. New <span style="font-family: "Courier New",Courier,monospace;">cudaTextureType2DLayered/ cudaTextureType2DLayered</span> texture sampler types and <span style="font-family: "Courier New",Courier,monospace;">tex1DLayered()/tex2DLayered()</span> access intrinsics.</li>
</ul><ul><li>New .address_size PTX specifier : Allows to specify the address size (32b/64b) used throughout a PTX module.</li>
<li>Inline PTX assembly: This feature was already present since CUDA 2.x but was not officially supported. It's now fully supported and documented :-D</li>
<li>Driver API, new thread-safe stateless launch API function <span style="font-family: "Courier New",Courier,monospace;">cuLaunchKernel()</span>: <span style="font-family: "Courier New",Courier,monospace;">cuLaunchKernel(kernelObj, blocksPerGrid, 1, 1, threadsPerBlock, 1, 1, 0, 0, args, 0); </span></li>
<li>FERMI ISA documented and supported by <i>cuobjdump</i>.</li>
<li>Enhanced C++: Support for operators <span style="font-family: "Courier New",Courier,monospace;">new</span> and <span style="font-family: "Courier New",Courier,monospace;">delete</span>, virtual functions.</li>
</ul>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-37177299594896026732011-02-28T17:05:00.007+01:002011-03-04T10:57:22.294+01:00CUDA 4.0 announced @GDC 2011<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4_552NpDT0l96is3WAdo67jHwSMW0UJ2DokHgvbjWGG4IosL-MNxzHDoJuYc8uK85YsNr4t_QLqe1Vjcb11O7jsSvorbL_o0_mmfkUD4LVi3JQCYyYAFwmzswEMLJzDNnUY4kfbrf9vk/s1600/CUDA4Highlights.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4_552NpDT0l96is3WAdo67jHwSMW0UJ2DokHgvbjWGG4IosL-MNxzHDoJuYc8uK85YsNr4t_QLqe1Vjcb11O7jsSvorbL_o0_mmfkUD4LVi3JQCYyYAFwmzswEMLJzDNnUY4kfbrf9vk/s200/CUDA4Highlights.png" width="200" /></a></div><div style="text-align: justify;">Today NVIDIA announced CUDA 4.0 at the GDC. It will be available to registered developers on March 4<sup>th</sup> :-D</div><div style="text-align: justify;">Among interesting novelties, there is the support for layered textures (GL_TEXTURE_2D_ARRAY) that I hope will also be supported for surface access !<br />
There is also the support for direct peer-to-peer communication between GPUs and mappping multiple GPUs (and potentially other third party devices like network/infiniband) memory into the same address space in order to provide direct memory access (Unified Virtual Addressing, UVA). Virtual functions should also now be supported, along with the New and Delete functions for dynamic memory allocations from kernels.</div><div style="text-align: justify;">Looking forward to test all of this !</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">More info : <a href="http://www.anandtech.com/show/4198/nvidia-announces-cuda-40">Anandtech</a>, <a href="http://pressroom.nvidia.com/easyir/customrel.do?easyirid=A0D622CE9F579F09&version=live&prid=726171&releasejsp=release_157&xhtml=true">NVIDIA pressroom</a>, <a href="http://www.ddj.com/high-performance-computing/229219474">Dr Dobbs</a> <a href="http://gpgpu.org/2011/03/01/cuda-4-0-release">GPGPU.org</a><br />
<br />
<b>Update: CUDA 4.0 RC released to registered developers</b><br />
Slides are available there: <a href="http://bit.ly/cuda4features">http://bit.ly/cuda4features</a><br />
Among the interesting novelties I did not see before, it seems inline PTX will be officially supported with this release ! Also the dissasembler (cuobjdump) that were previously limited to Tesla ISA now support Fermi ISA disassembly. Take a look as the manual for the list of supported instructions.<br />
<br />
</div>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-51327371783772210992011-02-19T20:48:00.000+01:002011-02-19T20:48:30.698+01:00Writing a PhD thesis using FreeMind and LateX : My FreeMind Latex import plug-in<div style="text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKDoeOkCaEdz-oQ73V9A7MiFbphaGXZS55N45mRmOHHe_Kcva4AtiIf4Ttw-ejyuWA9YkGVbwd-btzIwB_biDSjvi4KNzZImfJFpk2gKyrureDKvHD_E-vfadB8mSlSs73b06-y26h6e8/s1600/Freemind_logo_by_dyvim.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKDoeOkCaEdz-oQ73V9A7MiFbphaGXZS55N45mRmOHHe_Kcva4AtiIf4Ttw-ejyuWA9YkGVbwd-btzIwB_biDSjvi4KNzZImfJFpk2gKyrureDKvHD_E-vfadB8mSlSs73b06-y26h6e8/s200/Freemind_logo_by_dyvim.png" width="177" /></a>I am currently in the process of writing my PhD thesis, and I discovered that relying on a mind mapping software can in fact revealed very useful especially at the beginning of the process. Indeed, I found mind mapping softwares like <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page">FreeMind</a> very useful tools to graphically organize ideas into a hierarchy and that allows you to quickly and very efficiently construct and update the outline of your thesis. </div><div style="text-align: justify;">It is actually easy to export a mindmap from FreeMind into a hierarchy of latex sections, in order to directly get your document structure ready to fill. </div><div style="text-align: justify;">I am actually using <a href="http://www.icare3d.org/Blogger/Files/mm2latexr_richcontent_v3.00.xsl">this XSLT definition</a> to do so.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">The only problem when working like this is that once you have exported your document structure from Freemind into latex, you have made modifications and written some sections into your latex, there is no way to import it back to FreeMind in order to reorganize your document.</div><br />
<div style="text-align: justify;">To allow this usage, I wrote a small groovy script for FreeMind that read a latex file and build the tree hierarchy out of it. It also imports the content of the sections into the text attribute of the nodes, and this content gets correctly exported by the latex export XSLT.</div><div style="text-align: justify;">My Groovy script: <a href="http://www.icare3d.org/Blogger/Files/FreeMindLatexImportScript.groovy">FreeMindLatexImportScript.groovy</a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">This script must put into the <b>FreeMind/plugins/script</b> directory, and the following section must be added to the <b>FreeMind/plugins/ScriptingEngine.xml</b> file in order to get the script visible into the Tools menu: </div><script class="brush: xml" type="syntaxhighlighter">
<![CDATA[
<plugin_action
name="LatexImporter"
documentation="Freemind Latex import groovy script."
label="plugins/GroovyScript1"
key_stroke="control shift L"
base="freemind.extensions.ModeControllerHookAdapter"
class_name="plugins.script.ScriptingEngine">
<plugin_mode class_name="freemind.modes.mindmapmode"/>
<plugin_menu location="menu_bar/extras/first/scripting/latexImport"/>
<plugin_property name="ScriptLocation" value="C:/Program Files/FreeMind/plugins/script/FreeMindLatexImportScript.groovy" />
</plugin_action>
]]>
</script><br />
<div style="text-align: justify;">Of course, this code is provided with no warranty, but it should work well :-) </div><div style="text-align: justify;">Have fun !</div><div style="text-align: justify;"><br />
</div>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com11tag:blogger.com,1999:blog-7773532993303488759.post-73392311867761695032011-02-18T20:22:00.000+01:002011-02-18T20:22:44.085+01:00#AltDevBlogADayToday, I would like to invite you to follow an awesome new participating game development blog called <a href="http://altdevblogaday.org/">#AltDevBlogADay</a>. This blog has been founded in January by Mike Acton who is <i>engine director</i> at Insomniac Games, and group together many very good game developers who publish one article each day on the website.<br />
<br />
Here is a short list of the article I particularly liked and I advice you to take a look at, among those already published:<br />
<ul><li><a href="http://altdevblogaday.org/2011/01/17/aliasing-the-silent-killer/">Aliasing, the silent killer</a> </li>
<li><a href="http://altdevblogaday.org/2011/01/18/forward-vs-deferred-rendering-whywhen-forward-rendering-still-matters/">Forward vs. Deferred Rendering: why/when forward rendering still matters</a></li>
<li><a href="http://altdevblogaday.org/2011/01/18/think-low-level-write-high-level/">Think low level, write high level</a></li>
<li><a href="http://altdevblogaday.org/2011/01/19/preparing-for-parallelism/">Preparing for Parallelism</a></li>
<li><a href="http://altdevblogaday.org/2011/01/22/intuition-for-gamma-correct-rendering/">Intuition for Gamma Correct Rendering</a></li>
<li><a href="http://altdevblogaday.org/2011/01/22/link-time-sorting/">Link time sorting</a></li>
<li><a href="http://altdevblogaday.org/2011/01/24/research-tastes-better-when-served-with-source/">Research tastes better when served with source</a></li>
<li><a href="http://altdevblogaday.org/2011/01/26/managing-decoupling/">Managing Decoupling</a></li>
<li><a href="http://altdevblogaday.org/2011/01/28/radix-sort-for-humans/">Radix Sort for Humans</a></li>
<li><a href="http://altdevblogaday.org/2011/01/28/non-virtual-interfaces/">Non Virtual Interfaces</a></li>
<li><a href="http://altdevblogaday.org/2011/01/31/vectiquette/">Vectiquette</a></li>
<li><a href="http://altdevblogaday.org/2011/02/01/the-virtual-and-no-virtual/">The Virtual and No-Virtual</a></li>
<li><a href="http://altdevblogaday.org/2011/02/03/refactoring-for-task-concurrency/">Refactoring for Task Concurrency</a></li>
<li><a href="http://altdevblogaday.org/2011/02/07/performance-metaprogramming/">Performance metaprogramming</a></li>
<li><a href="http://altdevblogaday.org/2011/02/09/the-rendering-equation-a-pictorial-introduction/">The Rendering Equation - A Pictorial Introduction</a></li>
<li><a href="http://altdevblogaday.org/2011/02/11/managing-coupling-part-2-%e2%80%94-polling-callbacks-and-events/">Managing Coupling Part 2 — Polling, Callbacks and Events</a></li>
<li><a href="http://altdevblogaday.org/2011/02/12/alternatives-to-malloc-and-new/">Alternatives to malloc and new</a></li>
<li><a href="http://altdevblogaday.org/2011/02/15/data-structures-one-size-does-not-fit-all/">Data Structures: One size does not fit all</a></li>
</ul>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-5578396295742925472011-01-18T18:30:00.001+01:002011-01-18T18:31:00.068+01:00January pop stack post !<div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8PhyTf4DaRGlF1QqIHV1F6T1LPh1K0Kk_dJ6KIy2ZJ0TpxaaibhOwdn0m3Nmj1hyGTLob_RPBl25q8O2q2NSczquEgjyUDjmXGxKMO9Z0t4Z25zhd3iBu31gq-KUyZuzRegOQQvIedGY/s1600/Denver1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8PhyTf4DaRGlF1QqIHV1F6T1LPh1K0Kk_dJ6KIy2ZJ0TpxaaibhOwdn0m3Nmj1hyGTLob_RPBl25q8O2q2NSczquEgjyUDjmXGxKMO9Z0t4Z25zhd3iBu31gq-KUyZuzRegOQQvIedGY/s320/Denver1.png" width="213" /></a></div>I have not been posting here for a while and I am sorry about this. I have been quite busy lately with a paper submission and also the writing of my PhD thesis ! Anyway, I wish everybody an happy new year :-) </div>There is a couple of links I stacked lately and I would like to share, so here they are !<br />
<br />
<ul><li style="text-align: justify;"><a href="http://blogs.nvidia.com/2011/01/project-denver-processor-to-usher-in-new-era-of-computing/">NVIDIA Announced Project Denver</a> : A fully integrated CPU+GPU chip dedicated to high-performance computing and based on ARM cores. It is designed to power future products ranging from personal computers to servers and supercomputers. It looks like NVIDIA's answer to AMD Fusion and is also clearly a "we don't believe in the future of x86 architectures" launched to the industry. I really believe this is the right approach to bring high performance CPUs to all market segments. Thanks to the rise of mobile and tablet like devices, we may finally see the end of <span class="clickable">the hegemony of the x86 architecture.</span> I really hope that it will not be the last dinosaur from NVIDIA ;-) </li>
<li style="text-align: justify;"><a href="http://www.realtimerendering.com/blog/gdebugger-is-now-free/">gDebugger is now free</a> !</li>
<li style="text-align: justify;"> <a href="http://www.realtimerendering.com/blog/principles-of-digital-image-synthesis-now-free-for-download/">“Principles of Digital Image Synthesis” book is now free for download</a>. And a nicely formated PDF can be found <a href="https://docs.google.com/leaf?id=0B6YI2wFNYg_QYmZmNjcwNTktNTBlMi00NTllLTk5ODgtYzA4YjNjODNmMDRl&hl=en&pli=1">here</a>. </li>
<li style="text-align: justify;"><a href="http://www.asawicki.info/news_1422_data-oriented_design_-_links_and_thoughts.html">Data-Oriented Design - Links and Thoughts</a> : The concept of Data-Oriented Design (DOD) as opposed to Object Oriented Programming (OOP) is a concept that is emerging and gaining popularity among the game developers community lately. The idea is that instead of building performance sensitive parts of applications around classes that represent individual objects with ineficient -non-cache coherent- memory access patterns, it is more efficient to build them by thinking in terms of data flows and memory access patterns. That's a concept that may not be unfamiliar to GPU developers :-D</li>
<li style="text-align: justify;"><a href="http://vfxsolution.com/allanmckay/2010/10/overtime-vs-productivity/">Overtime vs Productivity</a> : Two very interesting blog posts by Allan Mckay that discuss on how people work, why we often get burned out and how to avoid this.</li>
<li style="text-align: justify;"><a href="https://github.com/pathscale/pscnv/wiki/_pages">A lot of very interesting technical documentations</a> about NVIDIA GPUs and coming from reverse engineering of various hardware can be found on pscnv Git repository. Pscnv is a fork of the nouveau project, an open source driver for NVIDIA GPUs.</li>
</ul>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com1tag:blogger.com,1999:blog-7773532993303488759.post-18558389675675315962010-11-24T09:45:00.001+01:002010-11-26T17:46:42.576+01:00"How the GPU works" @c0de517eI rediscovered a very good in-depth explanation on how GPU works published in 2008 on c0de517e blog:<br />
<a href="http://c0de517e.blogspot.com/2008/04/gpu-part-1.html">Part 1</a> <a href="http://c0de517e.blogspot.com/2008/04/how-gpu-works-part-2.html">Part 2</a> <a href="http://c0de517e.blogspot.com/2008/04/how-gpu-works-part-3.html">Part 3</a>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-54959866379948113712010-11-23T18:26:00.001+01:002010-11-23T18:43:40.148+01:00CUDA "Better Performance at Lower Occupancy" @GTC2010A friend point me this very interesting talk at NVIDIA GTC:<br />
<a href="http://www.cs.berkeley.edu/%7Evolkov/volkov10-GTC.pdf">Better Performance at Lower Occupancy </a><br />
<br />
They deny two common fallacies that CUDA developer usually believe in:<br />
<ul><li>Multithreading is the only way to hide latency on GPU</li>
<li>Shared memory is as fast as registers</li>
</ul><br />
All the GTC2010 presentations can be found there (with slides and videos !):<br />
<a href="http://www.nvidia.com/object/gtc2010-presentation-archive.html">http://www.nvidia.com/object/gtc2010-presentation-archive.html</a>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-89163246779611340782010-11-19T16:13:00.002+01:002010-11-20T13:47:53.006+01:00Old Real-Time GPU Raytracer<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJMG6l9nbS6r75JplksRmNZ4ISVrDmXUsRJqOc8HI5dEayOE56l3wRaPZQe5QT76v2pqkp8iQaIUWCby3mbCRFV29bro5Bqv5KYs9qgM2UpvONCFze5SApxoRVBJKPBr_rTvOxBwDK6D0/s1600/CornellJungle2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJMG6l9nbS6r75JplksRmNZ4ISVrDmXUsRJqOc8HI5dEayOE56l3wRaPZQe5QT76v2pqkp8iQaIUWCby3mbCRFV29bro5Bqv5KYs9qgM2UpvONCFze5SApxoRVBJKPBr_rTvOxBwDK6D0/s200/CornellJungle2.jpg" width="200" /></a></div><div style="text-align: justify;">I just translated from French to English an old page on my website about a real-time GPU raytracer I developed for fun 4 years ago, during my Master Thesis. It is old school GPGPU in OpenGL and Cg that can run on an NV40 (GeForce 6800). No need for CUDA or a GF110 to do GPU raytracing ! ;-)</div><div style="text-align: justify;">The application also features a slow and unoptimized CPU raytracer.<br />
<br />
</div>See there: <a href="http://www.icare3d.org/myprojects/opengl_projects/raytracer_gpu_full_1.0.html">http://www.icare3d.org/myprojects/opengl_projects/raytracer_gpu_full_1.0.html</a><br />
<br />
PS: It is funny to see what was possible at this time, but it was developed quickly and the shader code itself is not a reference !Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com0tag:blogger.com,1999:blog-7773532993303488759.post-35212528261736178612010-11-18T18:16:00.000+01:002010-11-18T18:16:16.406+01:00Fluid Simulation for Video Games @INTEL<div style="text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir2bxa58IYp2gghUQ2n37bohBOdkSXW5z9OtjWfVwP6CrYeJ0vGzOPpBbnxP684P6cDwf9YY1bgDFVw2SfpAOKh5i4ZcSleBwO0nBOU4wz-h1A78cDnRtqYFz8XjFAzn5uwvJ47MntSiU/s1600/fluid-6-figure-1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="97" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir2bxa58IYp2gghUQ2n37bohBOdkSXW5z9OtjWfVwP6CrYeJ0vGzOPpBbnxP684P6cDwf9YY1bgDFVw2SfpAOKh5i4ZcSleBwO0nBOU4wz-h1A78cDnRtqYFz8XjFAzn5uwvJ47MntSiU/s200/fluid-6-figure-1.jpg" width="200" /></a>There is a very interesting series of article about fluid simulations for video games written by <i>Michael J. Gourlay</i> on intel developer website. Source code is also provided.</div>Parts: <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1/">1</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-2/">2</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-3/">3</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-4/">4</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-5/">5</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-6/">6</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-7/">7</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-8/">8</a>Cyril Crassinhttp://www.blogger.com/profile/16474299434636795969noreply@blogger.com1