找回密码
 立即注册
查看: 266|回复: 1

旧日志 2023年1月22日 SDF生成算法实现 Substance ...

[复制链接]
发表于 2023-1-24 20:05 | 显示全部楼层 |阅读模式
【卷卷】陶协Unreal 2023-1-22 0:43:45
解决了。。就==很离谱
【卷卷】陶协Unreal 2023-1-22 0:44:02
sdf在sd内的搭建算某种层面上的解决了
【卷卷】陶协Unreal 2023-1-22 0:44:32
虽然不能够通过自建函数实现,但通过官方给出的原子节点,然后自己改造了一下解决了。。。
【卷卷】陶协Unreal 2023-1-22 0:45:48








【卷卷】陶协Unreal 2023-1-22 0:45:59




【卷卷】陶协Unreal 2023-1-22 0:46:20
sd官方给出的计算模式和他们传统的不一样,反正我也不清楚哪里不一样
【卷卷】陶协Unreal 2023-1-22 0:46:32
但肯定不一样在进行计算的时候
【卷卷】陶协Unreal 2023-1-22 0:47:10
但毕竟官方没有打算公布原子节点的代码啥的,肯定他们私下优化过
【卷卷】陶协Unreal 2023-1-22 0:47:23
但我也就到这了,不在继续深究了
【卷卷】陶协Unreal 2023-1-22 0:47:50
因为sdf这个搭建好,只要是搭建出来了,我在算法移植的任务就完成了
【卷卷】陶协Unreal 2023-1-22 0:48:14
毕竟没必要一直深究下去,太浪费时间了,解决这个问题花了我那么久时间
【卷卷】陶协Unreal 2023-1-22 0:48:20



【卷卷】陶协Unreal 2023-1-22 0:48:51
全是文章,最后实验了一堆东西,发现官方像素处理器不支持进行运算,所以他们给了一个距离节点作为补充
【卷卷】陶协Unreal 2023-1-22 0:49:58



【卷卷】陶协Unreal 2023-1-22 0:50:21



克亚尔 2023-1-22 0:51:22
加减乘除就是图层算的模式吗
【卷卷】陶协Unreal 2023-1-22 0:51:26
因为sdf的概念就是给每个像素计算出它与其它之间的距离,我直接使用uv坐标作为距离计算了一张纯粹的sdf出来,也算作完成函数上的实现了==,因为真的我实验了几十次,出不来
【卷卷】陶协Unreal 2023-1-22 0:51:29
不是
【卷卷】陶协Unreal 2023-1-22 0:51:53
在采样图像后就是对图像进行加减乘除
【卷卷】陶协Unreal 2023-1-22 0:52:09






【卷卷】陶协Unreal 2023-1-22 0:52:34
通过第二张图,你可以发现,我将坐标减去二值图像的方式,将坐标的距离赋予给图像
【卷卷】陶协Unreal 2023-1-22 0:52:58
达到很巧妙的方式给了二值图距离,而不需要计算
【卷卷】陶协Unreal 2023-1-22 0:53:05
但问题就是,不支持其它图形
【卷卷】陶协Unreal 2023-1-22 0:53:09



【卷卷】陶协Unreal 2023-1-22 0:54:02
一个x方向一个y方向,然后分别进行欧氏距离计算


【卷卷】陶协Unreal 2023-1-22 0:54:14
0.5,0.5代表整个中心点
【卷卷】陶协Unreal 2023-1-22 0:54:38
等于我让XY整个值去求到0.5,0,5的距离
【卷卷】陶协Unreal 2023-1-22 0:54:47
算出来的欧式距离就在最后输出
【卷卷】陶协Unreal 2023-1-22 0:54:55



【卷卷】陶协Unreal 2023-1-22 0:55:34
但这个没啥意义,就图个乐子只能,有用的还是上面官方的distance节点组件的sdf生成器
【卷卷】陶协Unreal 2023-1-22 0:56:02





【卷卷】陶协Unreal 2023-1-22 0:56:35
好几种距离都试过
【卷卷】陶协Unreal 2023-1-22 0:56:47
欧氏的,城市的,巴拉巴拉的
【卷卷】陶协Unreal 2023-1-22 1:00:46
但还有一个我今天想到的一个很大可能在像素处理器里搭建的sdf生成算法,像素处理器不是不能逐像素相互之间计算互相的距离吗,那我觉得,如果以类似边缘检测的方式,进行抖动图像,每向外抖动一次提升一点亮度,然后,没向内抖动一次就降低一次灰度,是否可以在图形的层面达成整体的距离计算,但假如真能实现,这个也不精确,但估计可以
【卷卷】陶协Unreal 2023-1-22 1:02:12
因为假如我抖动的足够细,细到一个像素,叠加足够多次数,那么每一次都会比之前更小,就有距离了,不造,这个是今天想出来的能够在像素处理器里实现sdf的巧计,但我不知道是不是真的能实现,后续如果时间多可以尝试一下
---------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【卷卷】陶协Unreal 2023-1-22 1:13:51
感谢七块君的点子,就是distance节点,虽然我当时听到后,还是跑去自己用函数搭节点去了==
【卷卷】陶协Unreal 2023-1-22 1:16:58
浪费大把时间,回头一看发现,像素处理器很大可能并不支持像素间进行距离计算,所以官方才给了一个distance节点,我今天看到光向研习社里有位发了个文章,里面是三渲二sdf的文章中的non uniform blur节点,这个节点拆过,用的5向抖动的方式进行模糊的,所以顺便也想着不晓得可不可能像记录里谈到的通过抖动二值图的方式获得距离,这些不清楚,但sdf在sd内估计是算作搭建出来了,对比了一下和csdn的那些生成出来的效果区别并不太大,应该是成功了
【卷卷】陶协Unreal 2023-1-22 1:17:55




SDF生成算法节点图(非详尽但足够)


这里面的乘主要是进行值重新映射,应该这么说吧,不是特别暗==,不变也没事,因为试过了,historm可以检测到
【卷卷】陶协Unreal 2023-1-22 1:20:14
上一次那个类sdf效果,并不是sdf在准确的角度而言,其实我是通过抖动图像的方式进行灰度混合实现的类sdf融合渐变的效果。
【卷卷】陶协Unreal 2023-1-22 1:20:32





【卷卷】陶协Unreal 2023-1-22 1:20:54
这个应该才是纯的根据欧氏距离计算灰度图出来的融合
【卷卷】陶协Unreal 2023-1-22 1:23:23
睡觉睡觉
【卷卷】七块君@d(д) 2023-1-22 9:14:22
陶协Unreal   感谢七块君的点子,就是distance节点,虽然我当时听到后,还是跑去自己用函数搭节点去了==
@陶协Unreal 不客气

【卷卷】七块君@d(д) 2023-1-22 9:17:12
计算像素距离无论如何都需要一定程度上的串行遍历,如果没有for循环之类的节点,Pixel Processor 就做不了。
【卷卷】七块君@d(д) 2023-1-22 9:18:30
我记得S里有另一个 Processor 是可以循环的甚至递归的,不知道有没有办法结合。

【卷卷】七块君@d(д) 2023-1-22 9:34:00
陶协Unreal   
@陶协Unreal 这里不应该对Distance进行美术上的主观调亮,否则你会失去像素距离的真实性。没记错的话 Distance 直接出来的颜色在[0,255] 区间下应该就是  256 边长贴图里的真实距离。
【卷卷】七块君@d(д) 2023-1-22 9:36:52
原本的值在step时是可以精准控制外扩或收缩几个几个像素的距离。
【卷卷】七块君@d(д) 2023-1-22 9:40:58
得理解SDF存储在8位无符号格式中的原理
【卷卷】七块君@d(д) 2023-1-22 9:53:57
网上很多方案在计算原始距离时,算法都都没什么问题,但在最终存储颜色阶段多上有点形而上。
【卷卷】陶协Unreal 2023-1-22 10:02:48
@七块君@d(д) 感谢,我后续改进一下
【卷卷】七块君@d(д) 2023-1-22 10:05:04
你可以先测试下,区间映射在什么范围里可以精确step的距离。
【卷卷】七块君@d(д) 2023-1-22 10:05:38
这个对SDF的后续应用很重要
【卷卷】陶协Unreal 2023-1-22 10:05:47
好的
【卷卷】七块君@d(д) 2023-1-22 10:07:06
七块君@d(д)   


@陶协Unreal 这里不应该对Distance进行美术上的主观调亮,否则你会失去像素距离的真实性。没记错的话 Distance 直接出来的颜色在[0,255] 区间下应该就是  256 边长贴图里的真实距离。
当然,我这里说的也可能不完全符合实际情况
【卷卷】陶协Unreal 2023-1-22 10:08:54
话说七块君,我之前记录里写到的,通过抖动图像进行多个方位的偏移,是否在模拟距离上可行呢
【卷卷】七块君@d(д) 2023-1-22 10:09:26
我得研究下
【卷卷】陶协Unreal 2023-1-22 10:09:30
抖动图像我在应用上已经证明可以进行二维图像融合的效果了
【卷卷】陶协Unreal 2023-1-22 10:09:47
那个模拟出来效果很好
【卷卷】七块君@d(д) 2023-1-22 10:11:30
七块君@d(д)   @陶协Unreal 这里不应该对Distance进行美术上的主观调亮,否则你会失去像素距离的真实性。没记错的话 Distance 直接出来的颜色在[0,255] 区间下应该就是  256 边长贴图里的真实距离。
果然说错了,极端情况应该是是对角线256。不过最终还是要实际的比例尺。
【卷卷】七块君@d(д) 2023-1-22 10:14:08



【卷卷】七块君@d(д) 2023-1-22 10:14:40
你的抖动指的是?
【卷卷】陶协Unreal 2023-1-22 10:15:03
就有点像均值模糊
【卷卷】陶协Unreal 2023-1-22 10:15:36
多个方向,对原图像偏移一点距离,然后加在一起,然后除以总数?应该吧
【卷卷】陶协Unreal 2023-1-22 10:15:41
这块暂时还是思路
【卷卷】七块君@d(д) 2023-1-22 10:16:23
通过卷积?
【卷卷】捌 2023-1-22 10:16:42
初一还在卷,我他妈认识你们真是我的福气
【卷卷】陶协Unreal 2023-1-22 10:17:37
是的,卷积模板的方式
【卷卷】陶协Unreal 2023-1-22 10:18:19
sdf也有掩膜计算的方式但像素处理器算不出来,我当时就放弃这条路线
【卷卷】陶协Unreal 2023-1-22 10:18:53
这么说貌似这思路跟掩膜很像嘞。。。
【卷卷】七块君@d(д) 2023-1-22 10:25:51
实验难度在于 pixel processor 没有办法循环采样。
【卷卷】七块君@d(д) 2023-1-22 10:27:11
是会有像素偏移几千次的情况的。没发连
【卷卷】七块君@d(д) 2023-1-22 10:33:51
好像有办法
【卷卷】七块君@d(д) 2023-1-22 10:34:22
放弃循环采样,改用迭代。
【卷卷】七块君@d(д) 2023-1-22 10:34:36
说不定有戏
【卷卷】陶协Unreal 2023-1-22 10:38:57
fxmap有迭代功能,不清楚可不可行
【卷卷】七块君@d(д) 2023-1-22 10:39:02
是的
【卷卷】七块君@d(д) 2023-1-22 10:39:30
如果能用到fxmap的迭代,理论可行
【卷卷】七块君@d(д) 2023-1-22 10:44:37
又仔细想了下,每次迭代采样8x8个像素,1024的贴图迭代最多是128次。我想的是极端情况。
【卷卷】七块君@d(д) 2023-1-22 10:46:02
应该可行,不过连8x8的采样,有点累
【卷卷】七块君@d(д) 2023-1-22 10:46:20
一会我试试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-1-24 20:12 | 显示全部楼层
关于本文中的迭代,作者进行补充,可以参考non uniform blur拆开的核心结构,其用的就是通过多个同样效果不同值产生的结果合并,达到迭代,从而防止在一个像素处理器内迭代次数过多造成过长延迟卡顿等情况
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-23 09:54 , Processed in 0.090365 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表