Talk:Phong reflection model

Definition of L in Phong equation
Shouldn't L be the vector from the point on the surface to the light source? All other sources I have seen on this equation define it as such. —The preceding unsigned comment was added by 24.42.196.192 (talk • contribs) 21:34, 3 December 2004 (UTC)


 * Right, that got fixed shortly after your comment. Dicklyon 02:24, 30 May 2006 (UTC)

This a very interesting article! ^_^ —The preceding unsigned comment was added by 70.17.37.126 (talk • contribs) 19:24, 30 April 2006 (UTC)


 * Please sign your comments with four tildes as the editing talk page suggests. Dicklyon 02:24, 30 May 2006 (UTC)

Equation
Shouldn't the equation be Color * Diffuse + specular and NOT Color + Diffuse + Specular? Starfox 23:40, 25 July 2006 (UTC)


 * which equation are you referring to? Dicklyon 07:00, 26 July 2006 (UTC)


 * Perhaps the confusion is the ambient term? $$k_a$$ is the ambient colour, $$k_d$$ and $$k_s$$ are diffuse and specular. There are actually three different colour terms, each making a contribution to the lighting. Neither of the formulae you suggest represent what is currently on the page, or proper Phong lighting, though the specular colour is often very close to white, which may be why you have omitted its multiplication by colour in your suggestion. - Rainwarrior 07:28, 26 July 2006 (UTC)


 * Ah, I see it. The confusion is the picture diagrams below where the diffuse colour has been combined with the ambient colour. The "diffuse" picture should have colour to it, and the "ambient" picture should be much darker. I'll see if I can fix it. - Rainwarrior 07:31, 26 July 2006 (UTC)


 * Oh, right, the funny picture equation. It's not well explained, but if you interpret the text below it, where it explains that it's a gray object in a blue ambient environment, I think you'll find that it's not incorrect.  It could certainly be improved, though. Dicklyon 07:39, 26 July 2006 (UTC)


 * Ah, didn't spot that. Well, I edited the image as best I could to be a more traditional example where the diffuse and ambient colours are the same. - Rainwarrior 08:03, 26 July 2006 (UTC)


 * I don't think they add up to the left-hand image now. Maybe we should contact the guy who did it in the first place to do it over better. He probably has a programmable way to do it.  Or write one, using a new object, maybe even with more than one color. Dicklyon 19:12, 26 July 2006 (UTC)


 * Yeah, I couldn't get the colours quite right (my graphics editor didn't have the right controls for colour, I tried to approximate). I could rig up a demonstration program and redo it later. - Rainwarrior 21:21, 26 July 2006 (UTC)


 * I think I might be able to provide some pics on the classic teapot. I can do a simple GLSL shader in RenderMonkey. Interested? Starfox 23:02, 26 July 2006 (UTC)


 * Sure, go for it. - Rainwarrior 23:20, 26 July 2006 (UTC)


 * I can redo the image with the correct idea and more than one color, thanks for the corrections. - T-tus

I don't know if Starfox is still planning to do this or not, but I wrote a little software renderer and made a new image out of it. Looking at it now, I wish I'd used a more curved surface like the original version so there'd be more interesting specular highlights, but for now this at least is accurate, colour wise. - Rainwarrior 04:16, 7 August 2006 (UTC)


 * I hacked my raytracer to do some sort of ray-blob intersection (it was surprisingly tricky...), and made a new version of the image using a much curvier (and more specular) model. - Rainwarrior 18:09, 7 August 2006 (UTC

I think that must be R * L instead R * V in specular part of formula? —Preceding unsigned comment added by 87.116.153.207 (talk) 14:22, 28 November 2007 (UTC) My mistake, formula is correct, but somwhere should be 'R is feflected ray form LIGHT source'.

Phong shading
See talk:Phong shading for why we are keeping these as two separate pages, and what we are trying to do to make it work better. Dicklyon 17:13, 30 May 2006 (UTC)

Merge
I'm suggesting that we merge this article with Phong shading. While these articles cover two distinct topics, there is a great deal of ambiguity in the specific names for these things in real-world uses. The reflection model is very frequently referred to as a "shading model" (especially in this era of programmable shaders), or sometimes just "shading" or "lighting". I don't think the way we've separated them is appropriate, as the names really aren't so distinct in practice. The concepts are, but not the names. Neither of these articles is particularly long, and I don't think they have a great deal of potential for expansion. I think it would be best to merge the two, perhaps under "phong shading" with appropriate redirects, and clearly explain both the ambiguity of the naming of these two concepts, and the distinction between them. It gives us a good opportunity to explain their relationship as well. - Rainwarrior 03:46, 1 September 2007 (UTC)


 * I'm OK with such a merge. Merge this one into Phong shading? Dicklyon 04:45, 1 September 2007 (UTC)


 * Done. - Rainwarrior (talk) 21:25, 16 December 2007 (UTC)

As I commented on Phong shading, I think it would be better practice to properly restructure Shading and branch out along the two definitions instead of getting caught up in a giant semantic web. -- Danukasan (talk) 19:36, 13 April 2009 (UTC)


 * After a discussion on the talk page of Phong shading, it was decided to split the page again into Phong shading and Phong reflection model. This reflects today's usage in scientific literature and textbooks and it allows other articles (in particular articles on Wikipedia in other languages) to unambigiuously refer to one of the two concepts. --Martin Kraus (talk) 12:41, 7 June 2011 (UTC)

Computational approximations not relevant
The Phong reflection model doesn't say anything about how the intensity should be calculated; it is after all just a mathematical model. If the approximations would have simplified the mathematical expression in any way in order to make it easier to work with, they would have belonged here, but that is not the case now. I therefore consider them irrelevant to this article and will remove them again. --Kri (talk) 21:42, 7 June 2011 (UTC)


 * I disagree in so far as the Phong reflection model is mainly designed for efficient computation. If there wasn't an efficient computation of it, it would not be of interest. In fact, Phong wouldn't even have proposed it. The model is not designed to allow for a particularly short mathematical description or to accurately simulate reflection on physical surfaces but for efficient computation. Therefore, simplifications of the computation of the model are relevant. For the same reason, the Blinn-Phong reflection model is of interest in computer graphics. --Martin Kraus (talk) 23:08, 7 June 2011 (UTC)


 * I thought that the main reason for splitting up the article was that the reflection model didn't really have anything to do with Phong shading (except from that they are most often used together)? Covering different approximation methods in this article seems like taking a step towards bringing the two articles together again.


 * No, covering an approximation method for the Phong reflection model in this article does not bring it closer to the article of Phong shading (which is now about a specific interpolation method). Neither would an approximation of Phong shading (e.g. not normalizing normal vectors at vertices before they are linearly interpolated) bring the article about Phong shading closer to the article about the Phong reflection model. --Martin Kraus (talk) 08:04, 8 June 2011 (UTC)


 * I see it like this: Either we treat Phong shading and the Phong reflection model in one article, or we keep them separated, consider the reflection model as something that doesn't really have anything to do with Phong shading and don't cover anything in the article about the reflection model that has anything to do with computation; maybe it was good as it was when they were both in one article. I can't stop you from bringing the section back again, or doing anything else, if you think that is good, but at least I have left my thoughts about the question. --Kri (talk) 00:04, 8 June 2011 (UTC)


 * Phong shading (the interpolation method) is one method for computing the interpolation when shading. The Phong reflection model is one method for computing lighting when shading. Both are linked to computation. --Martin Kraus (talk) 08:04, 8 June 2011 (UTC)


 * I think you misunderstand the term "shading" in the term "Phong shading". Usually, Phong shading does not refer to an implementation of Phong's techniques but to a specific way of normal-vector interpolation. Phong shading is one interpolation technique. Flat shading and Gouraud shading are others. All of them can be combined with other reflection models: Phong reflection model is one of them. Toon or cell shading is another reflection model (where "shading" is used in another meaning). I guess the greatest confusion stems from the term shading, which can be used in the sense of lighting, interpolation of lighting, computation of pixel colors, computation of vertex colors, etc. However, in combination with other terms (e.g. Phong shading) it often has specific meanings. --Martin Kraus (talk) 08:04, 8 June 2011 (UTC)


 * Maybe we should just keep them as one article but include a section that discusses the difference between the two things; we have already started to argue about which sections should belong to which articles. Anyway, it's difficult to know what the best solution is. --Kri (talk) 00:12, 8 June 2011 (UTC)


 * Again, I would argue that the normal use of Phong shading in academia today is only to refer to the normal-vector interpolation (a method for computing the interpolation) and the Phong reflection model is about the lighting model (a method for computing the lighting). I'll add a reference to "Computer Graphics Principles" by Foley, van Dam, Feiner and Hughes to clarify this. I've added a couple of references to Phong shading to clarify this. --Martin Kraus (talk) 09:25, 8 June 2011 (UTC)


 * I also understood Phong shading as something that is not necessarily connected to the Phong reflection model. You said that the Phong shading article is now about a specific interpolation method; do you think something is missing in the article?


 * No, sorry, I only wanted to clarify that - as you said - it doesn't necessarily include the Phong reflection model and therefore an approximation of the Phong reflection model shouldn't be in the article about Phong shading. --Martin Kraus (talk) 11:08, 8 June 2011 (UTC)


 * I don't think that the Phong reflection model is linked to computation. It may have been designed to make it possible to calculate it efficiently, but it's still just a mathematical model as the name suggests. A model that tells you how to compute something is an algorithm. In one sense Phong shading is therefore an algorithm. I don't think that the Phong reflection model is an algorithm, though. --Kri (talk) 10:26, 8 June 2011 (UTC)


 * The Phong reflection model is so basic (only vector arithmetics) that it can be translated literally to a single assignment in a Cg/HLSL/GLSL shader. Thus, it implies at least a naive algorithm. Also, this mathematical model can be considered to specify the algorithm. Thus, there are links between mathematical models and algorithms. --Martin Kraus (talk) 11:08, 8 June 2011 (UTC)


 * I see that you have removed the approximations of the Phong reflection model completely. The thing is that the section is related to both the Phong reflection model, and to Phong shading since the approximations involves interpolation of vectors. Now that there is a section about the reflection model in the article, maybe we can put "Computational approximations" as a subsection of the section "Phong reflection model"? --Kri (talk) 10:59, 8 June 2011 (UTC)


 * Well, I've removed it from Phong shading, you have removed if from Phong reflection model. I would be happy with leaving the section about (computational) approximations of the Phong reflection model in the article on the Phong reflection model. I agree that some of the approximations are specific to Phong shading; however, not all of them are. My main reason against putting it into Phong shading is that we would have to expand the section about the Phong reflection model in the article on Phong shading basically to all the core of the article about the Phong reflection model, i.e. the overlap would be very large. --Martin Kraus (talk) 11:22, 8 June 2011 (UTC)


 * I've undone your removal in this article, just to make sure that the section is not lost while we discuss where to put it. --Martin Kraus (talk) 11:30, 8 June 2011 (UTC)


 * You undid mine, but you didn't undo your own? Nice.


 * As I tried to explain, this was to avoid that we lose this section. --Martin Kraus (talk) 18:05, 8 June 2011 (UTC)


 * Okay, I thought this naive algorithm you are talking about was Phong shading. This would mean that you basically have included the whole Phong shading article here to, only without mentioning what the calculations are for (note that a mathematical model does not automatically imply calculations). That is why I feel we are taking a step against a merge again.


 * The crucial point that is not included in this article is where the normal vector comes from. For the Phong reflection model it doesn't matter where they come from. You could also just evaluate the Phong reflection model at the vertices and interpolate the resulting colors. (Which happens to be Gouraud shading.) --Martin Kraus (talk) 18:05, 8 June 2011 (UTC)


 * I think an article about a mathematical model serves a purpose just as it is; such a model can be of interest from a mathematical point of view only (which I think this can be), and for me that was actually the biggest reason for splitting the article up, to make it possible to 'cut off ' the Phong shading part from the pure mathematical part. I simply thought this part was nice as it was. A confusion between two different things can just be explained very quickly in a section in the article. If we are going to mix this article with approximations that are related to Phong shading, then that defeats the whole purpose of splitting the article up for me.


 * I agree that these approximations should not depend on Phong shading; therefore, I shortened them to include only the parts that are independent of Phong shading. As it is, this represents now alternative models that approximate the Phong reflection model (but allow for a more efficient computation). I changed the title of the section to reflect this.--Martin Kraus (talk) 18:05, 8 June 2011 (UTC)


 * If the approximations are eventually going to en up here anyway, I therefore vote for merging the two articles together again. --Kri (talk) 17:40, 8 June 2011 (UTC)


 * As they are now, they have nothing to do with Phong shading (in the sense of Phong interpolation). They are alterations of the Phong reflection model that are useful in any case (even if they are evaluated at vertices without using Phong shading). I hope this addresses your concerns. --Martin Kraus (talk) 18:05, 8 June 2011 (UTC)


 * That's the trouble with trying to slice the material too finely. Both in the original Phong method, and in Blinn's mod, and in the Lyon approximation (my stuff that's referenced), the interaction between the shading model and the interpolation method is important.  These methods don't fit cleanly into either article, but need to be in one (or both).  Dicklyon (talk) 18:34, 8 June 2011 (UTC)


 * What about another split and create an article "Lyon-Phong shading model" for these approximations? I don't want them in Phong shading, Kri doesn't want them in Phong reflection model, and Dicklyon considers it important enough to have it in Wikipedia; thus another article should please everyone. I'm in favor of it. --Martin Kraus (talk) 18:50, 8 June 2011 (UTC)


 * Reading your paper, I realized that another good reason to have a separate article for "Lyon-Phong shading model" (or similar name) is that it is also relevant for the Blinn-Phong reflection model. We cannot handle that in Phong shading unless we merge it with Blinn-Phong shading model. --Martin Kraus (talk) 19:00, 8 June 2011 (UTC)

Split of approximations to Lyon-Phong shading model
I suggest to split the section about the approximation to Lyon-Phong shading model because the Lyon-Phong shading model relies on Phong interpolation and either the Phong reflection model or the Blinn-Phong reflection model. Even if Phong interpolation and Phong reflection model is merged to one article (Phong shading), it would be impractical (and probably against some Wikipedia guidelines) to even merge it with the Blinn-Phong reflection model. But this would be necessary to cover all about the Lyon-Phong shading model. Therefore, splitting the section about the Lyon-Phong shading model appears to be the best solution. --Martin Kraus (talk) 19:08, 8 June 2011 (UTC)


 * Sorry, I might have gotten a bit grumpy before. Maybe splitting the section could be a solution. If we do split it I don't think we should call the new article Lyon-Phong shading model. The approximation methods are not not a model, since they don't aim to describe any system; they are a bunch of techniques aimed to speed up the calculation. I've taken some of the techniques from Dicklyon's paper, and the method with crossing R and V was my idea. --Kri (talk) 21:05, 8 June 2011 (UTC)


 * My method is almost certainly not notable enough to warrant its own article. Dicklyon (talk) 21:31, 8 June 2011 (UTC)


 * So, where should it go? What about Blinn-Phong shading model? That is itself already an approximation and some of Dicklyon's methods build on top of it. Thus, I would actually consider Blinn-Phong shading model a better place for these techniques then Phong reflection model and Phong shading. --Martin Kraus (talk) 21:47, 8 June 2011 (UTC)


 * No, my method works better for the Phong model than for Blinn–Phong. Leave it here on the reflection model page, since it's mostly about an efficient approximation to that.  Dicklyon (talk) 22:21, 8 June 2011 (UTC)


 * Kri: Are you aware of NOR? If it is your unpublished idea, we must delete it. I don't think there is a choice about that. --Martin Kraus (talk) 21:52, 8 June 2011 (UTC)


 * Okay, so I guess we'll just have to delete it. I don't have any source for it.


 * The section was originally written for Phong shading, before it was split up, so I honestly don't know where it fits best now; I didn't realize that Phong shading didn't have to imply the Phong reflection model until the split had already been made. My suggestions have been to either merge both the articles back again, or to place the section as a subsection under "Phong reflection model" in Phong shading. --Kri (talk) 22:15, 8 June 2011 (UTC)


 * Regarding to what Dicklyon wrote: Okay, I might after all give in on this point, if we put the approximations in a context. We still have this thing that we need to mention both the Phong reflection model and Phong shading in order to motivate the approximations fully, but now with a second look on the section, maybe it's motivated quite well already after all.


 * May I anyway suggest a name change of the section to make it clear that it's related to Phong shading (which it isn't really now)? Maybe something like "Computatinal approximations for Phong shading"? Phong shading was what the section originally was written for and I guess that when the Phong reflection model is used in graphics software (which is the motivation for the approximations), Phong shading is almost exclusively used. I also think that the paragraph mentioning the approximation $$\lambda' = ||R - V||^2 / 2 = ||D||^2 / 2.$$ should be brought back in that case. --Kri (talk) 23:27, 8 June 2011 (UTC)


 * My method can be completely independent of the interpolation, and that's how it's described there. It has the additional benefit that it doesn't require accurate normalization in the interpolation, so that can be mentioned as a side thing.  Dicklyon (talk) 01:30, 9 June 2011 (UTC)

Rewriting of the approximation section
OK, in order to avoid original research by Kri, I've removed the references to the cross product. I also brought back the discussion of the normalization. Thus, the benefit of requiring less normalization was mentioned twice, I removed the first one, and introduced a sentence to clarify that this normalization benefit is specific to Phong shading (actually, this should say Per-pixel lighting, which in practice is usually Phong shading; feel bold and change it if you think we should be more precise here). My question now is whether we should leave the discussion of missed highlights by the Lyon approximation. This isn't discussed in the reference, is it? If we don't have a reference, we should remove it. (It doesn't matter whether it is true or not.) --130.225.198.196 (talk) 08:21, 9 June 2011 (UTC)

Oops, forgot to log in. Another question: I'd like to write the specular term as $$\max(0, \hat{R}\cdot \hat{V})^\alpha$$ since this is more precise (the term should be 0 if the dot product is less than 0). This actually avoids the two cases in the first equation. Would that be OK? --Martin Kraus (talk) 08:31, 9 June 2011 (UTC)

Final question: in the approximation section, shouldn't we replace $$\lVert X \rVert^2$$ by $$X \cdot X$$ in order to make it explicit that no square root is required to evaluate this expression? --Martin Kraus (talk) 08:31, 9 June 2011 (UTC)

Another comment: I removed the reference to the Householder transformation because that transformation mirrors points at planes instead of reflecting them. And still another question: Lyon is using $$D = R - L$$ with a different R vector (the reflection of V), we are using $$D = R - V$$. Should this difference be mentioned at all? --Martin Kraus (talk) 08:59, 9 June 2011 (UTC)


 * Since no one commented on it, I was bold and implemented all these suggestions (and also replaced x by (1 - beta lambda) for clarity; remember: lambda and beta are already new variables; thus, x introduces another level of new indirect definitions which might be difficult to read for the general reader). --Martin Kraus (talk) 17:54, 10 June 2011 (UTC)


 * Looks mostly OK; I added a bit about the approximation's relative insensitivity to normalization error. The idea about interpolating the D vector seems like a good one, but I don't recall whether I or anyone has tried it.  Does it have a source?  Dicklyon (talk) 19:26, 10 June 2011 (UTC)


 * Oh, OK, I thought it was in the paper but if it isn't, then it is probably original work by Kri. I removed it. I'm not sure how relevant it is: when using a normal map, R would have to be computed per fragment; thus, the method doesn't apply. A problem of the method is that for the correct computation of D, the interpolated values of R and V have to be normalized again per fragment before the difference is computed, and that's of course not possible if D has been computed per vertex. The result is (as Kri pointed out in a long removed paragraph) that the highlight might be missed. Thinking about it, it might be better to compute D = R - (R.V)V per vertex (with normalized R and V) because this guarantees that the highlight is caught if this D is computed per vertex and V is constant and it might work well enough if V is almost constant. (Of course, when L is constant then one should compute D = R - (R.L)L .) But, OK, I've got no time to go that deep into research on optimizations of rendering specular highlights. Maybe Kri can work on it. --Martin Kraus (talk) 01:01, 11 June 2011 (UTC)


 * Well, I bet the D interpolation would work without any normalizing per pixel, as an approximation. But, as I said, I haven't tried it.  Maybe I can recreate my old code from the paper and modify it to try it.  Dicklyon (talk) 01:11, 11 June 2011 (UTC)


 * OK. I'll take the bet! :) Actually, Kri has explained it very well. Imagine (normalized) V to be constant. Let the (normalized) R vectors at the vertices of a triangle point in different directions, such that the V direction falls into a convex combination of the R vectors (the direction intersects the triangle spanned by the three R vectors). Because of the normalization the interpolated R vector will always be shorter than V and therefore the length of D will never be 0 (the interpolation plane of D doesn't contain the origin, as Kri put it). But I guess one of us has to test it, to decide the bet... --Martin Kraus (talk) 01:19, 11 June 2011 (UTC)


 * Well, I tried my idea, and it turned out that it's a very bad idea. Let's forget about it as fast as possible. ;) I tested the situation I was thinking about: orthographic view (constant V) with large triangles, such that the highlight is between vertices; shineness = 20; R and V are always normalized in the vertex shader. Results: computing D = R - V in the vertex shader misses the highlight (highlight is way too weak as Kri observed); same effect if D = R - V is computed in the fragment shader without normalization of R and V in the fragment shader. Computing D = R - V in the fragment shader from normalized interpolated R and V gives nice full highlight. Thus, I think you lost your bet. But then I realized that Kri's idea of D = R x V produces D vectors on a plane orthogonal to V, i.e. it should include the origin, i.e. guarantee to catch the highlight if V is constant. And in fact: Kri's approximation D = R x V in the vertex shader works very good (highlight has the right intensity but is a bit larger). Same result with Kri's approximation D = R x V computed from interpolated R and V in the fragment shader without normalization. With normalization in the fragment shader it produces the same (smaller) highlight as D = R - V with normalization in the fragment shader. Kri: you might be on to something (unless someone published this previously, I didn't check the literature). --Martin Kraus (talk) 02:39, 11 June 2011 (UTC)


 * Checking the shader again I realized that the view vector is actually not constant since my shader just computes the difference from vertex position to camera position in any case. However, the R vector is constant since I was using a flat plane with parallel normal vectors and a directional light source. Doing some more testing with point light sources and perspective projection revealed a couple of strange behaviors (in particular inconsistencies between Unity's interpolation in the scene view and the game view which hit the method of computing D = R - V in the scene view in the case of perspective projection and in the game view in the case of orthographic projection; actually it is weird and I don't understand what's going on). Kri's method of computing D = R x V in the vertex shader appears to be more robust in general; however, more research would be necessary, as they say when they want to have more funding. :) --Martin Kraus (talk) 10:41, 11 June 2011 (UTC)


 * As to the D = R - L, I think it doesn't matter which of the two vectors get mirrored (viewpoint or light) to compare with the other. Probably that alternative should be briefly mentioned.  I just checked my paper and was reminded that reflecting the L vector is more work when there are multiple lights.  Dicklyon (talk) 19:28, 10 June 2011 (UTC)


 * True. That optimization is applicable in any case; thus, it should be mentioned before the whole technique. Makes me wonder why the Phong model is usually formulated in the other way. --Martin Kraus (talk) 01:01, 11 June 2011 (UTC)


 * The Householder transformation does perform a reflection (see the article) and was what I used when deriving the expression for R, although I negated L before transforming it (which I maybe should have mentioned) to indicate the direction of the light instead of the direction to the light source. --Kri (talk) 16:36, 14 June 2011 (UTC)


 * Looking at the article history, I see that I did mention that L was negated before the transformation. I'm restoring the previous version of the paragraph. --Kri (talk) 17:45, 14 June 2011 (UTC)


 * On the other hand, the link to Specular reflection that is currently in the article works too for explaining why the expression looks as it does. --Kri (talk) 18:36, 14 June 2011 (UTC)

REally, summed ambient - are your sure !
". A single term i a {\displaystyle i_{\text{a}}} i_{\text{a}} controls the ambient lighting; it is sometimes computed as a sum of contributions from all light sources. "

It would never be correct to sum the 'ambient' value of a light, even assuming that it has one. As you would eventually saturate to white a scene with ( say ) 20 spotlights all looking at different parts of the scene / object. It is an error to sum the ambients and it is not in the given equation. — Preceding unsigned comment added by 82.8.228.52 (talk) 18:41, 10 November 2016 (UTC)
 * You're correct. The ambient term is an approximation of the effect of lighting that isn't directly attributed to the primary light sources, but to diffuse light bouncing from walls, the floor, clouds and so on.

Opening paragraph is misleading
The way I read the opening paragraph, it seemed to mean that people had actually measured the behaviour of various physical materials and this resulted in this shading model, but this turns out not to be the case. Rather, it's a simple model that kind of looks decent on screen.

"No Original Research" policy must be observed
I am currently writing a 3D renderer using Phong shading. I have just wasted two days of work time as a direct result of this page violating Wikipedia's "No Original Research" policy. The approximation section, at the time of writing, contains the following:

Furthermore, the value $$\lambda$$ can be approximated as $$\lambda = (\hat{R}_m - \hat{V})\cdot(\hat{R}_m - \hat{V}) / 2$$, or as $$\lambda = (\hat{R}_m \times \hat{V})\cdot(\hat{R}_m \times \hat{V}) / 2.$$ The latter is much less sensitive to normalization errors in $$\hat{R}_m$$ and $$\hat{V}$$ than Phong's dot-product-based $$\lambda = 1 - \hat{R}_m \cdot \hat{V}$$ is, and practically doesn't require $$\hat{R}_m$$ and $$\hat{V}$$ to be normalized except for very low-resolved triangle meshes.

The former of these two approximations is the one cited in Lyon's (excellent) paper which is referenced for this section.

The latter claim, regarding $$\lambda = (\hat{R}_m \times \hat{V})\cdot(\hat{R}_m \times \hat{V}) / 2.$$ is not mentioned as an approximation in Lyon's 1993 paper anywhere. It appears to be original research added by editor Kri (25-Aug-2015) over 4 years after the discussion on this talk page resolved to remove his original research from the page.

This approximation and its associated claims must be sourced with an appropriate reference which contains the derivation of the approximation and derivation of the claims about requiring no vector normalization.

If cited sources are not forthcoming then I will remove this sentence from the article.

--Ipeakiwi (talk) 23:32, 9 April 2022 (UTC)