You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2D有机投影:Processing/GLSL下叶形平铺共形映射实现问询

2D空间叶形图案无畸变平铺的共形映射实现问题

问题背景

  • 开发环境:基于Processing框架开发,可选择GLSL shader实现或矢量实现方案
  • 实现目标:渲染对应参考效果,让图案铺满整个2D空间(或覆盖大尺寸显示区域),将重复纹理映射到通用叶形轮廓上
  • 硬性约束:叶形区域内部需支持UV坐标用于叠加重复图案,坐标变换必须为共形映射(conformal map),否则图案会出现可见畸变
  • 核心疑问:是否存在可将屏幕XY坐标直接投影到目标位置的函数,实现预期的图案映射效果?

已尝试的未达预期方案

  • 递归法
    • 实现逻辑:先将平面切分为条带,再把条带切割为上下边缘贴合条带边界的叶形,最后递归将叶形对半拆分,直到呈现足够的自然随机性;只要条带边界不在屏幕可视范围内,接缝就不会过于明显
    • 现存问题:无法有效避免图案畸变
  • Voronoi法
    • 实现逻辑:尝试寻找受向量场引导的距离函数,让生成的Voronoi图符合预期的叶形排布效果
    • 现存问题:很难实现所需的UV映射;可接受畸变不明显的良好近似方案,不需要完全精确的结果
  • 直接投影法
    • 实现逻辑:查阅资料得知连续复函数可作为共形映射,但未能基于该思路完成落地实现
  • 补充诉求:除上述思路外,需要完整可行的解决方案,或未被考虑到的新思路参考

可行实现方案

方案1:复变函数共形映射方案(shader友好,严格无畸变)

共形映射的核心性质是保持局部角度不变,复变解析函数天然满足共形要求,针对叶形(双圆弧闭合类透镜轮廓)的平铺需求,可通过Schwarz-Christoffel映射结合周期平移实现:

  1. 基础映射单元:取单位正方形[0,1]×[0,1]作为标准UV空间,通过Schwarz-Christoffel变换将正方形映射为单个叶形轮廓——叶形的两个尖点对应正方形上下边中点,圆弧边缘对应正方形左右边,该映射为严格共形映射。映射的积分系数可提前预计算为查找表,不需要在shader中实时运行复杂积分逻辑。
  2. 周期平铺逻辑:将屏幕坐标(x,y)先做模1运算得到基础单元坐标,再对相邻单元通过哈希值生成随机偏移,模拟自然随机的叶形朝向、大小微调;共形映射叠加缩放、旋转变换后依然保持共形性,这类微调不会引入畸变。
  3. GLSL实现提示:可直接将二维坐标作为复数z = x + i*y做运算,映射函数形式为f(z) = integral( 1/sqrt((z² - a²)(z² - b²)) )dz,调整积分常数匹配目标叶形的长宽比即可。

方案2:保角三角网格矢量方案(Processing原生友好,性能更高)

如果不需要严格数学意义上的共形,只要畸变控制在人眼不可察的程度,可采用预计算保角网格的方案,实现成本更低:

  1. 先绘制单个叶形的矢量轮廓,在轮廓内部生成均匀三角网格,通过LSCM(最小二乘共形映射)算法提前将网格顶点坐标和单位正方形UV做一一对应,导出为顶点-UV映射表。
  2. 平铺时直接在Processing中按网格排布叶形实例,每个实例通过哈希值生成随机旋转、等比缩放参数,采样重复图案时直接查询预计算的UV表即可,不需要实时计算映射关系。
  3. 接缝处理:相邻叶形的边缘顶点做1-2像素的位置融合,即可完全隐藏拼接缝隙。由于三角网格UV是提前计算的保角映射,内部图案不会出现拉伸畸变。

方案3:优化递归分块方案(实现成本最低)

原有递归法仅需补充保角校正步骤即可解决畸变问题:

  1. 保留切分条带、切割叶形、递归拆分的原有逻辑,每一次拆分叶形时,放弃线性坐标切割方式,对拆分后的两个子叶形分别做局部相似变换(仅包含平移、旋转、等比缩放操作)匹配父叶形边缘。
  2. 所有坐标变换全程禁用非等比缩放、切变操作,从根源上避免角度畸变——共形映射的局部等价于相似变换,只要拆分全程保持局部变换为相似变换,整体就不会出现可见的图案拉伸。
  3. 条带边界处做1-2像素的渐变过渡,即可完全隐藏接缝。

内容的提问来源于stack exchange,提问作者Cadeyrn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:18:15