热门标签 | 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节_血球

推荐阅读
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • andr ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
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社区 版权所有