首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实时创建具有可变图案密度的图形对象?

如何实时创建具有可变图案密度的图形对象?
EN

Computer Graphics用户
提问于 2016-01-25 19:39:23
回答 2查看 313关注 0票数 9

假设每帧计算出一些值p,它在对象的表面上不断变化。p的值决定了表面某些图案的密度。例如,在只有两种可能的密度的情况下,如果p < 0.3是高密度的,则是低密度的。

我想出了一个简单的高级解决方案:创建两个纹理,每个纹理的密度不同,并且基于适当的p样本的值。然而,高密度和低密度之间的界限存在一个问题。

这里有一个例子来说明这个问题(注意,我的问题并不是仅限于这个点的例子模式)。我描述了我稍后使用的模式):

这里是低与高之间的阈值(显示在高密度纹理上,但这与此无关)。如果在线下,它意味着高密度的纹理应该被采样。

最后,这里比较了所期望的和实际使用这种方法会发生什么:

问题是,当一个高密度的圆穿过线时,当p指示要采样的低密度纹理时,它将被忽略,从而导致一个截圆。我不知道如何解决这个问题,因为p每个帧都不同,所以我不能在这两个密度之间“烘焙”一个边界。通过从低密度纹理创建高密度纹理(即,如果一个圆位于低密度纹理上,确保它在高密度纹理上),可以很容易地防止反向问题。

我感兴趣的是,是否有人有办法改进我的解决方案,甚至完全有另一种方法。这里的约束条件是p是实时计算每帧的.另一个约束与模式纹理有关:模式是黑白的,其中黑色是图案,白色是背景(如示例中的圆圈)。该图案可能不仅仅是重复的相同形状,而是任意黑色形状在白色背景上的任何排列。(也许模式是错误的词汇选择。)

我对这一领域的研究并不熟悉,所以我不确定该搜索哪些关键词,所以如果有人能为我指出正确的方向,我会很感激。

EN

回答 2

Computer Graphics用户

发布于 2016-03-12 02:40:28

为了确保模式形状总是完全存在或不存在,永远不要切断,必须确保对形状中的所有纹理都使用相同的p值。在您的圆圈示例中,给定圆圈中的所有纹理都需要在p上达成一致。

我假设您有某种方法在表面上的给定点上计算p (无论是从纹理中查找还是从某个函数中计算)。然后,确保一组纹理都得到相同的p值的一种方法是确保它们都从同一点查找它。

此评估点的UV可以存储在模式纹理的额外通道中。例如,您可以让红色和绿色通道存储用于计算p的UV坐标,蓝色通道存储打开该模式元素的阈值,而alpha存储要显示的模式的反别名灰度级别。如果需要的话,UV+threshold数据也可以在一个单独的二级纹理中。

要生成这个UV+threshold纹理,从输入模式纹理开始,您可以编程地找到连接的组件(例如,搜索黑色像素和填充)。将每个组件中所有纹理的评估点设置为组件中心的UV,并为其生成一个随机阈值。然后,在渲染时,使用像素着色器,首先对纹理进行采样,然后在给定的评估点上查找p,并将其与给定的阈值进行比较。

这样,每个模式形状都会看到一个统一的p值和阈值,并且要么打开,要么完全关闭。随着p的增加,更多的形状将通过他们的阈值并出现,给人的印象是一个持续变化的密度。

票数 6
EN

Computer Graphics用户

发布于 2016-03-14 10:32:47

另一个想法就是沿着这些思路。如果在平面上定义了一个统一的点集,并且有一个从平面到目标表面的映射函数,那么表面上的密度函数就是从平面表面到目标区域的映射方式。因此,一幅保持区域的地图会在目标上形成一个统一的点。

票数 0
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/1963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档