热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UnityShader搬砖日志ShaderGraph快速出原型,然后手撸shader还原,转换到BRP/URP使用

文章目录效果实现优化SG布局还原手撸Shader需要和ParticleSystem有蒙版交互考虑自适应问题ProjectReferences首先,美术同学在网上找了一


文章目录

  • 效果实现
  • 优化 SG 布局
  • 还原手撸 Shader
  • 需要和 ParticleSystem 有蒙版交互
  • 考虑自适应问题
  • Project
  • References



首先,美术同学在网上找了一些效果: ShaderGraph第09节_血球
但是美术同学,始终无法得到最终想要的效果,于是乎,让我帮忙还原 Shader Graph 效果




效果实现

为了方便参考视频的实现方式(实现方式有多种多样,为了快速让美术用上想要的效果,我就快速的喵了一下视频),就按照视频中大概的意思思路来实现,并且视频使用的是u3d 2018 版本,所以我也使用了一个 2018 版本的 SG 来连连看

第一个 U3D 2018 SG
在这里插入图片描述

GIF 效果图
请添加图片描述

嗯,效果是实现了,但是编辑过程中,这个低版本的 SG 优化确实不到位,编辑时卡卡的
而且节点布局什么的都不太便于维护



然后美术同学说,他不想要圆形的水瓶,好,那么再修改一丢丢(SG还是卡卡的)
在这里插入图片描述

GIF效果图
请添加图片描述




优化 SG 布局

美术同学说,他看 SG 会头晕,完全看不懂
我和他说,这是临时快速连线实现的
所以再次对 SG 布局优化,变添加上备注(我和他说,正式项目就算是 原型的 SG 也得是良好得布局,不然后续修改,就难以理解了)

为了更快速得编辑 SG ,我使用了高版本的 U3D 2020.3.18
速度上确实比之前的快了不少
优化后的布局如下
在这里插入图片描述

比如放大某个节点:可以清晰的看到节点关系,还有大概这组节点的作用,还有实现的思路,都会备注十分清晰
在这里插入图片描述
在这里插入图片描述

于是给到美术同学,他仍然看不懂,我说急不来,有空先看官方节点文档
然后他又嫌 unity SG 英文文档看着不方便,-_-~
所以我推荐他直接去 B站看中文的视频案例
(不过,还好,花了大概几天时间,他终于有所了解了)




还原手撸 Shader

这位美术同学的项目是 BRP 下的
所以就算 SG 直接导出的 shader 代码,你直接优化写法,也是无法直接再 BRP 使用的,毕竟 shader 库不同了(因为我编辑的这个 shader 是基于 URP的, shader lab 里面都是 include 到 URP 的 shader 库)

所以我直接再 BRP 项目中,直接按照节点的方式手撸一遍 shader 即可

翻译手撸 shader 时,遇到一个 BRP 项目中不存在的 node 时,可以逐个 ctrl+c, v 过来
如下
在这里插入图片描述
然后直接翻译后续节点的 shader 即可




需要和 ParticleSystem 有蒙版交互

当我移植到 BRP 项目后
美术同学说,还想给这些液体的部分像素内才显示 ParticleSystem
所以我再给手撸的 BRP Shader 和 ParticleSystem 使用到的 Shader 都添加Stencil
最终效果如下:
请添加图片描述




考虑自适应问题

因为这时 2D UI 上的效果

那么直接应用在 UGUI 上再适合不过

所以直接将 手撸的 BRP Shader 按照 BRP BuiltIn Shader : "UI/Default" Shader 调整好需要的数据

就可以方新的应用再 UGUI 上了

在这里插入图片描述

水平、垂直居中
在这里插入图片描述
GIF
请添加图片描述
请添加图片描述



OK,从 SG 到 优化,投入到各种 渲染管线,然后落地(这里面我还没优化性能 – 后话)
这么一期搬砖的内容就这么结束了,后续如果有相关 SG 移植到其中管线,都可以如何处理即可




Project


  • Test_WaterBottle2D_BRP_U3D_2018_2_11f1.unitypackage
  • Test_URP_SG_BloodBottle_2021_3_1f1



References


  • ShaderGraph第09节_血球

推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
author-avatar
花亜_277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有