Unity URP 下 TBN 矩阵学习 切线空间、tangent.w 与镜像 UV 的那些坑

技术美术入门必懂:用OpenGL知识反推Unity Shader与渲染管线(实战解析) 本文深入解析如何将OpenGL知识迁移到Unity Shader开发中,涵盖语法转换、渲染管线对比及实战技巧。通过对比GLSL与ShaderLab语法、OpenGL与Unity渲染流程差异,帮助技术美术快速掌握Unity Shader编写与调试方法,提升跨引擎开发效率。 阅读详情

1什么是 TBN 矩阵

法线贴图存储的并非世界空间法线,而是切线空间(Tangent Space)中的法线扰动。 切线空间由三个基向量定义:

向量含义方向来源
T(Tangent)沿 UV 的 U 方向顶点属性 float4 tangent 的 xyz
B(Bitangent)沿 UV 的 V 方向由 T 和 N 叉乘得到
N(Normal)垂直于表面顶点属性 或面法线

将三者按列排列即得到 TBN 矩阵,用于把切线空间中的法线变换到世界/观察空间:

MTBN = [ T  |  B  |  N ]  其行列式 = T · (B × N) = ±1

行列式的正负即手性(handedness):+1 为右手系,-1 为左手系。 法线贴图的编码默认右手系——如果运行时 TBN 变成了左手系,凹凸就会反转。

2右手系 vs 左手系:直观对比

右手系下,T、B、N 满足右手定则:四指从 T 弯向 N,拇指指向 B。 镜像 UV 时,T 跟随 U 方向反转,如果 B 仍按 cross(N, T) 原样计算, 叉积结果也跟着翻转,导致 B 方向错误,TBN 变成左手系。

3镜像 UV:问题的根源

建模软件中,为了节省贴图空间,常对对称模型只展开一半 UV,然后镜像另一半。 典型场景:角色面部、左右对称的武器或载具。

镜像后 U 轴翻转,T 跟着翻转,但 cross(N, T) 的结果也随之翻转。 这意味着如果你只写 float3 B = cross(N, T),在镜像侧 B 的方向就错了—— 法线贴图里"凸"的地方会变成"凹",光照完全反常。

⚠️ 常见错误

在 Shader 中直接写 float3 B = cross(N, T) 而忽略 tangent.w,会导致所有镜像 UV 的物体法线贴图出现翻转。

4tangent.w:Unity 存储的手性信号

Unity 在导入网格时,会为每个顶点计算切线并存入 float4 tangent:

分量存储内容取值
tangent.x切线 T 的 x 分量−1 ~ +1
tangent.y切线 T 的 y 分量−1 ~ +1
tangent.z切线 T 的 z 分量−1 ~ +1
tangent.w副法线手性标志+1(右手系)或 −1(镜像/左手系)

tangent.w 的本质:它告诉你该顶点的 TBN 应该是右手系还是左手系。 非镜像顶点 w = +1;镜像顶点 w = −1。

B = tangent.w × cross(N, T.xyz)

当 w = +1 时,cross(N, T) 原样使用; 当 w = −1 时,叉积结果取反,将 B"扳回"正确方向,使 TBN 恢复右手系。

5URP Shader 中的正确写法

以下代码展示了在 Unity URP Shader 中构建 TBN 矩阵的标准做法:

// 从 Interpolators 获取原始数据
float3 normalWS  = TransformObjectToWorldNormal(input.normalOS);
float4 tangent  = input.tangent;  // xyz = T, w = 手性
// 将切线从对象空间变换到世界空间
float3 tangentWS = TransformObjectToWorldDir(tangent.xyz);
// ★ 关键:用 tangent.w 修正副法线方向
float3 bitangentWS = tangent.w * cross(normalWS, tangentWS);
// 归一化(正交化后的 TBN 各列应为单位向量)
tangentWS  = normalize(tangentWS);
bitangentWS = normalize(bitangentWS);
normalWS   = normalize(normalWS);
// 构建 TBN 矩阵(列向量排列)
float3x3 TBN = float3x3(tangentWS, bitangentWS, normalWS);
// 采样法线贴图(DXT5nm / BC5 编码需要解码)
float3 tangentNormal = UnpackNormal(SAMPLE_TEXTURE2D(
    _BumpMap, sampler_BumpMap, input.uv));
// 从切线空间变换到世界空间
float3 worldNormal = mul(tangentNormal, TBN);
// 注意:mul(vector, matrix) 等价于 mul(matrix转置, vector)
// 这里用行向量 × 矩阵,因为 TBN 是列向量矩阵

✓ 正确做法

第 9 行 tangent.w * cross(N, T) 是 Unity 的标准约定。无论网格是否镜像,tangent.w 都会自动修正副法线方向,保证 TBN 始终是右手系。

✗ 错误做法

如果写成 float3 B = cross(N, T) 而忽略 tangent.w,在镜像 UV 的物体上,法线贴图中的凹凸会完全反转:原本凸起的部分变成凹陷,高光位置也会错误。

6法线贴图翻转的视觉表现

7Unity 内置函数怎么做的

URP 提供了 GetWorldSpaceNormalizeTangent 等辅助函数, 它们内部已经正确处理了 tangent.w。查看源码可见:

// Packages/com.unity.render-pipelines.universal/ShaderLibrary/SpaceTransform.hlsl
float3 GetWorldSpaceNormalizeTangent(float4 tangentOS, float3 normalWS)
{
    float3 tangentWS = TransformObjectToWorldDir(tangentOS.xyz);
    return normalize(tangentWS);
}
// 副法线计算在 LitInput 或自定义 Shader 中完成:
// bitangent = tangent.w * cross(normalWS, tangentWS)

URP 的 Lit Shader 内部通过 VertexNormalInputs 结构体和 InitializeVaryings 流程已经自动处理了手性。如果你使用 SurfaceInputTemplates 或手写 Shader,务必自己加上 tangent.w 的修正。

8手性判断的数学直觉

为什么要用 cross(N, T) 而不是 cross(T, N)?这与 Unity 的坐标系约定有关。

Unity 左手坐标系:T × N = −B(左手定则) → N × T = +B(右手定则方向)

Unity 世界空间是左手系,但法线贴图的编码约定是右手系。 因此:

  • cross(N, T) 给出右手系方向的 B
  • tangent.w = +1 时,B 不翻转 → 右手系 ✓
  • tangent.w = −1 时,B 翻转 → 从左手系"扳回"右手系 ✓

9完整示例:自定义 URP Lit Shader

以下是一个精简但完整的工作流,展示从顶点到片元如何正确使用 TBN:

// -------- Attributes --------
struct Attributes
{
    float4 positionOS : POSITION;
    float3 normalOS   : NORMAL;
    float4 tangentOS  : TANGENT;  // w = 手性
    float2 uv          : TEXCOORD0;
};
// -------- Varyings --------
struct Varyings
{
    float4 positionCS : SV_POSITION;
    float2 uv          : TEXCOORD0;
    float3 normalWS   : TEXCOORD1;
    float4 tangentWS  : TEXCOORD2;  // xyz=T, w=手性
};
// -------- Vertex Shader --------
Varyings Vert(Attributes input)
{
    Varyings output;
    output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
    output.uv         = input.uv;
    output.normalWS   = TransformObjectToWorldNormal(input.normalOS);
    // 变换切线到世界空间,保留 w 分量
    float3 tangentWS = TransformObjectToWorldDir(input.tangentOS.xyz);
    output.tangentWS  = float4(normalize(tangentWS), input.tangentOS.w);
    return output;
}
// -------- Fragment Shader --------
float4 Frag(Varyings input) : SV_Target
{
    float3 normalWS   = normalize(input.normalWS);
    float3 tangentWS  = input.tangentWS.xyz;
    float  handedness = input.tangentWS.w;
    // ★ 用 handedness 修正副法线
    float3 bitangentWS = handedness * cross(normalWS, tangentWS);
    // 构建 TBN 矩阵
    float3x3 TBN = float3x3(tangentWS, bitangentWS, normalWS);
    // 采样并解码法线贴图
    float3 tangentNormal = UnpackNormalScale(
        SAMPLE_TEXTURE2D(_BumpMap, sampler_BumpMap, input.uv), _BumpScale);
    // 变换到世界空间
    float3 worldNormal = normalize(mul(tangentNormal, TBN));
    // ... 后续光照计算使用 worldNormal ...
    return float4(worldNormal * 0.5 + 0.5, 1.0); // 调试可视化
}

10快速排查清单

当你怀疑镜像 UV 导致法线贴图翻转时,按以下步骤逐项排查:

#检查项预期
1Shader 中 tangent.w 是否参与 B 的计算?tangent.w * cross(N, T)
2Varyings 中 tangentWS 是 float4 还是 float3?必须是 float4 以保留 w
3顶点着色器中 tangentOS.w 是否传递到了片元?不应丢失
4模型导入设置中 Import BlendShapes / Tangents 是否正确?使用 "Calculate Mikktspace"
5法线贴图编码格式?确认 DXT5nm / BC5 解码方式匹配
6用 worldNormal * 0.5 + 0.5 可视化验证?镜像侧颜色应与非镜像侧对称

💡 调试技巧

在片元着色器中输出 tangentWS.w 作为颜色:非镜像区域显示白色(+1),镜像区域显示黑色(−1)。如果全是白色,说明模型本身没有镜像 UV,或者导入时手性信息丢失了。


总结

TBN 矩阵的手性问题是 Unity 中法线贴图在镜像 UV 物体上翻转的根因。 tangent.w 是 Unity 为此专门存储的修正信号——它告诉你当前顶点的切线空间 是否因镜像而变成了左手系。只要始终用 tangent.w * cross(N, T) 计算副法线,就能保证 TBN 在所有情况下都是右手系,法线贴图就不会出错。

一句话记住:
副法线 = tangent.w × cross(N, T)  →  永远不要省掉 tangent.w

 

Unity Shader进阶:从Phong到PBR的BRDF光照模型实现与调试 在计算机图形学中,光照模型是模拟光线与物体表面交互的核心技术,它决定了渲染的真实感。从早期的经验模型(如Phong)演进到基于物理的渲染(PBR),其原理在于更精确地模拟微表面理论下的光能分布。这种技术价值在于能统一材质工作流,实现跨场景的物理正确性,广泛应用于游戏开发、影视特效和实时可视化等领域。本文聚焦于Cook-Torrance BRDF模型,深入解析其法线分布函数(NDF)、几何函数(G)和菲涅尔方程(F)的数学原理与Shader实现,并涵盖常见问题排查与性能优化,帮助开发者掌握生产级Shader的 阅读详情

相关推荐

硬核拆解 DeepSeek-V3:双流并发、矩阵吸收与 C++/CUDA 算子级工程落地

在多机集群上部署 6710 亿参数的 DeepSeek-V3 时,自回归解码阶段的核心性能瓶颈并非静态显存容量,而是高并发长上下文下的显存带宽消耗与 256 专家 MoE 带来的算子调度开销。在标准多头注意力(MHA)配置下,单路请求在 128K 上下文时仅 KV Cache 就会在全模型 61 层中累积出近 488 GB 的显存读写需求,解码吞吐直接受限于 HBM 带宽物理上限;

weixin_45715405的博客 42

切线空间:unity中shader切线空间,切线矩阵,TBN矩阵 ,法线贴图深度剖析

NormaltangentxyzNormaltangent​​xyz​​说明切线空间的法线向量实际上是模型空间中的法线向量,但其坐标系统基于模型的顶点。切线空间的原点是模型顶点,因此切线空间的坐标轴(即切线、双切线和法线)也是基于模型空间的坐标轴。具体来说,切线空间的三个基向量(切线、双切线和法线)都是相对于模型坐标系定义的。为了将切线空间中的法线向量转换到世界空间,我们需要知道模型空间中的基向量(即切线、双切线和法线)在世界空间中的表示。

fengya1的专栏 2147

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置

本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。

rgv2345678的博客 238

Unity URP 切线空间详解

本文深入解析了切线空间(Tangent Space)在3D图形渲染中的原理与应用。切线空间作为跟随模型表面的局部坐标系,其TBN矩阵由切线(Tangent)、副切线(Bitangent)和法线(Normal)构成,用于实现法线贴图的空间转换。文章详细介绍了Unity URP中TBN矩阵的构建方法、法线贴图的解码过程,并提供了完整的Shader实现代码示例。特别强调了关键注意事项:必须重新归一化插值后的法线、正确处理切线空间的手性问题(tangent.w符号)、正确设置纹理类型等最佳实践。通过理解切线空间原理

mxwin的博客 376

深度学习的卷积神经网络的煤矸石识别

在本博文中,我们提出了一种基于深度学习的煤矸石检测与识别系统,该系统采用YOLOv8算法对煤矸石进行检测和识别,实现对图片中的煤矸石进行准确识别。1.项目需求对煤矸石进行检测与识别,系统将识别出图片中的克服小块煤矸石漏检的缺陷。 2.项目实现 通过调研,本项目最终使用yolov8模型作为目标检测的模型, YOLOv8 旨在快速、准确且易使用,使其成为广泛的物体检测、图像分割和图像分类任务的极佳选择。 1.数据集:格式为jpg的3091张煤矸石图片2.YOLOv8环境配置yolo检测网络包括24个卷积层

2201_75355700的博客 792

Cadence Spectre仿真保姆级教程:从DC/AC到PSS/PV,手把手教你搞定模拟电路分析

作为业界标准的Cadence Spectre仿真器,以其精确的算法和丰富的分析类型,成为每个模拟IC工程师必须掌握的利器。本文将带你从零开始,系统掌握Spectre仿真的核心技能,从最基础的DC工作点分析到复杂的PSS相位噪声仿真,每个步骤都配有详细的操作指导和实用技巧。记得我第一次使用Spectre仿真一个简单的两级运放时,花了整整三天时间才得到正确的AC响应曲线。过程中踩过的坑、浪费的时间,现在想来都是宝贵的学习资源。与传统的AC分析不同,STB分析可以在不破坏环路的情况下评估稳定性。

weixin_30898555的博客 335

Unity Shader URP:将法线可视化,便于调试

法线可视化:URP Shader调试指南 法线可视化通过将方向向量映射为RGB颜色(normal*0.5+0.5),帮助快速定位模型法线、法线贴图或TBN矩阵问题。核心方法包括: 空间选择:对象空间检查模型导入问题,世界空间验证光照效果,切线空间调试法线贴图。 关键代码: 顶点法线:使用TransformObjectToWorldNormal转换后输出颜色。 法线贴图:通过UnpackNormal解包并可视化切线空间向量。 世界空间法线:构造TBN矩阵转换后归一化输出。 常见问题:颜色突变(硬边/UV镜像)

mxwin的博客 418

Innovus ECO技巧:用setEcoMode+ecoAddRepeater实现批量buffer替换的5个关键步骤

本文详细介绍了在Cadence Innovus工具中,利用setEcoMode与ecoAddRepeater命令实现高效、批量Buffer/Inverter替换的工程化策略。通过启用批处理模式、构建可维护的替换规则、掌握高级定位技巧以及规避布线陷阱等5个关键步骤,帮助芯片设计工程师在ECO阶段大幅提升修改效率与质量,确保设计稳定签核。

d6e7f8的博客 1117

Unity3D法向量深度解析:从数学原理到渲染与物理实战应用

法向量是三维计算机图形学中定义表面朝向的核心数学概念,其本质是垂直于表面某一点的单位方向向量。在渲染管线中,法线数据通过顶点法线、面法线及像素法线等不同层级进行传递与插值,是光照计算(如兰伯特漫反射模型)的基石,直接决定了物体在光照下的明暗表现。其技术价值不仅限于基础渲染,更是实现法线贴图、物理碰撞检测、卡通渲染及边缘光等高级视觉效果的关键数据。在游戏开发与三维可视化等应用场景中,无论是处理从SolidWorks导入的机械模型,还是实现复杂的地形系统交互,对法线数据的深入理解与正确操作都至关重要。本文聚焦于

weixin_30681121的博客 464

Flotherm XT新手必看:5分钟搞定自然对流热仿真(附案例文件)

本文为Flotherm XT新手提供了自然对流热仿真的快速入门指南,通过详细的步骤解析和实用技巧,帮助用户在5分钟内完成从建模到后处理的全流程。重点介绍了环境设置、几何建模、材料属性、网格划分等关键环节,并附有案例文件供参考学习,助力工程师快速掌握热仿真技术。

weixin_30839881的博客 620

【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会

对于很多朋友来说,找到nnunet的网络结构位置的代码可能比较困难,因为nnunet的网络结构从else:代码中没有网络结构的类名,那么使用的网络是哪个呢?打开预处理后的数据集中的nnUNetPlans.json文件,如下图,configurations里面有2d、3d_fullres等,这些表示nnunet的模型,下面的network_class_name指的就是训练使用的模型结构,一般都是PlainConvUNet。

AI爱好者的博客,分享计算机领域相关知识 8757

Unity ShaderGraph平面镜反射实现:从原理到性能优化的避坑指南

在计算机图形学中,平面镜反射是一种基于几何光学原理的经典渲染技术,它通过计算光线在光滑表面的对称反射路径来模拟真实世界的镜像效果。其核心在于反射矩阵的构建与空间坐标变换,这直接关系到渲染的真实感与性能效率。在实时渲染领域,这项技术的价值在于能够显著提升场景的视觉沉浸感,广泛应用于游戏中的水面、镜面、光滑地板等材质表现。然而,在Unity引擎中,尤其是使用可视化工具ShaderGraph时,开发者常会遇到反射错位、边缘闪烁、性能开销大等典型问题。本文将从视图空间与深度缓冲等基础概念切入,深入解析反射矩阵的计算

weixin_33857230的博客 324

智能体异常行为检测-基于行为序列的异常模式识别技术【附代码】

在多智能体系统(Multi-Agent Systems, MAS)中,智能体之间的行为协调与自主决策是系统稳定运行的关键。然而,当某个智能体因策略偏移、环境变化或潜在攻击而出现**异常行为(Abnormal Behavior)**时,整个系统可能陷入混乱或崩溃。

一键难忘的博客 1143

技术美术常见面试题整理

通过将几何和材质信息存储在G-Buffer中,可以实现多个光源的逐像素光照计算、后期处理效果和渲染技术,如SSAO(屏幕空间环境光遮蔽)、SSR(屏幕空间反射)等。通常,MSAA适用于硬件支持的场景,FXAA和SMAA适用于后处理效果,而TXAA则适用于高质量图像的需求,但需要更高的计算性能。它是在OpenGL中进行高效渲染的重要工具之一,特别适用于复杂几何体的绘制和动态几何变化的场景。(Occlusion Culling)是一种用于优化渲染性能的技术,旨在避免渲染那些在场景中被其他物体遮挡的不可见对象。

yasin的博客 2769

GB28181 —— 3、C++编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

GB28181 —— Win10下编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

1308

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

矩阵补全低秩结构

相反,如果低秩矩阵的奇异向量是"铺展"的——能量分散在所有行与所有列上,与采样矩阵的坐标基"不相干"——那么随机抽取有限个元素,就有很大概率覆盖到足以确定那几个潜在因子的信息。核范数是秩的凸松弛,就像 ℓ1 是 ℓ0 的凸松弛一样,它是"秩这个非凸目标在凸方向上最紧的替代"。报告里如果把矩阵补全压缩成几条可执行原则:第一,在动手做任何"从几行数据推断整张表"的任务前,先检验低秩假设是否成立——用已有的数据估计一下矩阵的近似秩,若秩接近满秩,那么低秩恢复这条路就不该走,应换用其他方法或引入领域约束降低秩。

2602_95606446的博客 314

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2026年视频矩阵厂家技术评估:从EDID到控制协议开放度的六维筛选法

要求厂商把样机拉到现场,用你项目里真实存在的信号源和显示端跑一遍:EDID冲突场景、无缝切换逐帧测、中控发指令收反馈、断电重启后的状态恢复。在这一维度上,像讯维这样同时具备矩阵、分布式KVM和全域管控平台产品线的厂商,优势不在于某一台矩阵的参数,而在于矩阵与坐席、中控、录播之间的协议一致性——同一个指令体系下的联动,比跨品牌拼凑少一层翻译损耗。64路“两台32路级联”和“单机原生64路”在满负荷下的切换同步性和故障边界完全不同,选型时要问清楚背板带宽是按满配算的还是按典型配置算的。

2603_95485477的博客 335

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python题目练习23-同行列对角线的格// 计算矩阵边缘元素之和//计算鞍点

以上代码可供大家参考,如果大家有更好的方法也可以分享出来哈。

2201_76061075的博客 235

FSW 与 MIG/TIG 的适用边界、成本结构与选择矩阵

转速 600–1500 r/min、焊速 100–500 mm/min、下压量 0.1–0.3 mm、倾角 2–3°,动一个另外三个都要跟着调,这一点在选工艺阶段就要评估进去。搅拌头寿命按 3000–5000 件计,件数少时工装摊销占比高,件数上万时工装被摊薄,FSW 的单件成本明显下移。超过 12 mm 后单面焊透困难,搅拌针长度与设备刚性都吃紧,通常改为双面焊,翻面增加一道装夹与对中,工时接近翻倍。低于 3 mm 的薄板,FSW 的轴肩压力容易把板压塌,装夹与支撑要求反而更高,熔焊在薄板上更灵活。

CHEEVEN_QY的博客 320

Java转AI Agent教程(第九周)错误矩阵

本周将重试机制抽象为RetryingLlm装饰器,实现统一行为与可测性;结合RateLimiter(令牌桶)实现按用户限流,防突发与单点过载;通过幂等账本确保重复提交不产生二次扣款,键基于(userId, orderId)保障稳定性。验收以“实际调用次数”为核心指标,确保重试有界、不可重试错误不被重试、限流生效且无雪崩。最终drill w9全绿,系统具备高可用与防错能力基础,为后续资损防护铺路。

吴名氏的博客 302

2026年账号矩阵协同效应怎么量化:三个指标与公式结构

于是它既无法验证,也无法否定——做得不好时,同样可以说"协同需要时间"。复用率看内容效率,重合度看受众结构,归集看线索质量,各自回答不同问题;:分子按"内容条目"算,不按"发布条数"算。:统计周期内,出现在 ≥2 个账号内容列表中的内容条目数(按内容主键去重,不是按发布次数);:一段时间内,被两个及以上账号使用过的内容条目,占同期内容条目总数的比例。"""示例数据在函数下方。:两个账号在同一统计周期内,触达人群的交集规模占并集规模的比例。:同一批线索被两个及以上账号触达的条数,占同期线索总数的比例。

2606_96834244的博客 364

OpenCV 5.1.0正式发布:核心矩阵、图像处理、DNN推理全面升级,性能与稳定性大幅增强

与此同时,OpenCV 5.1.0 还在 AVX-512、NEON、RISC-V RVV、IPP、OpenCL、CUDA、ArmPL 等多个后端持续优化,并对大量精度、内存、越界、异常输入和跨平台问题进行了修复。DNN 模块则完成新引擎统一,强化了 CUDA、cuDNN JIT、ONNX、TFLite、注意力机制、KV 缓存和量化推理能力。另一方面在 SIMD、AVX-512、RISC-V RVV、CUDA、OpenCL、IPP、ArmPL 等后端上进行了大量性能优化。DNN 模块迎来重要架构调整。

福大大架构师每日一题 614

《甲虫矩阵进化史》(2)

本文以DRAM芯片“4164”为视角,讲述从PC/XT到PC/AT时代内存技术的演进:外廷甲虫(DRAM)依赖电容存电、集体刷新、分Bank交错以提升效率;内廷侍卫(SRAM)则凭借六晶体管锁存无需刷新,逐步从主板移入CPU芯片,最终成为寄存器文件中的“禁军”。两条路径——外廷的容量与并行、内廷的高速与独立——共同构筑了计算机存储体系的基石。

CgiMiFan的专栏 315

力扣73 矩阵置零

该解法通过标记含0的行和列来实现矩阵置零。遍历矩阵,用布尔数组记录有0的行和列;再遍历一次,若当前行或列被标记,则置为0。时间复杂度O(mn),空间复杂度O(m+n)。

Pniubi的博客 22

矩阵指数求导

FteAteAIA2!A2​3!A3​⋯FtIAt2!At2​3!At3​⋯现在对它逐项求导, 前几项分别是:dtdI​0dtdA​A˙dtdA2​A˙AAA˙这里要特别注意!1​A˙AAA˙3!1​A˙A2AA˙。

qq_44691564的博客 217

数组、特殊矩阵、稀疏矩阵

如果矩阵中非零元素数量远小于总元素数量,称为稀疏矩阵。一般约定:非零元素占比 < 5% 就可以认为是稀疏矩阵。❌ 问题:直接开二维数组存储,大量 0 白白浪费空间。三元组顺序表,只保存非 0 元素。表格存储方式适用对象优点缺点二维数组稠密矩阵随机访问 O (1)0 元素浪费大量空间特殊矩阵压缩(公式映射)对称 / 三角 / 对角矩阵空间小、可以公式寻址只适合有规律矩阵三元组顺序表静态稀疏矩阵节省空间,实现简单随机访问失效,增删慢十字链表动态稀疏矩阵(频繁修改)

Sarvartha的博客 344
上一篇: Unity URP 下 HDR 与 Tonemapping 的 Shader 意识
下一篇: Unity URP 法线贴图:世界空间 vs 切线空间 深度解析两种法线贴图格式在实时渲染中的核心差异、适用场景与性能权衡
mxwin
博客等级 码龄19年 22粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值