
tobeme
文章平均质量分 96
bewhatyouwannabe
red_redemption
永远的初学者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自由学习记录(62)
用这个pass的时候尽量 记住这个名字,不要别的shader里又重新拿一遍浪费性能是 Unity 中用于处理屏幕空间纹理采样(如 GrabPass)时的标准写法。它的作用是将当前顶点的位置转换为用于从屏幕图像中采样的 UV 坐标,并**自动补偿透视除法(Perspective Divide)**的问题。原创 2025-05-26 12:23:24 · 319 阅读 · 0 评论 -
自由学习记录(61)
Unity 在进行光照贴图、全局光照(GI)烘焙、环境探针、反射探针计算时,不使用 ForwardBase / Deferred。它会在烘焙阶段,单独执行所有 Shader 中标记了的 Pass。Unity 把每个材质的 Meta Pass 渲染到一张特殊纹理上,用来分析:AlbedoEmissionTransparency(部分 GI 系统也采样 alpha)Shader Model 是由 GPU 驱动程序定义的一套功能等级规范,决定了:可使用的纹理数量指令数量上限。原创 2025-05-18 08:29:12 · 712 阅读 · 0 评论 -
自由学习记录(60)
✅ 可以写任何字符串,比如RenderType⚠️ 但 Unity 内部功能(比如图像效果或脚本中通过查找)只识别内建字符串。如果你用 URP/HDRP,Shader Stripping 和 SRP Batching 也可能依赖内建值。multi_compile shader keyword 集合这些不是你自己声明的自定义 keywords,而是Unity 自己预定义的一些 keyword 集合宏,本质是一个宏展开它会在编译时展开为多个的 keyword 组合。原创 2025-05-14 15:06:55 · 784 阅读 · 0 评论 -
自由学习记录(59)
VBO 是显卡上的一块连续显存,用来存储每个顶点所需的数据,包括位置、法线、UV、颜色等等。它相当于一张“表格”,每一行是一个顶点,每一列是一个属性字段。不,你在appdata中写的字段顺序不会影响 VBO 的数据排列。Unity 引擎内部的约定布局,而不是你 Shader 中结构体的顺序。Shader 中的语义标签(如POSITIONNORMALTEXCOORD0才是匹配关键,它告诉 GPU:“我这个字段要绑定哪个通道/位置的数据”。原创 2025-05-09 12:14:02 · 1060 阅读 · 0 评论 -
自由学习记录(58)
Unity 使用的是3阶球谐(l=0~2)共9项,这是图形学中环境光最常用的精度:l = 0:常量项(1项)l = 1:线性项(3项)l = 2:二次项(5项)这就是“SH9”的来源。unity_SHArunity_SHAgunity_SHAbunity_SHBrunity_SHC这类球谐光照系数(Spherical Harmonics Coefficients)不是固定的常量Unity 自动在以下情况下定义这个宏:非主光源(non-main lights)原创 2025-05-05 00:00:16 · 849 阅读 · 0 评论 -
自由学习记录(57)
蓝噪声是一种在频域中低频成分较少、高频成分较多的噪声类型。与白噪声相比,蓝噪声在视觉上更为均匀,适合用于图像处理中的抖动(dithering)和采样,能够减少明显的图案和伪影。时空蓝噪声是在传统蓝噪声的基础上,增加了时间维度(即帧序列)的考虑,使得噪声在空间和时间上都具有蓝噪声的特性。这意味着:空间蓝噪声:在每一帧中,噪声在图像的二维平面上均匀分布。时间蓝噪声:在连续的帧之间,噪声在时间轴上也均匀分布,避免了闪烁和不稳定的视觉效果。。原创 2025-04-24 12:51:01 · 501 阅读 · 0 评论 -
自由学习记录(56)
它们的本质是取决于你采用的是**“列向量”还是“行向量”表示法”**。一旦你选定了其中一种方式 —— 所有矩阵乘法的方向、变换链的顺序、转置等操作都有一致的逻辑。原创 2025-04-19 17:28:19 · 666 阅读 · 0 评论 -
自由学习记录(55)
使用作用来源_Diffuse表面材质颜色是你通过Properties定义或材质球中设置v.normalv.vertex顶点法线 / 顶点坐标Unity 自动传入每个 Mesh 顶点o.colori.color插值中间值你自己在 v2f 中定义并赋值传递✅ 是 Unity 提供的全局环境光(你在 Lighting 面板设置的环境颜色)📌 它代表了四面八方、非方向性的背景亮度❌ 不依赖光源方向、不依赖法线、不产生阴影加。原创 2025-04-16 13:20:31 · 808 阅读 · 0 评论 -
自由学习记录(54)
near and far planes are proportional We start with the fully parameterized form:The original matrix that contains all the variables Each element in the matrix comes from:field of view (FOV)aspect rationear/far planesfrustum bounds: left/right/top/bottomRo原创 2025-04-13 14:08:44 · 925 阅读 · 0 评论 -
自由学习记录(53)
x:摄像机右方y:摄像机上方z:摄像机正前方(OpenGL 为 -z)这个坐标系是从世界空间通过 View 矩阵变换得来的。View Matrix 把所有物体从世界中“拉到”摄像机面前,让摄像机居中静止。Clip Space(裁剪空间)原点位置:还是 (0, 0, 0),但现在的单位是经过投影矩阵“压缩”之后的空间。原创 2025-04-10 13:21:02 · 800 阅读 · 0 评论 -
自由学习记录(52)
把模型空间中的顶点v.vertex,用于最终屏幕上正确显示图形。它是顶点着色器(vertex shader)中。原创 2025-04-02 18:49:21 · 912 阅读 · 0 评论 -
自由学习记录(51)
o.uvor就像水波透过玻璃看到的背景一样:你动的不是模型,也不是贴图,而是“采样的位置”。uses-0.5or1.2using aVFMat) simply在顶点阶段设置了光照颜色,但片元阶段好像没有直接使用,那它有没有被真正用上?原创 2025-03-31 20:42:15 · 955 阅读 · 0 评论 -
自由学习记录(50)
值(Ref)用途示例说明0默认值没有被标记过的像素1写入第一个遮罩区域比如一个“洞”区域、UI Mask、特殊区域等2第二类遮罩比如第二种特效控制3~15你可以根据项目需要继续拓展比如层级控制、组别标记等255有些人用于“全屏屏蔽”或“最高优先”一般不推荐随便用满值,留作特殊用途🔸 (1)最多 8 位,不能写超过 255 的值→ 超出将会被截断(如写入 300 实际等于 44)🔸 (2)每个像素 stencil 值只能有一个→ 如果你有多个功能依赖 stencil 值,请合理规划值的使用。原创 2025-03-31 09:17:41 · 1030 阅读 · 0 评论 -
自由学习记录(49)
当你使用 Forward 渲染路径 时:即使已经超过了 中的 Pixel Light Count 限制它依然会参与 ForwardAdd Pass 进行逐像素光照计算路径:这个参数定义了:超过这个数量,剩下的光源会降级为逐顶点光照(效率高但不真实)Unity 会根据光源和摄像机的距离来排序选中最重要的光源对的 ✅Unity 支持的光源类型有:Directional、Point、Spot、Area(仅烘焙)但它们是不是以逐像素方式参与渲染,不是由光源类型决定,而是由:✅ ✅ ✅ 这三者共同决定:👉 这原创 2025-03-27 18:20:58 · 951 阅读 · 0 评论 -
自由学习记录(48)
_WorldSpaceLightPos0 为什么能在 Shader 里直接用?不是“另一个 Shader 文件里写了它”,而是 Unity 在每次渲染物体时自动传给 GPU 的内置变量,属于 全局 uniform(uniform buffer)的一部分。所以它“不是你写在哪个 Shader 文件里就能用的变量”,而是:Unity 的内置渲染系统(在 C++ 层)定义了这个名字,并负责 在渲染每个物体前自动设置这个值所以你在任意 Shader 中写:uniform float4 _WorldSpac原创 2025-03-24 18:33:09 · 732 阅读 · 0 评论 -
自由学习记录(47)
而材质(Material)是这个 Shader 的一个“实例 + 参数组合”。保存一个 Shader Graph 时(比如。每个像素点都会拥有一个自己的法线向量,这个向量会用来计算光照,最终影响这个像素的最终颜色,并写入帧缓冲。更精确一点的过程是这样的:🌱 1. 模型 → 顶点 → 像素(插值过来的)模型的顶点有位置、法线、UV 等属性GPU 经过顶点着色器 → 光栅化阶段 → 插值得到每个像素的这些属性(比如切线空间下的法线)👉 如果没有法线贴图,那就直接用插值过来的 法线方向。原创 2025-03-23 09:59:11 · 1164 阅读 · 0 评论 -
自由学习记录(46)
排序 Sort渲染队列 RenderQueue不透明队列(RenderQueue <2500)按摄像机距离从前到后排序半透明队列(RenderQueue >2500)按摄像机距离从后到前排序假设你有一张纹理图是一个草地:🖼️ 图片:一个草地图案📦 模型:一个地面平面如果 UV 坐标为(0, 0),表示这个点使用的是图像的左下角像素的颜色。如果 UV 坐标为(0.5, 0.5),表示这个点使用的是图像中心的像素颜色。如果 UV 坐标超出了[0,1],Unity 通常会进行。原创 2025-03-22 13:33:27 · 974 阅读 · 0 评论 -
自由学习记录(45)
1.需要在Pass渲染通道中编写着色器逻辑2.可以使用cG或HLSL两种shader语言去编写Shader逻辑3.代码量较多,灵活性较强,性能消耗更可控,可以实现更多渲染细节4.适用于光照处理较少,自定义染效果较多时(移动平台首选)是Unity对顶点/片元着色器的封装可以用更少的代码实现复杂的逻辑但是性能和可控性较差它的特点是1.直接在subshader语句块中书写着色器逻辑2.我们不需要关心也不需要使用多个Pass,每个Pass如何染,Unity会在内部帮助我们去处理。原创 2025-03-21 18:41:09 · 1195 阅读 · 0 评论 -
自由学习记录(44)
模型矩阵(Model Matrix):将局部坐标(模型空间)变换到世界坐标。视图矩阵(View Matrix):将世界坐标变换到相机(观察)坐标。投影矩阵(Projection Matrix):将观察坐标变换到裁剪空间(标准化设备坐标 NDC)。视口变换(Viewport Transform):将裁剪空间变换到屏幕坐标。如果目标是游戏 TA(Technical Artist),一般不会涉及GPU 电路级别的东西,而是会关注:如何优化这些矩阵变换(减少计算开销)如何高效使用着色器(减少 Draw原创 2025-03-20 19:35:58 · 1007 阅读 · 0 评论 -
自由学习记录(43)
public Task<int> GetNumber() { return Task.FromResult(42); } 直接返回 Taskpublic async Task<int> GetNumberAsync() { await Task.Delay(1000); return 42; } 需要 await public async Task<int> GetNumber() { return Task.FromResult(42); } async 没发挥作原创 2025-03-12 11:55:47 · 1201 阅读 · 0 评论 -
自由学习记录(42)
可能会出现到后面没有教程,走不动,,但还是尝试吧过程远比想象的要多那连Live2d的这些脚本怎么控制的都要了解一下全部导入之后在这下载SDK:模型的配置文件。.moc3:模型的骨骼文件。.texture:模型的纹理文件(通常是.png:物理配置文件(可选)。:动画文件(可选)。确保你下载的 Live2D 模型文件包含以上内容。:Live2D 的核心库,用于解析和渲染 Live2D 模型。:用于在不同平台上集成 Live2D 模型的框架。原创 2025-03-06 19:02:29 · 962 阅读 · 0 评论 -
自由学习记录(41)
代理服务器的核心功能是在客户端(用户设备)和目标服务器(网站/资源服务器)之间充当“中介”,具体过程如下:当客户端希望访问某个网站(比如 )时:客户端向代理服务器发送请求代理服务器接收请求并解析代理服务器处理请求代理服务器向目标服务器发送请求目标服务器返回响应代理服务器处理响应代理服务器把响应转发给客户端-----------------unity的Toolbox插件上方的输入栏可以输入提示词,输入好之后,点击下方的Generate会根据这段话自动生成脚本。也可以按快捷键Ctrl+Enter或者Cmd+R原创 2025-03-05 20:38:53 · 956 阅读 · 0 评论 -
自由学习记录(40)
virtual的重写能力,,这在剥离Player方法和成员变量的时候,起的作用很灵活,敌人默认可以继承这些规则,但只是默认,自己要修改的话和原来不会产生半点联系,这个确实厉害dead zone是红区,soft是蓝区damping是控制相机跟随速度也是,它的作用和普通的类似,但专门用于,并且提供了的功能。就像普通的会被控制一样,,如果它的,或者你切换到了它,它就会成为。如果你的游戏是,那么 FreeLook 是一个很重要的组件。如果你的相机只是。原创 2025-03-01 20:12:08 · 1288 阅读 · 0 评论 -
自由学习记录(39)
Threshold用来指定动画的完全权重时刻(完全切换点)参数达到 Threshold值之后,,而是JumpyVelocityJumpFallyVelocityFallyVelocity:当yVelocity在接近 0.5 的时候,Blend Tree 会Fall,而Jump动画的权重会减少(但在这个像素动画里,这种融合算法,真的和看不出来一样)如果角色速度改变导致动画加速或减速,Homogeneous Speed会确保所有动画同步调整,避免不协调的情况。所有与。原创 2025-02-26 10:49:27 · 999 阅读 · 0 评论 -
自由学习记录(38)
默认情况下,Unity 的网格(Grid)是一单位 1m × 1m(即 1 个方格 = 1 米)。虽然 Sprite(精灵) 主要用于 2D 游戏,但 Filter Mode(过滤模式)的作用与 3D 纹理相同,仍然是控制 Sprite 在缩放时的像素显示效果一格代表一帧,到1.00的时候总共有12帧,也就是一秒内会播放下一张图片,一共切换11次,这里记录的更重点的是速度,切换的速度,自己塞了多少张图关系不大,调整前后之间的间隙,增大就是切换的次数更少了也就是手动调小帧率,但Animation里原创 2025-02-24 20:52:55 · 916 阅读 · 0 评论 -
自由学习记录(37)
标量类型(Scalar Types)浮点数类型doublefloat整数类型int32int64sint32sint64uint32uint64fixed32fixed64sfixed32sfixed64布尔类型bool字符串string字节串bytes数组和List字典maponeof 字段用于定义一组互斥的字段,也就是一次只会有一个字段被赋值。在 C# 里,oneof 字段的特点就是只能赋值其中的一个变量,并且访问时只能使用当前被赋值的字段,其他字段会被自动清除。假设有以下proto。原创 2025-02-22 21:22:08 · 800 阅读 · 0 评论 -
自由学习记录(36)
假设我们有如下的解释:syntax:指定使用 proto3 语法版本。:指定生成的 C# 代码所属的命名空间。:定义了一个消息类型Person。字段id:一个整型字段,对应字段编号为1。name:一个字符串字段,对应字段编号为2。这条cmd命令会在目录下生成一个Person.cs文件,文件中包含了Person类的定义你可以像使用普通的 C# 类那样使用生成的 Protobuf 类。下面给出一个简单的示例,展示如何实例化、赋值、序列化以及反序列化Person。原创 2025-02-19 15:53:30 · 1363 阅读 · 0 评论 -
自由学习记录(35)
方法设置了两个请求头,一个是标准的授权头(Authorization),另一个是自定义头(X-Custom-Header)。先写了客户端的,客户端比较简单,只要Connect了服务端,然后就对应的写好receive和Send的异步方法就可以了。协同程序本质也是用了线程来实现了“异步”的协程,这些同步异步的方法,基础的使用是这样,但是不代表socket不会封装好。--------------有必要存一些截图,直接可以把唐老师的lesson代码学下来,不对后期也有修改的可能。原创 2025-02-15 21:06:55 · 1038 阅读 · 0 评论 -
自由学习记录(34)
TCP 通信中----TCP 面向字节流------数据在发送过程中可能会发生分包(一个完整消息被拆分成多个 TCP 包)或者黏包(多个消息在接收端一次性收到在同一个 TCP 包中)的现象。为了解决这类问题,通常需要在应用层设计一种消息边界协议原创 2025-02-06 14:13:18 · 930 阅读 · 0 评论 -
自由学习记录(33)
重点是这里的动效播放是需要0.25秒的(也就是自己设置 的),而这里设置的意思是只有这个动效播放完,才会调用onshown方法,也就是把登录面板的账号密码变为data里存的数据。所以在调用面板出来的时候,注册面板的数值没有成功赋值到登录面板显示 ,在这里的渐显隐要注意的就是对数值的修改,因为数值是一直被显示的,不会自己改,是说显示1才显示1的。序列化是将对象的状态转换为可存储或传输的格式的过程。UI管理器总的来说是最重要的,各UI的使用套路都是差不多的,写代码理思路的时候以面向对象的思想去写,原创 2025-01-30 22:24:59 · 911 阅读 · 0 评论 -
自由学习记录(32)
自定义缓动函数让你创建特定的缓动曲线,完全根据需要来控制动画的变化。是当前帧到下一帧之间的tween,是关于结束的判定的,如果动效移出舞台时,是当前立刻停下删去还是等彻底结束位置来了再删去右键这个组件,就可以改变一些属性动效是以组件为单位创建的,附着于组件在资源文件夹那边右键创建新材质附着上去背景还是这个3D曲面,所以要改材质硬性要求曲面UI的设置本不知名字,抓住GButton之后就可以赋值名字了比如可以得到按钮的名字。原创 2025-01-26 17:58:32 · 966 阅读 · 0 评论 -
自由学习记录(31)
找到那个关键jar包然后导入选中,就配置好MySQL的了菜单--文件--项目结构项目设置--模块--选择要附着的项目--选择依赖--选中模块源--选中加号添加jar包解压之后在里面可以看到这个最关键的jar文件。原创 2024-12-29 19:05:21 · 956 阅读 · 0 评论 -
自由学习记录(30)
DataRow是DataTable的核心操作单元,提供了对表格中每一行的灵活操作。无论是数据读写还是状态管理,它都在数据操作中发挥重要作用。原创 2024-12-06 13:55:21 · 1306 阅读 · 0 评论 -
自由学习记录(29)
FileStream是 .NET 中用于文件操作的重要类,位于System.IO命名空间中。它提供了对文件的和读写操作。FileStream提供多个构造函数,允许在时指定文件路径、文件模式、访问权限、共享方式等。原创 2024-12-04 21:02:47 · 737 阅读 · 0 评论 -
自由学习记录(28)
内存流(:在内存中读写数据,适合处理临时数据和高效的数据操作。文件流(FileStream:用于文件读写,适合需要持久化存储的场景,支持大文件处理。使用进行二进制序列化和反序列化。使用进行 JSON 格式的序列化和反序列化,推荐用于现代应用。使用进行 XML 格式的序列化和反序列化。在选择序列化方法时,请根据你的需求和数据的安全性考虑。不推荐用于处理不可信数据,而和更加安全和现代。特性(Attributes)每一个特性实例都是贴在挂了[] 的元素。原创 2024-12-02 18:55:22 · 946 阅读 · 0 评论 -
自由学习记录(27)
(前提为该event在类中的声明为public,外部可访问,然后外部访问的时候不能直接改)下面这段代码是在访问事件在类内部没有限制直接赋值的权限,所以可以null,或者任意修改event:保护外部代码不能随意破坏事件,但允许声明事件的类对事件有完全的控制权。C# 语言对event的设计是为了event+=-=Invoke()原创 2024-12-02 11:51:55 · 1071 阅读 · 0 评论 -
自由学习记录(26)
意思是我正在做一个游戏,我目前就相当于在做种子库的ab包,最后游戏上线之后,在玩家那边,加载ab包,肯定会优先判断这个种子库,而我后期要改的话,就传新的ab包(这个新的是修改过的种子库) 然后unity就会判断要加载最新的我传的ab包至于为什么偏要放stream里,随便放项目的哪里不是都一样的问题, 完全是因为放别的地方是存在可修改空间的,stream里只读的特性你的理解基本正确,不过在某些细节上可以再细化一些,特别是关于 StreamingAssets 的作用和限制,以及热更新时资源加载优先级的实现逻辑。原创 2024-11-28 15:38:41 · 1208 阅读 · 0 评论 -
自由学习记录(25)
当试图给表中不存在的键赋值时,Lua 会调用。原创 2024-11-26 13:26:44 · 1096 阅读 · 0 评论 -
自由学习记录(24)
大G是增加可以通过字符串实现继承的功能元表里面用别的表里的变量,如果自己这个表里没有这个变量,当然是用别人的,但如果自己的表里有了这个变量,就优先用自己的如果 元表的self[调用的键] 查无此“变量”,那会返回nil,不报错并不是在创建一个变量叫Object,而是为Object表定义了一个方法new。一个名对应一个变量,函数或表都算一个变量。原创 2024-11-25 09:23:20 · 1233 阅读 · 1 评论 -
自由学习记录(23)
")如果表里带表,则不能拼接,表里带nil也不能,都会报错true和false也不可以,数字和字符串可以if要和一个end配对,所以endend两个endctrl+b运行脚本函数在表外部声明的时候要带表的名字.函数名带:声明函数的时候,在函数内部可以用self表示自己,从而调用自己这个表的成员不存在表内用的就是自己里面的变量,一样要.出来确认lua 的表不可以.访问数字这种pair遍历写法看上去只遍历值,实际上还是拿了键放下划线了不删除,直接访问没有的那个键,也是会得到nil。原创 2024-11-22 19:35:01 · 1018 阅读 · 0 评论