实现物理随机性(如在 Blender 中)

Posted

技术标签:

【中文标题】实现物理随机性(如在 Blender 中)【英文标题】:Implementing randomness for physics (like in Blender) 【发布时间】:2021-03-16 13:02:11 【问题描述】:

例如,我指的是 Blender 的粒子碰撞系统,您可以在其中将粒子阻尼的随机性设置在 0.0 和 1.0 之间。 我现在的问题是:它究竟是如何工作的?是的,会有一个介于 0.0 和 1.0 之间的随机数,但它如何应用于阻尼因子?我想在 Java 中创建类似的东西,因此我想完全理解其背后的计算。随机因子是概率 p 和计算类似于高斯分布吗? 作为一个应用示例:我想随机化一个向量的方向。

vector.y += random1; vector.y += random2; vector.z += random3; vector.scale(prevLength/vector.length);

但是,看起来所有向量分量都为零,这不太可能但并非不可能。很明显,这不是正确的解决方案。

【问题讨论】:

听起来更像是一道数学题。实际上,这听起来像是您应该在blender.stackexchange.com 上问的问题 mh,也许...另一方面,我的目标是在 java 中实现它... 为什么关门了?我要求将随机性应用于因子的理论。在什么意义上不够集中? 我没有投票结束,但可能是因为“将随机性应用于因子的理论”不是一个特定的编程问题。 您好,如果您需要理论方面的帮助,请不要在 Stack Overflow 上提问(数学可能是一个更好的地方?)。如果您对 Java 实现或 Java 代码的某些特定问题有疑问,请使用代码示例更新您的问题,以了解如何重现问题,我们将为您提供帮助。 【参考方案1】:

我找到了阻尼的答案

public Vector3f damping(Vector3f vector) 

    float random = (float) (this.randomDamp*(Math.random()*2-1));
    float clampedValue = Math.max(0, Math.min(1, (1-damp)+random)); //clamp between 0 and 1
    vector.scale(clampedValue);
    return vector;

看起来搅拌机只是添加随机数,因此因子为 0.5,随机因子为 1,最终因子将在 -0.5 (0) 和 1.5 (1) 之间变化。

【讨论】:

以上是关于实现物理随机性(如在 Blender 中)的主要内容,如果未能解决你的问题,请参考以下文章

Blender:通过脚本创建自定义物理

[Blender]使用通道ID,快速为画面元素分层

漏洞批量验证框架 -- BLEN

Blender插件:Muscle System

Blender 使用总结

Blender 导出到 Three.js