多输入关联随机数算法?无限世界Poisson-Disc sampling实现咨询
多输入关联的确定性随机数实现
这类实现完全存在,核心逻辑是将多个输入整数通过无碰撞偏向的哈希压缩为单个确定值,作为常规伪随机数生成器的种子,不需要改造现有PRNG的核心逻辑。
完全匹配示例中的行为特征:只要所有输入值完全一致,输出的随机数就完全相同;只要任意一个输入值变动,输出就会产生无规律的差异化结果,且输出值不需要落在输入值的取值范围内。
常见实现方式:
- 基础乘加哈希:直接对多输入整数做链式乘加计算,得到确定的单值种子,示例代码逻辑:
// 输入:chunkX, chunkZ, globalWorldSeed 三个参数 long seed = globalWorldSeed; seed = seed * 2654435761L + chunkX; seed = seed * 2654435761L + chunkZ; // 可继续叠加任意数量的输入参数,计算结果完全确定 Random prng = new Random(seed); - 防碰撞优化版本:基础乘加哈希在高频调用下可能出现少量哈希碰撞,可替换为具备雪崩效应的整数哈希算法,让输入值的微小变动能均匀映射到输出值的所有位,避免生成结构位置重复、分布不均的问题。
无限世界下的Chunk级Poisson-Disc采样落地方案
解决多输入种子的生成问题后,不需要做全图的全局同步计算,只需要对传统Poisson采样做邻域适配,即可实现在无限procedural生成世界的无状态生成:
- 局部邻域扩展规则:每个独立Chunk计算Poisson采样点时,将计算范围向外扩展最小点距的1/2距离,覆盖相邻8个Chunk的边界区域,对范围内生成的所有候选点做最小距离校验,过滤掉距离过近的点。
- 无状态采样核心逻辑:
- 对任意Chunk的采样计算,不需要全局存储已生成的结构位置,所有邻域的候选点都可以通过
(目标Chunk坐标, 邻域偏移值, 全局种子)组合生成的确定性随机数复现 - 跨Chunk的距离校验完全基于可复现的候选点计算结果,不会出现结构重叠、位置漂移的问题,不需要将生成结果持久化存储
- 对任意Chunk的采样计算,不需要全局存储已生成的结构位置,所有邻域的候选点都可以通过
- 性能优化替代方案:如果跨邻域计算的开销过高,可以使用蓝噪声网格采样近似替代标准Poisson-Disc采样——将世界划分为与最小点距等大的网格,对每个网格的哈希值做阈值判断,让网格内的采样点分布满足最小距离约束,计算开销比传统Poisson采样低60%以上,完全能够满足结构生成的分布要求。
内容的提问来源于stack exchange,提问作者codingClown
相关产品推荐
相关产品推荐

