Skip to main content

What is shader?

Shader is one of the important component of mental ray. Let me tell about it a bit.

A shader is a program code fragment that computes how light interacts with objects. This was the original concept of shader in early computer graphics time and nowadays the role of shader and its meaning are expanded. In one of the common scenario in computer graphics, objects are usually represented as polygons. First, the intensity of each vertex is computed, then inside the polygon is filled by an interpolation method. This becomes more complex as the computer graphics technology developed. There were two shader development directions. One is a hardware rendering that concentrates rendering speed and interactivity. The other is a software rendering that concentrates the image quality.

Nowadays graphics hardware is called GPU (Graphics Processing Unit). The early stage GPU has fixed functionalities. Because fixed functionality can be achieved more performance in practice. The implementation was based on deep pipeline processing which gives us good throughput of pixel generation. However, as the semiconductor technology evolved and hardware had more computational power, GPU also started to consider high quality rendering. GPU becomes programmable. The initial shader programs were written in assembler like language, then shader language for GPU was established, e.g., Cg. Now there are CUDA and OpenCL (2009), these languages are no longer for only shaders, but also for general purpose programming.

On the other hand, mental ray shader started with the purpose to generate high quality rendering results. The main role of shader is to simulate light and object interaction, some of are based on physics and some are based on a good heuristics. GPU is good at if the light and object interaction is local, since parallel processing works better with high local computation. Especially, pixel parallelism works quite well in early days. But the real world problem is global. Any far away object can cast a shadow to other objects. One single object can affects whole scene. Mental ray is designed for this global illumination simulation. Mental ray's each shader still could compute a local interaction between light and objects, but this effect is propagated by ray tracing algorithm to compute global illumination effect.

Recently, these two shader directions are coming to merge. There are several GPU ray tracers. mental images produces a product called mental mill (http://www.mentalimages.com/products/mental-mill.html), that employs general shader language MetaSL. mental mill compiles MetaSL and exports several GPU based languages (e.g., Cg) and also mental ray shaders.

I think GPU shaders still largely take care of speed because of game industry. Software rendering still has some advantages for the quality of image.

(mental images was taken over by NVidia at November, 2007. NVidia is one of the leading company of GPU industory. http://www.nvidia.com/object/mental_images.html)

Comments

Popular posts from this blog

The architecture of mental ray

Figure 1 shows the standard mental ray architecture. Figure 1 standard mental ray architecture. F1: Application scene file: Application proper file. For example, .max (3dsmax), .ma or .mb (Maya), .scn (XSI). F2: .mi file: mental ray scene description file. If the DCC software has mental ray plugin, or integrates mental ray, they usually support .mi file export. (A2) 1. Application: DCC (Digital contents creation) software. For example, Maya, 3DSMax, XSI, CAD program, and so on. 2. mental ray core: mental ray core program. There are library version mental ray and stand alone mental ray. The library version mental ray is usually invoked by a DCC application via translator module of the application. A translator is a module of a DCC application which translate the DCC application's internal data structure to the mental ray data structure. The stand alone version mental ray reads a .mi file and performs the rendering. If you have only mental ray core, mental ray does not work. mental...

iray 1: iray in standalone mental ray

* As far as I know, we can only run mental images' iray in NVidia's RealityServer. I hope Autodesk 3dsmax/maya/xsi supports iray soon. mental images (a subsidiary company of NVidia) demonstrated iray renderer in GDC's keynote and SIGGRAPH ASIA 2009. GDC NVidia iray demo (YouTube) mental images iray page mental ray or some other renderers can simulate indirect illumination in some extent, but the methods final gather or photon map are quite rough approximation. They have no guarantee to converge to the correct answer. Also there are many renderer parameters for performance optimisation. These parameters heavily depends on the scene. It is difficult to achieve high quality and faster rendering. These methods are anyway time consuming, therefore, we sometimes put invisible light sources by hand, that simulates indirect lights. This iray is a brute force path tracer and there is no renderer parameter, but nowadays computer has not enough power to compute the light tran...

iray 4: iray in standalone mental ray

As an example in here, I create one teapot in 3dsmax and assign a mia_material (Arch&Design). Since 3dsmax exports an mi file with 3dsmax shader dependency, mental ray standalone could have a problem to render that mi file. mental ray standalone usually doesn't have 3dsmax shaders. The main advantage of the standalone mental ray is parallel rendering on a render farm. I couldn't tell the legal license of the 3dsmax shaders. For the safe side, if we have no dependency to the 3dsmax shaders, it shouldn't have a problem. (Or you can also install 3dsmax to all the render farm machine, though it doesn't make much sense.) If I just render the mi file from the 3dsmax without modifying, I see the following error. --- > ray -x on -v 5 00teapot_ex00.mi ... LINK 0.0  error  191007: cannot load 3dsmaxhair.dll, The specified module could not be found. ... LINK 0.0  error  191007: cannot load mayabase.dll, The specified module could not be found. ... LINK 0.0...