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

news2025/1/10 23:30:30

阿赵的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.coloradmin.cn/o/2228195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端性能优化——缓存优化

前端性能优化可以从多个方面下手&#xff0c;例如加载性能优化、渲染性能优化、代码优化、缓存优化、性能监测和优化等方面下手&#xff0c;下面针对缓存优化分享一下优化思路。 浏览器缓存主要分为强缓存和协商缓存。强缓存命中时&#xff0c;浏览器直接从本地缓存中获取资源&…

Unity3D包管理bug某些版本Fbx Exporter插件无法搜索到的问题

这个问题是在使用unity的时候发现的 有些版本里没有Fbx Exporter插件也是没法搜到 经过测试&#xff0c;在package manager中开启Enable Preview Packages也没有用 这个插件在2020已经是正式版了&#xff0c;不需要再开启 后来发现可能是版本bug 需要手动开启 在工程的Pac…

03.DDD六边形架构

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 什么是依赖DDD四层架构六边形架构代码实现 想要详细了解六边形架构&#xff0c;可以看我之前的一篇文章。是对六边形架构原文的翻…

Android启动流程_Zygote阶段

前言 上一篇文档中我们描述了 Android 启动中的 init 启动部分&#xff0c;本片文档将会继续 Android 启动流程的逻辑&#xff0c;继续梳理 Zygote 部分功能。 说明框架 对于 Zygote 进程&#xff0c;要从以下框架说明&#xff1a; 第一点&#xff0c;编译&#xff0c;zygo…

最新AI软件部署,ChatGPT商业AI系统源码,支持GPT4.0+AI换脸+AI智能体GPTs应用+AI绘画+AI视频+文档分析

一、前言 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统&#xff0c;提供一站式 AI B/C 端解决方案&#xff0c;AI大模型提问、AI绘画、专业版AI视频生成、文档分析、多模态识图理解、TTS & 语音识别对话、AI换脸、支持AI智能体应用&#xff08;…

C++ | Leetcode C++题解之第514题自由之路

题目&#xff1a; 题解&#xff1a; class Solution { public:int findRotateSteps(string ring, string key) {int n ring.size(), m key.size();vector<int> pos[26];for (int i 0; i < n; i) {pos[ring[i] - a].push_back(i);}vector<vector<int>>…

联想笔记本电脑睡眠后打开黑屏解决方法

下载联想机器睡眠无法唤醒修复工具 下载地址&#xff1a;https://tools.lenovo.com.cn/exeTools/detail/id/233/rid/6182522.html 使用完后重启电脑&#xff0c;问题解决。

应用案例 | Panorama SCADA助力巴黎奥运会:保障赛事协调与安全

谈到2024年最受关注的体育盛事&#xff0c;巴黎奥运会无疑是焦点之一。作为全球瞩目的顶级赛事&#xff0c;它不仅汇集了来自世界各地的精英运动员&#xff0c;还点燃了全球观众的热情。然而&#xff0c;组织如此大规模的活动绝非易事。从大量游客通过公共交通涌入&#xff0c;…

Flux-IP-Adapter-V2版本发布,效果实测!是惊喜还是意外?

更多AI教程&#xff1a;AI教程_深度学习入门指南 - 站长素材 简介 XLAB团队发布了FLUX.1-dev模型的最新IP-Adapter V2版本。这是在之前IP-Adapter V1版本上的进一步升级。新版本的IP-Adapter模型在保持图像纵横比的同时&#xff0c;分别在512x512分辨率下训练了150k步&#x…

【计算机网络教程】课程 章节测试1 计算机网络概述

一. 单选题&#xff08;共16题&#xff09; 1 【单选题】以下关于TCP/IP参考模型缺点的描述中&#xff0c;错误的是&#xff08; &#xff09;。 A、在服务、接口与协议的区别上不很清楚 B、网络接口层本身并不是实际的一层 C、它不能区分数据链路和物理层 D、传输层对…

超出人类思维的「系统0」:AI正在创造一种新的思维方式吗?

在大众的认知中&#xff0c;人类的思维分为系统 1&#xff08;System 1&#xff0c;直觉的、快速的、无意识的、自动思考&#xff09;和系统 2&#xff08;System 2&#xff0c;有逻辑的、缓慢的、有意识的、计划和推理&#xff09;。 如今&#xff0c;一种不同于 System 1 和…

袋鼠云秋季发布会圆满落幕,AI驱动让生产力数智化

在当今时代&#xff0c;AI 的发展如汹涌浪潮&#xff0c;其速度之快超越了任何历史时期。它以前所未有的迅猛之势&#xff0c;渗入到各个领域的不同场景之中&#xff0c;悄然重塑着商业模式与人们的生活方式。 在 AI 逐渐成为企业基础属性的背景下&#xff0c;袋鼠云举办秋季发…

linux 高级 I/O

高级 I/O 1. 阻塞 I/O 与非阻塞 I/O2. 阻塞 I/O 所带来的困境3. 何为 I/O 多路复用以及原理select()函数介绍poll()函数介绍总结 4. 何为异步 I/O 以及原理5. 存储映射 I/O7. 文件加锁 1. 阻塞 I/O 与非阻塞 I/O 这里举个例子&#xff0c;譬如对于某些文件类型&#xff08;读管…

centos7配置keepalive+lvs

拓扑图 用户访问www.abc.com解析到10.4.7.8&#xff0c;防火墙做DNAT将访问10.4.7.8:80的请求转换到VIP 172.16.10.7:80&#xff0c;负载均衡器再将请求转发到后端web服务器。 实验环境 VIP&#xff1a;负载均衡服务器的虚拟ip地址 LB &#xff1a;负载均衡服务器 realserv…

【亚马逊云科技】Amazon Bedrock搭建AI服务

前言 大模型应用发展迅速&#xff0c;部署一套AI应用的需求也越来越多&#xff0c;从头部署花费时间太长&#xff0c;然而亚马逊科技全托管式生成式 AI 服务 Amazon Bedrock&#xff0c;Amazon Bedrock 简化了从基础模型到生成式AI应用构建的复杂流程&#xff0c;为客户铺设了…

「C/C++」C/C++ 之 判断语句

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

git快速合并代码dev->master

需求&#xff1a; 日常开发都是在dev分支进行开发&#xff0c;但是dev代码开发测试完成后&#xff0c;需要将dev代码合到master主分支上 开始合并代码&#xff1a; 一、场景 一个代码仓库&#xff0c;包含两个分支&#xff0c;一个是master&#xff0c;另一个是dev&#xff1b…

uniapp使用uni-push模拟推送

uniapp使用uni-push模拟推送 第一步先去uniapp开发者中心添加开通uni-push功能 这里的Android 应用签名可以先用测试的官网有,可以先用这个测试 官方测试链接文档地址 在项目中的配置文件勾选 组件中使用 如果要实时可以去做全局ws //消息推送模版uni.createPushMessage(…

前沿技术与未来发展第一节:C++与机器学习

第六章&#xff1a;前沿技术与未来发展 第一节&#xff1a;C与机器学习 1. C在机器学习中的应用场景 C在机器学习中的应用优势主要体现在高效的内存管理、强大的计算能力和接近底层硬件的灵活性等方面。以下是 C 在机器学习领域的几个主要应用场景&#xff1a; 1.1 深度学习…

Java程序设计:spring boot(10)——单元测试

1 pom.xml 测试依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> 2 Service业务方法测试 以 UserService 为例&#xff0c;src/test/java ⽬录下添…