在URP管线中添加ShaderMaterial自定义GUI的方法

编写GUI面板

1. 新建GUI子面板

using UnityEngine;
using UnityEngine.Rendering;namespace UnityEditor.Rendering.Universal.ShaderGUI
{internal class CP_XXXOutLineGUI{public static class Styles{}public struct LitProperties{public LitProperties(MaterialProperty[] properties){}}public static void DoDetailArea(LitProperties properties, MaterialEditor materialEditor){}public static void SetMaterialKeywords(Material material){}}
}

2. 将在Shader关联的GUI面板中注册该子面板

internal class CP_XXXLitShader : BaseShaderGUI
{//声明子面板属性private CP_XXXOutLineGUI.LitProperties litXXXOutLineProperties;public override void FillAdditionalFoldouts(MaterialHeaderScopeList materialScopesList){}public override void FindProperties(MaterialProperty[] properties){base.FindProperties(properties);// 新建子面板属性litXXXOutLineProperties = new CP_XXXOutLineGUI.LitProperties(properties);}
}

3. 注册列表头部展开区域

FillAdditionalFoldouts(MaterialHeaderScopeList)会在继承BaseShaderGUI的类中由系统自动调用,它传入当前材质GUI的列表实例,我们通过RegisterHeaderScope可以添加新的列表项目。

public override void FillAdditionalFoldouts(MaterialHeaderScopeList materialScopesList)
{materialScopesList.RegisterHeaderScope(LitDetailGUI.Styles.detailInputs, Expandable.Details, _ => LitDetailGUI.DoDetailArea(litDetailProperties, materialEditor));
}

注册函数:materialScopesList.RegisterHeaderScope<TEnum>(GUIContent, TEnum, Action<Material>)
在这里插入图片描述

(1)创建头部列表GUIContext对象

public GUIContent(...);
- string text	文本
- Texture image	图片
- string tooltip 鼠标指针当前悬停在其上或具有键盘焦点的控件的工具提示。
internal class CP_XXXOutLineGUI{public static class Styles{public static readonly GUIContent OutLineInputs = new GUIContent("Outline Inputs","This Let You Open The OutLine Panel");}
}

(2)设置掩码

掩码设置要求,掩码按照位来设置,每个掩码占一个位字节。
如:在URP内置代码BaseShaderGUI:ShaderGUI类中已经设置了部分掩码

[URPHelpURL("shaders-in-universalrp")]
protected enum Expandable
{SurfaceOptions = 1 << 0,SurfaceInputs = 1 << 1,Advanced = 1 << 2,Details = 1 << 3,
}

其中SurfaceOptions、SurfaceInputs、Advanced 都已被系统注册,在URPShader的LitShader(其他Shader中可能也有)中,Details也在重写函数FillAdditionalFoldouts中被注册

materialScopesList.RegisterHeaderScope(LitDetailGUI.Styles.detailInputs, Expandable.Details, _ => LitDetailGUI.DoDetailArea(litDetailProperties, materialEditor)
);

我们仿照URP标准库中的写法,添加自定义掩码的扩展

在CP_XXXLitShader中自定义
protected enum AdditionalExpandable
{...其他掩码(163264128256)OutlineMask = 512,
}

(3) 注册列表头部区域

public override void FillAdditionalFoldouts(MaterialHeaderScopeList materialScopesList)
{materialScopesList.RegisterHeaderScope(CP_XXXOutLineGUI.Styles.OutLineInputs, AdditionalExpandable.OutlineMask, _ => CP_XXXOutLineGUI.DoDetailArea(litXXXOutLineProperties, materialEditor));
}

现在返回Unity,查看Shader列表。发现已经有了列表头显示。
在这里插入图片描述

4. 添加属性列表的显示

首先OutLine需要的参数有OutLineColor和OutLineSize。
首先在LitProperties中声明该属性,并绑定该属性的Shader名称。

public struct LitProperties
{public MaterialProperty OutLineColor;public MaterialProperty OutLineSize;public LitProperties(MaterialProperty[] properties){OutLineColor = BaseShaderGUI.FindProperty("_OutlineColor", properties, false);//false-->未找到不抛出异常OutLineSize  = BaseShaderGUI.FindProperty("_OutlineSize", properties, false); }
}

当展开OutLine下拉框时:调用public static void DoDetailArea(LitProperties properties, MaterialEditor materialEditor)函数

public static void DoDetailArea(LitProperties properties, MaterialEditor materialEditor)
{materialEditor.ColorProperty(properties.OutLineColor, Styles.OutLineColorContent.text);materialEditor.FloatProperty(properties.OutLineSize, Styles.OutLineSizeContent.text);
}

在这里插入图片描述
展开显示
在这里插入图片描述
修改属性,Shader中参数被修改。

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

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

相关文章

vxe-table添加排序

在 <vxe-column> 中添加sortable属性 <vxe-columnfield"longitude"sortabletitle"经度"></vxe-column><vxe-columnfield"latitude"sortabletitle"纬度"></vxe-column><vxe-columnfield"dateEst…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下&#xff0c;涉及到用户的隐私数据安全越发重要&#xff0c;一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库&#xff0c;同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

Milvus 介绍

Milvus 介绍 Milvus 矢量数据库是什么&#xff1f;关键概念非结构化数据嵌入向量向量相似度搜索 为什么是 Milvus?支持哪些索引和指标&#xff1f;索引类型相似度指标(Similarity metrics) 应用示例Milvus 是如何设计的&#xff1f;开发者工具API访问Milvus 生态系统工具 本页…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组双端队列

《数据结构、算法与应用C语言描述》使用C语言实现数组双端队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一…

【vue】el-carousel实现视频自动播放与自动切换到下一个视频功能:

文章目录 一、原因:二、实现代码:三、遇到的问题&#xff1a;【1】问题&#xff1a;el-carousel页面的视频不更新【2】问题&#xff1a;多按几次左按钮&#xff0c;其中跳过没有播放的视频没有销毁&#xff0c;造成再次自动播放时会跳页 一、原因: 由于后端无法实现将多条视频拼…

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过一个高效而灵活的框架来进行数据抓取&#xff0c;那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架&#xff0c;专门用于构建网络爬虫。今天&#xff0c;我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

照片后期编辑工具Lightroom Classic 2024 mac中文新增功能

Lightroom Classic 2024&#xff08;lrC2024&#xff09;是专为摄影爱好者和专业摄影师设计的软件&#xff0c;它提供了全面的照片编辑工具&#xff0c;可以精准调整照片的色彩、对比度和曝光等参数&#xff0c;以便定制后期处理效果。 在lrC2024中&#xff0c;用户体验得到了提…

文件的逻辑结构(顺序文件,索引文件)

所谓的“逻辑结构”&#xff0c;就是指在用户看来&#xff0c;文件内部的数据应该是如何组织起来的。 而“物理结构”指的是在操作系统看来&#xff0c;文件的数据是如何存放在外存中的。 1.无结构文件 无结构文件:文件内部的数据就是一系列二进制流或字符流组成。无明显的逻…

SortedSet 和 List 异同点

SortedSet 在 Java 的整个集合体系中&#xff0c;集合可以分成两个体系&#xff0c;一个是 Collection 存储单个对象的集合&#xff0c;另一个是 k-v 结构的 Map 集合。 SortedSet 是 Collection 体系下 Set 接口下的派生类&#xff0c;而 Set 集合的特征是不包含重 复的元素的…

(论文翻译)UFO: Unified Feature Optimization——UFO:统一特性优化

作者&#xff1a; Teng Xi 论文总结&#xff1a;总结 Code: https://github.com/PaddlePaddle/VIMER/tree/main/UFO 摘要&#xff1a; 本文提出了一种新的统一特征优化(Unified Feature Optimization, UFO)范式&#xff0c;用于在现实世界和大规模场景下训练和部署深度模型…

asp.net特色商品购物网站系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net特色商品购物网站系统 是一套完善的web设计管理系统&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 vs2010&#xff0c;数据库为sqlserver2008&a…

安装Apache2.4

二、安装配置Apache&#xff1a; 中文官网&#xff1a;Apache 中文网 官网 (p2hp.com) 我下的是图中那个版本&#xff0c;最新的64位 下载下后解压缩。如解压到D:\tool\Apache24 PS&#xff1a;特别要注意使用的场景和64位还是32位版本 2、修改Apcahe配置文件 具体步骤: 打…

Required MultipartFile parameter ‘file‘ is not present

出现这个原因我们首先想到的是加一个RequestParam("file")&#xff0c;但是还有可能的原因是因为我们的名字有错误 <span class"input-group-addon must">模板上传 </span> <input id"uploadFileUpdate" name"importFileU…

内衣专用洗衣机怎么样?选购内衣裤洗衣机的方法

有的小伙伴在问内衣洗衣机有没有必要入手&#xff0c;答案是有必要的&#xff0c;贴身衣物一定要和普通衣服分开来洗&#xff0c;而且用手来清洗衣物真的很耗时间而且还清洗不干净&#xff0c;有了内衣洗衣机&#xff0c;我们不仅可以解放双手&#xff0c;在清洗过程中还能更加…

实现日期间的运算——C++

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…

SLAM 14 notes

4.23 推导 f ( x ) f(x) f(x)在点a处的泰勒展开 f ( x ) ∑ n 0 ∞ f ( n ) a n ! ( x − a ) n f(x) \sum_{n0}^\infty \frac{f^{(n)}a}{n!}(x-a)^n f(x)∑n0∞​n!f(n)a​(x−a)n l n x lnx lnx的n阶导数 l n ( n ) x ( − 1 ) n − 1 ( n − 1 ) ! x n ln^{(n)}x \fr…

react 中获取多个input输入框中的值的 俩种写法

目录 1. 使用受控组件 2. 使用非受控组件 1. 使用受控组件 这是React中最常见的方法&#xff0c;每个输入框都与React组件的state相关联&#xff0c;并通过onChange事件来更新state。 代码示例&#xff1a; import React, { Component } from react;class MultipleInputExam…