欢迎来到皮皮网官网

【在线夹娃娃源码】【textbox 编辑源码】【文件解密源码】自动遮罩源码_自动遮罩源码怎么设置

时间:2024-11-25 07:33:04 来源:源码 移码 补码

1.【Unity源码学习】遮罩:Mask与Mask2D
2.DIY vue3组件: 动手实现高斯模糊遮罩层的自动遮罩自动遮罩对话框效果
3.unity Mask遮罩效果
4.Cypress 踩坑记 - DOM 遮挡
5.SuperSlide滚动的遮罩层宽/高怎么计算的?如何设置具体一个值?
6.UGUI源码阅读之Mask

自动遮罩源码_自动遮罩源码怎么设置

【Unity源码学习】遮罩:Mask与Mask2D

       Unity源码学习遮罩详解:Mask与Mask2D

       UGUI裁切功能主要有两种方式:Mask和Mask2D。它们各自有独特的源码源码原理和适用场景。

       1. Mask原理与实现

       Mask利用IMaskable和IMaterialModifier功能,设置通过指定一张裁切图,自动遮罩自动遮罩如圆形,源码源码限定子元素的设置在线夹娃娃源码显示区域。GPU通过StencilBuffer(一个用于保存像素标记的自动遮罩自动遮罩缓存)来控制渲染,当子元素像素位于Mask指定区域时,源码源码才会被渲染。设置

       StencilBuffer像一个画板,自动遮罩自动遮罩每个像素有一个1字节的源码源码内存区域,记录是设置否被遮盖。当多个UI元素叠加时,自动遮罩自动遮罩通过stencil buffer传递信息,源码源码实现精确裁切。设置

       2. Mask2D原理

       RectMask2D则基于IClippable接口,其裁剪基于RectTransform的大小。在C#层,它找出所有RectMask2D的交集并设置剪裁区域,然后Shader层依据这些区域判断像素是否在内,不满足则透明度设为0。textbox 编辑源码

       RectMask2D的性能优化在于无需依赖Image组件,直接使用RectTransform的大小作为裁剪区域。

       3. 性能区别

       Mask需要Image组件,裁剪区域受限于Image,而RectMask2D独立于Image,裁剪灵活。因此,Mask2D在不需要复杂裁剪时更高效。

       总结:虽然Mask和Mask2D各有优势,选择哪种遮罩取决于具体需求,合理使用能提高性能和用户体验。

DIY vue3组件: 动手实现高斯模糊遮罩层的对话框效果

       前言 & 一点点废话

       最近迷上了前端设计,想借此机会放松一下平日里繁忙的AI工作。帮朋友重构班级主页网站时,发现Vue3的模块化设计极为便捷,许多组件和钩子可以直接复用。因此,我决定整理并分享个人设计的组件实现。未来几篇文章将围绕这一主题展开。

       你可能会问:为什么自己写组件,文件解密源码而不是直接使用像Element-Plus这样的库呢?答案是:尽管Element-Plus功能丰富,但其接口有限,样式定制难度较高,可能无法满足设计爱好者的需求。另外,大型组件库体积较大,对于追求轻量级和高效应用的开发者来说,自定义HTML5、CSS3与Vue3组件可能更为合适。我的组件库旨在简化复用流程,提供直观的特效展示,让使用者在短时间内上手,并能根据需求进行个性化定制。

       为了帮助读者快速了解并复用组件,我将文章结构安排如下:

       组件效果展示

       登录界面和切换背景的对话框采用高斯模糊遮罩层,设计灵感源自苹果的特效,旨在吸引用户聚焦于对话框内容。

       用法指南

       参数设置说明:

       槽位(Slot):用于嵌入自定义内容。

       模板(Template)部分:展示基本结构与布局。

       脚本(Script)部分:实现逻辑功能与状态管理。java proxy 源码

       只需通过设置showDialog为true即可激活对话框。

       源码示例

       请根据需求调整mainColor和backFilter变量。以下是一个可行的样式方案,供参考:

unity Mask遮罩效果

       Unity官方2DMask屏幕遮罩效果,是一种后处理效果,其原理是将源像素与遮罩图形像素相乘。

       该效果的处理过程发生在Camera的OnRenderImage方法中。

       实现该效果需要使用shader和MaskEffect,同时运用C#编程语言中的Mask类。

       Mask类继承自PostEffectsBase,其源码在网络上广泛传播,但无法确定最早的作者。

       3D Mask方面,可参考魔镜的相关内容。

       在Frame Debugger中,2盏灯会渲染2次,且会导致无法合批batched。

       创建一个Plane以及几个Cube,并为Plane创建ASE-Surface和Material,同样为Cube创建相应的yii案例源码Material。

       镜子Shader-Plane用于实现场景中的mask遮罩效果。

       其原理是利用Plane和Cube的Render Queue值来控制半透明和不透明的渲染顺序。

       在Frame Debugger中,魔镜的做法是用天空盒覆盖场景,并设置总是通过模板测试,以覆盖魔镜背后的现实物体。

Cypress 踩坑记 - DOM 遮挡

       Cypress是一个热门的测试工具,但使用过程中发现了某些问题,以下记录问题发现及解决思路。

       在Cypress下,点击指令通常能正常工作,但在特定场景下却表现异常。例如,测试点击遮罩层以关闭弹窗时,预期操作顺畅,但当模型填充内容后,操作突然失败。

       测试代码简明易懂,执行Cypress后,一切如预期,但当模型内容增多,原本能正常点击的地方开始报错,明显不合理。

       查阅文档发现,点击指令支持坐标或位置参数,但并未解决问题,似乎点击操作与元素遮挡计算有关。Cypress的遮挡计算似乎还有待优化。

       深入源码分析,发现Cypress点击操作会进行一些判断,重要参数coords.fromElViewport显示了中心点坐标。Cypress使用该坐标获取最顶层元素并与目标元素进行对比。这是点击成功与否的关键因素,即中心点被遮挡可点击,未被遮挡则不能点击,操作略显简单粗暴,导致点击稳定性问题。

       为验证分析结论,创建了测试用例。首先,创建一个极小的遮挡元素置于中央,测试发现点击失败。之后,将四周元素全部遮挡,仅留下中心一点,结果却能成功点击。

       总结,Cypress的遮挡检查方式过于直接,可能不甚妥当,且容易引起混淆。理论上,采用多层对比交叉区域的方法可能更为合理。关于点击方式的优化,提供坐标或方位选择,以更准确判断是否遮挡,而非仅支持force操作,后者会降低测试意义。

SuperSlide滚动的遮罩层宽/高怎么计算的?如何设置具体一个值?

       以下是全部代码,请自行修改及js路径 SuperSlide - 实用焦点图 *{ margin:0; padding:0; list-style:none; }body{ background:#fff; font:normal px/px 宋体; }img{ border:0; }a{ text-decoration:none; color:#; }a:hover{ color:#1。

UGUI源码阅读之Mask

       Mask主要基于模版测试来进行裁剪,因此先来了解一下unity中的模版测试。

       Unity Shader中的模版测试配置代码大致如上

       模版测试的伪代码大概如上

       传统的渲染管线中,模版测试和深度测试一般发生在片元着色器(Fragment Shader)之后,但是现在又出现了Early Fragment Test,可以在片元着色器之前进行。

       Mask直接继承了UIBehaviour类,同时继承了ICanvasRaycastFilter和IMaterialModifier接口。

       Mask主要通过GetModifiedMaterial修改graphic的Material。大致流程:

       1.获取当前Mask的层stencilDepth

       2.StencilMaterial.Add修改baseMaterial的模板测试相关配置,并将其缓存

       3.StencilMaterial.Add设置一个unmaskMaterial,用于最后将模板值还原

       MaskableGraphic通过MaskUtilities.GetStencilDepth计算父节点的Mask层数,然后StencilMaterial.Add修改模板测试的配置。

       通过Frame Debugger看看具体每个batch都做了什么。先看第一个,是Mask1的m_MaskMaterial,关注Stencil相关的数值,白色圆内的stencil buffer的值设置为1

       这个是Mask2的m_MaskMaterial,根据stencil的计算公式,Ref & ReadMask=1,Comp=Equal,只有stencil buffer & ReadMask=1的像素可以通过模板测试,即第一个白色圆内的像素,然后Pass=Replace,会将通过的像素写入模板值(Ref & WriteMask=3),即两圆相交部分模板值为3

       这个是RawImage的Material,只有模板值等于3的像素可以通过模板测试,所以只有两个圆相交的部分可以写入buffer,其他部分舍弃,通过或者失败都不改变模板值

       这是Mask2的unmaskMaterial,将两个圆相交部分的模板值设置为1,也就是还原Mask2之前的stencil buffer

       这是Mask1的unmaskMaterial,将第一个圆内的模板值设置为0,还有成最初的stencil buffer

       可以看到Mask会产生比较严重的overdraw。

       2.drawcall和合批

       每添加一个mask,一般会增加2个drawcall(加上mask会阻断mask外和mask内的合批造成的额外drawcall),一个用于设置遮罩用的stencil buffer,一个用于还原stencil buffer。

       如图,同一个Mask下放置两个使用相同的RawImage,通过Profiler可以看到两个RawImage可以进行合批

       如图,两个RawImage使用相同的,它们处于不同的Mask之下,但是只要m_StencilValue相等,两个RawImage还是可以进行合批。同时可以看到Mask1和Mask1 (1),Mask2和Mask2 (1)也进行了合批,说明stencilDepth相等的Mask符合合批规则也可以进行合批。

       StencilMaterial.Add会将修改后的材质球缓存在m_List中,因此调用StencilMaterial.Add在相同参数情况下将获得同一个材质球。

copyright © 2016 powered by 皮皮网   sitemap