Fun fact: Super Mario 64 uses Gouraud shading extensively (since N64 isn't fast enough to do Phong)

Funplings

I'm still not totally sure if I have this 100% correct, but basically my understanding of the difference between "Gouraud" and "Phong" shading is: In "Gouraud" shading, the color value of each vertex is calculated using the normal vector of each vertex as the "n" value in Blinn-Phong reflection model discussed earlier, and specific pixel values are calculated based on the interpolation of these vertex values. In "Phong" shading, each pixel's color value is individually calculated using the Blinn-Phong reflection model, with a normal vector value that is derived from the interpolation of surrounding vertex normal values. Is this an accurate explanation?

bobcao3

Yes! For Gouraud shading you don't need to compute the lighting per pixel. Assume the lighting function is L(x), goraud shading is computing L(x) per vertex and then interpolate(L(x)) over the sphere. For phong shading, it is like L(interpolate(x)), so the normals and positions are interpolated, and then the lighting is calculated per pixel.

ImRichardLiu

I'm actually really interested; would that cause Phong to take a lot longer to run? I'm under the impression that Phong > Gouraud > flat in terms of runtime since Phong seems to require calculating lighting per pixel whereas Gouraud just calculates lighting per vertex and flat shading calculates lighting per face. My impression is just that all are O(N), since when it comes down to it, the number of pixels is a linear multiple of the number of vertices, which itself is a linear multiple of the number of faces. However, I feel like choosing one over the other would definitely cause a difference in runtime, so I'm interested if there are any more specific mathematical representations of their runtimes that differentiates them.

Fun fact: Super Mario 64 uses Gouraud shading extensively (since N64 isn't fast enough to do Phong)

I'm still not totally sure if I have this 100% correct, but basically my understanding of the difference between "Gouraud" and "Phong" shading is: In "Gouraud" shading, the color value of each vertex is calculated using the normal vector of each vertex as the "n" value in Blinn-Phong reflection model discussed earlier, and specific pixel values are calculated based on the interpolation of these vertex values. In "Phong" shading, each pixel's color value is individually calculated using the Blinn-Phong reflection model, with a normal vector value that is derived from the interpolation of surrounding vertex normal values. Is this an accurate explanation?

Yes! For Gouraud shading you don't need to compute the lighting per pixel. Assume the lighting function is L(x), goraud shading is computing L(x) per vertex and then interpolate(L(x)) over the sphere. For phong shading, it is like L(interpolate(x)), so the normals and positions are interpolated, and then the lighting is calculated per pixel.

I'm actually really interested; would that cause Phong to take a lot longer to run? I'm under the impression that Phong > Gouraud > flat in terms of runtime since Phong seems to require calculating lighting per pixel whereas Gouraud just calculates lighting per vertex and flat shading calculates lighting per face. My impression is just that all are O(N), since when it comes down to it, the number of pixels is a linear multiple of the number of vertices, which itself is a linear multiple of the number of faces. However, I feel like choosing one over the other would definitely cause a difference in runtime, so I'm interested if there are any more specific mathematical representations of their runtimes that differentiates them.