Questions tagged «filtering»

1
射线追踪中的抗锯齿/过滤
在光线跟踪/路径跟踪中,最简单的抗锯齿图像方法之一是对像素值进行超采样并取平均结果。IE浏览器 而不是通过像素中心拍摄每个样本,而是使样本偏移一定量。 在互联网上搜索时,我发现了两种略有不同的方法: 根据需要生成样本,并使用过滤器权衡结果 PBRT就是一个例子 生成具有等于过滤器形状分布的样本 两个例子是smallpt和Benedikt Bitterli的Tungsten Renderer 产生并称重 基本过程是: 根据需要创建样本(随机,分层,低差异序列等) 使用两个样本(x和y)偏移相机光线 用射线渲染场景 使用过滤器功能和参考像素中心的样本距离计算权重。例如Box过滤器,Tent过滤器,Gaussian过滤器等) 将权重应用于渲染中的颜色 生成过滤器形状 基本前提是使用逆变换采样来创建根据滤波器形状分布的采样。例如,以高斯形状分布的样本的直方图将是: 可以完全完成此操作,也可以将功能合并到离散的pdf / cdf中。smallpt使用帐篷过滤器的确切逆cdf。装箱方法的示例可以在这里找到 问题 每种方法的优缺点是什么?为什么要在另一个上使用一个?我可以想到几件事: 生成和加权似乎是最可靠的,它允许将任何采样方法与任何过滤器进行任意组合。但是,它要求您跟踪ImageBuffer中的权重,然后进行最终确定。 由于您不能使用负pdf,因此“以过滤器形状生成”只能支持正过滤器形状(即,不支持Mitchell,Catmull Rom或Lanczos)。但是,如上所述,由于您无需跟踪任何权重,因此实现起来更容易。 但是,最后,我想您可以将方法2视为方法1的简化,因为它本质上是使用隐式Box Filter权重。

1
在Metal中如何计算Mipmap级别?
我的问题特别针对Metal,因为我不知道答案是否会针对另一个API改变。 我相信到目前为止我了解的是: 贴图纹理预先计算了“细节级别”,其中通过以某种有意义的方式对原始纹理进行下采样来创建较低级别的细节。 Mipmap级别以递减的细节级别来指代,其中级别0是原始纹理,而更高级别是其二阶幂的减少。 大多数GPU实现三线性过滤,即为每个样本选择两个相邻的mipmap级别,使用双线性过滤从每个级别中采样,然后线性混合这些样本。 我不太了解的是如何选择这些mipmap级别。在Metal标准库的文档中,我看到可以在指定或不指定lod_options类型实例的情况下进行采样。我假设此参数会更改mipmap级别的选择方式,并且显然存在3D lod_optionsfor 2D纹理: bias(float value) level(float lod) gradient2d(float2 dPdx, float2 dPdy) 不幸的是,文档没有费心地解释这些选项的作用。我可以猜测会bias()偏向某些自动选择的细节级别,但是偏见value是什么意思呢?它的运作规模是多少?同样的,又是怎样lod的level()转换成离散的纹理贴图的水平?并且,在gradient2d()使用纹理坐标的渐变的假设下进行操作时,如何使用该渐变选择mipmap级别? 更重要的是,如果我省略lod_options,那么如何选择mipmap级别?这取决于执行的函数类型吗? 并且,如果该sample()函数的默认no-lod-options指定操作是要执行类似的操作gradient2D()(至少在片段着色器中),它是利用简单的屏幕空间派生类,还是直接与光栅化器和插值纹理坐标一起使用?计算精确的梯度? 最后,设备之间的这种行为有多一致?我读过一篇老文章(在DirectX 9中是古老的文章),其中提到了复杂的设备特定的mipmap选择,但是我不知道在新的体系结构上是否可以更好地定义mipmap选择。

1
路径追踪器-多层材料和重要性采样
我目前正在尝试实现Monte Carlo路径跟踪器。我已经进行了一些研究,似乎一种常见的材料处理方法是使用分层模型。像这样: 当光入射到表面时,菲涅尔告诉我们第一层反射了多少光,第二层反射了多少,依此类推。 所以我做了类似但更简单的事情:只有一层高光和一层漫反射。尚无透射率。到目前为止,到目前为止,我对漫反射使用了一个简单的余弦加权brdf,对我的镜面反射使用了Cook-Torrance微面模型。 现在是最困难的部分:一旦射线击中表面该怎么办?通常,我会选择与表面材质相对应的brdf,对入射光方向进行采样,评估brdf,然后除以正确的概率分布函数。 但是在这里,表面撞击实际上对应于多种材料。天真的处理方法是为每个图层命中采样一次。但这显然是造成巨大性能损失的根源,这使我的道路实际上变成了树。 有更好的解决方案吗?

2
为什么在路径跟踪中使用帐篷过滤器?
C路径跟踪器Smallpt的99行会为其打算渲染的每个像素渲染一个2x2的子像素网格,然后执行一个帐篷过滤器将它们合并。 有一个有趣的演示解释代码在这里,它提到了帐篷过滤器,但没有解释为什么它的存在。 谁能解释为什么在这种情况下,帐篷过滤器比盒子模糊(仅对样本取平均值)更合适? 使用比帐篷过滤器更好的东西(例如双三次Hermite插值)会更高质量吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.