Unity Shader 的编程流程和结构
Unity Shader 的编程流程和结构
Unity Shader 的编程主要由以下三个核心部分组成:Properties(属性)、SubShader(子着色器) 和 Fallback(回退)。下面是它们的具体作用和结构:
1. Properties(属性)
- 作用:
Properties 定义了着色器的可调参数,用户可以通过 Unity 的 Inspector 面板调整材质的外观,例如颜色、纹理或数值。 - 结构:
通常包括颜色(Color)、纹理(2D)、浮点数(Float)、向量(Vector)等类型的变量。 - 示例:
Properties {_Color ("颜色", Color) = (1,1,1,1) // 定义一个颜色属性,初始值为白色_MainTex ("主纹理", 2D) = "white" {} // 定义一个主纹理,默认为白色纹理_BumpMap ("法线贴图", 2D) = "bump" {} // 定义一个法线贴图,默认为 Unity 内置法线纹理 }
2. SubShader(子着色器)
- 作用:
SubShader 包含着色器的核心渲染逻辑,定义了渲染管线中的具体操作,通常通过一个或多个 Pass 来实现。 - 结构:
- Tags:用于指定渲染队列(如 “Opaque” 或 “Transparent”)、光照模式等。
好的,我会用中文回答你的问题。由于你没有具体提出关于什么的问题,我假设你需要关于 Unity Shader Tags 的解释。以下是详细的回答:
- Tags:用于指定渲染队列(如 “Opaque” 或 “Transparent”)、光照模式等。
Unity Shader Tags 详解
在 Unity 中,Shader 的 Tags 用于定义渲染行为和着色器在渲染管线中的处理方式。下面我将以一个常见示例为基础,详细解释一些典型的 Tags:
Tags {"Queue"="Transparent" "LightMode"="ForwardBase" "IgnoreProjector"="True" "RenderType"="Transparent"}
1. "Queue"="Transparent"
- 作用:控制物体的渲染顺序。
- 解释:Unity 的渲染管线按照“渲染队列(Render Queue)”的顺序渲染物体。
"Transparent"
表示这个物体属于透明队列,通常用于渲染玻璃、水、粒子等透明效果。透明物体会在不透明物体(如"Geometry"
队列)之后渲染,并且会从后往前排序,以确保正确混合。 - 重要性:透明物体的渲染顺序对视觉效果至关重要,过早渲染可能导致混合错误。
- 示例:玻璃窗的 Shader 会使用这个 Tag,确保在墙壁之后渲染。
2. "LightMode"="ForwardBase"
- 作用:指定着色器 Pass 的光照模式。
- 解释:Unity 支持多种渲染路径,其中 Forward Rendering(前向渲染)是一种常见路径。
"ForwardBase"
是前向渲染中的一个 Pass,负责处理主方向光源(如太阳光)和环境光,计算物体如何受这些光照影响。 - 重要性:这是前向渲染中处理基本光照的关键 Pass。
- 示例:大多数基础 Shader 使用
"ForwardBase"
来响应场景中的主光源。
3. "IgnoreProjector"="True"
- 作用:控制物体是否受 Projector(投影器)影响。
- 解释:Unity 的 Projector 组件可以将纹理投影到物体上(如阴影或光斑)。设置为
"True"
表示这个物体不受 Projector 影响,即不会被投影覆盖。 - 重要性:适合不想被额外投影影响的物体,例如透明 UI 元素。
- 示例:一个透明按钮可能使用这个 Tag,避免被场景中的投影干扰。
4. "RenderType"="Transparent"
- 作用:定义物体的渲染类型。
- 解释:这个 Tag 主要用于 Unity 的**着色器替换(Shader Replacement)**功能,帮助 Unity 识别物体的渲染特性。例如,在渲染阴影或深度图时,Unity 会根据
"RenderType"
选择合适的着色器。 - 重要性:确保 Unity 在特殊渲染(如阴影)中正确处理透明物体。
- 示例:所有透明物体的 Shader 通常会使用这个值。
Unity Shader Tags 总结
这些 Tags 共同定义了一个透明物体的渲染行为:
- 渲染顺序:在不透明物体之后渲染(
"Queue"="Transparent"
)。 - 光照模式:处理主光源和环境光(
"LightMode"="ForwardBase"
)。 - 投影器影响:不受 Projector 影响(
"IgnoreProjector"="True"
)。 - 渲染类型:标记为透明物体(
"RenderType"="Transparent"
)。
这种组合非常适合需要透明效果的 Shader,例如玻璃、粒子或水面。
常见 Unity Tags 及其作用
以下是 Unity Shader 中常用的 Tags,供你参考:
Tag | 作用 | 常用值 |
---|---|---|
"Queue" | 控制渲染顺序 | "Background" , "Geometry" , "Transparent" , "Overlay" |
"LightMode" | 指定光照模式 | "ForwardBase" , "ForwardAdd" , "ShadowCaster" |
"RenderType" | 定义渲染类型,用于着色器替换 | "Opaque" , "Transparent" , "TransparentCutout" |
"IgnoreProjector" | 是否忽略 Projector 的影响 | "True" , "False" |
"ForceNoShadowCasting" | 强制不投射阴影 | "True" , "False" |
"Queue"
的常见值
"Background"
(1000):天空盒等背景物体。"Geometry"
(2000):默认不透明物体。"Transparent"
(3000):透明物体。"Overlay"
(4000):UI 或特效。
"LightMode"
的常见值
"ForwardBase"
:处理主光源和环境光。"ForwardAdd"
:处理额外的光源。"ShadowCaster"
:用于投射阴影。
总结
Unity Shader Tags 是控制渲染行为的核心工具。通过合理设置 Tags,你可以调整物体的渲染顺序、光照处理方式以及其他特性。希望这个回答能帮到你!如果有更具体的问题,请告诉我,我会进一步解答。
- Pass:每个 Pass 定义一次渲染过程,包含顶点着色器和片段着色器。 Tags也可以写在Pass里面
- CGPROGRAM:使用 HLSL 语言编写具体的着色器代码。
- 示例:
SubShader {Tags { "RenderType"="Opaque" } // 指定渲染类型为不透明Pass{CGPROGRAM#pragma vertex vert // 声明顶点着色器函数#pragma fragment frag // 声明片段着色器函数ENDCG} }
3. Fallback(回退)
- 作用:
当硬件不支持当前 SubShader 时,Unity 会尝试使用 Fallback 指定的备用着色器,确保渲染不会失败。 - 结构:
通常指向一个简单内置着色器,如 “Diffuse” 或 “VertexLit”。 - 示例:
Fallback "Diffuse" // 当 SubShader 不可用时,回退到 Diffuse 着色器
Unity Shader 的编程思路
编写 Unity Shader 时,需要遵循以下清晰的思路,确保代码逻辑清晰且效果符合预期:
-
明确渲染目标
- 在开始编写之前,明确着色器要实现的效果,例如不透明物体、透明效果、光照表现还是特殊视觉效果(如水面、玻璃)。
-
选择渲染路径
- 根据项目需求选择适合的渲染路径:
- 前向渲染(Forward Rendering):适合实时光照较少的场景。
- 延迟渲染(Deferred Rendering):适合大量动态光源的场景。
- 根据项目需求选择适合的渲染路径:
-
定义 Properties
- 确定用户需要调整的参数,例如颜色、纹理、光泽度、透明度等,并为这些参数设置合理的默认值。
-
编写 SubShader
- 根据目标效果,编写顶点着色器(处理顶点数据)和片段着色器(计算像素颜色)。
- 使用 Tags 控制渲染顺序和光照模式,确保与 Unity 的渲染管线兼容。
-
优化性能
- 尽量减少 Pass 数量,合并渲染操作以提升效率。
- 使用合适的数据类型和精度(如 half 替代 float),减少计算开销。
-
调试与测试
- 使用 Unity 的 Frame Debugger 检查渲染过程,定位问题。
- 使用 Profiler 分析性能,确保着色器运行高效。
Unity Shader 中的渲染状态设置
在 Unity Shader 中,渲染状态(Render State)定义了渲染管线如何处理几何体、深度、颜色等信息。除了 ZWrite 和 ZTest,还有其他相关设置共同影响渲染行为。以下是详细的说明:
1. ZWrite(深度写入)
- 作用:决定是否将物体的深度值写入深度缓冲区(Depth Buffer)。
- 可选值:
ZWrite On
:开启深度写入(默认值),物体渲染后会更新深度缓冲区。ZWrite Off
:关闭深度写入,物体不会影响深度缓冲区。
- 使用场景:
- 不透明物体:通常使用
ZWrite On
,确保正确遮挡后面的物体。 - 透明物体:通常使用
ZWrite Off
,避免阻挡后续物体的渲染,同时配合混合(Blend)实现透明效果。
- 不透明物体:通常使用
- 注意:即使关闭 ZWrite,深度测试(ZTest)仍然会生效。
2. ZTest(深度测试)
- 作用:决定物体是否通过深度测试,从而判断是否渲染该像素。
- 可选值:
ZTest Less
:深度值小于深度缓冲区值时通过。ZTest Greater
:深度值大于深度缓冲区值时通过。ZTest LEqual
:深度值小于或等于时通过(默认值)。ZTest GEqual
:深度值大于或等于时通过。ZTest Equal
:深度值相等时通过。ZTest Always
:始终通过深度测试。ZTest Never
:始终不通过深度测试。
- 使用场景:
- 不透明物体:通常使用
ZTest LEqual
,确保按深度顺序正确渲染。 - 透明物体:通常也用
ZTest LEqual
,但配合ZWrite Off
和 Blend。 - 特殊效果:如
ZTest Always
用于强制渲染(如 UI 或前景效果)。
- 不透明物体:通常使用
- 注意:ZTest 的结果只影响像素是否渲染,不影响深度缓冲区的更新(由 ZWrite 控制)。
3. Blend(颜色混合)
- 作用:控制当前渲染的颜色(源颜色)与颜色缓冲区已有颜色(目标颜色)的混合方式。
- 可选值:
Blend Off
:关闭混合(默认值),直接覆盖颜色缓冲区。Blend SrcFactor DstFactor
:指定源因子和目标因子的混合公式。- 常见示例:
Blend SrcAlpha OneMinusSrcAlpha
:标准透明混合。Blend One One
:加法混合。
- 常见示例:
- 使用场景:
- 透明物体:开启混合(如
Blend SrcAlpha OneMinusSrcAlpha
)实现透明效果。 - 不透明物体:通常关闭混合,直接覆盖背景。
- 透明物体:开启混合(如
- 注意:Blend 通常与
ZWrite Off
和Queue="Transparent"
配合使用。
4. Cull(面剔除)
- 作用:决定剔除物体的哪个面(正面或背面),或不剔除。
- 可选值:
Cull Back
:剔除背面(默认值)。Cull Front
:剔除正面。Cull Off
:不剔除,渲染双面。
- 使用场景:
- 不透明物体:使用
Cull Back
提高性能,只渲染正面。 - 透明物体:常使用
Cull Off
,确保双面可见。
- 不透明物体:使用
- 注意:双面渲染会增加性能开销。
5. Offset(深度偏移)
- 作用:调整物体的深度值,避免深度冲突(Z-Fighting)。
- 语法:
Offset Factor, Units
:Factor 影响深度斜率,Units 提供固定偏移。
- 使用场景:
- 重叠平面:如贴花、道路标记,使用
Offset -1, -1
调整深度。
- 重叠平面:如贴花、道路标记,使用
- 注意:Offset 不影响深度缓冲区内容,仅影响深度测试时的比较值。
6. ColorMask(颜色掩码)
- 作用:控制哪些颜色通道(R、G、B、A)写入颜色缓冲区。
- 可选值:
ColorMask RGBA
:写入所有通道(默认值)。ColorMask RGB
:只写入 RGB 通道。ColorMask A
:只写入 Alpha 通道。ColorMask 0
:不写入任何通道。
- 使用场景:
- 特殊效果:如只写入 Alpha 通道用于后期处理。
- 优化:配合深度测试实现某些渲染技巧。
完整 Shader 示例
以下是一个结合多种渲染状态的 Unity Shader 示例,用于透明物体渲染:
Shader "Custom/FullRenderStateExample"
{Properties{_Color ("颜色", Color) = (1,1,1,1)_MainTex ("主纹理", 2D) = "white" {}}SubShader{Tags { "Queue"="Transparent" "RenderType"="Transparent" }ZWrite Off // 关闭深度写入ZTest LEqual // 深度测试:小于或等于时通过Blend SrcAlpha OneMinusSrcAlpha // 标准透明混合Cull Off // 渲染双面Offset -1, -1 // 深度偏移ColorMask RGB // 只写入 RGB 通道Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _Color;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv) * _Color;return col;}ENDCG}}
}
总结
Unity Shader 的渲染状态控制了渲染管线的行为,以下是关键设置的统一说明:
- ZWrite:控制深度写入,决定是否更新深度缓冲区。
- ZTest:控制深度测试,决定像素是否渲染。
- Blend:控制颜色混合,常用于透明效果。
- Cull:控制面剔除,优化性能或实现双面渲染。
- Offset:调整深度值,解决深度冲突。
- ColorMask:控制颜色通道写入,用于特殊需求。
编程过程中必须掌握的关键点
要编写出高效且功能完善的 Unity Shader,以下几个关键点是必须掌握的:
-
顶点着色器(Vertex Shader)
- 作用:处理顶点数据(如位置、法线、UV 坐标),并将顶点从模型空间转换到裁剪空间。
- 关键技能:掌握 Unity 提供的变换函数,如
UnityObjectToClipPos
。
-
片段着色器(Fragment Shader)
- 作用:计算每个像素的颜色,负责纹理采样、光照计算和最终颜色输出。
- 关键技能:熟练编写像素级逻辑,处理光照和材质效果。
-
光照模型
- 基础模型:掌握 Lambert(漫反射)和 Blinn-Phong(高光反射)等常见光照模型。
- Unity 特性:理解 Unity 的光照系统,包括全局光照(GI)、实时光照和阴影。
-
纹理采样
- 方法:使用
tex2D
函数从纹理中采样颜色。 - 技巧:掌握 UV 坐标的偏移、缩放和动画,实现动态纹理效果。
- 方法:使用
-
渲染状态
- 控制项:设置深度测试(
ZTest
)、深度写入(ZWrite
)、混合模式(Blend
)、面剔除(Cull
)等。 - 应用:根据需求调整透明度、双面渲染等效果。
- 控制项:设置深度测试(
-
内置变量和函数
- 内置变量:熟悉 Unity 提供的变量,如
_Time
(时间)、_WorldSpaceLightPos0
(主光源位置)。 - 辅助函数:使用
UnityCG.cginc
中的函数(如UnityObjectToClipPos
、dot
),简化开发。
- 内置变量:熟悉 Unity 提供的变量,如
总结
Unity Shader 的编程需要掌握其基本结构(Properties、SubShader、Fallback),并遵循从明确目标到优化性能的清晰思路。在编程过程中,熟练掌握顶点和片段着色器、光照模型、纹理采样以及渲染状态是实现高效着色器的关键。通过不断实践和调试,你将能够编写出功能强大且性能优越的着色器,为 Unity 项目增添独特的视觉效果。
好的,我来为你完整解答 Unity Shader 中与 ZWrite、ZTest 相关的渲染状态设置,并统一说明所有常见的渲染状态,帮助你全面理解这些设置的作用和使用场景。
相关文章:
Unity Shader 的编程流程和结构
Unity Shader 的编程流程和结构 Unity Shader 的编程主要由以下三个核心部分组成:Properties(属性)、SubShader(子着色器) 和 Fallback(回退)。下面是它们的具体作用和结构: 1. Pr…...
C++ 继承
目录 一、继承的概念与定义 1.1 继承的概念 1.2 继承的定义 1.2.1 语法 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、C11 final 六、继承与友元 七、继承与静态成…...
XSS Game(DOM型) 靶场 通关
目录 靶场网址 Ma Spaghet! 分析 解题 Jefff 分析 解题 方法一 方法二 Ugandan Knuckles 分析 解题 Ricardo Milos 分析 解题 Ah Thats Hawt 分析 解题 方法一 方法二 Ligma 分析 解题 Mafia 分析 解题 方法一:构造函数 方法二…...
XSS基础靶场练习
目录 1. 准备靶场 2. PASS 1. Level 1:无过滤 源码: 2. level2:转HTML实体 htmlspecialchars简介: 源码 PASS 3. level3:转HTML深入 源码: PASS 4. level4:过滤<> 源码: PASS: 5. level5:过滤on 源码…...
leetcode-200.岛屿数量
首先,想要找岛,肯定是要逐个遍历的,否则肯定会漏岛。 其次,我怎么知道两个点是否属于一个岛?只有一个方法,我踏上一个岛的某个点时,我就分别往四周走,且把当前地块毁掉,就…...
Linux | ubuntu安装 SSH 软件及测试工具
01 windows 要怎么和 ubuntu 互传文件呢,我们可以使用 ssh 软件。 终端输入 sudo apt-get install openssh-server ,输入登录 Ubuntu 用户的密码,这里我们输入 y 确认安装。如下图所示。 接着继续改 ssh 配置文件,因为 ssh 默认…...
组件日志——etcd
目录 一、简介 二、安装【Ubuntu】 安装etcd 安装CAPI 三、写一个示例 3.0写一个示例代码 3.1获取一个etcd服务 3.2获取租约(写端操作) 3.3使用租约(写端操作) 3.4销毁租约(写端操作) 3.5获取etcd服务中的服务列表(读端操作) 3.6监听状态变化(读端操作) 一、简介 Et…...
search_fields与filterset_fields的使用
在Django中,search_fields 和 filterset_fields 可以在视图类中使用,尤其是在 Django REST Framework (DRF) 中。它们分别用于实现搜索和过滤功能。以下是它们在视图类中的具体使用方法。 1. search_fields 在视图类中的使用 search_fields 是 DRF 中 S…...
SQLite Delete 语句详解
SQLite Delete 语句详解 SQLite 是一种轻量级的数据库管理系统,广泛应用于移动设备、嵌入式系统和服务器端应用。在数据库管理中,删除数据是一项基本操作。SQLite 提供了强大的删除功能,本文将详细介绍 SQLite 的 Delete 语句及其用法。 1.…...
通往自主智能之路:探索自我成长的AI
1. 引言:当前AI范式与自我成长智能的愿景 当前的人工智能领域在很大程度上由大型语言模型(LLM)的卓越能力所定义。这些模型,例如OpenAI的GPT系列和谷歌的BERT,已经展示了前所未有的理解和生成类人文本的能力。LLM通常…...
[自动化] 【八爪鱼】使用八爪鱼实现CSDN文章自动阅读脚本
在CSDN上,文章的阅读量往往是衡量内容影响力的一个重要指标。为了测试自动化手段能否提高阅读数,我尝试使用网页自动化工具来模拟人工阅读某个ID的文章。 1. 网页自动化的常见方案 谈到网页自动化,Selenium 是一个最常见的选择。它可以通过…...
Kafka消息序列化深度革命:构建高性能、高安全的自定义编码体系
一、突破默认序列化的桎梏 1.1 原生序列化器的致命缺陷 Kafka默认提供的StringSerializer/ByteArraySerializer在复杂场景下暴露三大痛点: 类型安全黑洞:字节流缺乏元数据描述,消费端解析如履薄冰版本兼容困境:数据结构变更导致…...
2025年如何避免使用验证码求解器时被IP封禁
引言 2025年,验证码求解器已成为自动化网络抓取和其他在线流程的关键工具。然而,自动化用户面临的一个常见挑战是IP封禁。当网站检测到自动化活动时,通常会阻止发出请求的IP地址,导致验证码挑战无法解决。本文将探讨使用验证码求…...
前端 AI IDE应用优缺点
嗯,用户问了三个前端面试的问题,我需要仔细分析每个问题,并结合提供的搜索结果来给出全面且准确的回答。 第一个问题是关于开发工具Cursor或Vim的Windurf在开发中的占比以及它们的缺点。从搜索结果里看,网页3提到了Trae对标Curso…...
银河麒麟桌面版包管理器(二)
APT包管理器 APT是Debian及其派生系统的包管理器,构建在dpkg之上,以其强大的依赖性处理能力和丰富的软件仓库而闻名。APT具有自动解决依赖关系、提供易于使用的命令行工具(如apt-get、apt-cache等),以及稳定的软件更新…...
Leetcode 3494. Find the Minimum Amount of Time to Brew Potions
Leetcode 3494. Find the Minimum Amount of Time to Brew Potions 1. 解题思路2. 代码实现 题目链接:3494. Find the Minimum Amount of Time to Brew Potions 1. 解题思路 这道题虽说算是搞定了,通过了全部的测试样例,不过还是很暴力的求…...
制作Oracle11g Docker 镜像
基于Linux系统,宿主主机要设置如下环境变量,oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...
rocky linux下载软件
一、配置国内镜像源加速下载 Rocky Linux 默认使用国外软件源,国内用户可通过替换为阿里云镜像提升下载速度: 备份原配置文件: cp -r /etc/yum.repos.d /etc/yum.repos.d.backup 修改镜像源: sed -e s|^mirrorlist|#mirrorli…...
JVM的组成--运行时数据区
JVM的组成 1、类加载器(ClassLoader) 类加载器负责将字节码文件从文件系统中加载到JVM中,分为:加载、链接(验证、准备、解析)、和初始化三个阶段 2、运行时数据区 运行时数据区包括:程序计数…...
SpringBoot中安全的设置阿里云日志SLS的accessKey
众所周知,阿里云的服务都是基于accesskeyId和accesskeySecret来进行身份鉴权的,但唯独日志因为需要写入到.xml文件里对于accesskeyId和accesskeySecret需要进行一定程度的改进,尤其是使用了jasypt进行加密的参数传递进去logback.xml更是会遇到需要对参数进行解密的问题,而官网只…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例11,TableView15_11带分页的导出表格示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
C++多线程编程:从创建到管理的终极指南
在高性能计算时代,掌握多线程编程是提升程序效率的必修课!本文将手把手教你如何用C++11标准库轻松创建和管理线程,告别单线程的“龟速”,让代码跑出多核CPU的性能! 一、多线程为何重要? 充分利用多核CPU:现代计算机普遍支持多核并行,多线程可让程序性能指数级提升。提升…...
人工智能算法基础
基础算法 排序查找线性结构树散列图堆栈 机器学习算法 定义:数据算法 流程:数据收集与预处理、特征选择、训练和测试模型、模型的评估。 监督学习 定义:是从给定的训练数据集中学习出一个函数,当新的数据到来时,可…...
Normal distribution (正态分布)
Normal distribution {正态分布} 1. Normal distribution (正态分布) Gaussian distribution (高斯分布)1.1. Probability density function (概率密度函数)1.2. Standard normal distribution (标准正态分布)1.3. Cumulative distribution function (累积分布函数) 2. 正态分…...
企业级前端架构设计与实战
一、架构设计核心原则 1.1 模块化分层架构 典型目录结构: src/├── assets/ # 静态资源├── components/ # 通用组件├── pages/ # 页面模块├── services/ # API服务层├── store/ # 全局状态管理├── uti…...
数据模型,数据建模,组件,核心价值,使用,意义
数据模型 一组由符号,文本组成的集合, 用以准确表达信息景观, 达到有效交流,沟通的目的 数据建模 是发现,分析和确定数据需求的过程,是一种称为数据模型的精确形式表示和传递这些需求 数据模型的组件 实体, 关系, 属性和域 数据模型的核心价值 交流性 精确性 数据模型的…...
JavaScript 比较运算符
JavaScript 比较运算符 一、基础比较运算符类型 运算符名称示例核心特性==宽松相等"5" == 5 → true隐式类型转换===严格相等"5" === 5 → false类型+值双重校验!=宽松不等null != 0 → true等效于 !(a == b)!==严格不等5 !== "5" → true类型或…...
AI Agent战国时代:Manus挑战者的破局之道与技术博弈
随着Manus引爆通用型AI Agent的"手脑协同"革命,全球AI Agent赛道进入技术竞速期。Flowith、UI-TARS、LangManus等新势力通过差异化路径重构市场格局,背后折射出开源生态、本土化创新与跨模态交互的深层技术博弈。本文结合行业权威报告与公开技…...
linux--时区查看和修改
查看当前时间和时区: 打开终端,输入以下命令查看当前的日期和时间设置: timedatectl修改时区: 使用 timedatectl 命令来修改时区: sudo timedatectl set-timezone <时区>例如,设置时区为北京时间(中国标准时间&a…...
个人博客系统 --- 测试报告
一、项目功能介绍 该项目由:登录模块、博客首页模块、博客详情页模块、博客编辑页模块四个功能模块组成。 该系统实现了个人博客的保存以及记录了发布日期、时间、发布人等信息。 二、测试内容与测试用例 我们需要对该系统进行功能测试,界面测试&…...
ESP32S3基于FreeRTOS实时操作系统控制舵机
这段代码是一个基于ESP32的舵机控制示例,通过MCPWM模块配置定时器、操作符、比较器和发生器,生成特定脉冲宽度的PWM信号,控制舵机在 -60度到60度之间以2度为步长往复转动。 1. 源码部分 #include "freertos/FreeRTOS.h" #include…...
【vue的some和filter】
在 Vue 中,some 和 filter 是两种不同的数组方法,分别用于处理数据筛选和条件判断。以下是它们在 Vue 中的具体用法和区别: 一、filter 方法 作用:对数组进行过滤,返回符合条件的新数组。 使用场景:常用于…...
【LC插件开发】基于Java实现FSRS(自由间隔重复调度算法)
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解【LC插件开发】基于Java实现FSRS(自由间隔重复调度算法),期待与你一同探索、学习、进步,一起卷起来叭! 目录…...
jupyter 操作相关内容
1、jupyter界面美化 pip3 install jupyterthemes查看可用主题 jt -l推荐两个 jt -t grade3 -f consolamono -fs 140 -tfs 13 -nfs 115 -ofs 14 -cellw 90% -Tjt -t chesterish -f consolamono -fs 140 -altp -tfs 13 -nfs 115 -ofs 14 -cellw 90% -T...
【数据结构】单链表
目录 一、什么是链表?1、 定义2、链表的分类 二、无头单向非循环链表1、结构2、单链表数据的打印3、创建结点并初始化4、尾插5、头插6、尾删7、头删8、查找9、在指定位置pos之前插入数据10、在指定位置pos之后插入数据11、删除pos结点12、删除pos之后的结点13、销毁…...
UnoCSS极速入门:下一代原子化CSS引擎实战指南
文章目录 一、什么是UnoCSS?二、环境配置(Vite示例)三、核心使用模式3.1 自定义规则3.2 原子化类应用3.3 使用RegExp匹配器 四、高级功能解析4.1 主题系统4.2 响应式与深色模式 五、实战案例:构建现代按钮组件六、性能优化技巧七、…...
Es6进阶
class里的get和set 在 ES6 中,class 里的 get 和 set 是用于定义访问器属性的关键字。get 方法可在访问对象属性时调用,set 方法则在设置对象属性时调用。下面通过一个简单示例来介绍它们的用法: javascript class Person {constructor(nam…...
可发1区的创新思路:基于K-means聚类的EMD-BiLSTM-CNN-Attention时间序列预测模型(功率预测、寿命预测、流量预测、故障诊断)
首先声明,该模型为原创!原创!原创! 一、应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、交通流量预测、电机故障检测等等。 二、模型整体介绍(本文以光伏功率预测为例) 核心架构 数据聚类:K-means对风电场机组分组,降低异质性干扰。…...
Android BLE 权限管理
前言 android 权限一直是比较活跃的 在蓝牙权限这一块又分新版和旧版 新版权限 android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.BLUETOOTH_ADVERTISE, android.Manifest.permission.BLUETOOTH_CONNECT旧版权限如9.0以下 Manifest.permission.A…...
vue3 ts 注册全局组件
vue3 ts 注册全局组件 register.tsmain.ts register.ts // 注册全局组件 import {App} from "vue" import headerPage from "/headerPage.vue" export default {install(app:App){app.component("headerPage",headerPage)} }main.ts import re…...
Apache Doris学习
https://doris.apache.org/zh-CN/docs/gettingStarted/what-is-apache-doris 介绍 Apache Doris 是一款基于 MPP 架构(大规模并行处理)的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询…...
llama源码学习·model.py[7]Transformer类
一、源码展示 class Transformer(nn.Module):def __init__(self, params: ModelArgs):super().__init__()self.params paramsself.vocab_size params.vocab_sizeself.n_layers params.n_layersself.tok_embeddings VocabParallelEmbedding(params.vocab_size, params.dim,…...
Windows server 2022域控制服务器的配置
Windows server 2022介绍 一、核心特性与改进 安全核心服务器(Secured-Core Server) 硬件级安全:支持基于硬件的安全功能(如TPM 2.0、Secure Boot、基于虚拟化的安全防护VBS),防止固件攻击。受信任的启动链…...
yolo目标检测算法在DJI上的研究分析(大纲)
yolo目标检测算法在DJI上的研究分析 面向边缘计算的实时目标检测系统设计与部署 第一章 绪论 1.1 研究背景与意义 目标检测技术需求: DJI设备(如无人机、摄像头)在安防、巡检、农业等场景中的广泛应用现有YOLO算法在高分辨率图像或资源受限…...
三、重学C++—C语言内存管理
上一章节: 二、重学C—C语言核心-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146191640?spm1001.2014.3001.5502 本章节代码: cPart2 CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppstudy/tree/…...
DAY37 动态归化Ⅰ基础题目
509. 斐波那契数 - 力扣(LeetCode) class Solution { public:int fib(int n) {if(n<1) return n;int dp[2];dp[0]0;dp[1]1;int sum0;for(int i2;i<n;i){sum dp[0]dp[1];dp[0]dp[1];dp[1]sum;}return sum;} }; 70. 爬楼梯 - 力扣(Lee…...
ABAP Core Data Services (SAP PRESS) (First Edition)
ABAP Core Data Services (SAP PRESS) (First Edition)...
ORM——对象关系映射
对象关系映射(ORM)深度解析:原理、优势与应用场景 一、什么是ORM? ORM(Object-Relational Mapping)即对象关系映射,是一种将面向对象编程中的对象与关系型数据库中的表进行映射的技术。简单来…...
【Docker系列五】Docker Compose 简介
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
大语言模型-2.2/3-主流模型架构与新型架构
简介 本博客内容是《大语言模型》一书的读书笔记,该书是中国人民大学高瓴人工智能学院赵鑫教授团队出品,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的…...