赞
踩
Spherize结点:球形化,可以做出鱼眼效果。
官方给出的产生这种效果的一种代码:
void Unity_Spherize_float(float2 UV, float2 Center, float Strength, float2 Offset, out float2 Out)
{
float2 delta = UV - Center; //1:偏移中心到图像中间,看下图
float delta2 = dot(delta.xy, delta.xy); //2:获取距离的平方
float delta4 = delta2 * delta2; //3:获取距离的四次方
float2 delta_offset = delta4 * Strength; //4:乘以自定义弯曲强度:得到的是一个二维的非线性的值
Out = UV + delta * delta_offset + Offset; //5: 再乘以偏移后的UV:就是获得距离的五次方 x 自定义强度值,得到一个二维非线性的缩放值
//6:UV + 自定义偏移
//7:最终相加:UV是线性函数,从5得到的是一个非线性函数,相加还是一个非线性值
}
ShaderGraph内实现:
补一个图形工具网站:图形计算器
最终得到的函数曲线:
下面是过程:对应ShaderGraph图中的标号
1:x-c:对应 float2 delta = UV - Center;
2:(x-c)平方: float delta2 = dot(delta.xy, delta.xy);
3:(x-c)四次方: float delta4 = delta2 * delta2; //3:获取距离的四次方
4:x-c)四次方 * s: float2 delta_offset = delta4 * Strength; //4:乘以自定义弯曲强度:得到的是一个二维的非线性的值
5:delta * delta_offset
到这里其实应该能看到,从-0.25到0.25,y的值基本一致,变化范围很小,把这个值单独输出,这个就对应下图的a指向的红色框
6:Out = UV + delta * delta_offset + Offset;
在补一张最终图:
上图的a段对应下图的红框区域:a段值接近线性,所以图中显示的比较正常。
b,c区域是非线性的变化较大,图中显示的就是红框外面的区域。
很多问题都是数学问题啊,还是要学学数学和所表示的几何含义。
好好学习,天天向上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。