当前位置:   article > 正文

ShaderGraph结点分析---Spherize---2_shadergraph 鱼眼

shadergraph 鱼眼

Spherize结点:球形化,可以做出鱼眼效果。

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得到的是一个非线性函数,相加还是一个非线性值
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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区域是非线性的变化较大,图中显示的就是红框外面的区域。
在这里插入图片描述

很多问题都是数学问题啊,还是要学学数学和所表示的几何含义。

好好学习,天天向上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/127838
推荐阅读
相关标签
  

闽ICP备14008679号