禁止商用。所有使用 PolarisUI 的应用都必须公开完整源码。查看许可条款
2.4.3 高光与色散修复
这次修复渲染本身及默认参数,而不是把“设置界面里有滑杆”当作效果正常。
问题及修改
2.4.2 的高光默认 .42,再乘很小的边缘系数,浅色材质向白色混合时尤其缺乏对比。色散默认和几个预设都为 0;手动开启后,单侧偏移被乘 .35,最高只剩 .7 逻辑像素;它还采样了强高斯模糊后的背景。
现在默认高光 .82、色散 .85,原来的范围和 API 没有改变。
高光与阴影都沿同一个已有的贝塞尔/SDF 轮廓,窄反射峰值仍在 d=0。正向受光形成亮反射,另一侧形成受控的环境暗反射,让浅色玻璃也有边缘层次。它不是 selected/focus 描边,不额外向内偏移白圈。反射通过有界混合合成,不逐项累加至白色截断;指针光照始终有稳定 Z 分量,不存在零向量引起的突变。
色散从同一层冻结的清晰场景纹理取得红色正向偏移、绿色原位、蓝色反向偏移,再减去原位采样,形成局部通道差。去除该差在现有 SDR 值空间中的加权亮度后,仅将剩下的色度差加入已经模糊的背景。最后根据颜色空间剩余范围统一缩放,避免逐通道硬截断造成突然白闪。
基底仍是强模糊,默认 sigma=18、blur=.98,最大 sigma=32 / blur=1 也不会把边缘色散一起抹掉。中部不重新加入清晰棋盘,不降低整个控件的模糊度。背景本来均匀时,通道差为零,不凭空绘制“彩色边框”。
使用
ui.theme()
.sigma(18f)
.blur(.98f)
.shine(.82f)
.dispersion(.85f);
// 逐项关闭,不影响另一项,也不影响 Gaussian 模糊。
ui.theme().shine(0f);
ui.theme().dispersion(0f);
// 材质颜色仍可自定义;默认是白色反光与黑色环境阴影。
ui.theme().highlight(Colors.WHITE).shadow(Colors.BLACK);
shine 范围 0..1.5。dispersion 范围 0..2,表示轮廓处单个偏移通道的逻辑像素数,向内随倒角衰减;它不是物理折射率,也不是整个控件图层位移。
右上角 LiquidGlass 设置保留滑杆和左右加减。默认值、程序更新与数值显示同源;切换分类、浅深色和重新打开设置均保留当前值。低反光预设为 shine=.35 / dispersion=.35,恢复默认则为 .82 / .85。
直接对照
sh run-example.sh 8 OpticsComparison
sh run-example.sh 21 OpticsComparison
Windows 使用对应 run-example.cmd。四块示例分别只关闭/开启这两项,其余参数相同。右侧参数面板直接修改共享 Theme。
验证与边界
sh tests/run-edge-optics.sh 在宿主创建的实际 OpenGL 3.3 FBO 上执行生产 shader。20 项检查覆盖强模糊下的色散、关闭后逐像素恢复、均匀背景无伪彩、单通道偏移全量响应、亮度细节不泄漏、轮廓位置、浅色反射对比、最大光泽不刷白面板、确定性和指针连续性。
sh tests/run-edge-settings.sh 包含 20 项默认/模型/预设检查,以及 11 项真实窗口检查;Robot 实际移动滑杆/按 Home 和 End,验证 framebuffer 边缘出现或消失的颜色,而不是只读 Theme 数值。
这是屏幕空间 SDR 材质近似,不是精确光谱光线追踪。本次没有更改 Gaussian kernel、字体算法、AA、曲线裁剪、动画或 native 接口。没有新增网络依赖或字体文件。