当前位置: 首页 > news >正文

Unity可视化Shader工具ASE介绍——自定义函数

阿赵的Unity可视化Shader工具ASE介绍目录
  大家好,我是阿赵。
  之前介绍过一些ASE的用法,发现漏了一个比较重要的,自定义函数的使用。这里补充一下。

一、 使用的场合

  在使用ASE制作Shader的过程中,可能会遇到以下这些情况:

  1. 有些处理方式,写代码几行就搞定,但如果使用节点连接,反而很复杂
  2. 有些算法比较复杂,不知道怎样在ASE里面通过节点连出来。
      简单一句话概括,就是遇到写代码比连节点更简单的时候,我们会像能不能在ASE连节点的基础上,单独某个部分自己写代码?
      答案是可以的。ASE提供了一种节点,叫做Custom Expression节点。
    在这里插入图片描述

  这种节点可以自定义输入输出的参数内容,然后自己写代码实现。

二、 举例说明

  这里我举一个简单的均值模糊的例子。
  均值模糊的算法很简单,只需要把当前像素点附近一定范围内的所有像素点采样一次,把色值加起来再除以像素点数量,求得一个平均的像素颜色,再赋予给原来的像素就行。
  如果是写代码,其实实现起来很简单,输入一个模糊的半径radius,然后那当前像素点的uv,然后写2重循环,对uv做偏移,对图片采样,把色值加起来,再求平均值。
如果写成代码就是这样:

float3 AvargeBlurFun( sampler2D tex, float2 uv, int radius)
{float r = 0;float g = 0;float b = 0;float count = radius*2+1;count = count*count;for(int i = -radius;i<radius+1;i++){for(int j = -radius;j<radius+1;j++){float2 uvTemp = uv + float2(_MainTex_TexelSize.x*i,_MainTex_TexelSize.y*j);float4 colPixel = tex2D(tex,uvTemp);r = r+colPixel.x;g = g+colPixel.y;b = b+colPixel.z;		}}r = r/count;g=g/count;b=b/count;return float3(r,g,b);
}

  这个代码如果用ASE来连接,其实我也不知道怎样连,因为没找到循环的节点。我看到过其他人用ASE实现这个模糊的算法,只能写死采样像素点附近的8个点采样,加上本身的像素点,再做平均。
  所以这时候就需要用到自定义函数的Custom Expression节点。
  先来分析一下,这个求均值的函数,需要的参数有:
1. 一个sampler2D的贴图
2. 该贴图对应的uv坐标
3. 模糊的半径
4. 由于_MainTex_TexelSize在没有定义之前是不能用的,而ASE有节点可以获取
_MainTex_TexelSize,所以_MainTex_TexelSize也最好传进去。

  于是我们需要先新建一个Custom Expression节点,改一下名字:
在这里插入图片描述

  然后由于我们需要输出的是一个rgb值,所以把输出类型改成float3
在这里插入图片描述

  接下来新增刚才说的4个传入参数:
在这里插入图片描述

  在Inputs里面找到第一个参数,修改类型为sampler2D,然后把名字改成tex:
在这里插入图片描述

  接下来点加号,继续添加其他几个输入的参数:
在这里插入图片描述

  然后把其他几个参数的名字和类型修改好
在这里插入图片描述

  这时候,这个自定义节点会变成这样:
在这里插入图片描述

  接下来把代码复制到Code框里面:
在这里插入图片描述

float r = 0;
float g = 0;
float b = 0;
float count = radius*2+1;
count = count*count;
for(int i = -radius;i<radius+1;i++)
{for(int j = -radius;j<radius+1;j++){float2 uvTemp = uv + float2(texelSize.x*i,texelSize.y*j);float4 colPixel = tex2D(tex,uvTemp);r = r+colPixel.x;g = g+colPixel.y;b = b+colPixel.z;		}
}
r = r/count;
g=g/count;
b=b/count;
return float3(r,g,b);

最后把输入输出的参数连接好:
在这里插入图片描述

这时候材质球上已经显示出了参数:
在这里插入图片描述

把材质球赋予给模型,调节radius半径参数,就会出现均值模糊的效果了:
在这里插入图片描述

在这里插入图片描述


http://www.mrgr.cn/news/61961.html

相关文章:

  • PyQt入门指南三十五 QAction动作组件
  • OpenCV基本操作(python开发)——(7)实现图像校正
  • 【网络】1.UDP通信
  • 空气断路器和真空断路器介绍
  • 端到端拥塞控制的公平性和稳定性
  • 一个方法助你快速取消Word文档只读模式
  • HTTP的初步了解
  • golang gin ShouldBind的介绍和使用
  • LivePortrait——生成可拼接和重定向控制的高效肖像动画翻译
  • 【约束优化】一次搞定拉格朗日,对偶问题,弱对偶定理,Slater条件和KKT条件
  • asp.net webapi实现FileStreamResult
  • Maven下载安装配置(环境、本地仓库、阿里云、jdk、idea)(Win11)
  • 论分布式存储系统架构设计
  • 为什么资产管理中会用到RFID系统
  • NavVis LX系列产品典型应用—现有住宅装修改造-沪敖3D
  • 使用SPM为ios项目添加lookin所遇问题总结
  • 记MySQL下一次DEPENDENT SUBQUERY的优化
  • 从0学习React(10)
  • 代码随想录算法训练营第三十一天|Day31 贪心算法
  • 【PG高可用】patroni配置文件