当前位置: 首页 > news >正文

自由学习记录(48)

When the material of an object disappears, the light and shadow also disappear (synchronized)

Tiling And Offset

显示的是四分之一前面的,不是中间的四分之一块,

准确的还是跟着视频学, ,AI一些回答会散发一种“奇怪的错味”,随便看看就行,也不能问深

Tiling And Offset 是一个用于修改 UV 坐标的节点。它会在 GPU 采样纹理之前,对 UV 进行缩放和平移,从而控制贴图的显示位置和重复频率。

可以把它理解为 GPU 在对纹理进行采样之前,对 UV 坐标做的一个数学操作:

UV_out = UV_in * Tiling + Offset;

参数说明:

输入类型含义
UV(2)float2原始 UV 坐标(比如模型顶点传入的 UV0)
Tiling(2)float2每个方向的缩放比例(放大 > 1,缩小 < 1)
Offset(2)float2平移距离(决定贴图偏移的位置)
Out(2)float2输出处理过的新 UV,供 Sample Texture 用

为什么贴图采样前要做这步?

因为 UV 是决定 模型表面如何映射纹理 的二维坐标系:

  • 默认 UV 是 [0, 1] 范围 → 刚好采样一整张贴图

  • 但你可能想让贴图重复(砖块纹理)、偏移(滑动 UV 动画)

举个例子:

设置效果
Tiling = (2, 2)贴图重复两次(缩小采样区域)
Offset = (0.5, 0)水平偏移半个贴图单位(“滚动贴图”)

发生在片元着色器执行前,也就是:

  1. 顶点着色器阶段传入模型的原始 UV

  2. 片元着色器准备采样贴图前,把 UV 做了变换(乘缩放 + 加偏移)

  3. Sample Texture 2D 根据新 UV 去纹理图中“找颜色”

  4. 得到的颜色继续参与材质计算(比如和颜色混合,控制透明等)

最终纹理采样节点 Sample Texture 2D 只需要一个 UV(float2)输入,它不关心你 Tiling 和 Offset 怎么组合来的,只要你给它一个位置,它就能“从贴图上采颜色”。

所以 Tiling And Offset 节点内部就是:

UV_out.xy = UV.xy * Tiling.xy + Offset.xy;

Tiling(x, y) 控制贴图在 U、V方向 上的重复次数:

  • x = 横向(U)

  • y = 纵向(V)

🔸 举例效果
Tiling 值效果说明
(1, 1)正常贴图,原样显示一整张
(2, 2)横向和纵向都重复两次(每块变成原图一半大)
(3, 1)横向重复三次,纵向正常
(-1, 1)横向翻转贴图(因为坐标是负的)

数值越大,图案越小;越小(0~1),图案越大。负数会翻转贴图。

Offset(x, y) 表示在 U、V方向 上的偏移量:

  • 通常以 0~1 为一整张贴图宽度/高度

🔸 举例效果
Offset 值效果说明
(0, 0)不偏移
(0.5, 0)向右偏移半张贴图宽度
(0, 1)向上偏移一整张贴图高度(循环)
(-0.25, -0.25)向左下偏移四分之一

Offset 不会改变贴图大小,只控制贴图在模型上的起始位置。贴图是循环的,所以偏移不会导致“空白”。

正确解释:这并不是 Shader 或 Tiling 的重复,而是模型 UV 的设定

在 Unity 中,默认的 3D Cube(正方体)模型

  • 每一个面都有自己独立的 UV 区域

  • 每个面都将 UV 映射到 (0,0) ~ (1,1) 的标准范围

  • 所以就算贴图只重复一次(Tiling=1),每个面都会显示完整的一次贴图

也就是说:

🎲 默认 Cube 的六个面,其实等价于贴了六次贴图,因为 UV 是六份独立的标准矩形!

一般情况下,一个 Mesh 最常见包含:

UV 通道用途
UV0(主 UV)用于贴图显示(BaseMap、Normal、Emission 等)✅
UV1常用于光照贴图(Lightmap UV)🟠
UV2, UV3, UV4额外用途,如遮罩、粒子、混合动画、高级 Shader 等 🧪

📌 默认你用 Shader Graph 时,使用的是 UV0,也就是最标准的主贴图坐标。

UV 数据来自哪里?由什么决定?

✅ 核心答案:来自 Mesh 本身,也就是模型的顶点数据中。

Unity 中的 UV 是存储在 Mesh 中的一个或多个通道里,而 并不是 Mesh Renderer 决定的

来源是否定义 UV
Unity 默认模型(Cube / Sphere)✅ Unity 内建定义好的 UV
你从 3D 软件导入的 FBX / OBJ✅ 由你在建模软件中展开的 UV 决定
Procedural Mesh / 代码生成 Mesh❌ 如果不赋值 UV,则贴图无法正确映射

查看 / 修改 UV 的位置

✅ 方法一:通过模型预览

  • 选中某个模型资源(.fbx.obj

  • Inspector 面板 → Preview → UV Layout,可以查看 UV 展开图

✅ 方法二:通过脚本访问 UV

Mesh mesh = GetComponent<MeshFilter>().sharedMesh;

Vector2[] uv0 = mesh.uv; // 主 UV 通道

Vector2[] uv1 = mesh.uv2; // 第二通道

✅ 方法三:在 Shader Graph 中使用 UV

  • 使用 UV 节点 → 选择 UV0, UV1, … UV4

Mesh Renderer

  • 负责把你传入的 Mesh、材质、Shader 渲染到屏幕上

  • 它本身不决定 UV 内容,但使用 Mesh 中的 UV 来做贴图

✅ 也就是说: Mesh Renderer 是“使用 UV”的那一层,Mesh 是“定义 UV”的那一层

glowing edge

Fresnel 是基于 1 - dot(Normal, ViewDir) 的计算,即视线和法线越垂直,越亮!

Fresnel 遮罩值Rim Color(边缘颜色) 相乘,生成带颜色的边缘光

Multiply 在这里的作用是:让 Fresnel 的黑白遮罩乘上你想要的“发光颜色”

这个值表示“每个点上边缘效果的强度”,通常用于控制透明度或作为发光遮罩使用。

Fresnel Effect 的计算发生在哪个阶段?

👉 在 Fragment Shader(片元着色器)阶段

因为:

  • Fresnel 效果依赖于视角方向(View Direction)

  • View Direction 是 相机 → 当前像素点方向

  • 这个方向每个像素都不同,所以必须在片元阶段计算

如果你在 Vertex 阶段计算视角方向,只能得出“顶点到相机”的方向,传到片元时会被插值,会出问题(尤其在光滑表面)

模型法线(Normal)确实是在顶点阶段就定义好的,但是注意:

  • 顶点法线 → 插值 → 得到片元法线(像素级法线)

  • 如果有法线贴图,还会进一步扰动法线方向

  • Shader Graph 传入的是 World Space 法线向量,最终 Fresnel 用它与 ViewDir 做角度计算

float fresnel = pow(1.0 - saturate(dot(normalize(N), normalize(V))), power);

变量含义
N世界空间下的法线方向
V世界空间下的视线方向(像素到相机)
power控制边缘亮度的衰减程度(越大越细)

为什么这段逻辑不能放在顶点阶段?

因为:

  • 顶点数远少于像素数(一个三角形可能包含数百个像素)

  • 把 Fresnel 放在顶点阶段只会得出“角落粗略数据”,在边缘动画、高光渐变等场景中会破坏精度

  • 边缘高光必须精准计算每一个像素的视角差异,这就需要片元阶段完成

用一个灰度控制整个颜色值的强度(比如发光、边缘、透明等)

步骤描述
Fresnel Effect 输出一个灰度值表示边缘强度
② 与 Rim Color(float4) 相乘每个通道都乘这个强度值
③ 输出带颜色的透明边缘发光(float4)作为最终边缘高光

float3 × float2 是不合法的,不能广播

Multiply(逐通道乘法)result = A * B;

float fresnel = 0.7;
float3 rimColor = float3(0, 1, 1); // 青色边缘
float3 final = fresnel * rimColor; // 最终发光值

Dot(点乘,求相似度)

点乘是向量间的余弦相似度 × 长度乘积,常用于方向性判断:

dot(A, B) = |A| * |B| * cos(θ)
A 和 B 都是归一化的单位向量(如法线和视线),则 dot = cos(角度)

用途(颜色控制):

  • 控制方向性高光、模拟 光照角度

  • 制作渐变遮罩(例如从某个方向来的光线才有颜色)

  • 边缘光粗略控制(比 Fresnel 更便宜)

Lerp(线性插值)

根据插值因子 t 在两个值之间做线性混合:

result = A * (1 - t) + B * t
// 等价于:lerp(A, B, t)

根据深度或高度插混合贴图(岩石 → 草地)

淡入淡出(从 A 淡到 B)

float mask = 0.3; // 可来自噪声、距离、边缘等
float3 base = float3(0.2, 0.2, 0.2);
float3 glow = float3(0, 1, 1);
float3 result = lerp(base, glow, mask);

Add 节点会对 输入 A(4)输入 B(4) 进行 逐通道加法

通道计算公式结果
R0.2 + 0.50.7
G0.8 + 0.41.2
B0.9 + 0.31.2
A1.0 + 1.02.0

加法在图像处理中,通常表示叠加亮度、或增强光效

Add → Out(4) 是 float4 类型,而 Fragment → BaseColor 要求 float3 类型。自动丢弃 Alpha 通道

和 Multiply 的区别

操作意义效果
Multiply控制强度、遮罩某个区域“有颜色 → 某部分变淡/变黑”
Add叠加亮度、合成发光“让颜色变亮 / 增加发光感”

粒子系统的模块就是“效果拼装件”

模块名称用途说明是否常用
Main基础属性(生命周期、初始颜色、速度等)✅ 必选
Emission控制发射速率、爆发生成✅ 常用
Shape控制从什么形状发射(球/锥体/面)✅ 常用
Size over Lifetime控制粒子大小随时间变化✅ 常用(缩放/消散)
Color over Lifetime控制颜色渐变(从红变透明)✅ 常用(火焰、魔法)
Velocity over Lifetime控制粒子运动轨迹🟡 用于曲线轨迹/飘散
Rotation over Lifetime旋转特效🟡 魔法/能量球飞旋
Force over Lifetime模拟风/重力场🟡 辅助表现
Texture Sheet Animation播放帧动画贴图🟡 烟雾火花序列帧
Sub Emitters子粒子系统(粒子再生成粒子)🔥 高阶特效核心!
Trails尾迹(比如子弹拖尾、剑气)🔥 非常视觉抓眼
Renderer材质、渲染排序、面朝相机等控制✅ 必调
Collision / Triggers粒子与环境交互🔧 特效 + Gameplay 联动
Lights每个粒子发光🔧 成本高但逼真

Ports(端口翻译)

名称(Name)方向(Direction)类型(Type)绑定(Binding)描述(Description)
Texture输入Texture输入的纹理贴图
Sampler输入Sampler State纹理采样器(与 Texture 搭配使用)
Position输入Vector 3世界空间坐标当前片元在世界空间的位置
Normal输入Vector 3世界空间法线当前片元在世界空间的法线
Tile输入Vector 1控制生成的 UV 的平铺倍率
Blend输入Vector 1控制三个方向贴图之间的混合平滑度
Out输出Vector 4最终输出的颜色或法线值(float4)

 Shader Graph 中 Vertex Block(顶点上下文)

Position(3):顶点位置(Object Space)

  • 表示当前顶点在**物体本地空间(Object Space)**中的位置。

  • 这是顶点着色器阶段最基础的输入。

Normal(3):顶点法线(Object Space)

  • 表示模型顶点的法线方向。

  • 默认是物体空间的法线,你可以选择转换为 World Space 等。

  • 常用于计算方向性效果、发光遮罩、动态风动等。

Tangent(3):顶点切线(Object Space)

  • 用于构建 切线空间(Tangent Space),主要用于法线贴图。

  • 与 Normal 一起组成 TBN 矩阵(Tangent, Bitangent, Normal),支持表面细节贴图的光照计算。

  • 没有这个,无法正确解析法线贴图。

默认这些数据都是来自模型导入的本地坐标空间(Object Space),因为:

  • 顶点原始数据就存储在物体空间中

  • 对 GPU 而言,所有变换(模型→世界→视图)都在渲染管线后续完成

tangent变化不明显,(顶点着色器单独连接后,offset)

是与其他物体之间的反射渲染问题

想自己先捏一个夜神月,,用模型可以捏个大致的样子的,

Position (World) 的输出连接到了 Tiling And Offset 节点

使用世界空间的位置坐标(World Position)来代替传统的 UV 坐标

“世界坐标和 UV 完全不沾边,为什么可以用它来贴图?”

“UV 应该是为 texture2D 定义采样位置的啊?”

这个问题本质上触及到了图形编程里非常关键的一个概念:
🌍 纹理坐标只是一个取值参考系,本质是一个二维采样参数,而不一定要来源于 UV 展开。

先来还原我们对“UV”的传统认知:

传统意义上的 UV特点
模型作者在 3D 软件中手动展开UV0、UV1... 是模型自带的顶点属性
每个顶点都有一个 UV 值(float2)指定纹理如何映射到模型表面
采样贴图时,传入 Sample Texture 的 UV是模型局部面上的 2D 坐标

Shader 的世界里,任何你传入 Sample Texturefloat2,都可以作为纹理的“采样坐标”。

float2 uv = worldPos.xy;
float4 col = tex2D(_MainTex, uv);

这也能采样贴图,只不过这个贴图不再“跟着模型表面”,而是“贴在世界空间里”!

传统贴图是贴在“模型表面”,也就是 跟着 UV 坐标跑
而“贴在世界空间”指的是:

贴图的显示不再跟着模型动,而是跟世界坐标静止对齐,像投影、壁纸、地毯一样。

你可以把它想成:
🗺️“这个贴图是固定在世界这个‘房间’里的,而不是缝在模型上。”

在 Shader Graph 中,你只需要这样连:

Position (World) → Split (XY) → Sample Texture 2D

就等于告诉 Shader:

“我每个像素的贴图坐标 = 世界坐标的 XY 值”

当前片元在世界坐标下的位置 worldPos.xy 决定了它所采样的纹理区域。

就是所谓的 world-aligned texturing,或称 triplanar / world projection mapping 等技术的基础。

当你将 worldPos.xy 作为贴图采样坐标时:

  • 贴图位置是 世界空间一致的,即纹理的空间分布不随模型的变换(如位置移动)而变化;

  • 任何模型穿过同一世界坐标位置时,都会采样到相同的纹理颜色

  • 贴图视觉上表现为“固定在世界中”,如同地面纹理、投影光照、风场扰动、环境扫描等。

---

这些可以直接使用的node,是哪里来的信息,是每个像素都有的是吧,为什么可以直接用,是谁提供的

screen Position是干什么的这个node

scene depth又是什么时候得到的数据

可以做到的 吗,在一个材质上写,但另一个材质因此受到渲染变化

每个材质的渲染是 GPU 独立执行的。

可以间接“观察另一个材质的存在”,当前材质通过“读取深度缓冲区”,判断前方是否有其他物体 → 决定自己的表现

读取缓冲区的?缓冲区是上一帧的还是当前这一帧

Scene Depth / Scene Color / Screen Position 等 Shader 节点读取的不是“上一帧的数据”

当前帧、当前相机渲染过程中,在这个像素位置 的实时结果(实时的渲染缓冲区)。

Unity 渲染流程中,有多个 帧内的缓冲区(Buffer)

缓冲区说明Shader 中访问方式
Color Buffer当前场景颜色Scene Color 节点(或 GrabPass)
Depth Buffer每个像素的深度值(距离摄像机多远)Scene Depth 节点
Normals Buffer(有时)法线信息(G-buffer 阶段)HDRP 中可用
Shadow Map、Light Buffer光照/阴影信息Unity 内部管理

这些缓冲区是 当前帧的实时中间结果,在相机渲染主通道中动态构建的。

为什么它可以“感知别的材质”?

因为场景中有多个物体时,Unity 会先渲染靠前的对象(深度排序),它们的颜色和深度就会被写入缓冲区。

当水面等效果材质渲染时:

  • 它正好“晚于”其他物体

  • 所以可以读取这些已经被写入的深度 / 颜色数据

  • 实现“对前方物体做出反应”的效果

Unity 渲染路径:Forward

Deferred

Legacy Vertex Lit
Legacy Deferred

渲染路径(Render Path)是渲染管线中的“光照计算阶段”是如何进行的方式

具体某个物体如何进行光照计算”的策略。比如:逐像素光照 vs 逐顶点光照。

ShaderLab/Pass 是渲染路径选择后,会调用的“底层 shader 代码”部分,负责真正执行每一像素或每一顶点的绘制。

Unity 有哪些渲染管线?

渲染管线简介特点适合场景
内置管线(Built-in RP)Unity 最早的默认管线通过设置 RenderPath 控制 Forward / Deferred / VertexLit老项目、简单快速
URP(Universal Render Pipeline)面向通用设备的现代化管线性能优秀、可自定义、跨平台支持好手机、独立游戏、VR、性能敏感项目
HDRP(High Definition Render Pipeline)面向高端平台的管线高质量光照(PBR、体积雾、屏幕反射)、基于物理的渲染准确度极高高端 PC、主机、写实 AAA 游戏
自定义 SRP你可以完全自定义一套渲染管线极度灵活专业团队、特殊渲染技术、研究型项目

每一个 Pass 都是 Unity 在渲染特定阶段时调用你 Shader 的入口

不同的 Pass(每个都有一个 Tags { "LightMode" = "xxx" }

重点记住前五个标签名

标签:"LightMode" = "ForwardBase"

主要计算内容:

  • 一个最主要的逐像素方向光(通常是 Directional Light)

  • 所有的逐顶点光源(点光/聚光灯也可以设置为逐顶点)

  • 球谐光照(SH,环境光)

  • 光照贴图(Lightmap)

  • 自发光(Emission)

  • 环境光遮蔽(AO)

每个物体只会调用一次 Base Pass。

“每个光源执行一次 Pass”——是指 ForwardAdd 会为每个光源单独 Draw 一次

对比点逐顶点光照(per-vertex)逐像素光照(per-pixel)
光照计算位置顶点着色器 中计算光照片元着色器 中计算光照
计算频率每个顶点一次,然后插值到像素每个像素都独立计算

Forward 渲染路径 中:

  • 最多一个逐像素光源(主光源,一般是 Directional Light)

  • 其他光源默认为逐顶点,除非你使用 ForwardAdd 添加

  • 你要写在 ForwardAdd 的 Pass 中才能逐像素处理这些额外光源

LightMode = "ForwardAdd" → 就是逐像素光源的计算区域

Unity 自带的 Standard Shader,它默认主光源就是逐像素光源

// 逐像素光照:每个像素都计算光线方向、法线角度
fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
fixed NdotL = max(0, dot(normal, lightDir));
这个是写在 fragment shader(片元着色器)里,所以每个像素都这样算一次。

_WorldSpaceLightPos0.xyz,Unity 内置的光照变量,代表主光源的方向或位置(取决于光源类型),坐标是世界空间下的坐标(world space),完整类型是:float4 _WorldSpaceLightPos0

它的 前 3 个分量 .xyz 是你要用来计算光照方向的内容

第 4 个分量 .w 代表光源类型:

_WorldSpaceLightPos0.w表示光源类型.xyz 含义
0方向光(Directional Light).xyz 是一个方向向量(从光源指向物体的方向)
1点光源 / 聚光灯(Point / Spot).xyz光源的位置

Unity 在渲染时,会自动把当前场景的“主光源”信息填进去。

只要你在场景里有一个激活的 Light(一般是 Directional Light),它会:

  1. 把光源方向或位置转换到世界空间

  2. 赋值到这个变量 _WorldSpaceLightPos0

你在 Shader 里就可以直接用,不需要自己传。

_WorldSpaceLightPos0 为什么能在 Shader 里直接用?

不是“另一个 Shader 文件里写了它”,而是 Unity 在每次渲染物体时自动传给 GPU 的内置变量,属于 全局 uniform(uniform buffer)的一部分

所以它“不是你写在哪个 Shader 文件里就能用的变量”,而是:

  • Unity 的内置渲染系统(在 C++ 层)定义了这个名字,并负责 在渲染每个物体前自动设置这个值

  • 所以你在任意 Shader 中写:

uniform float4 _WorldSpaceLightPos0;

就可以使用它(就像你可以写 gl_PositionUNITY_MATRIX_MVP 一样)

  • Shader 文件之间没有链接、没有导入导出(不像模块化编程)

  • 每个 Shader 都是独立编译的 GPU 程序

在 SRP(URP/HDRP)中,这种机制还在吗?

是的,但发生了改变:

  • Unity 不再使用 ShaderLab 自带的“全自动变量”,而是:

    • 使用 CBUFFER 显式声明变量块

    • 通过 RenderFeatureHLSL include 文件手动传值

  • 默认变量名很多被隐藏在 include 文件或 C# 的 render context 设置中

Forward 渲染路径 下,Unity 为了节省性能,只允许一个光源以“逐像素精度”参与主要光照计算,这个光源就叫 主光源(Main Light)

其他光源,要么:

  • 降为 逐顶点光照(便宜但粗糙)

  • 要么 额外加一个 Pass 来单独处理(性能消耗大)

nity 如何判断哪个是“主光源”?类型必须是 Directional Light(方向光),必须勾选 Scene 中的“Sun Source”(默认只取第一个激活的方向光)

Window > Rendering > Lighting > Environment

Deferred 渲染路径 下:

  • 没有“主光源”概念,所有光源都等价(统一处理)

Forward 渲染路径 下:

  • 其他光源被转成 逐顶点光照

  • 或用 ForwardAdd 单独计算

如何查看当前的渲染管线是什么类型

UniversalRenderPipeline

  • Unity 为这个管线起名为 “Universal” —— 表示它是通用型渲染管线。

  • 目标是:能跑在移动端、PC、VR、主机上,性能与画质之间取得平衡

和 HDRP 对比:

管线名称含义目标平台
URP (Universal)通用的、跨平台的从手机到主机都适用
HDRP (High Definition)高画质,重写实主要用于高端 PC / 主机游戏

PipelineAsset

这是 Unity SRP 架构里的标准命名,它是一种:

ScriptableRenderPipelineAsset 的派生类,用来作为你项目的“渲染管线入口配置”。

它:

  • 决定你用的是什么样的 SRP

  • 包含了渲染参数(比如抗锯齿、阴影距离、贴图限制、Render Feature 等)

  • 被设置在 GraphicsSettings.currentRenderPipeline

为什么不叫 UniversalRenderPipelineSetting 或 Manager?

因为:

  • 它本质是一个 Unity 的资源文件(Asset),所以命名上遵循 xxxAsset 习惯

  • Unity 的很多系统都通过 Asset 来驱动(例如:AudioMixerAsset、InputActionAsset、TimelineAsset)

  • 你可以创建多个 URP Asset,针对不同平台设置不同配置(比如高配 vs 低配),就像多个材质那样切换

一旦在 Graphics Settings 里启用了 URP 的 Asset,整个项目就切换到了 URP 渲染管线,Unity 内部的渲染路径、材质、相机、光照、后处理等逻辑都会发生变化,不再走内置管线的老逻辑

影响范围一览(非常实际):

系统模块切换到 URP 后的变化
相机 CameraInspector 面板不同,启用了 URP 相机渲染结构(Renderer Feature 等),默认使用 Forward+ 渲染。
Light 光源面板结构变化,很多选项(比如 Cookie、阴影模式)表现方式不同。
材质 Shader原来的 Standard Shader 会失效或变粉,需要使用 URP/LitShader Graph 或自己适配的 Shader。
后处理 PostProcessing不再使用旧版 PostProcessing Stack v2,而是内建在 URP 的 Volume System(比如 Bloom、Depth of Field)。
RenderSettings(如 Fog、Skybox)许多效果改为通过 Volume Override 控制,不再受旧系统控制。
Scriptable 渲染行为可以插入 Render Feature 实现自定义渲染通道(后处理、自定义 Pass、全屏效果)。

❗ 注意:不是兼容 + 增加功能,而是“完全切换”

所以你会发现:

  • 原来的 Standard Shader 全变粉(Shader 不兼容)

  • 原来的后处理无效

  • 原来的 Camera 设置缺了 / 多了很多选项

  • 原来的脚本调用一些内置 Pass 会失效(比如命令缓冲调用)

配置 URP Asset 意味着切换渲染管线,引擎内部的渲染逻辑、资源加载方式、组件属性都将根据 URP 接管和重构,不是“附加功能”,而是“全面替代”。所以你看到相机、光照、材质等行为都发生变化,是完全合理的。

浅入深出,带你了解光照渲染_哔哩哔哩_bilibili

由此可见phong的模型消耗较高

这up讲的好,浅入深出

浅入深出,带你了解抗锯齿_哔哩哔哩_bilibili

浅入深出,带你了解纹理过滤_哔哩哔哩_bilibili

相关文章:

自由学习记录(48)

When the material of an object disappears, the light and shadow also disappear (synchronized) Tiling And Offset 显示的是四分之一前面的&#xff0c;不是中间的四分之一块&#xff0c; 准确的还是跟着视频学&#xff0c; &#xff0c;AI一些回答会散发一种“奇怪的错味…...

zynq7020 最小ps环境速通

1 简介 环境: 硬件 野火 zynq 皓月 xc7z020clg400-1 软件: vivado2020.2 vitis2020.2 petalinux2020.2 搭建 ps 的最小环境,跑裸机 helloworld 测试 uart 和 ddr,跑 linux 系统. 2 ps 环境搭建 2.1 uart 2.1 ddr 2.1 删除 pl 接口,包括 pl 时钟,pl 时钟复位,axi_m. 具体略…...

Modbus RTU ---> Modbus TCP透传技术实现(Modbus透传、RS485透传、RTU透传)分站代码实现

文章目录 Modbus RTU到Modbus TCP透传技术实现1. 透传技术概述1.1 透传基本原理- 协议帧格式转换- 地址映射与管理- 通信时序适配- 错误检测与处理 2. 透传网关硬件架构2.1 典型硬件结构- 微控制器/处理器(ARM、STM32等)- RS-485/RS-232收发器- 以太网控制器(如W5500)- 电源管理…...

【SOC 芯片设计 DFT 学习专栏 -- IDDQ 测试 与 Burn-In 测试】

文章目录 IDDQ 测试与 Burn-In 测试IDDQ 测试工作原理测试过程优点局限性示例 2. Burn-In 测试工作原理测试过程优点局限性示例 总结对比 IDDQ 测试和 Burn-in 测试&#xff1a; IDDQ 测试与 Burn-In 测试 本文将详细介绍 DFT 中 IDDQ测试 和 burn-in测试模式 IDDQ 测试 IDD…...

Rust从入门到精通之进阶篇:19.Rust 生态系统

Rust 生态系统 Rust 拥有一个丰富而活跃的生态系统,提供了各种库和框架来支持不同领域的开发。在本章中,我们将探索 Rust 生态系统中的主要组件,了解常用的库和工具,以及如何在项目中有效地使用它们。 Rust 包管理:Cargo 和 crates.io Cargo 回顾 Cargo 是 Rust 的构建…...

【HarmonyOS Next】三天撸一个BLE调试精灵

【HarmonyOS Next】三天撸一个BLE调试精灵 一、功能介绍 BLE调试精灵APP属于工具类APP&#xff0c;在用户使用的过程中&#xff0c;负责调试BLE设备从机端&#xff0c;比如蓝牙耳机、低功耗设备、带有BLE的空调等设备&#xff0c;可以在页面中清晰看到设备的厂商&#xff0c;…...

STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]

一、项目概述 本文基于 STM32F103C8T6 单片机&#xff0c;设计了一个高精度温度控制系统。通过 DS18B20 采集温度&#xff0c;采用位置型 PID 算法控制 PWM 输出驱动 MOS 管加热Pi膜&#xff0c;配合 OLED 实时显示温度数据。系统可稳定将 PI 膜加热至 40℃&#xff0c;适用于…...

【docker】docker-compose安装RabbitMQ

docker-compose安装RabbitMQ 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09;2、启动mq3、访问mq4、查看服务器映射目录5、踩坑5.1、权限不足 1、配置docker-compose.yml文件&#xff08;docker容器里面的目录请勿修改&#xff09; versi…...

如何突破MacBook苹果电脑Cursor限制:免费版的解决方法

Macbook苹果电脑无限白嫖Cursor|解决免费版限制问题|达到50次150次续杯|arm|intel 如何突破MacBook苹果电脑Cursor限制&#xff1a;免费版的解决方法 前言 本文介绍了如何在MacBook上突破Cursor免费版的使用限制。请遵循以下步骤进行操作。 操作步骤 进入程序目录&#xff1a;…...

网络原理之传输层

前文我们了解 应用层 传输层 网络层 数据链路层 物理层 这五层结构,此文我先讨论传输层相关的知识 1. 传输层 负责数据能够从发送端传输到接收端. 1.1 端口号 端⼝号(Port)标识了⼀个主机上进行通信的不同的应用程序 端口号范围划分: 0-1023:知名端口号,HTTP,FTP,SSH等这些…...

一个免费 好用的pdf在线处理工具

pdf24 doc2x 相比上面能更好的支持数学公式。但是收费...

新书速览|云原生Kubernetes自动化运维实践

《云原生Kubernetes自动化运维实践》 本书内容&#xff1a; 《云原生Kubernetes自动化运维实践》以一名大型企业集群运维工程师的实战经验为基础&#xff0c;全面系统地阐述Kubernetes&#xff08;K8s&#xff09;在自动化运维领域的技术应用。《云原生Kubernetes自动化运维实践…...

解决安卓so库异常无法打印堆栈的问题

解决方案&#xff1a; 设置 android:extractNativeLibs"true" 直接在 AndroidManifest.xml 里加上&#xff1a; <applicationandroid:extractNativeLibs"true"> </application>这样&#xff0c;so 文件会被解压&#xff0c;崩溃时可以正常打…...

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");...

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件&#xff0c;一种是R3D&#xff0c;一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构&#xff0c;使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件&#xff0c;这种文件解码需要使…...

若依前端框架增删改查

1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…...

YARN Cluster模式和Client模式的区别是什么

在 Apache Spark 的 YARN 部署中&#xff0c;Cluster 模式和Client 模式的核心区别在于 Driver 的启动位置和客户端&#xff08;提交任务的机器&#xff09;的角色。以下是两者的详细对比&#xff1a; 1. 核心区别概览 特性YARN Cluster 模式YARN Client 模式Driver 位置在 YA…...

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…...

Java 集合 List、Set、Map 区别与应用

一、核心特性对比 二、底层实现与典型差异 ‌List‌ ‌ArrayList‌&#xff1a;动态数组结构&#xff0c;随机访问快&#xff08;O(1)&#xff09;&#xff0c;中间插入/删除效率低&#xff08;O(n)&#xff09;‌‌LinkedList‌&#xff1a;双向链表结构&#xff0c;头尾操作…...

天地图InfoWindow插入React自定义组件

截至2025年03月21日天地图的Marker不支持添加Label; 同时Label和Icon是不支持自定义HTMLElement只支持String&#xff1b;目前只有InfoWindow支持自定义HTMLElement; 效果图 React核心api import ReactDOM from react-dom/client const content document.createElement(div);…...

深度学习PyTorch之动态计算图可视化 - 使用 torchviz 生成计算图

序号系列文章1深度学习训练中GPU内存管理2深度学习PyTorch之数据加载DataLoader3深度学习 PyTorch 中 18 种数据增强策略与实现4深度学习pytorch之简单方法自定义9类卷积即插即用5深度学习PyTorch之13种模型精度评估公式及调用方法6深度学习pytorch之4种归一化方法&#xff08;…...

拓展知识三:编码学及密码学

编码和密码的区别 研究密码变化的客观规律&#xff0c;应用于编制密码以保守通信秘密的&#xff0c;称为编码学&#xff1b;应用于破译密码以获取通信情报的&#xff0c;称为破译学&#xff0c;总称密码学。 编码和密码是两个不同的概念&#xff0c;它们的区别如下&#xff1a;…...

【商城实战(54)】解锁商城国际化密码:内容管理全攻略

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

JS 应用WebPack 打包器第三方库 JQuery安装使用安全检测

# 打包器 -WebPack- 使用 & 安全 参考&#xff1a; https://mp.weixin.qq.com/s/J3bpy-SsCnQ1lBov1L98WA Webpack 是一个模块打包器。在 Webpack 中会将前端的所有资源文件都作为模块处理。 它将根据模块的依赖关系进行分析&#xff0c;生成对应的资源。 五个核心概…...

【嵌入式硬件】三款DCDC调试笔记

关于开关电源芯片&#xff0c;重点关注输入电源范围、输出电流、最低压降。 1.MP9943: 以MP9943为例&#xff0c;输入电压范围4-36V&#xff0c;输出最大电流3A&#xff0c;最低压降为0.3V 调整FB使正常输出为5.06V 给定6V空载、5V空载、5V带2A负载的情况&#xff1a; 6V带2A…...

深入理解 HTML5 Web Workers:提升网页性能的关键技术解析

深入理解 HTML5 Web Workers&#xff1a;提升网页性能的关键技术解析 引言1. 什么是 Web Workers&#xff1f;Web Workers 的特点&#xff1a; 2. Web Workers 的使用方式2.1 创建一个 Web Worker步骤 1&#xff1a;创建 Worker 文件步骤 2&#xff1a;在主线程中调用 Worker 3…...

计算机网络的分类——按照按拓扑结构分类

计算机的拓扑结构是引用拓扑学中研究和大小、形状无关的点、线关系的方法&#xff0c;将网络中的计算机和通信设备抽象为一个点&#xff0c;把传输介质抽象成一条线&#xff0c;由点和线组成的几何图形就是计算机网络的拓扑结构。计算机网络的拓扑结构主要由通信子网决定&#…...

AI大白话(四):自然语言处理——AI是如何理解和生成人类语言的?

🌟引言: 专栏:《AI大白话》 AI大白话(一):5分钟了解AI到底是什么? AI大白话(二):机器学习——AI是怎么“学习“的? AI大白话(三):深度学习——AI的‘大脑‘是如何构建的? 大家好!欢迎回到"AI大白话"系列。前面我们聊了AI的基本概念、机器学习的原理…...

Android第六次面试总结(Java设计模式篇一)

单例模式属于创建型设计模式&#xff0c;它保证一个类仅有一个实例&#xff0c;并且提供一个全局访问点来获取该实例。下面为你详细阐述单例模式的好处和坏处。 好处 资源优化&#xff1a;单例模式能保证一个类只有一个实例&#xff0c;这对于那些创建和销毁开销大的对象&…...

如何在 React 项目中进行服务器端渲染(SSR),它有什么优势

大白话如何在 React 项目中进行服务器端渲染&#xff08;SSR&#xff09;&#xff0c;它有什么优势 什么是服务器端渲染&#xff08;SSR&#xff09; 在传统的 React 项目里&#xff0c;页面的渲染工作是在浏览器里完成的。也就是当你访问一个网页时&#xff0c;浏览器会先下…...

JVM 01

今天是2025/03/20 16:36 day 09 总路线请移步主页Java大纲相关文章 今天进行JVM前二个模块的归纳 首先是JVM的相关内容概括的思维导图 以下是针对思维导图中 内存管理 和 垃圾回收&#xff08;GC&#xff09; 模块的详细说明&#xff1a; 1. 内存管理&#xff08;运行时数据…...

MATLAB 调用arduino uno

为了授课&#xff0c;必须重新把arduino用上。 采用MATLAB编码&#xff0c;可以简化相关程序授课部分 1 安装包 MATLAB Support Package for Arduino Hardware - File Exchange - MATLAB Central (mathworks.com) 需要这个插件。 当然也可下载simulink的模块&#xff0c;但…...

WPS宏开发手册——JSA语法

目录 系列文章2、JSA语法2.1、打印输出2.2、注释2.3、变量2.4、数据类型2.5、函数2.6、运算符2.7、比较2.8、if else条件语句2.9、for循环2.10、Math对象&#xff08;数字常用方法&#xff09;2.11、字符串常用方法2.12、数组常用方法 系列文章 使用、工程、模块介绍 JSA语…...

linux如何释放内存缓存

[rootredis ~]# sync #将内存缓存数据强制写入磁盘&#xff08;保存数据后再做释放&#xff09; [rootredis ~]# echo 1 > /proc/sys/vm/drop_caches #释放内存缓存...

2025年渗透测试面试题总结-某360-企业蓝军面试复盘 (题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 360-企业蓝军 一、Shiro绕WAF实战方案 二、WebLogic遭遇WAF拦截后的渗透路径 三、JBoss/WebLogic反序…...

Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8

一、环境信息 1.1、硬件信息 Atlas 800I A2 * 2 1.2、环境信息 操作系统&#xff1a;openEuler 22.03 LTS NPU驱动&#xff1a;Ascend-hdk-910b-npu-driver 24.1.0 linux-aarch64.run NPU固件&#xff1a;Ascend-hdk-910b-npu-firware 7.5.0.3.220.run MindIE镜像&#xff…...

OpenHarmony 入门——ArkUI 跨页面数据同步和页面级UI状态存储LocalStorage小结(二)

文章大纲 引言一、在代码逻辑使用LocalStorage二、从UI内部使用LocalStorage三、LocalStorageProp和LocalStorage单向同步四、LocalStorageLink和LocalStorage双向同步五、兄弟组件之间同步状态变量七、将LocalStorage实例从UIAbility共享到一个或多个视图 引言 前面一篇文章主…...

自我革命!优利德全面进入智能示波器时代

AI重构电子测试新范式 春节期间&#xff0c;DeepSeek&#xff08;深度求索&#xff09;火遍全网。作为国内首个全面对标GPT-4技术架构的AI大模型&#xff0c;DeepSeek凭借其自主研发的通用大语言模型体系&#xff0c;涵盖了从7B到超千亿参数的完整模型矩阵&#xff0c;在数学推…...

Vue3 实战:基于 mxGraph 与 WebSocket 的动态流程图构建

本文将详细介绍如何在 Vue3 项目中集成 mxGraph 可视化库&#xff0c;并通过 WebSocket 实现画布元素的实时更新。适合有 Vue 基础的前端开发者学习参考。 一、技术栈准备 Vue3&#xff1a;采用 Composition API 开发mxGraph&#xff1a;JavaScript 流程图库&#xff08;版本 …...

Python-金融相关代码讲解

文章目录 概要整体架构流程1.代码部分2.逐个讲解1&#xff09;# -*- coding: utf-8 -*-2&#xff09;基本库引入3&#xff09;函数模块4&#xff09;主程序 小结1. 问题拆解思维2. 文件处理三件套3. 字典的妙用&#xff1a;4. 上下文管理器&#xff08;with open...&#xff09…...

深度解读DeepSeek:开源周(Open Source Week)技术解读

深度解读DeepSeek&#xff1a;开源周&#xff08;Open Source Week&#xff09;技术解读 深度解读DeepSeek&#xff1a;源码解读 DeepSeek-V3 深度解读DeepSeek&#xff1a;技术原理 深度解读DeepSeek&#xff1a;发展历程 文章目录 一、开源内容概览Day1&#xff1a;FlashMLAD…...

【算法】十大排序算法(含时间复杂度、核心思想)

以下是 **十大经典排序算法** 的时间复杂度、空间复杂度及稳定性总结&#xff0c;适用于面试快速回顾&#xff1a;排序算法对比表 排序算法最佳时间复杂度平均时间复杂度最差时间复杂度空间复杂度稳定性核心思想冒泡排序O(n)O(n)O(n)O(1)稳定相邻元素交换&#xff0c;大数沉底…...

TCP传输---计算机网络

TCP结构 源端口和目标端口&#xff1a;标识通信的应用程序。序列号&#xff1a;标记发送的数据段的顺序序号。确认号 ( ACK)&#xff1a;确认接收到的数据序号。标志位&#xff1a;控制连接状态&#xff0c;包括 SYN&#xff08;同步&#xff09;、ACK&#xff08;确认&#xf…...

创建vue2项目

1、前往 Node.js 官网下载并安装 Node.js&#xff0c;安装完成后&#xff0c;npm 会随之安装。确认 Node.js 和 npm 是否成功安装&#xff0c;可以在命令行中运行以下命令检查版本&#xff1a; node -v npm -v 运行结果&#xff1a;&#xff08;如下&#xff0c;表示node和n…...

从投机到可持续发展:ETHDenver 2025 的关键启示!

ETHDenver 2025 重点讨论了 Web3 向可持续发展转型&#xff0c;特别强调了人才培养、去中心化治理和激励机制的紧密结合。Polkadot 一直以来的长期观点也进一步支持了行业从投机转向长期、社区驱动增长的趋势。随着 ETHDenver 2025 会议的的落幕&#xff0c;Polkadot 生态中的贡…...

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…...

操作系统为ubantu的服务器上部署nginx软件基础步骤总结

今天在这里&#xff0c;我们总结一下ubantu的服务器上部署nginx软件&#xff0c;请按照以下步骤进行安装&#xff1a; 1、更新包列表&#xff1a; 首先更新你系统中的可用软件包列表&#xff0c;以确保你可以安装最新版本。 sudo apt update2、 Ubuntu上更新已安装软件包&…...

批量给 PPT 文档添加或删除保护,批量设置打开密码和只读密码

为了保护保护档的安全&#xff0c;我们经常会给 PPT 文档添加打开密码或者只读密码保护。有些场景下&#xff0c;我们也可能会碰到需要删除 PPT 文档的打开密码或者只读密码的需求。今天就给大家介绍一种方法可以一次性批量给多个 PPT 文档添加打开密码或者只读密码保护&#x…...

Elasticsearch 中的数据分片问题

Elasticsearch 分片机制 Elasticsearch 在存储数据时采用 分片&#xff08;Shard&#xff09;机制&#xff0c;以提高性能和可扩展性。它索引中的数据被划分成多个 主分片&#xff08;Primary Shard&#xff09; 和 副本分片&#xff08;Replica Shard&#xff09;&#xff0c…...

如何在IPhone 16Pro上运行python文件?

在 iPhone 16 Pro 上运行 Python 文件需要借助第三方工具或远程服务&#xff0c;以下是具体实现方法和步骤&#xff1a; 一、本地运行方案&#xff08;无需越狱&#xff09; 使用 Python 编程类 App 以下应用可在 App Store 下载&#xff0c;支持直接在 iPhone 上编写并运行 …...