问题标签 [light-scattering]

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 投票
1 回答
965 浏览

glsl - 曲面磨砂玻璃着色器?

制作透明的东西并不难,但我需要根据对象的曲线使透明度有所不同,以使其看起来不仅仅是一个平面对象。有点像下图。

中心比圆柱体的侧面更透明,更黑,这是背景颜色。然后是挡板,顶部似乎有某种镜面照明以使其更加闪亮,但我不知道在这种情况下如何处理这种透明度。使用相对于眼睛位置的表面法线来确定透明度值?任何帮助,将不胜感激。

0 投票
1 回答
1002 浏览

c++ - 大气光散射实现

我正在尝试在 openGL 中实现大气散射。我正在使用这个“论文”作为教程:http: //developer.amd.com/wordpress/media/2012/10/GDC_02_HoffmanPreetham.pdf

但是,我很难理解某些观点并找出一些常数。

基本上我必须实现这些公式: 在此处输入图像描述

首先,我不知道 s 是眼睛到圆顶的距离还是眼睛到光源(这里是太阳)位置的距离。角度 theta 也是如此,我无法确定它是从地面到太阳的角度,还是到眼睛所看到的圆顶位置的角度。

其次在这张幻灯片中: 在此处输入图像描述 它告诉我天空会出现蓝色。我知道这是瑞利散射的原因,但有些事情我无法理解。上面公式中的所有计算都给了我一个标量:所以当我将它乘以标量时,基本上是 vec3(1,1,1) 的太阳白光如何变成蓝色,它只会变成灰度因为我将得到结果,例如 vec3(0.8,0.8,0.8)。我的意思是,如果出现一些不同的天空颜色,我必须将太阳光与 vec3 相乘以不同地改变 RGB 值。

现在我在实现我的着色器时遇到了一些困难。这是天空着色器的代码:

我没有得到我所期望的,这是我得到的:

在此处输入图像描述

我只有蓝色,没有红色的日落,但是太阳很低,根据我看过的不同教程,当太阳下山时,我应该会看到一些红色的颜色。

0 投票
1 回答
697 浏览

three.js - Three.js:使用 SubSurface Scattering 着色器的黑色伪影

我想在 Three.js 中使用允许一些光线通过的 ShaderMaterial。正如我最近了解到的,我需要的效果称为“次表面散射”。我找到了几个例子,但只有少数允许实时计算(没有额外的映射)。此代码段中显示了最接近的一个:

上面的代码在简单的几何体(在本例中为立方体)上完美运行。但它会在更复杂的网格上绘制一些奇怪的黑色面。最终目标是“照亮”高度图地形,但应用相同的代码,我得到了:

在此处输入图像描述

正如你所看到的,“玻璃效果”在明亮区域非常好,但在较暗的区域(光线不能很好地到达)它会绘制一些全黑的脸,我不知道如何避免.

我认为自己是一个中等水平的 Three.js 用户,但这是我第一次玩着色器,公平地说,并不是那么容易。每次我更改着色器代码时,结果都是视觉垃圾。我唯一正确更改的是浅色(正面和背面)。我还尝试增加光照强度,但这不起作用,它只会“燃烧”更多的着色器,从而出现更多的黑色面孔。

谁能指出我正确的方向?这种效果首先被称为什么?我什至不知道如何在 WebGL 资源上搜索它。任何帮助,将不胜感激!


编辑:似乎使地形更厚(具有更高的 Z 比例)解决了这个问题。也许这与光线对面部的角度有关?当光线进入立方体时,这也发生在原始片段中(您可以在框架中看到全黑的脸)。或者我只是在胡说八道。这很容易成为我多年来遇到的最难的一段代码,而且只有 10 行!!我只想看到着色器在原始比例中看起来和在较厚的比例中看起来一样好。但是这些公式所涉及的物理复杂性超出了我的范围。

在此处输入图像描述

0 投票
1 回答
534 浏览

opengl - 大气散射着色器中的伪影

我正在尝试实现这里找到的大气散射着色器:https ://lightshaderdevlog.wordpress.com/

我已经在 GLSL 中实现了该算法,它看起来不错,但是由于某种原因,黑色伪影呈现: https ://imgur.com/a/CDrLt

图像

似乎只有在查看特定摄像机角度和那些特定顶点时才会出现伪影。

这是我的代码:

顶点着色器

片段着色器

0 投票
0 回答
78 浏览

python - 我如何用 python 用 runge kutta 4 求解散射布里渊方程?

实际上我正在用python实现一个项目,而且我在这种语言方面相对较新。我想用 Runge-Kutta 4 方法求解布里渊散射方程并对行为进行模拟(我附上文档,其中有复数值并耦合的方程)。

https://www.usna.edu/Users/physics/mungan/_files/documents/Publications/JQE.pdf

我使用的库如下:

首先我要解释一下物理系统:我有一根长度为 L 的光纤,在它的一端有一个由随时间振荡的激光器提供的电磁场。我需要求解电磁场 (El)、激光与光纤接触产生的散射场 (Es) 以及产生所述散射的压力波 (rho) 的空间和时间方程。

我尝试解方程如下:我假设电场、散射场和压力波沿光纤的初始分布,然后我用有限差分法计算三个方程的空间导数;我的初始条件是:电场的高斯,散射场的高斯乘以 10^-10(模拟零)和压力波的常数。边界条件是:压力波和散射场在光纤外的值为零,而对于电磁场:光纤末端的零值和开始处的电场值。我为每个初始条件和每个空间导数制作了数组。

这是有限差分法:

这些是我的初始条件和我的初始化数组:

所有这些都是为了求解时间导数,并用龙格-库塔法求解。我制作的代码如下:

定义的方程如下:

有很多参数,我取了前面附加文档的值,但我认为为简单起见,它们可以等于 1,如果我错了,我将上述文档等式中的“f”设为零请纠正我,我也不知道如何处理这个参数。使用的参数如下:

为了运行我的代码,我使用下一个,在这里我将所有这些过程都放在一个循环中

“finitas”是生成有限差分法的函数,“rkEs”是上面定义的函数。

我的问题是*当我执行代码时,我获得的结果每次迭代都会增长 20 次,并且增长超超快,从而出现这种类型的错误:

如果我打印解决方案,我会用nan获得结果。

根据我的逻辑,这应该可行,我已经尝试了几个星期,找到了如何使这项工作,但我不知道到底发生了什么。

我希望电场减小而散射场增加并且压力波振荡(如果我错了请纠正我)

,如果有人知道我该如何解决我的问题并回答诸如错误是由于代码引起的问题?还是初始条件?我的runge-kutta的步骤?或者如果我需要更改参数的顺序?还是因为复数?我将非常非常感激

感谢您的关注。

0 投票
0 回答
82 浏览

scilab - Scilab 语法错误:意外的结束函数,期待函数结束

我是 scilab 的新手,编写一个简单的函数会引发语法错误,这对我完全没有帮助。

有人可以指出我的错误,对我来说一切都很好。