The direction they face is called the Surface Normal, and we can visualize that direction with a little 3D arrow that’s perpendicular to the polygon’s surface.
What seems relevant is the angle that that normal vector makes with the vertical, with the direction where the light is coming from, which we might call theta.
For a given fragment we take the center of each pixel and use the vertex normals and coordinates of the pre-rasterized triangle to calculate the barycentric normal of that particular pixel.
To figure it out, we use ray tracing with this simplified screen space 3D representation and bounce the rays off of the lake's pixels using the normal map.
为了解决这个问题,我们使用光线追踪和这个简化的屏幕空间 3D 表示,并使用法线贴图将光线从湖面像素上反射回来。
So, in order to produce smooth shading, instead of using surface normals, we use one normal for each vertex calculated using the average of the normals of the adjacent triangles.
One key problem with it is that the triangles within an object each have only a single normal, and thus each triangle will share the same color throughout the triangle's surface.