Cg Language - NVIDIA Developer Zone
Cg Language - NVIDIA Developer Zone Cg Language - NVIDIA Developer Zone
Shading at NVIDIA Kurt Akeley Graphics Architect NVIDIA Corporation
- Page 2 and 3: Outline • Languages •Workflow
- Page 4 and 5: Low-Level Languages • DX8 and DX9
- Page 6 and 7: Cg Language • Graphics APIs -Open
- Page 8 and 9: Recommendations • Direct3D -Use H
- Page 10 and 11: Separate Worlds • DirectX - HLSL
- Page 12 and 13: CgFX - Shader Metafiles • Powerfu
- Page 14 and 15: Cg Integration in DCC Rendering Pip
- Page 16 and 17: Cg Browser •Huge shader and effec
- Page 18 and 19: Cg Game Workflow •CgFX-based •
- Page 20 and 21: OpenGL Pbuffers • Use WGL_ARB_pbu
- Page 22 and 23: OpenGL Render to Texture • WGL_AR
- Page 24 and 25: Direct3D tips • Batch, batch, bat
- Page 26 and 27: OpenGL 1.5 and Glslang • NVIDIA s
- Page 28 and 29: Cg Language Additions •Interfaces
- Page 30: Cg Integration in DCC Rendering Pip
Shading at <strong>NVIDIA</strong><br />
Kurt Akeley<br />
Graphics Architect<br />
<strong>NVIDIA</strong> Corporation
Outline<br />
• <strong>Language</strong>s<br />
•Workflow<br />
• Programming Tips<br />
• Coming Soon<br />
•Demo
<strong>Language</strong>s
Low-Level <strong>Language</strong>s<br />
• DX8 and DX9<br />
•OpenGL ARB<br />
–ARB_vertex_program<br />
– ARB_fragment_program<br />
•<strong>NVIDIA</strong> OpenGL<br />
– NV_vertex_program<br />
–NV_fragment_program<br />
• Powerful, but difficult to use
HLSL<br />
• Direct3D only<br />
• Windows only<br />
• Strong support from GPU vendors<br />
• Full <strong>NVIDIA</strong> support
<strong>Cg</strong> <strong>Language</strong><br />
• Graphics APIs<br />
–OpenGL<br />
–Java<br />
•Operating Systems<br />
–Linux<br />
–Mac OS X<br />
–Windows<br />
• Essentially all GPUs<br />
• Full <strong>NVIDIA</strong> support
OpenGL Shading <strong>Language</strong><br />
• OpenGL specific<br />
• Broad OS support expected<br />
– Should follow OpenGL<br />
• Broad GPU support expected<br />
• Full <strong>NVIDIA</strong> support
Recommendations<br />
• Direct3D<br />
–Use HLSL<br />
•OpenGL<br />
– <strong>Cg</strong> is usually the best answer<br />
• ARB profiles for compatibility<br />
• NV profiles for best <strong>NVIDIA</strong> performance<br />
– Use low-level when<br />
• Existing code (mix and match with <strong>Cg</strong>)<br />
• Hand tuning <strong>Cg</strong> output<br />
• Coding certain demanding algorithms
Workflow
Separate Worlds<br />
• DirectX – HLSL shading environment<br />
– HLSL language<br />
– FX metafile format<br />
– Industry-wide support coming<br />
• OpenGL – <strong>Cg</strong> shading environment<br />
– <strong>Cg</strong> <strong>Language</strong><br />
– <strong>Cg</strong>FX metafile format<br />
– Industry-wide support now
<strong>Cg</strong> Shading Environment<br />
• <strong>Cg</strong>FX shader metafiles<br />
• <strong>Cg</strong> enabled applications<br />
• <strong>Cg</strong> development tools<br />
• Documentation
<strong>Cg</strong>FX - Shader Metafiles<br />
• Powerful shader interchange format<br />
• Implements an effect with multiple<br />
– <strong>Cg</strong> shaders (or low-level shaders)<br />
–Techniques<br />
– Global parameters<br />
• Separate techniques for<br />
– Different LODs / qualities<br />
– GPUs with different functionality<br />
• Techniques include<br />
– Render state and texture state specification<br />
– Pointer to the desired shader<br />
– One or more rendering passes
<strong>Cg</strong>-Enabled Applications<br />
• discreet 3ds max<br />
5/5.1<br />
• Alias Maya 4.5/ 5.0<br />
• SOFTIMAGE|XSI 3.0<br />
• SolidWorks<br />
• Dassault CATIA<br />
• Digital Immersion<br />
• Mental Images<br />
• LightWork Design<br />
• Others TBA<br />
SolidWorks 2004 using <strong>Cg</strong>FX
<strong>Cg</strong> Integration in<br />
DCC Rendering<br />
Pipelines<br />
Direct <strong>Cg</strong><br />
Code Editing<br />
and<br />
Compilation<br />
Images courtesy Alias|Wavefront,<br />
discreet, and Softimage|XSI
<strong>Cg</strong>FX Viewer<br />
• Parameters editor<br />
• Error reporting<br />
• Available at<br />
developer.nvidia.com<br />
• Source code provided
<strong>Cg</strong> Browser<br />
•Huge shader<br />
and effect<br />
repository<br />
• Auto-updating<br />
keeps NVSDK<br />
in sync<br />
•Copy& paste<br />
source from<br />
hundreds of<br />
effects
<strong>Cg</strong> Documentation<br />
• <strong>Cg</strong> Toolkit Users Manual<br />
– English and Japanese<br />
editions<br />
• <strong>Cg</strong> <strong>Language</strong> Spec<br />
• The <strong>Cg</strong> Tutorial book
<strong>Cg</strong> Game Workflow<br />
•<strong>Cg</strong>FX-based<br />
• Bidirectional<br />
• Runtime /<br />
hardwired<br />
Java OpenGL ®<br />
Windows<br />
Linux<br />
Mac OS X
Programming Tips
OpenGL Pbuffers<br />
• Use WGL_ARB_pbuffer<br />
– For floating point color buffers<br />
– For off screen rendering<br />
– To optimize render to texture
OpenGL Render to Texture<br />
• glCopyTexImage2D limitations<br />
– Data really are copied<br />
– 2x storage is required<br />
Unpack<br />
Pixels<br />
Pixel<br />
Ops<br />
Image<br />
Rasterize<br />
Image<br />
Pack<br />
Pixels<br />
Texture<br />
Memory<br />
Fragment<br />
Ops<br />
Geometry<br />
Unpack<br />
Vertexes<br />
Vertex<br />
Ops<br />
Point, Line,<br />
Polygon<br />
Rasterize<br />
Framebuffer
OpenGL Render to Texture<br />
• WGL_ARB_render_texture<br />
– Use to create special pbuffers<br />
• NV_texture_rectangle<br />
– Best <strong>NVIDIA</strong> texture target for pbuffers<br />
Geometry<br />
Unpack<br />
Vertexes<br />
Vertex<br />
Ops<br />
Point, Line,<br />
Polygon<br />
Rasterize<br />
Fragment<br />
Operations<br />
Pbuffer<br />
Pbuffer
OpenGL Vertex Data<br />
• NV_vertex_array_range depreciated<br />
• Use ARB_vertex_buffer_object<br />
Application<br />
ARRAY_BUFFER_ARB<br />
GL Client<br />
size<br />
size<br />
type size<br />
type size<br />
stride type<br />
stride type<br />
pointer stride<br />
pointer stride<br />
pointer<br />
buffer pointer<br />
buffer<br />
buffer<br />
buffer<br />
Byte<br />
Memory<br />
+ State<br />
Buffer Objects<br />
GL Server
Direct3D tips<br />
• Batch, batch, batch ...<br />
• Render front-to-back
Coming Soon
OpenGL 1.5 and Glslang<br />
• <strong>NVIDIA</strong> supports<br />
– All OpenGL revisions<br />
– All ARB extensions<br />
• <strong>NVIDIA</strong> is actively implementing<br />
–OpenGL 1.5<br />
– OpenGL Shading <strong>Language</strong> compiler<br />
– ARB_shading_objects<br />
– ARB_vertex_shader<br />
– ARB_fragment_shader
Superbuffers<br />
• Coming OpenGL extension<br />
• Replacement for pbuffers<br />
•Expect<br />
– Easier usage model<br />
– Many new capabilities
<strong>Cg</strong> <strong>Language</strong> Additions<br />
•Interfaces<br />
– E.g. separate surfaces and lights<br />
– More info in the <strong>Cg</strong> paper presentation<br />
• Unsized arrays<br />
• OpenGL Shading <strong>Language</strong> profile<br />
– Improve cross-platform support<br />
– Virtualize <strong>Cg</strong>
Demo<br />
Kevin Bjorke<br />
<strong>NVIDIA</strong> <strong>Developer</strong> Relations
<strong>Cg</strong> Integration in<br />
DCC Rendering<br />
Pipelines<br />
Direct <strong>Cg</strong><br />
Code Editing<br />
and<br />
Compilation<br />
Images courtesy Alias|Wavefront,<br />
discreet, and Softimage|XSI