Unity极坐标Shader特效,以及使用Instanced Property实现相同材质不同参数

news2024/11/27 10:32:22

Unity极坐标特效

先看看效果

Unity极坐标Shader特效


有时候我们需要在场景中摆放一些热点,用户点击之后出现互动,当然实现这个功能的方法有很多,作为一名程序员,当然是要用最简单的实现。用shader程序化实现它。

啥是极坐标

极坐标,又称极座标系。它是一种表示平面直角坐标系中点的方法,其中每个点都由距离原点的距离和从原点到该点的线段与某条固定轴正半轴(通常为 θ=0)的夹角(逆时针为正)两个值确定。这两个值通常用 (r, θ) 表示,其中 r 表示距离, θ 表示方向角度,范围在 0 度到 360 度之间。极坐标系常用于描述圆形和对称图形,以及某些物理问题中更自然地描述旋转对称性。
像这种波从中间生成向往扩散的效果,如果使用平常的UV坐标系,是很难实现的,但是使用极坐标系那就很简单了。

极坐标的实现

在这里插入图片描述
以ASE为例,将UV转为极坐标,然后取一张简单的渐变纹理,最后乘以一个颜色输出即可。
下面介绍一下每个参数的意义:
在这里插入图片描述

参数暴漏如上图所示,其中:

参数意义
MainColor输出颜色,HDR色
Size大小,0-1
Texture一张特殊的纹理,请见下图
Interval间隔,0-1, 0.5表示发光的部分和不发光的部分尺寸相同
Scale有多少条波
Offset波的运动 0-1
那张特殊的纹理图如下:
在这里插入图片描述

如何让不同的物体,使用相同的材质,但是却拥有不同的参数?

效果如下所示,两个物体,都使用了相同的材质,但是他们的播放速度可以各自调节:

Unity Instanced Property 演示

这主要是使用了Shader中的Instanced Property。
Instanced Property的简介,这是我直接问的chat-GPT:
实例化属性(Instanced Properties)是 Unity Shader 中的一个特殊类型的属性,它可以实现以下功能:

  1. 通过实例化属性,我们可以同时创建多个实例化对象,并为每个对象赋予不同的属性值。这意味着我们可以创建多个具有不同属性的对象,而无需为每个对象编写单独的 Shader。

  2. 实例化属性还可以用于实现高效的绘制技术,例如 GPU 实例化(GPU Instancing)。在 GPU 实例化中,我们可以在一个 Draw Call 中一次性渲染大量的实例化对象,从而减少 CPU 和 GPU 的工作负载,提高渲染性能。

  3. 实例化属性还可以用于在 Unity Editor 中动态调整模型的属性,而无需重新编译 Shader。在 Unity Editor 中,我们可以直接调整每个实例的属性值,从而快速预览 Shader 在不同模型上的效果。

总的来说,实例化属性是 Unity Shader 中一种非常有用的功能,可以帮助我们实现更高效、更灵活的渲染技术。

在代码中修改Instanced Property主要使用Renderer类的SetPropertyBlock方法。代码如下:

using UnityEngine;
using Random = UnityEngine.Random;

public class WaveHotPoint : MonoBehaviour
{
    [SerializeField] private float Speed;
    private Renderer _renderer;
    private MaterialPropertyBlock propBlock;
    private float offset;
    private static readonly int OffsetIndex = Shader.PropertyToID("_Offset");

    private void Awake()
    {
        _renderer = GetComponent<SpriteRenderer>();
        propBlock = new MaterialPropertyBlock();
        _renderer.GetPropertyBlock(propBlock);

        offset = Random.value;
    }

    private void Update()
    {
        offset = (offset - Speed * Time.deltaTime) % 1f;
        propBlock.SetFloat(OffsetIndex, offset);
        _renderer.SetPropertyBlock(propBlock);
    }
}

但是要注意的是:UGUI中无法使用Instanced Property,因为UGUI中的CanvasRenderer类并没有SetPropertyBlock方法。问了chat-GPT,给出的方法是调用材质类的SetPropertyBlock方法,然而材质类并没有这个方法,不知道如何解决。如果您知道,麻烦评论区说一下,感谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647069.html

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

相关文章

鲸落送书第二期清华出版社系列丛书

1.《Node.js从基础到项目实践&#xff08;视频教学版)》 《Node.js从基础到项目实践&#xff08;视频教学版&#xff09;》以理论结合实践的形式&#xff0c;讲解了Node.js 基础、框架、进阶知识和项目实践。本书为视频教学版&#xff0c;每一章节都有相对应的视频讲解&#xf…

番茄工作法图解——简单易行的时间管理方法

ISBN: 978-7-115-24669-1 作者&#xff1a;【瑞典】诺特伯格&#xff08;Staffan Noteberg&#xff09; 页数&#xff1a;136页 阅读时间&#xff1a;2023-06-10 推荐指数&#xff1a;★★★★★ 番茄工作法&#xff08;意大利语&#xff1a;Pomodoro Technique&#xff09;是一…

网工内推 | 数通专场!最高19k*13薪,HCIE/CCIE认证优先

01 嘉环科技股份有限公司 招聘岗位&#xff1a;数据工程师 职责描述&#xff1a; 1、 承担TL/TE职责&#xff0c;负责数通接入&#xff08;路由器、交换机、安全、PTN、OLT等&#xff09;相关产品的工程项目交付。 2、 作为技术负责人/交付工程师支撑项目交付&#xff0c;指导…

zabbix监控域名证书期限

前言 zabbix通过自定义key"domain.discovery"发现域名&#xff08;Json格式&#xff09;&#xff0c;然后自动生成监控项&#xff0c;监控项通过自定义key"https"获取域名证书有效期&#xff0c;若少于30天则出发告警。 说明 名称作用domain.txt域名列表…

day06--java高级编程:多线程,枚举类,注解,反射,网络通讯

1 Day16–多线程01 1.1 程序概念 程序(program)&#xff1a;是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 1.2 进程 1.2.1 概念 进程(process)&#xff1a;是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一…

基于Python3.7的robotframework环境搭建步骤

Windows环境搭建 安装Python3 官网下载&#xff0c;我这边环境是Python 3.7.0 安装robotframework基础依赖 在dos命令输入 pip install robotframework 在线安装robotframework 在dos命令输入 pip install Pypubsub3.3.0 在线安装 Pypubsub 在dos命令输入 pip install wxPy…

汇编学习教程:寻址大总结

前言 在上篇博文中&#xff0c;我们主要学习了一个全新的寄存器&#xff1a;bp。bp 寄存器在功能和使用上与 bx 有着异曲同工之妙&#xff0c;只不过两人绑定的服务对象不同&#xff1a;bx 默认绑定的是 DS 段寄存器&#xff0c;而 bp 默认绑定的是 SS 段寄存器。bx 和 bp 有着…

抓包!抓包! HTTPS中间人抓包

简介 抓包是一种网络分析技术&#xff0c;可以用于捕获和分析数据包&#xff0c;通常用于网络故障排查、协议分析、安全审计等。网络上所有的数据包都是以二进制的形式在网络上传输的&#xff0c;抓包工具可以捕获到这些数据包并将其转换为可读的格式&#xff0c;方便进行分析…

Python使用阿里API进行身份证识别

Python使用阿里API进行身份证实名认证 1. 作者介绍2. 身份证识别介绍3. 调用阿里智能云API4. 代码解析4.1 完整代码4.2 实验结果 参考 1. 作者介绍 孟莉苹&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2021级硕士研究生&#xff0c;张宏伟人工智能课题组 研…

极致呈现系列之:Echarts折线图的视觉冲击力

目录 认识折线图折线图的创建折线图的美化修改折线的样式修改坐标轴的样式修改折线图上点的样式将折线设置为平滑曲线设置渐变色面积给折线图添加标记线给折线图添加标记点 折线图的交互添加鼠标悬停提示添加数据区域选择与缩放 认识折线图 折线图是一种常用的数据可视化图表&…

React中的HOC高阶组件处理

先了解函数柯里化 柯里化函数&#xff08;Currying Function&#xff09;是指将一个接受多个参数的函数转化成一系列只接受单个参数的函数&#xff0c;并且返回接受单个参数的函数&#xff0c;达到简化函数调用和提高可读性的目的。 简单来说&#xff0c;柯里化即将接收多个参…

大数据为什么如此重要?

简单来说&#xff0c;大数据就是结构化的传统数据再加上非结构化的新数据。那么传统数据和新数据又是什么呢&#xff1f;传统数据就是IT业务系统里面的数据&#xff0c;如客户资料、财务数据等。这些数据是结构化的&#xff0c;量也不是特别大&#xff0c;一般只是TB级。对比传…

如何让自己的代码顺利通过代码审查?

最近很多同学&#xff0c;都去暑期实习了&#xff0c;实习就意味着要在公司项目是写代码了。 大多数同学&#xff0c;可能面试能力不错&#xff0c;但是实操还是弱了一些。之前有位同学&#xff0c;春招靠面试能力去了大厂&#xff0c;然后实习刚工作的时候&#xff0c;要写代…

Java30天拿下-----第二天(运算符,标识符,Scanner,进制转换)

Java30天拿下-----第二天 一 运算符算术运算符赋值运算符关系运算符逻辑运算符三元运算符运算符的优先级 二 标识符关键字保留字 三 控制台接收键盘输入&#xff1a;Scanner四 进制进制的转换&#xff08;基本功&#xff09;其他进制转为十进制十进制转为其他进制二进制转为其他…

《当我谈跑步时,我谈些什么》痛楚难以避免,而磨难可以选择

《当我谈跑步时&#xff0c;我谈些什么》痛楚难以避免&#xff0c;而磨难可以选择 村上春树&#xff0c;日本当代小说家&#xff0c;情感类类型作家。主要作品有《且听风吟》《挪威的森林》《海边的卡夫卡》《奇鸟行状录》《1Q84》等。 施小炜 译 来自百度百科的一条&#xff1…

存储快速入门——【2】数据复制与容灾、云存储、大数据概念

存储快速入门——【2】数据复制与容灾、云存储、大数据概念 一、数据复制与容灾 1 恢复时间目标&#xff08;RTO&#xff09;和恢复点目标&#xff08;RPO&#xff09; 对于信息系统而言&#xff0c;容灾就是使信息系统具有应对一定的灾难袭击&#xff0c;保持系统或间断运行…

2023年软件测试工程师,初级到高级进阶路线指南,测试之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 提到软件测试工程…

一、JavaScript函数this指向

1 this的绑定规则 2 apply/call/bind 3 this绑定优先级 4 绑定之外的情况 5 箭头函数的使用 6 this面试题分 <script>// 定义函数function foo(name) {console.log("foo函数:", this)}// 1.方式一: 直接调用 这里的this指向window// foo()// 2.方式二: 通…

Java网络编程知识

目录 1.网络编程概述 1.网络编程的目的 2.网络编程的三个问题 1.如何准确定位网络上的主机&#xff1f; 2.如何定位主机上的特定应用&#xff1f; 3.找到主机后如何可靠高效的进行数据传输&#xff1f; 2.通信要素一:IP和端口号 1.IP地址 2.端口号 3.套接字 4.通信要…

基于Yolov8的纸箱破损检测系统

目录 1.Yolov8介绍 2.纸箱破损数据集介绍 2.1数据集划分 2.2 通过voc_label.py得到适合yolov8训练需要的 2.3生成内容如下 3.训练结果分析 4. 纸张破损检测系统设计 4.1 PySide6介绍 4.2 安装PySide6 4.3 纸张破损检测系统设计 1.Yolov8介绍 Ultralytics YOLOv8是Ultral…