问题标签 [smoothstep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
54 浏览

glsl - 使用 smoothstep() 和 dot() 或 length() 绘制圆会产生不同的结果

考虑下面的简单着色器(前往shadertoy.com/new并粘贴代码进行试用)。

基本上,我试图弄清楚是否可以调整dot()版本以获得这两个函数调用完全相同的结果:

使用两种众所周知的方法绘制两个圆。看了网上的教程,了解到可以用length()函数画圆。您还了解到它非常昂贵,因此提供了一个更优化的版本,dot()而不是使用该函数。(在我的世界里,某事物的优化版本应该产生相同的结果。)

伟大的。但我找不到两者之间的关系的解释。有时,由于dot()某种原因,结果乘以4.0(参见着色器之书),得到相似但不相同的输出。

如您所见,会step()产生相同的圆圈,而smoothstep()不会。

典型的 GLSL 圈子:)

smoothstep()是否有可能通过使用一些数学来获得完全相同的输出?

着色器示例