去掉圆角_【第2054期】不顾一切找圆角 —— Figma 实时平滑圆角方案探究

本文深入研究了Figma中实现类似Apple Squircle平滑圆角的功能,探讨了从超椭圆公式到贝塞尔曲线的转换过程,以及在设计和实现中遇到的挑战。通过数学工具如微分几何和欧拉螺线,作者提出了一个简约的实现方案,解决了平滑度与直线边长的平衡问题,最终实现了与iOS 7图标相似的平滑圆角效果。
摘要由CSDN通过智能技术生成

前言

这么多年见过公式最多的分享了。今日早读文章由@Martin翻译授权分享。

正文从这开始~~

d27372038c172e8f8089be7dfc44258e.png

本文明晰的展示了 Figma 工程师是如何通过程序挑战,寻找最完美的问题解法。

在 1972 年,Charles Eames (查理伊姆斯)在一次著名的访谈中,探讨了 「关于设计本质的一些基础问题」(译者注:Figma 链接挂了,这里换了一个)。这些问题中的第一个问题就是:「你如何定义设计」?他的回答是「一种将元素排列组合,以达到特殊目的的规划手段」。

7a546b90bdcf86606cda8776fb9f7dbe.png

伊姆斯夫妇

在后续的问题中,他的回答都非常简短俏皮。但当谈论到设计的限制时,他开始深思熟虑,严肃起来:「设计的关键点之一便是:设计师对于设计的边缘和设计的限制的了解、经验和认知;以及有了对设计限制的认知之后,他有多少意愿和热情去在限制内进行设计。」

尽管我不是一个设计师 —— 我是 Figma 的工程师。然而 Eames 的评论对我的工作也非常有价值。我不是排列 UI 元素,设计产品,我是排列数学概念,形成代码表达式来实现工具功能。我实现的代码同样也要考虑到 时效、简化成本、维护、美学 等方面的限制。

最近的一个项目验证了上面的这些理论。我的任务是给 Figma 添加一个类似 Apple 'squircle' 平滑圆角的功能支持。然而对此我的了解不多,我得做点调研。

现在回顾起来,这个项目简直就是数学奥德赛,开始的失败令人焦虑,过程中出现了很多隐藏的问题和新的限制,在各种压力下探索出最终的解决方案。简而言之,每个设计师出方案的时候都有过这种体验,某种意义来说,很多设计师每天都这样。

为了让跟我一样的数学极客能从过程中获得乐趣,也为了展示数学是如何成为解决问题的利刃,我将整个过程从零开始在下面展示。

译者注:个人认为了解设计限制包括承载设计的媒介是设计师的道德,能否客观评估自己之前的设计经验在限制下是否有效 或 怎样将之前的经验转换为限制下的成果是设计师的重要能力

平滑的 Squircle 圆角

在我还没加入 Figma 之前,2013 年 6 月 10 日 Apple 发布了 iOS 7 。其中有一些改动非常的精巧:主屏的图标看起来更圆润、有机。他们移除了直角圆角,加入了平滑圆角 squircles (‘square’ 和 ‘circle’的混成词)。

差异在哪儿?老实说,差异非常微小 —— 平滑圆角从原来直角圆角开始的地方开始弯曲,但是整个曲面上去掉了一些部分,相比直角圆角来说,从直角到弯曲的部分更加柔顺。

使用数学语言来描述便是:squircle 圆角的边缘曲率是连续的,而直角圆角不是。这看似微不足道,但这种设计小细节却有很大的体验影响:squircle 圆角没有直角圆角那种人工雕琢痕迹,它的感觉就像河床上捡到的因冲刷而成形的鹅卵石,看起来统一且自然。

9cf8a03b867952daddc5a1297b830f00.png

1.1 — 直角圆角 vs squircles 圆角: 看上去差距不大!

工业设计师很了解曲率对于物体感受的影响。仔细看看你手头的 Macbook,或者看看老版的 Apple 有线耳机。你可以看到它们表面的高光是非常顺滑的。

这是设计中不显山漏水的曲率连续导致的。对于苹果来说,软硬结合,从硬件到软件界面,将设计风格一统,不是什么难事。

译者注:见微知著,我们的 UI 设计 正在从粗放型设计到精细型设计转变,Apple 往往在小处涵盖 自然的、逻辑通顺 的设计细节,其中包含了很多数学理论,值得我们学习。

从形式到公式

我们 Figma 的人当然喜欢 iOS 的设计师的这些设计。我们还觉得我们 Figma 的用户也需要这样的圆角功能。为了让用户在设计的时候能够使用平滑圆角,我们需要寻找一个精确的数学描述以便实现功能。

幸运的是,人们从 iOS 7 发布后就开始在网络上探讨、咨询这个问题,我们肯定不是第一个吃螃蟹的人。Marc Edwards 的 Fundamental initial work 文章中包含了一张截图,指出这个形状是从椭圆公式推导出来的,因此叫「超椭圆」。下面这个公式可以描述 圆、椭圆和超椭圆,形状取决于 变量 a, b 和 n:

f01683175103faff54dca413fff48df5.png

0a82ad984edfaf6f2d01dc9fcabea8f5.png

9617871a1c04c644f74d1df060702bf6.png

3ddb7e5e85c830c724c2a4299e0eb1db.png

n = 2, a = 5 ,b = 3 的时候,你会在标准坐标系上获得一个 半径 x 轴 5 格,y 轴 3 格 的椭圆。n = 2 , a = b = 1 则描绘了一个标准的单位圆。然而,如果 n > 2 的时候,结果就是超椭圆 —— 椭圆形状与图形本身的方格边框进行混合, n 越大,圆角就越来越「锐利」,在之前的网上讨论中,一般认为 Apple 的圆角形状是 n = 5 时候的形状。如果你 动手试一试, 你会发现圆角形状跟 iOS 7 确实很像。

如果这是真的数学描述,那我们只需要想办法用几段 Bezier 跟圆角契合上,然后做点工程上的事儿,把功能整合进 Figma 就行了。尽管如此,不幸的是有些人认真的跟进了之后,发现 超椭圆 公式实际上不完全对 —— The hunt for the squircle (然而,在发现之前, 已经有很多人使用那个「不完全对的公式」 到界面跟图标上了)。实际上,上边的公式不管怎么调节 n,都跟实际的 iOS 图标形状有微小的差异。

我的探索第一次进到了死路:我们有优雅简单的公式,看起来跟 iOS 圆角也很像,但其实公式并不一样,我们想要给用户提供最正确的功能,因此还要继续探索。

既然研究走到了死路,项目想要继续进展便需要加倍的努力,但很荣幸地、我再一次站在了别人的肩膀上得以继续探索。Juicy Bits 的 Mike Swanson ,做了一个假想:那就是 squircle 平滑圆角是使用几段贝塞尔曲线拟合的。遗传算法提炼 iOS 圆角公式 (译者注:网站又挂了,web archive 将就下吧),他使用遗传算法提炼了 484 次,将形状优化的跟 Apple 官方圆角形状差不多了。他得出的这个观点非常的新潮,后续跟进的 Manfred Schwind 更是直接贴出了 实现。效果看上去跟 iOS 图标没差,所以现在我们已经有了两种不同的实现平滑圆角的贝塞尔方法:别人已经搞出来了,我们啥也不用干了!

译者注:平方公式方法跟三角函数 360 度推点法有性能问题,这个可以参考我上一篇文章,贝塞尔方法是一个比较不错的动态绘制方案,这里补充一个关于 iOS UIKit 的平滑圆角快速实现 —— Continuous Rounded Corners with UIKit

一些问题

在我动手搬运代码到 Figma 之前,还有两个细节,需要考虑:

首先࿰

Figma是一种设计工具,而Figma插件可以将HTML转换为Figma或将Figma设计转换为代码。要使用这个插件,首先在Figma中打开一个新的或现有的文档,然后按下cmd/键并搜索"html figma",然后按Enter。接下来,您可以输入要导入的URL,将其转换为Figma设计。 此外,还有一个叫做"镀Chrome"的插件,它可以将Figma页面的原型从浏览器中打开的当前文件导出为静态的HTML文件,并使用图像映射链接。但在使用之前,请确保在扩展选项页面中设置了您的Figma个人访问令牌。通过这种方式,您可以模拟Figma的一些交互效果,比如"后退"交互,通过在元素名称中进行设置。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [html-figma:用于将HTML导入到Figma层的插件](https://download.csdn.net/download/weixin_42127748/14959063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ChromedFigmaFigma html导出chrome扩展](https://download.csdn.net/download/weixin_42138780/14959285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值