自由学习记录(65)

其他脚本语言也可以热更新,但 Lua 特别适合,游戏主程序通常是 C++,Lua 只是逻辑脚本,改 Lua 不影响主程序运行

语言应用场景
PythonWeb 后端 / 数据处理服务
JavaScript浏览器端热重载 / React HMR
C#Unity 的 ILRuntime / HybridCLR 实现 DLL 热更新
TypeScript前端构建工具支持热替换
WASM支持在不重启主进程的前提下动态替换模块
框架特点
XLua(Unity)支持 Lua 脚本与 C# 混合调用
Tolua早期流行框架,适配 Unity
Cocos2d-x Lua天然支持热更新(如 loadstring、require)
Skynet服务级热更新(服务器端框架)

XLua 是 Unity 官方推荐的 Lua 热更新解决方案
它允许你在 Unity 项目中使用 Lua 脚本写逻辑,并在运行时替换、更新这些逻辑而不重新打包整个程序

  • 你可以写 C# 脚本,Unity 编译器会把它们 编译成 DLL,然后随游戏一起打包发布。

  • 但是这些 DLL 是 不能在运行后更换的(尤其是用 IL2CPP 发布后,代码会被转成 C++ 编译成二进制)

文件能否在运行时执行原因
.cs(C# 脚本)❌ 不行要编译成 DLL,运行时不能改
.lua(Lua 脚本)✅ 可以Lua 是脚本语言,由运行时解释器解释执行
.js(UnityScript)✅/❌(已废弃)Unity 原生早期支持,后来移除
.py.ts❌ 不行Unity 无内建解释器,需自己嵌入

所以在 Unity 中,Lua 是特地“嵌入”的解释器环境,类似你在游戏内装了一个“小电脑”来读 .lua 脚本文件。

热更新 ≠ 必须联网,热更新只意味着:“你可以在运行时 用新的逻辑代码 替换旧逻辑,而不是必须重新打包游戏。”

【例 :联网游戏】

  • 玩家打开游戏 → 发现服务器上有新版本的 skill_logic.lua

  • 游戏自动下载覆盖旧脚本

  • 新技能逻辑立刻生效,不用重启或重装游戏
    ✅ 热更新起作用

但热更新只有在游戏有联网机制、支持下载新 Lua 脚本时才有“更新”的实际效果。

哪怕是单机:

  • 使用 Lua 脚本仍然可以让逻辑更灵活(比如任务逻辑、关卡行为可以写在 Lua 里)

  • 你仍可以在不同版本中方便地换脚本,不必全局改 C# 和重新打包

假设你开发了一个单机游戏,打包之后放在某个平台上供人下载。玩家下载之后完全断网。

情况 A:游戏只是用了 Lua,但不打算更新
  • 你在开发阶段就把很多逻辑写在 Lua 脚本里(比如关卡配置、敌人 AI)

  • 这些 Lua 文件被打包进安装包中

  • 游戏运行时,Lua 虚拟机会加载并执行这些脚本

👉 这种只是运行时使用 Lua 脚本,不叫热更新。

情况 B:游戏打包时内置了备用脚本机制
  • 虽然断网,但你设计了一个“插件目录”或“本地脚本读取路径”

  • 玩家或开发者可以手动替换这些 Lua 文件

  • 游戏运行时会读取外部的 Lua 脚本而不是打包内的

👉 这种属于本地热更新(不依赖网络,但仍可更新逻辑)

对比项Lua 脚本C# 代码(Unity 环境)
执行方式解释执行(通过虚拟机)编译成 IL,再由 Mono/IL2CPP 运行
文件是否可直接编辑✅ 是文本,可随时改❌ 编译后为 DLL,不可直接改
是否可脱离主程序更新✅ 热替换,加载新脚本❌ 更新必须重打包或特殊框架支持
运行开销很小,轻量稍重(尤其在移动平台)
热更新难度高,需要专门的反射或动态加载机制

NotebookLM 处理链接的原理是“抓取单一页面的 HTML 文本结构 + 语义索引分段提问”,它不支持自动抓取整个网站或跳转链接的子页面。

NotebookLM 是如何处理你传入的链接内容的?

✅ 1. 抓取网页内容(HTML)并转成纯文本结构

NotebookLM 在你添加一个链接(如 Unity 官方文档)后,会尝试:

  • 抓取该链接的网页源代码(HTML)

  • 使用网页解析器(如 Readability、或自研 parser)将主要正文内容提取成 Markdown / 文本块

  • 忽略页面上的导航栏、页脚、广告、脚本等无关内容

✅ 它不会只是截图,而是真正读取文字内容构建“笔记”块(Source Note)

NotebookLM 的语义索引机制

抓取完文本内容后,它会:

  • 对内容进行分段(chunking),每个段落成为一个“Note”(笔记源)

  • 使用 embedding(文本向量化)将所有笔记内容编码入一个向量数据库

  • 你提问时,通过语义相似度找到相关笔记片段,再由模型生成最终回答

📌 这是典型的“RAG(Retrieval-Augmented Generation)”机制

不推荐直接保存 HTML 的情况

有些网页(尤其是 React/Vue/Angular 构建的 SPA,比如 Unity 脚本 API 页面)用的是JavaScript 动态渲染,所以:

  • 如果你用右键「保存为 .html」,保存下来的只是一个壳,正文根本没在里面

  • NotebookLM 加载后几乎是空的,或抓到大量 JS、空 div

🧪 测试方法:

把你保存下来的 HTML 文件用 VSCode 或记事本打开,搜索页面正文里的句子:

  • 如果找不到,说明你保存的只是网页壳;

  • 如果找得到,那这份 HTML 文件可以上传。

Google Slides

  • 指的是 Google 幻灯片(PPT)。

  • 如果你用 Slides 做了学习总结、图示流程,也可以导入。

  • NotebookLM 会将每页幻灯片的文本提取出来,作为知识块。

是的,本地部署 AI 模型的核心用途之一,就是:

让 AI 像 NotebookLM 一样,基于你自己的资料、文件、知识库进行提问和对话。

这其实是构建 RAG 系统(Retrieval-Augmented Generation),它和 NotebookLM 背后的原理基本一致,只不过:

项目NotebookLM本地 AI 部署
数据来源Google Docs / Slides / 链接你本地的 PDF、HTML、TXT、数据库等
模型调用Google 的 Gemini 模型你选择的模型(如 Llama3、Mistral)
数据存储云端全部在你电脑或局域网
权限和隐私Google 控制你完全掌控

果你要自己做一个“本地 NotebookLM”,你需要这些东西:

1. 大模型(LLM)本地推理能力

  • 推荐模型:LLaMA 3 (Meta)、Mistral 7B、Qwen、Yi

  • 推荐框架:llama.cppOllama(最简易)或 vllm

2. 文档解析与嵌入(Embedding)工具

  • 工具:langchain, llama-index

  • 功能:将 HTML / PDF 分段、转为向量、构建索引数据库

3. 向量数据库(存放你的知识库)

  • 推荐:Chroma, FAISS, Weaviate(轻量开源)

4. 对话界面(Web UI)

  • 简易:text-generation-webui, Open WebUI, LM Studio

  • 复杂:你可以自己写一个界面,或集成进 VS Code、网页等

DeepSeek、LLaMA、Mistral 这类模型的 推理代码 + 权重文件 都可以本地完整下载运行时无需联网

所需组件都可以脱网运行:

组件是否可本地使用说明
模型参数(权重).bin.gguf 等格式的矩阵数据,存储的是“知识”
Tokenizer是文本转 ID 的规则集,通常是 tokenizer.json 文件
推理逻辑(前向计算)例如 transformer block 的执行流程,已写死在推理引擎中
向量检索(RAG)部分可用本地 ChromaDBFAISS 等做离线知识检索

推理 = 权重矩阵 + 编码向量 + 固定执行逻辑

一个大语言模型(如 DeepSeek)推理时的核心步骤:

文本输入 → 分词(Tokenizer)→ 编码为向量(Embedding)  
→ 一层层 Transformer block 运算(矩阵相乘 + 激活)  
→ 输出下一个词的概率分布

在这个过程中:

  • 权重(Weight)

    • 是模型的“知识”,本质上是几百亿个数字矩阵。

    • 你下载的 .gguf.safetensors 文件就是这些权重。

    • 是训练时学到的所有语言、逻辑、人类知识的载体。

  • 推理逻辑(代码)

    • 是程序中写死的算法,比如:Multi-head Attention、LayerNorm、MLP 等。

    • 所有模型结构都是固定的,都是前向传播(forward pass),不涉及训练。

  • 输入向量(Prompt)

    • 是你给模型的提示,会影响其如何“激活”内部知识。

输入的词(prompt)不同,经过同样的逻辑,会激活不同的权重组合

同一个模型,对“猫”和“太阳能电池板”会走出完全不同的语义路径

采样策略会变化(也可以固定)

  • 常见策略:

    • Top-k、Top-p(nucleus sampling)、temperature

  • 会影响下一个词的选择(是否更“保守”或更“发散”)

  • 这部分可以固定(设定 temperature=0 表示 deterministic 推理)

本地部署的 AI 模型有“两套知识来源”

来源内容控制方式
模型自身的知识模型训练阶段学到的世界知识(百科常识、编程技能、英语表达、物理知识等)不能修改,存在于参数(权重)中
你的私有资料(文档)你上传的 HTML / PDF / 笔记等内容,作为问答参考可控,可更新,可删除

默认情况下,网站GPT 回答问题是基于它自身知识库

也就是你说的这部分:

“不开联网搜索,其实和本地部署一样,靠的是原本的训练知识。”

具体表现:

场景是否联网搜索知识来源
GPT-3.5 / GPT-4(无插件、无浏览器)❌ 不联网只基于模型权重内的“世界知识”
GPT-4(浏览器/插件打开)✅ 联网检索部分信息来自网络(会标注来源)

所以:你在官网用 GPT 问技术问题,如果没开启联网,它和本地模型在“机制”上完全一致:都靠权重本身的记忆

这种默认模式等于 非-RAG 模式

RAG 模式 = 检索+补脑,可以额外喂内容

模型本身不会“自动记住”你文件夹里的内容

你即使有 100 个文本文件放在模型旁边,模型也不会自动读取它们

文本资料转为“可查询知识”的三步过程

这就是构建一个资料库的标准做法:


🔹 第 1 步:加载文本内容

用程序(如 langchain / llama-index / haystack)遍历文件夹中的所有 .txt 文件。

for file in all_txt_files:content = open(file).read()

🔹 第 2 步:分段(chunking)+ 嵌入(embedding)成向量

将每个文档按段落/长度切块,然后对每段文本编码成一个“向量表示”

chunks = split_into_chunks(content, size=500, overlap=100)for chunk in chunks:vector = embedding_model.encode(chunk)store_in_vector_db(vector, metadata={source: file})

🔹 第 3 步:提问时检索相关段落 + 输入模型

当你问问题时,系统先找出最接近你问题的文本片段,再和你的问题一起发给语言模型

🔄 所以最终表现是:

  • 模型本身不记得资料内容,但它每次回答前都“临时借用”你给的资料内容来判断。

  • 每次回答都等价于你给它说:“你看一下这些段落,帮我回答这个问题。”

  • 这个过程会自动进行,但你需要先把资料转换好(预处理阶段)

❓那你说的“之后回答的时候就按照这个来”,是不是只要文件放进去就行?

不是自动的,你必须手动做一次预处理(但可以自动化):

操作是否自动
遍历 text 文件夹✅ 可以自动
分段处理✅ 可以设定 chunk 大小
向量化文本✅ 用本地 embedding 模型
构建索引库✅ 一次性构建后反复使用
问题→相似段落→模型回答✅ 每次对话中自动运行
  • 截止训练数据时间点:Unity 2022 LTS(Long-Term Support) 是主要参考版本。

  • 核心 API 覆盖范围:Unity 2018~2022,包含大量关于 Editor, MonoBehaviour, ScriptableObject, Shader, URP/HDRP, AssetDatabase, SceneManagement, SerializedObject, Gizmos 等。

  • Unity 的 API 向后兼容性较好,因此对旧版本(如 2019)也广泛适用。

我能回答的问题包括但不限于:

  • 编辑器快捷操作(如拖拽材质、添加组件、移动物体);

  • Editor 工具编写;

  • 使用 MenuItem, EditorGUILayout, Selection, Undo.RecordObject 等;

  • 渲染管线(如切换 URP、使用 ShaderGraph);

  • 常见项目组织和资源结构(Assets/Scenes/Prefabs 等)。

我熟悉的主要渲染架构:

  • 内置渲染管线(Built-in Render Pipeline)

  • 通用渲染管线(URP)

  • 高清渲染管线(HDRP)

支持的版本以 Unity 2019.3~2022.3 为主(URP/HDRP 较稳定阶段)。

Shift + 空格(Shift + Space)最大化

你提到的设置项实际设置项是否存在 / 替代方案
Surface: Transparent✅ 已存在,Surface Type → Transparent
Alpha Clipping: Off✅ 存在,Alpha Clipping 复选框未选中
ZWrite: Off✅ 可通过 Depth Write → Auto / Off 控制
Blend: Alpha✅ 存在,Blending Mode → Alpha
Two Sided: On✅ 存在,Render Face → Both

图中这些设置都是 有效且匹配我描述的那一套配置,只不过在 Unity 新版中,表述方式稍有不同。例如:

  • ZWrite: Off → 在 Unity Shader Graph 中表述为 Depth Write: Auto,如果你需要强制关闭,改为 Off 即可;

  • Two Sided: On → 对应 Render Face: Both

  • 透明效果开启 → Surface Type: Transparent + Blending Mode: Alpha

为了实现“胎海流麻”这类半透明拖尾效果而进行的必要设置,它们直接影响透明度渲染、混合方式、遮挡关系和双面显示。下面我逐项解释原因:


Surface: Transparent

  • 目的:允许材质使用透明度(Alpha)通道进行混合。

  • 默认是 Opaque(不透明),这会导致 Alpha 值被忽略。

  • 用于拖尾/气体/魔法轨迹等带透明通道的特效材质必须设为 Transparent


Alpha Clipping: Off

  • 目的:关闭透明裁剪。

  • 如果开启裁剪,像素的透明度小于阈值就会完全剔除,形成“硬边界”。

  • 拖尾需要平滑透明渐变,不需要硬边剔除,所以关闭。


ZWrite: Off

  • 目的:关闭深度写入,避免透明物体互相遮挡时出现“排序错乱”。

  • 如果 ZWriteOn,透明拖尾会错误地遮挡后方物体或自己。

  • 一般透明材质必须禁用 ZWrite,交给渲染队列排序处理。


Blend: Alpha

  • 目的:使用标准的 SrcAlpha / OneMinusSrcAlpha 混合模式。

  • 保证拖尾色彩与背景融合自然。

  • 是最常见的 标准透明混合 模式(适用于烟雾、水流、光迹等)。


Two Sided: On

  • 目的:渲染模型的背面。

  • 拖尾是片状或带状结构,背面默认不会被渲染,导致在某些角度下“消失”。

  • 开启双面可确保从各个角度都看到拖尾。

Ctrl + K(Windows)

  • 调出 Unity 的 Quick Search 窗口(类似 Spotlight 或 VS Code 的 Command Palette)。

  • 可用于快速搜索:

    • 项目资源(材质、预制体、脚本等)

    • 菜单命令

    • 设置项

    • 场景对象

    • Package 包、帮助文档等

Unity 的 Quick Search 插件可能需单独安装:

  1. 打开 Window > Package Manager

  2. 找到 Quick Search(或手动添加包 com.unity.quicksearch

  3. 安装或更新后即可使用快捷键 Ctrl + K

xxxxx

水面融合感增强

“胎海流麻”这个效果,本质上是一种柔和透明的流动尾迹,往往会:

  • 附着在角色或物体的运动轨迹后方

  • 有一定程度的透明、虚幻、扰动感

  • 看起来像拖曳、扩散、融化,甚至带有一点“流体”的质感

实现这个“视觉贴地/贴水”感的技术背后逻辑:

渲染策略实现目的技术核心
基于深度的透明度调整让尾迹在靠近水面时显现,离开时淡出SceneDepth - PixelDepth 控制透明度
软边混合(Soft Blend)边缘与水面过渡柔和,避免“剪影”使用 Alpha * smoothstep(...)
扰动背景法线尾迹拖曳时“压出水痕”的感觉FlowMap 或扰动法线输入到 Normal
颜色调制尾迹颜色受水面或背景影响采样背景颜色、或者乘以偏蓝/偏水的调色
UV 或 FlowMap 流动表现“尾迹在水面上扩散流动”timeflow_uv 滚动贴图

你创造的是一种**“光学拟态”:尾迹其实是“挂在半空”的,但你通过视觉逻辑模拟出它正贴着水面自由流动**。

这就是技术美术的价值所在——在不动物理数据的前提下,创造出让玩家信服的视觉真实感。

角色走过的路径 → 留下拖尾 → 拖尾前端颜色深,尾端颜色淡
这就需要:

前端顶点颜色 = 白 + 高 Alpha(不透明)

尾端顶点颜色 = 粉蓝 + 低 Alpha(慢慢淡出)

而这正好就用 Vertex Color(顶点色) 来控制。

🔧 为什么不用 Texture 来代替?
拖尾是运行时生成的动态网格,UV 通常不稳定;

顶点色可以更灵活表达“实时变化”;

更高效,不需要贴图采样,适合用于大批量的尾迹系统。

Unity 中拖尾的 Vertex Color 怎么来的?

Unity 的 TrailRenderer 在运行时会自动生成一段 mesh,并且:

✅ 会为拖尾的每个顶点写入 Vertex Color(包括 RGB 和 Alpha),Alpha 值自动随时间衰减。

如果你现在连线中用了 Vertex Color → BaseColor * _TintColor,那说明:

  • 你用 VertexColor.rgb 做了拖尾的颜色控制;

  • VertexColor.a × _TintColor.a 控制透明度渐变,非常合理。

也就是说我Shader里的tintcolor其实是设置拖尾颜色的,而对拖尾颜色的设置,出于uv不稳定的原因,所以使用了顶点颜色来存放设置的颜色,而效果是相同的

最终颜色 = VertexColor.rgb × _TintColor.rgb
最终 Alpha = VertexColor.a × _TintColor.a

  • (TrailRenderer 不生成 UV,或者 UV 排布随点数变化);

  • 即使有,也难以做出渐变 + 时间衰减的同步控制;

  • 顶点色天然适合表达 “随时间变化”“路径上渐变”“自动衰减” 这些视觉语言。

xxxxxx

还是有点太吃力了,,太多概念都是懵的,

03 反射光_哔哩哔哩_bilibili

pow()就是正片叠底

无脑用phong的vr直接点乘出夹角影响高光结果,blinnphong 是更省性能,但是没必要

Unity小白的TA之路:6个问题轻松掌握Unity前向渲染_哔哩哔哩_bilibili

  • 投影:角色头部在太阳光下投在地面上的明确影子,是 Shadow。

  • AO:角色脖子和衣领之间的缝隙,或枪托与背包交接的缝里那一小块暗部,是 AO。

为什么叫 _MainTex,却不是拿来贴颜色的?

这是因为我们现在这个 Shader 的用途不是“常规的贴图着色器”,而是:

✳️ 利用贴图内容来扰动 UV 和/或 控制透明度 alpha

而这个作用本质上是:

  • 用 FlowMap 的红绿通道扰动 UV

  • 或者

  • 用噪声贴图(灰度图)来控制 Alpha 的边缘溶解

所以 Shader Graph 中的 _MainTex 实际承担的职责有两种可能:

用途_MainTex 应挂什么
🎯 扰动流动(UV 动画)FlowMap(红绿扰动纹理)
🎯 边缘软混合灰度贴图(圆形渐变、噪声等)

你可以复用同一个 _MainTex 做两个作用(比如先扰动 UV,再采样它来做 Alpha),也可以拆成两个属性(比如 _FlowMap_AlphaTex 分开挂)

镜面高光模型视觉对比

展示了如下高光模型的点光源反射强度图:

  • Blinn

  • Phong

  • Cook-Torrance

  • Beckmann

  • GGX

越往右高光越柔和、拖尾越长,尤其 GGX 是现代 PBR 中的主流微表面分布函数。

常见的漫反射 BRDF 模型

模型名称特点说明
Lambert最基础的漫反射,反射强度只与入射角余弦有关(能量守恒),不考虑粗糙度
Oren-Nayar更真实的漫反射模型,考虑了表面微观粗糙结构,适合模拟粉末类材质
Hanrahan-Krueger常用于皮肤等次表面散射模型,结合体积散射计算

右侧的灰球矩阵显示了这些模型在不同视角下的明暗表现,说明了不同模型的视觉效果差异。

右下部分:更多 BRDF 模型名录

这些是更完整的 BRDF 名称列表,包括:

  • Blinn-PhongPhong:经典高光模型

  • Cook-TorranceGGXBeckmann:基于微表面理论的现代模型

  • Ashikhmin-ShirleyWardKelemen:各类各向异性或物理精度模型

  • Distribution-BRDF:强调微表面分布项

  • Halfway Vector Disk:用于优化中间向量计算

  • albedo pump-up:可能是调节反射率用于艺术控制的技巧

BRDF 结构三要素:

  • 分布函数 D

  • 几何遮蔽 G

  • 菲涅尔 F

  • Lambert → Oren-Nayar:从简单漫反射过渡到考虑粗糙度的高级模型

  • Phong/Blinn-Phong → Cook-Torrance/GGX:从经典镜面高光过渡到现代物理模型

🌟 图中提到的光源类型说明:

中文英文说明
主灯光Key Light最主要的光源,定义了物体的明暗关系和方向。
反弹光Bounce Light / Fill Light从地面或周围环境反弹上来的弱光,缓解阴影太黑的区域。
反向灯光(KICK Light)Rim Light / Kick Light从背后照射出的光,在轮廓边缘形成高光,增强空间感和材质边界。
轮廓光Rim Light(有时也叫 Back Light)强调角色边缘或背光区域,帮助从背景中分离角色。


🎯 除了图中的这些,还有其他常见光类型可搭配使用:

类型说明
Fill Light(补光)通常柔和,位于主光对侧,缓解阴影对比度。和 Bounce 不同,Fill 是主动设置的光源。
Top Light / Overhead Light顶光,有时用于模拟太阳直射或棚拍环境中的顶灯。
Ambient Light环境光,一般是非定向的柔光,用于提供最基本的全局亮度。
Practical Light剧中光源,比如灯泡、窗户光等,用于增强真实感和故事氛围。

三方向的环境光遮罩设置,用法线green通道达成目的

利用法线方向(nDir)在世界空间中的 Y 分量,来模拟三向环境光(上、下、侧)

float upMask = max(0.0, nDir.y);         // 朝上的法线:上环境光强度
float downMask = max(0.0, -nDir.y);      // 朝下的法线:下环境光强度
float sideMask = 1.0 - upMask - downMask;// 剩余部分归为侧面(水平向量)
含义说明:
遮罩名	作用区域	原理(nDir.y)
upMask	向上的面(顶面)	nDir.y > 0,越朝上越亮
downMask	向下的面(底面)	nDir.y < 0,越朝下越亮
sideMask	水平面(侧面)	剩余权重,用于补充侧边这三者权重之和始终为 1,所以可以安全做加权混合。

🌞 直接光源遮挡(Shadow)——投影

定义:

光线从光源出发,被物体挡住后无法照到表面,形成投影

特征:

  • 来源是光源方向(Directional / Spot / Point)。

  • 遮挡后完全无光照输入。

  • 通常是有方向、有边界、有模糊程度的(软阴影/硬阴影)。

  • 计算方式有:Shadow Map、Ray Tracing、Voxel Cone Tracing 等。

举例:

太阳光打过来,被墙挡住形成的地面阴影,就是光源遮挡。


🌫️ 环境光遮挡(AO, Ambient Occlusion)

定义:

表面由于自身结构的复杂导致接收不到环境光,形成的遮蔽暗部。

特征:

  • 没有特定光源方向,是基于周围空间的开阔程度

  • 与光源无关,模拟“环境光无法进入的区域”。

  • 常用于增强凹陷、接缝处的真实感

  • 通常是灰度图(Ambient Occlusion Map)。

举例:

沙发与地面交界的缝隙、小洞穴内部、衣服褶皱处的阴暗,就是 AO 提供的效果。

这些模型的资源贴图都有了之后,这个模型才算是可以使用,所以把模型导入到unity里面,需要先把这些贴图都得到,然后这个角色就可以去渲染了,渲染的部分和这些贴图的制作是分开的

xxxxxx

 【技术美术入行作品准备经验分享】原神角色渲染还原教程_哔哩哔哩_bilibili
老师帮大忙了

如果压缩包里的文件乱码,要注意先改字符编码再转文件

项目.fbx.vmd
用途游戏/影视通用 3D 格式MikuMikuDance 的专用动作格式
包含内容模型、骨骼、动画、材质等仅包含骨骼动画数据
骨骼命名各不相同,无标准MMD 有标准命名规则(日文骨骼名)
绑定关系多种方式(Humanoid/Generic)限定结构(PMX 模型)

所以你要做的是提取 FBX 动作 → 重定向到 MMD 骨架 → 导出 VMD

安装这些组件不会对你之后的软件产生消极影响。
相反,它们的作用是确保各类软件能正常运行,尤其是使用 C++ 编写的程序。

它们的作用是什么?

很多 Windows 软件都是用 C++ 编写的,尤其是:

  • 游戏(Unity、Unreal)

  • 工具类软件(Blender、OBS、各种音视频软件)

  • 中间件(驱动、解码器等)

这些程序在运行时需要依赖「运行时库」:

就像你写代码时需要 .dll,它运行时也需要系统提供这些支持库。

⚠️ 有无副作用?

可能的疑问实际情况
会不会导致冲突?❌ 不会,每个版本的 VC++ 运行库是独立的 Side-by-side 安装
会不会拖慢系统?❌ 不会,它们只在被调用时才会载入,平时完全不影响性能
会不会篡改系统文件?❌ 不会,它们是官方安装包 repack(仅做了合集优化)

这么有用为什么不电脑自带

Windows 不预装所有 Visual C++ 运行库,是为了保持系统精简、降低维护负担,并鼓励开发者自带依赖。

1. 🔧 每个 VC++ 版本都是独立产品

  • Visual C++ 的每个版本(2005、2008、2010、2012…)运行库并不向前/向后兼容

  • 比如用 VC++ 2010 编译的软件就必须装 2010 的运行库,不能用 2015 的替代。

  • 这意味着系统无法预知你未来会用哪个版本的软件,所以不能预装所有版本。


2. 🎯 微软设计哲学:“按需分发”

  • 微软鼓励开发者自行打包所需运行库,比如使用 Installer 安装时静默安装对应 VC++。

  • 这样可以:

    • 避免系统预装太多版本造成维护冗余

    • 保证软件运行时的版本精确性

  • 所以很多正规软件(如 Unity 安装器、游戏大作)都会自动附带 VC++ 安装步骤。


3. 💡 Windows 预装了最常用的核心组件

  • Windows 确实默认包含了部分运行库(特别是 VC++ 2015+),但:

    • 很多旧版本不再被默认捆绑

    • 某些 SP1/SP2 扩展包体积较大,微软选择由软件商分发


4. 📉 不预装是为了减少系统膨胀与潜在安全攻击面

  • 每个运行库版本都含 DLL 和 COM 接口,预装过多可能:

    • 增加维护成本

    • 引入旧版本漏洞

    • 增加系统攻击面(DLL 劫持等)


🔄 举个例子你就懂了:

你下载一个原神 MOD 工具,它是用 VC++ 2008 写的。Windows 11 没有预装 2008,所以你运行时报错缺少 MSVCR90.dll

但这并不是 Windows 的错,而是开发者没有在安装包里带上运行库安装器


✅ 解决办法(也是你现在用的):

安装「VC++ 运行库合集」本质上就是为你统一解决了这些“分发责任不清”的历史遗留问题。

你装好一遍之后,就能跑 90% 民间工具/旧版游戏/编辑器。

PmxEditor 是专门用于 编辑/修正/导出 MMD 模型 的 GUI 工具。

它可以:

  • 修改模型的顶点、骨骼、表情、材质、物理刚体

  • 替换贴图 / 调整透明 / 调整描边

  • 导入/导出 .pmx.pmd 格式

  • 可用于动作测试、附加插件(.vmd 动作可在 PmxView 中查看)

文件/文件夹名说明
PmxEditor.exe主程序,32位运行版
PmxEditor_x64.exe主程序,64位运行版(建议用这个)
.config 文件启动配置参数(比如语言环境)
readme.docx使用说明(通常是日文/英文)
_plugin/插件目录,比如自动权重、法线修复工具等
Lib/核心运行库(DLL)所在位置,程序调用的依赖库
_data/UI 本地化、界面配置、材质预设等资源文件


❓需要安装 VC++ 运行库吗?

是的,推荐先安装你上面贴的 VC++ 运行库合集,尤其是:

  • VC++ 2010(PmxEditor 是 C# + C++ 混合开发的)

  • VC++ 2013VC++ 2015+(部分 DLL 插件也可能依赖)


🚫 如果你不装运行库,可能会遇到:

  • ❌ 启动直接闪退无提示

  • ❌ 报错缺失 MSVCP*.dll.NET Framework 组件

  • ❌ 插件无法加载、无法导出 .pmx

【动作配布】甘雨·杰克逊_哔哩哔哩_bilibili

mikudance简单接触

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

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

相关文章

抗辐照芯片在核电厂火灾探测器中的应用优势与性能解析

一、引言 核电厂作为能源供应的关键设施&#xff0c;其安全性备受关注。火灾是威胁核电厂安全运行的重要风险因素之一。在核电厂的特殊环境下&#xff0c;火灾探测器肩负着及时发现火情、保障核电厂安全运行的重任。然而&#xff0c;核电厂存在高能辐射等复杂环境因素&#xf…

FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南

作为一名开发者&#xff0c;你是否曾想过亲手搭建一个包含用户注册、登录认证和文件上传功能的完整 Web 系统&#xff1f;今天&#xff0c;我将带大家一步步拆解一个基于FastAPI&#xff08;后端&#xff09;和原生 JavaScript&#xff08;前端&#xff09;的前后端分离项目&am…

【动态规划】P11188 「KDOI-10」商店砍价|普及+

本文涉及知识点 C动态规划 P11188 「KDOI-10」商店砍价 题目背景 English Statement. You must submit your code at the Chinese version of the statement. 您可以点击 这里 下载本场比赛的选手文件。 You can click here to download all tasks and examples of the c…

国产LHR3040芯片是REF5040的代替品

LHR3040是一款噪声低、漂移低、精度高的电压基准产品系列。这些基准同时支持灌电流和拉电流&#xff0c;并且具有出色的线性和负载调节性能。采用专有的设计技术实现了出色的温漂(3ppm/℃)和高精度(0.05%)。这些特性与极低噪声相结合&#xff0c;使LHR30XX系列成为高精度数据采…

专题:2025AI营销市场发展研究报告|附400+份报告PDF汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42800 在数字化浪潮席卷全球的当下&#xff0c;AI营销正成为驱动企业增长的核心动力。 从市场规模来看&#xff0c;AI营销正经历着爆发式增长&#xff0c;生成式AI的出现更是为其注入了强大活力。在应用层面&#xff0c;AI已渗透到营…

深入对比 Python 中的 `__repr__` 与 `__str__`:选择正确的对象表示方法

文章目录 核心概念对比1. 根本目的差异2. 调用场景对比深入解析:何时使用哪种方法场景 1:开发者调试 vs 用户展示场景 2:技术表示 vs 简化视图高级对比:特殊场景处理1. 容器中的对象表示2. 日志记录的最佳实践3. 异常信息展示最佳实践指南1. 何时实现哪个方法?2. 实现原则…

万能公式基分析重构补丁复分析和欧拉公式原理推导

基分析&#xff0c; x11 x2-1 x3i 存在加法法则 x1x20 所以x1-x2 存在链式基乘法法则 x1x1*x1x2*x2 x2x3*x3 x3x1*x3 -x1x2x3 将链式基乘法操作 二次&#xff0c;三次&#xff0c;直至n次化简得 一次 x1 -x1 x3 矩阵 x1 x1 x2 x2 x3 …

OpenCV 4.10.0 移植

OpenCV 4.10.0 移植使用 概述移植编译下载解压编译环境编译 编译完成OpenCV 库文件及其作用 使用实例参考代码 参考 概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是计算机视觉领域最广泛使用的开源库之一&#xff0c;提供了丰富的功能模块&#xf…

Tomcat10.0以上版本编译成功但报错HTTP状态 404

Tomcat正常启动且项目已成功部署&#xff0c;但出现404错误。 HTTP状态 404 - 未找到package org.example;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSer…

在Flask项目中用Git LFS管理大文件(PDF)的完整实践

在Flask项目中用Git LFS高效管理大文件(以农机说明书PDF为例) 背景与需求 在农机管理系统等实际项目中,经常需要上传和管理大量超大文件(如200MB以上的PDF说明书、图片等)。如果直接用Git管理这些大文件,不仅会导致仓库膨胀、clone/pull速度变慢,还可能遇到推送失败等…

朴素贝叶斯算法案例演示及Python实现

目录 一、基本原理二、案例演示2.1 未平滑处理2.2 Laplace平滑处理 三、Python实现 一、基本原理 朴素贝叶斯思想&#xff1a;依靠特征概率去预测分类&#xff0c;针对于代分类的样本&#xff0c;会求解在该样本出现的条件下&#xff0c;各个类别出现的概率&#xff0c;哪个类…

RAG从入门到高阶(二):Retrieve-and-Rerank

在上一篇教程中&#xff0c;我们了解了 Naive RAG 的基本原理和实现。它就像一个刚刚学会查找资料的新手&#xff0c;虽然能找到一些信息&#xff0c;但有时候找到的并不够精准&#xff0c;甚至会有一些无关的干扰。 今天&#xff0c;我们将介绍 Retrieve-and-Rerank RAG&…

【脚本】Linux磁盘目录挂载脚本(不分区)

以下是一个不带分区&#xff0c;直接挂载整个磁盘到指定目录的脚本。该脚本会检查磁盘是否已挂载&#xff0c;自动创建文件系统&#xff08;可选&#xff09;&#xff0c;并配置开机自动挂载&#xff1a; #!/bin/bash# 磁盘直接挂载脚本&#xff08;不分区&#xff09; # 使用…

壁纸网站分享

壁纸网站链接&#xff1a; 1.Microsoft Design - Wallpapers&#xff1a;https://wallpapers.microsoft.design/?refwww.8kmm.com 2.哲风壁纸&#xff1a;https://haowallpaper.com/wallpaperForum 3.壁纸湖&#xff1a;https://bizihu.com/ 4.极简壁纸&#xff1a;https://bz…

XILINX FPGA如何做时序分析和时序优化?

时序分析和时序优化是FPGA开发流程中关键步骤&#xff0c;确保设计在目标时钟频率下正确运行&#xff0c;避免时序违例&#xff08;如建立时间或保持时间不足&#xff09;。以下以Xilinx Kintex-7系列FPGA为例&#xff0c;详细介绍时序分析和时序优化的方法、工具、流程及实用技…

linux screen轻松管理长时间运行的任务

以下是针对 Alpine Linux 环境下 screen 的安装与使用指南&#xff0c;结合迁移数据场景的具体操作步骤&#xff1a; 1. 安装 screen‌ 在 Alpine Linux 中需通过 apk 安装&#xff08;非默认预装&#xff09;&#xff1a; apk add screen 验证安装&#xff1a; screen --…

VR制作公司业务范围

VR制作公司概念、能力与服务范围 虚拟现实&#xff08;Virtual Reality, VR&#xff09;技术&#xff0c;作为当代科技的前沿领域&#xff0c;通过计算机技术模拟出真实或虚构的世界环境&#xff0c;使用户能够沉浸其中并进行交互体验。VR制作公司&#xff0c;是这一领域的专业…

STM32之28BYJ-48步进电机驱动

目录 一、引言 二、28BYJ-48步进电机简介 2.1 基本特性 2.2 内部结构 2.3 工作模式 2.4 驱动原理 2.5 性能特点 2.6 驱动方案 2.7 使用注意事项 三、ULN2003驱动板简介 3.1 基本概述 3.2 电路结构 3.3 驱动原理 3.4 接口定义 3.5 使用注意事项 四、…

TDSQL如何查出某一列中的逗号数量

在 TDSQL 中&#xff0c;要统计某一列里逗号的数量&#xff0c;可借助字符串函数来实现。下面为你介绍具体的实现方法&#xff1a; sql SELECT your_column,LENGTH(your_column) - LENGTH(REPLACE(your_column, ,, )) AS comma_count FROM your_table;下面对这段 SQL 进行详细…