Procedural Shading Assignment
Total Page:16
File Type:pdf, Size:1020Kb
Assignment #3 • Which is something you may wish to do since it is Assignment #3 So You Want to Write some Procedural Shaders • In fact… Assignment #3 Assignments • Goal is to be able to produce something nicer than • Some advice: this: – Choose either #1 (Ray tracing) or #2 (radioisity) – #3 will be real time shading… • Challenge will be getting environment set up – #4 – Tone Reproduction • Modification of #1 or #2 • In fact – If you choose to do assignments 1 & 2, you need not do any other. • so…pleasant dreams! Assignment #3 Assignment #3 • Experimentation with procedural shaders • 1. Download: • Three goals: – Cg – Real time shading language (Nvidia) – Download and install a procedural shading • Support for DirectX 8, 9 and OpenGL1.4 system. • Supposedly graphics card independent • Download: – Learn the logistics of assigning a shader to an – http://developer.nvidia.com object – Programming environment for Windows only using Visual – Create/use 3 simple shaders Studio. 1 Assignment #3 Assignment #3 • 1. Download • If you do not have Visual Studio or if your – RenderMonkey graphics card is not up to par. • For ATI Cards – Renderman shaders • DirectX 8.1+ Support only • Blue Moon Rendering Tools – no longer distributed • http://www.ati.com/developer/sdk/radeonSDK/html/Tools/RenderMonkey.html but… – I can get last version for Windows and Linux/Intel • Aqsis – Open Source Renderman renderer – Win32 and MacOS X – http://www.aqsis.com Assignment #3 Assignment #3 • 2. Attach shaders to objects • 3. Create / use simple shaders – Run the tutorial supplied with the system. – Three required: – For Cg users • Phong • http://graphics3d.com/guides/cg/index.html • Brick Shader – For Renderman users • Grab-bag (one of your choice) • BMRT docs • Renderman for Poets: – http://www.cs.utexas.edu/users/amenta/eog/poets.pdf Assignment #3 Assignment #3 • Image Deliverable • A note on “borrowing” shaders Your – Shaders are like Makefiles choice • Best to take one that works and modify – Not only allow but encourage use of others shaders phong • cgshaders.org • Renderman repository – http://www.renderman.org/RMR/RMRShaders.html brick 2 Assignment #3 Assignment #3 • A note on “borrowing” shaders • Deliverables – This laptop has a Gforce 4 graphics card. – If you do use other’s shaders, you must –If Cg • Attribute the source • Shader code • Allow or show results of changing shader • Executable arguments. • Instructions on using – If non-Cg • Shader code • Multiple Screen dumps w/varying shader arguments or • Personal demo on your own PC – If Renderman • Shader code • Multiple renderings w/varying shader arguments Assignments Bells and Whistles • Grading • 15 points – Each assignment is worth 20 points: – Produce single image • 5 points – for something that compiles • 20 points • 10 points – for something that runs incorrectly – Produce multiple or interactive image with • 15 points – for something that runs correctly changing shading argument values • 20 points – something that runs + extras • Note – Well structured and documented code – Please, please, please submit readable and – Additional bells and whistles documented code! Due dates Questions so far • If doing both assn 1 & 2 – Are you still sleeping? • If doing assn 1 OR assn 2 – Due Feb 6th 3 Real time shading – Cg Cg – vertex and fragment programs Framebuffer Rasterization Framebuffer Assembly & Assembly Operations Vertex Application Fragment Processor Processor Textures Program Program Cg – Cg Runtime Another brick in the wall • Just in Time (JIT) compiler for Cg shaders • Building a brick shader – Shaders are compiled and loaded at run-time – Brick shader will actually be a procedural rather than linked with executable texture that is mapped onto a surface – Flexibility – Texture coordinates s, t • instant support for variety of graphics platforms • Questions on Cg? Building a brick shader Building a brick shader #define BRICKWIDTH 0.25 #define BRICKHEIGHT 0.08 1 MORTARTHICKNESS #define MORTARTHICKNESS 0.01 #define BMHEIGHT (BRICKHEIGHT + MORTARTHICKNESS) BRICKWIDTH BRICKHEIGHT #define BMWIDTH (BRICKWIDTH + MORTARTHICKNESS) 0 1 4 Building a brick shader Building a brick shader surface brick ( // wrap texture coords to see where on given brick uniform Color Cbrick = color (0.5, 0.15, 0.1); // you are s = s % width; uniform Color Cmortar = color (0.5, 0.5, 0.5) t = t % height; ) { // Set the color based on where you are // What row is the point in question on Color Ct = Cbrick; if (s < MORTARTHICKNESS || t < MORTARTTHICKNESS) float row = t / BMHEIGHT; Ct = Cmortar // If even, offset length by a half // Return correct color if ( row % 2 == 0) s += (BMWIDTH/2); Cs = Ct; } Building a better brick shader Building a better brick shader // Set the color based on where you are • Let’s use noise to discolor individual bricks // Let the brick color change based on noise float noiseChange = 0.1; float row = s / BMWIDTH; Color Ct = Cbrick + (noise (row,col) * noiseChange); if (s < MORTARTHICKNESS || t < MORTARTTHICKNESS) Ct = Cmortar // Return correct color Cs = Ct; } Building an even better brick shader Questions? • Other possible additions – Bump mapping to have normal dip in mortar and rise on side of brick – Add noise to individual points on each brick – Add graininess – See brick shader for your given system 5.