【实现100个unity特效之8】使用ShaderGraph实现2d贴图中指定部分局部发光效果

最终效果

寒冰法师

请添加图片描述

火焰法师

请添加图片描述

文章目录

  • 最终效果
    • 寒冰法师
    • 火焰法师
  • 素材
  • 一、功能分析
    • 实现方法
    • 基本思路
    • Unity的Bloom后处理
    • 为什么关键部位白色?
    • 最终结果
  • 二、 新建URP项目
  • 三、合并图片
  • 四、使用PS制作黑白图片
    • 方法一 手动涂鸦
    • 方法二 魔棒工具
      • 1. 拖入图片进PS,选择魔棒工具,容差设置为0,取消勾选连续,点选想要发光的区域
      • 2. 如果对一些选择不满意,可以点击添加到选区,就可以连续点选不满意的区域,如果不小心点错了,可以按Ctrl+z撤回
      • 3. 全部选中后,点击新建图层
      • 4. 将原来图层隐藏
      • 5. 点击填充
      • 6. 内容选白色,点击确认
      • 7. 点击新建选区,把原来的选择去掉
      • 8. 选择填充工具,颜色选黑色,容差设为0
      • 9. 导出
    • 最终效果
  • 五、将黑白图片制作成主图片的次级纹理
  • 六、素材默认不支持光照,修改材质
  • 七、接下来在场景中添加bloom进行后处理
  • 八、添加全局2D光源
  • 九、新建受到光源影响的Sprite Lit ShaderGraph
  • 十、配置Sprite Lit ShaderGraph节点
    • Sample Texture 2D节点
    • add节点
    • Multiply节点相乘
    • One Minus节点取反
    • 颜色误差问题
    • 修复
    • Split节点 分裂
  • 十一、多个次级纹理
  • 最终效果
    • shaderGraph最终连线图
    • 寒冰法师
    • 火焰法师
  • 参考
  • 源码
  • 完结

素材

https://assetstore.unity.com/packages/2d/characters/gothicvania-church-pack-147117
在这里插入图片描述

一、功能分析

实现方法

将序列图中要发光的部位单独提取出来,进行处理完后在覆盖回原来的图片
具体的做法就是制作一张黑白的次级图片,白色的部分是对应主图片中要发光的部位,黑色部分就是背景
在这里插入图片描述

基本思路

1.让贴图中让想要发出光亮的部分使用一种更明亮的颜色
2.使用Bloom进行处理
在这里插入图片描述

Unity的Bloom后处理

是一种常用的后处理效果,可以让高亮区域的颜色逐渐扩散到周围并使得这些光源散发出更强烈的亮度,并产生柔和的光晕效果,增加视觉上的对比度和明亮感

为什么关键部位白色?

白色的RGB都是1,1乘任何数,都会变成那个数
黑色的RGB都是0,0乘任何数,都是0

在这里插入图片描述

最终结果

当我们处理完黑白次级图片后,就可以直接将其与主图片进行相加
在这里插入图片描述

二、 新建URP项目

如果你的项目默认不是URP项目,可以选择升级到URP,参考:【unity小技巧】为啥我们的模型材质显示粉色?unity普通项目升级URP项目

在这里插入图片描述

三、合并图片

这个主角素材图片默认是分开的,我们先将图片合并,方便后续抠图

在线工具:http://sjli.github.io/spritemaker_extjs/example.html

合并后的图片
在这里插入图片描述

四、使用PS制作黑白图片

方法一 手动涂鸦

可能精准但是耗时的方法,推荐用第二种

在这里插入图片描述

方法二 魔棒工具

方便快捷的点选方法

1. 拖入图片进PS,选择魔棒工具,容差设置为0,取消勾选连续,点选想要发光的区域

在这里插入图片描述

2. 如果对一些选择不满意,可以点击添加到选区,就可以连续点选不满意的区域,如果不小心点错了,可以按Ctrl+z撤回

在这里插入图片描述
最终效果
在这里插入图片描述

3. 全部选中后,点击新建图层

在这里插入图片描述

4. 将原来图层隐藏

在这里插入图片描述

5. 点击填充

在这里插入图片描述

6. 内容选白色,点击确认

在这里插入图片描述
此时我们选中的部位就被白色填充了
在这里插入图片描述

7. 点击新建选区,把原来的选择去掉

在这里插入图片描述

8. 选择填充工具,颜色选黑色,容差设为0

在这里插入图片描述

9. 导出

在这里插入图片描述

最终效果

如果你比较懒,可以选择直接使用我准备好的黑图
请添加图片描述

五、将黑白图片制作成主图片的次级纹理

配置
在这里插入图片描述
制作成主图片的次级纹理,命名为_GlowTextures
在这里插入图片描述

六、素材默认不支持光照,修改材质

人物和场景都用这个Sprite-lit-default材质,这个材质可让我们的纹理接受光源影响

在这里插入图片描述

七、接下来在场景中添加bloom进行后处理

让相机支持后处理
在这里插入图片描述

新建Global Volume全局后处理
在这里插入图片描述

添加bloom泛光效果
在这里插入图片描述
Threshold(阈值):控制哪些亮度的像素会受到泛光效果的影响。高于阈值的像素才会产生泛光效果,低于阈值的像素将不受影响。调整阈值可以控制泛光的出现频率。一般在0-1之间。简单说就是这个值越小,就会有更多物体会亮起来,值越大亮起来的物体就越少。一般默认填0.9就可以了
Intensity(强度):控制泛光的亮度增强程度。增加该值会使泛光更明显,减小该值会减弱泛光效果。这个值可以控制光的亮度,值越大越亮。

八、添加全局2D光源

在这里插入图片描述

调低它的强度,因为我们不想让这些地面什么的亮起来
调低强度可以让这些物体,在Boom的阈值下面,可以让它们不亮起来,这里设为0.7了
在这里插入图片描述

九、新建受到光源影响的Sprite Lit ShaderGraph

在这里插入图片描述

按这个ShaderGraph新增材质挂载主角身上,可以看到主角变成了一坨,那是因为我们ShaderGraph还没有配置材质没有MainTex纹理属性。
在这里插入图片描述

十、配置Sprite Lit ShaderGraph节点

Sample Texture 2D节点

接收一个Texture2d类型的输入,输出这个Texture2d的RGBA
在这里插入图片描述

保存可以看到人物纹理已经渲染了
在这里插入图片描述
有同学就会有疑问了,我明明还没有配置主绝纹理,为啥主角就正常了。其实Unity它会自动根据这个reference上的值,从我们的精灵中尝试找到对应的纹理,而我们的主纹理里名称就是这个MainTex,就会自动找到主纹理,但是为了方便测试看到效果,这里我们还是手动配置一下主纹理
在这里插入图片描述
添加次级纹理,注意名称要对应,这样unity就会自动去查找到对应次级纹理,记得名称不需要下划线
在这里插入图片描述

为了方便演示,我们还是一样手动赋值一个纹理
在这里插入图片描述

add节点

add节点可以将两个纹理进行相加

我们的主纹理中有部分是透明的,而我们的这个黑白纹理中都是不透明的,虽然我们黑色的部分它的RGB都是O,但它的A是1,当我们直接使用这个(黑白纹理的)RGBA和主纹理(的RGBA)进行相加时,它的A会把主纹理的A给覆盖了,这样就会导致主纹理中的透明度都设为1了,透明部分都被覆盖了
在这里插入图片描述
我们只想取这个次级纹理的RGB,有一个简单的方法,就是直接使用其中任何一个通道,这里我们直接使用R通道。
当我们使用add的时候,Unity会自动进行转换,比如我们R是0,Unity会自动把它转换成RGBA都是0的值,而我们R是1的时候,Unity就会自动转换成RGBA都是1的值
在这里插入图片描述

保存,人物项链和攻击波已经亮起来了
在这里插入图片描述
这是因为白色是个很明亮的颜色,它已经达到了bloom能够处理的阈值,所以它就被bloom进行后处理了,赋予了光源

Multiply节点相乘

接下来我们添加一个color,使其可以修改我们的光源颜色,将黑白纹理和一个颜色进行相乘,达到修改白色部分的效果,颜色相乘,在Unity中叫做Multiply
在这里插入图片描述

可以修改颜色模式为HDR,这样就可以修改亮度
在这里插入图片描述
保存,效果
在这里插入图片描述

可以通过修改材质配置,修改颜色和亮度
在这里插入图片描述

效果
在这里插入图片描述

One Minus节点取反

颜色误差问题

细心的同学可能会发现,我设置的颜色和显示的颜色总是有点误差,显示的颜色总是偏浅。
在这里插入图片描述

因为修改颜色的原理大致就是修改要发光部位的底色,而最后加法的最终结果会受到底色的影响所以是有误差的
在这里插入图片描述

修复

不过这个问题其实可以通过将次级纹理(如果有多个次级纹理就使用Add节点把他们加起来之后)使用One Minus节点得到反相图,然后和主纹理通过Multiply节点相乘代替主纹理就可以避免掉这个问题了。
在这里插入图片描述
效果
在这里插入图片描述

Split节点 分裂

如果不想Alpha连线太长
在这里插入图片描述

可以在最后添加Split节点,把图片重新拆分RGBA,再连接
在这里插入图片描述

十一、多个次级纹理

如果有其他次级纹理,比如剑光和盾防纹理也是类似配置
在这里插入图片描述

然后使用Add把他们相加,最后应用到主纹理上
在这里插入图片描述

最终效果

shaderGraph最终连线图

在这里插入图片描述

寒冰法师

在这里插入图片描述

请添加图片描述

火焰法师

在这里插入图片描述

请添加图片描述

参考

www.youtube.com/watch?v=WiDVoj5VQ4c
https://www.youtube.com/watch?v=Tm0rRX8GnFk
https://www.bilibili.com/video/BV17x4y1d7om/

源码

整理好了我再放上来

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环信+亚马逊云科技服务:助力出海AI社交应用扬帆起航

随着大模型技术的飞速发展,AI智能体的社交体验得到了显著提升,AI社交类应用在全球范围内持续火热。尤其是年轻一代对新技术和新体验的热情,使得AI社交产品在海外市场迅速崛起。作为领先的即时通讯解决方案提供商,环信与亚马逊云科…

# Redis 入门到精通(九)-- 主从复制(2)

Redis 入门到精通(九)-- 主从复制(2) 一、redis 主从复制–数据同步阶段注意事项 1、数据同步阶段 master 说明 1)如果 master 数据量巨大,数据同步阶段应避开流量高峰期,避免造成 master 阻…

掌握Rust:函数、闭包与迭代器的综合运用

掌握Rust:函数、闭包与迭代器的综合运用 引言:解锁 Rust 高效编程的钥匙函数定义与模式匹配:构建逻辑的基石高阶函数与闭包:代码复用的艺术迭代器与 for 循环:高效数据处理的引擎综合应用案例:构建一个简易…

JavaSE--基础语法--继承和多态(第三期)

一.继承 1.1我们为什么需要继承? 首先,Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是 现实世界错综复杂,事物之间可能会存在一些关联,那在设计程…

Redis的应用场景及类型

目录 一、Redis的应用场景 1、限流 2、分布式锁 3、点赞 4、消息队列 二、Redis类型的命令及用法 1、String类型 2、Hash类型 3、List类型 4、Set类型 5、Zset类型 6、Redis工具类 Redis使用缓存的目的就是提升读写性能 实际业务场景下,我们就可以把 Mys…

Mysql数据库第四次作业

mysql> create table student(sno int primary key auto_increment,sname varchar(30) not null unique,Ssex varchar(2) check (Ssex男 or Ssex女) not null,Sage int not null,Sdept varchar(10) default计算机 not null); mysql> create table Course(Con int primar…

pytest的安装和介绍和 Exit Code 含义

pytest 准备工作(在cmd里): 1安装 pip install -U pytest2验证安装 pytest --version # 会展示当前已安装版本3其他的 显示可用的内置函数参数 pytest --fixtures通过命令行查看帮助信息及配置文件选项 pytest --help一、pytets框架中的…

Air780EP-AT开发-HTTP应用指南

简介 关联文档和使用工具: AT固件获取AT指令手册 概述 4G模块支持HTTP和HTTPS协议, HTTP应用的基本流程如下: 1、激活PDP(参考:http://oldask.openluat.com/article/937)2、初始化HTTP服务3、设置HTTP会话…

从0到1使用Docker部署java项目详解

Docker部署Java项目相比传统部署方式,在环境一致性、配置管理、可扩展性和安全性等方面具有显著优势。然而,它也带来了学习成本、资源消耗和复杂度增加等挑战。 云服务器 白嫖阿里云服务 通过免费试用方式获取自己的阿里云服务器。当然,如…

ElasticSearch(四)— 数据检索与查询

一、基本查询语法 所有的 REST 搜索请求使用_search 接口,既可以是 GET 请求,也可以是 POST请求,也可以通过在搜索 URL 中指定索引来限制范围。 _search 接口有两种请求方法,一种是基于 URI 的请求方式,另一种是基于…

S71200 - 笔记

1 S71200 0 ProfiNet - 2 PLC编程 01.如何零基础快速上手S7-1200_哔哩哔哩_bilibili 西门子S7-1200PLC编程设计学习视频,从入门开始讲解_哔哩哔哩_bilibili

python:本机摄像头目标检测实时推理(使用YOLOv8n模型)

本文将介绍如何使用本机摄像头进行目标检测实时推理的python代码。 文章目录 一、下载YOLO权重文件二、环境配置三、完整代码 一、下载YOLO权重文件 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 拉到网页最下面,选择适合的模型,下…

linux禁用root

linux禁用root 1. 禁止普通用户切换到root1.1 sudo -i和sudo -s的区别1.2 sudo -i和直接登录root账号的区别1.3 禁止sudo -i切换root1.4 禁止su - root切换root 2. 禁止root远程登录2.1 ssh禁止root登录2.2 禁止远程桌面登录 本文主要介绍: 如何禁止普通用户切换到r…

python-docx 如何将列表中的值提取到段落中的run以及保存为多个文档?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

如何定位Milvus性能瓶颈并优化

假设您拥有一台强大的计算机系统或一个应用,用于快速执行各种任务。但是,系统中有一个组件的速度跟不上其他部分,这个性能不佳的组件拉低了系统的整体性能,成为了整个系统的瓶颈。在软件领域中,瓶颈是指整个路径中吞吐…

前端网页打开PC端本地的应用程序实现方案

最近开发有一个需求,网页端有个入口需要跳转三维大屏,而这个大屏是一个exe应用程序。产品需要点击这个入口,并打开这个应用程序。这个就类似于百度网盘网页跳转到PC端应用程序中。 这里我们采用添加自定义协议的方式打开该应用程序。一开始可…

吴恩达深度学习笔记1 Neural Networks and Deep Learning

参考视频:(超爽中英!) 2024公认最好的【吴恩达深度学习】教程!附课件代码 Professionalization of Deep Learning_哔哩哔哩_bilibili Neural Networks and Deep Learning 1. 深度学习引言(Introduction to Deep Learning) 2. 神 经 网 络 的 编 程 基 础…

大型语言模型的生物医学知识图优化提示生成

大型语言模型的生物医学知识图优化提示生成 https://arxiv.org/abs/2311.17330 https://github.com/BaranziniLab/KG_RAG 大型语言模型的生物医学知识图优化提示生成 摘要 KG-RAG框架,较好的结合了生物医学知识图谱SPOKE和LLM的优势。SPOKE是一个开放知识图谱&…

【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

59、mysql存储过程

存储过程 一、存储过程: 1.1、存储过程的概念 概念:完成特定功能的sql语句的集合。把定义好的sql集合在一个特定的sql的函数当中 每次执行调用函数即可。还可以实现传参的调用。 1.2、存储过程的语法: delimiter $$ ##delimiter开始和结…