- 博客(122)
- 收藏
- 关注
原创 Unity Shader教程:Lambert漫反射实现原理解析
UnityShader #图形学基础 #渲染优化 #移动端开发。截断了负值,这是经典Lambert特性。
2025-03-10 13:47:10
387
原创 顶点着色器和片段着色器
我们可以通过一个比喻来理解它们的分工:想象你要画一幅由三角形组成的3D模型,顶点着色器负责确定每个三角形的“顶点位置”,而片段着色器负责给每个像素“填色”。:顶点着色器是渲染管线的第一步,它处理模型的每个顶点(比如立方体的8个角点),主要任务是将这些顶点的位置从模型自身的坐标系转换到屏幕坐标系中,同时可以修改顶点的其他属性(如颜色、法线方向、纹理坐标等)。:在顶点着色器之后,光栅化会将三角形转换为屏幕上的像素(称为“片段”),片段着色器则负责计算每个像素的颜色,比如纹理贴图、光照、阴影等效果。
2025-03-06 22:50:21
664
原创 计算机图形学,GPU,Opengl/DirecetX,unity,Shaderlab 关系
是什么:一门研究“怎么让计算机把3D世界画得又逼真又好看”的学问。比如怎么模拟光照、阴影、反射,甚至爆炸特效。举例:就像学画画的人要懂透视、光影,计算机图形学就是教计算机怎么“画画”的规则。核心任务:把数学描述的3D场景(比如一堆球和方块的位置、颜色)变成一张2D图片,还能让画面看起来真实。是什么:电脑里的“画图高手”,专门负责快速处理图形计算的硬件。作用:14是什么:两套“画图工具包”,用来告诉GPU怎么干活。区别:是什么:一个“游戏制作神器”,普通人也能用它快速做3D游戏或动画。作用:是什么:
2025-03-03 11:13:46
301
原创 15.向量点乘
现实中数据常是几十维的(比如用户画像、像素颜色),坐标点乘直接扩展到N维,毫无压力。推荐系统中,用点乘判断用户喜好和商品特征的匹配度(值越大越推荐)。,用矩阵和点乘可以一步算出旋转或缩放后的新坐标,不用手动画图。推箱子时,斜着用力,实际水平移动箱子的“有效分力”就是投影。:不用画图、不用算夹角,直接按坐标硬算,适合计算机暴力处理。,直接反映配方和成品的匹配度(分数越高越接近理想配方)。:两向量方向相反(比如一个朝东,一个朝西)。→ 方向一致,合作效果好(比如推荐匹配)。假设你调配一杯饮料,配方是向量。
2025-02-03 10:53:08
478
原创 unity. Capsule Collider(胶囊碰撞体)
通过这些参数,你可以精确控制碰撞体的形状、位置和行为,从而实现各种游戏效果(比如碰撞检测、触发器事件等)。物理材质可以控制物体碰撞时的行为,比如是否滑滑的(低摩擦力)或是否有弹性(高弹性)。:如果你需要检测碰撞的详细信息(比如碰撞点的位置),可以勾选这个选项。,碰撞体不会阻挡其他物体,而是会触发事件(比如进入或离开某个区域)。如果勾选,碰撞体会记录与其他物体的接触信息(比如接触点、法线等)。:你可以用鼠标拖动碰撞体的边界,调整它的形状和位置。:设置碰撞体的物理材质,影响碰撞时的摩擦力和弹性。
2025-01-26 16:33:58
764
原创 unity.NavMesh Agent
通过调整这些参数,你可以让角色更智能地移动,比如跑得更快、更灵活地避开障碍物,或者更平滑地停下来。每个参数都有其特定的作用,理解它们可以帮助你更好地控制角色的行为。比如人形角色和车辆的移动方式不同,这里可以设置代理的类型。:角色在离目标多远的地方停下来。:如果你的角色模型和地面的对齐有问题,可以通过这个参数调整角色的高度。数值越大,角色占的空间越大,更容易碰到障碍物。:当多个角色同时移动时,优先级高的角色会优先避开障碍物。:定义代理的类型,比如是人形角色、动物、车辆等。数值越大,角色能跨过更高的障碍物。
2025-01-26 16:31:20
1531
原创 unity制作动画的技巧相关注意点
2.如果在制作攻击动画,当该动画权重默认是最大,我们可以给他加一个null动作,防止和其他动作有冲突。1.如果不想人物执行这个动作过程中被打断,必须执行完这一次,比如人物死亡,就取消勾选。3.可以创建子状态机 比如 如果人物攻击是2次 可以创建。
2025-01-26 12:04:07
245
原创 14.模型,纹理,着色器
通过模型、纹理和着色器的结合,你可以创造出逼真或风格化的3D图形!你给墙面贴上砖墙纹理,给屋顶贴上瓦片纹理,给窗户贴上玻璃纹理。面是由顶点组成的多边形(通常是三角形),定义了物体的表面。着色器是一段运行在GPU上的小程序,控制模型的渲染效果。你加载一个房子的模型,定义了墙、屋顶、窗户的形状。模型就像3D物体的骨架,定义了物体的形状和结构。着色器就像3D物体的化妆师,决定物体最终的外观。比如,一个房子的模型包括墙、屋顶、窗户等部分。比如,房子的纹理可以是砖墙、木门、玻璃窗。
2025-01-25 21:56:23
638
原创 13.图形程序接口(Graphics API)
图形API是程序员与GPU之间的“翻译官”,负责将高级指令翻译成GPU能理解的命令。通过图形API,你可以控制渲染管线,管理GPU资源,实现复杂的图形效果。常见的图形API包括OpenGL、DirectX、Vulkan和Metal,它们各有特点,适用于不同的平台和需求。**图形程序接口(Graphics API)**是计算机图形学中的一个重要概念,可以理解为“程序员与GPU之间的桥梁”。图形API就像一个翻译官,把你的指令(比如“画一个红色的三角形”)翻译成工人能理解的语言。
2025-01-25 21:54:57
562
原创 12.Shader开发概述
Shader是渲染管线的核心,通过编写Shader,你可以定制渲染效果,创造出令人惊叹的图形!Shader是一段小程序,运行在GPU上,用来控制3D模型的外观(比如颜色、光照、纹理)。通过编写Shader,你可以实现各种炫酷的效果,比如水面反射、火焰特效、卡通渲染等。渲染管线定义了从3D到2D的流程,而Shader决定了每个流程的具体效果。通过编写Shader,你可以定制渲染管线的每个阶段,实现独特的效果。就像编写魔法配方,控制3D模型的外观和效果。就像工厂的生产线,把3D模型加工成2D图像。
2025-01-25 21:48:12
414
原创 11.渲染管线——光栅化阶段
它就像画家把3D场景投影到2D画布上,并确定每个小格子(像素)的颜色。通过图元分解、片元生成和插值计算,光栅化阶段为后续的片元处理奠定了基础,最终生成我们看到的图像。是渲染管线中的一个关键步骤,负责将3D模型转换成屏幕上的2D像素。把生成的片元传递给片元处理阶段,进行进一步处理(如纹理采样、光照计算)。三角形覆盖了屏幕上的多个小格子(像素),每个被覆盖的格子生成一个片元。你有一个3D模型(比如一个立方体),需要把它画到2D画布(屏幕)上。比如,三角形的三个顶点颜色不同,光栅化会计算中间像素的颜色。
2025-01-25 21:42:41
329
原创 10.片元
通过片元处理(如颜色计算、深度测试),最终决定哪些片元会成为屏幕上显示的像素。**片元(Fragment)**是渲染管线中的一个重要概念,可以理解为“潜在的像素”。你在每个格子上尝试涂上不同的颜色(片元),但最终只有一种颜色会被保留。三角形覆盖了屏幕上的多个小格子(像素),每个被覆盖的格子生成一个片元。最终,你需要决定哪个颜色保留(比如选择最前面的颜色,或者混合颜色)。最终保留的片元会被写入帧缓冲区,成为屏幕上显示的像素。最终,没有被丢弃的片元被写入帧缓冲区,显示为红色像素。
2025-01-25 20:34:54
698
原创 9.像素概念
像素是组成图像的最小单位,就像拼图的小碎片。整个拼图总共有1920 x 1080 = 2,073,600个小碎片(像素)。1920x1080表示拼图横向有1920个小碎片,纵向有1080个小碎片。如果拼图的小碎片越多(分辨率越高),图像的细节就越丰富,看起来越清晰。每个像素都有自己的颜色,所有像素组合在一起就形成了我们看到的图像。像素数量是1920x1080的4倍,所以4K图像更清晰。横向有1920个像素,纵向有1080个像素。横向有3840个像素,纵向有2160个像素。每个小碎片(像素)都有自己的颜色。
2025-01-25 20:31:38
369
原创 8.应用阶段和几何阶段的关系
摄影师调整相机角度(顶点变换)、选择拍摄范围(裁剪)、把3D场景拍成2D画面(屏幕映射)。你需要选择演员(3D模型)、布置场景(设置灯光、材质)、设计镜头(设置相机)。应用阶段准备了3D模型、相机、灯光等数据,并将这些数据提交给几何阶段。几何阶段接收应用阶段提交的数据,进行顶点变换、裁剪、投影等操作。GPU接收数据,对角色模型的顶点进行变换(比如移动、旋转)。两者紧密合作,将3D场景转换成2D图像,最终呈现在屏幕上。是摄影师,负责根据导演的指示,实际拍摄场景。摄影师(GPU)根据导演的指示,开始拍摄。
2025-01-25 20:25:52
238
原创 7.渲染管线——几何阶段的概述
它就像摄影师拍摄3D场景的过程:摆放模型、调整相机、拍扁成2D照片。通过顶点处理、图元装配、裁剪和屏幕映射等步骤,几何阶段为后续的光栅化和片元处理奠定了基础。是渲染管线中的一个重要部分,主要负责处理3D模型的几何信息(比如顶点位置、形状、大小等),并将它们转换为屏幕上的2D图像。通俗理解:把3D场景“拍扁”成2D照片,准备显示在屏幕上。你把房子的3D坐标转换成2D屏幕坐标,准备显示在屏幕上。输入:3D模型的顶点数据(位置、颜色、法线等)。通俗理解:调整模型的位置、形状和颜色,打好灯光。
2025-01-25 20:25:03
299
原创 6.图元概念
图元是构建3D模型的基本几何形状,就像搭积木的基本块。通过组合大量的图元(如三角形),可以构建出复杂的3D模型,最终渲染成我们看到的图像。**图元(Primitive)**是计算机图形学中的一个基本概念,指的是构成3D模型的最简单几何形状。你可以用不同形状的积木(比如方块、三角形、长条)来搭建房子。三角形是最简单的多边形,三个顶点永远在一个平面上,不会变形。首先,3D模型的顶点数据被处理(比如计算位置、颜色等)。:就像一块三角形的积木,是3D模型中最常用的图元。就像三角形的凳子最稳,不会晃动。
2025-01-25 20:18:31
244
原创 5.如何减少顶点数
顶点数较少的物体就像简单的拼图,容易处理,适合动态合批;顶点数较多的物体就像复杂的拼图,处理起来更耗时,不适合动态合批。顶点数越多,模型越复杂。顶点数较多的物体(比如一个复杂的角色模型)数据量大,合并后会导致GPU处理效率下降。如果动态合批,合并后的数据会非常大,GPU处理起来会很慢,甚至可能导致性能下降。如果每个物体的顶点数太多,合并后的数据会非常大,GPU处理起来会很慢。这就像顶点数较多的模型,GPU处理起来更耗时,不适合动态合批。这就像顶点数较少的模型,GPU处理起来很快,适合动态合批。
2025-01-25 20:14:45
200
原创 4.如何减少DrawCall
通过合并订单(静态/动态合批)、打包订单(图集)、减少不必要的订单(剔除)、使用高效订单(GPU Instancing)和简化订单(减少材质数量),可以显著提升渲染性能。如果你需要画一个复杂的场景,但用了太多不同的材质(比如100种不同的颜色和纹理),画师需要频繁切换工具。如果你需要画很多不同颜色的树,每棵树都用自己的颜色(纹理),画师需要频繁切换颜料(纹理)。更好的方法是把100棵树合并成一个“大订单”,告诉画师:“请一次性画100棵树。如果你需要画一个房间,但房间里有几面墙被挡住了,画师不需要画它们。
2025-01-25 20:12:23
283
原创 3.DrawCall的概念
为了提升效率,我们需要尽量减少订单数量(DrawCall),让画师(GPU)更高效地完成任务。想象你是一个老板,雇佣了一个画师(GPU)来帮你画一幅画(渲染一帧图像)。你需要告诉画师画什么、怎么画,这个过程就是DrawCall。是渲染管线中的一个重要概念,指的是CPU向GPU发送的一个绘制命令,告诉GPU:“请根据我提供的数据,画一个物体(或一部分物体)。如果你还需要画一座房子,你会再下一个订单:“请画一座房子。如果你有100个订单(100个DrawCall),画师需要处理100次任务。
2025-01-25 20:08:34
281
原创 2.渲染管线——应用阶段
这个阶段由应用程序(如游戏引擎、3D建模软件)控制,开发者在这里定义场景中的物体、材质、灯光、相机等,并将这些数据传递给图形API(如OpenGL、DirectX、Vulkan),以便进入后续的渲染管线。应用阶段是渲染管线的起点,负责准备数据、设置状态、提交命令。你决定每个场景的布景(渲染状态),比如用什么滤镜(着色器)、是否需要特效(混合模式)。在开拍前,你可能需要调整剧本(逻辑),比如演员的走位(动画)或场景的变化(物理模拟)。你需要选择演员(3D模型)、道具(纹理、材质)和灯光(光源)。
2025-01-25 20:07:05
587
原创 unity导入图片素材注意点和AI寻路模块导入
当我们导入了图片资源,我们需要设置为Sprite类型。是Unity中用于UI元素的特殊变换组件,比普通。多了尺寸和锚点等属性。导入 ai 寻路模块。
2025-01-25 15:49:15
692
原创 unity——Preject3——摄像机动画
当这个选项被勾选时,状态机会在当前状态的动画播放到指定的退出时间(ExitTime)时,才会转换到下一个状态。例如,如果退出时间设置为0.75,那么状态机会在当前动画播放到75%时进行转换。:当这个选项未被勾选时,状态机会在满足所有其他转换条件(如参数条件)时立即转换到下一个状态,而不需要等待当前动画播放完成。这意味着转换可以随时发生,只要条件满足。1.创建好动画触发的条件是否条件满足直接转换是否循环播放动画动画完成后做什么(添加事件)
2025-01-18 15:53:05
384
原创 unity——Preject3——开始界面拼面板
锚点就是告诉UI元素:“你要跟着父容器的哪一部分动?如果你想固定位置,就把锚点设为一个点(比如中心、角落)。如果你想拉伸或填充,就把锚点设为一个范围(比如左右拉伸、上下拉伸)。锚点的设置可以让你轻松实现UI的自适应布局,不用手动调整位置和大小。
2025-01-17 11:04:49
944
原创 unity——Preject3——面板基类
因为抽象类本身是不完整的,可能包含未实现的抽象方法。抽象类的主要作用是:定义通用的行为或结构。强制子类实现特定逻辑。提供代码复用和多态性支持。通过子类继承抽象类并实现其抽象方法,可以创建子类的对象并使用抽象类中定义的功能。
2025-01-14 17:54:42
793
原创 Qt+ffmpeg+libVlc 实现简单视频播放器
其中,“-i”指定输入文件(视频文件路径),"-ss"指定从视频的第1秒开始提取封面("00:00:01"),"-vframes"指定提取1帧视频图像作为封面,“-y”表示覆盖输出文件(如果临时封面文件已存在)。这是为了生成临时封面文件存储的位置,避免在程序的主目录或其他重要目录中产生临时文件,从而保持程序的整洁性和系统的稳定性。这使得函数能够调用外部的ffmpeg工具来完成视频封面提取的任务,而不是在Qt程序内部实现复杂的视频处理逻辑。使用QFile的资源系统功能,加载程序资源文件中的默认图标图像。
2025-01-13 15:12:39
895
原创 unity3d——3D动画学习day01 状态机相关参数
5.配合 着俩取消勾选 第一个是为了平滑过渡到另外的动作 第二个是必须要选的 要不然出现bug 人物抽动。6.添加对应的条件来决定 一个动作 到另外 一个动作 的条件。4.取消勾选 人物一般死亡 没有循环动作。3.状态机值的动作来自这里 (三角形)2.找到对应的模型拖到模板中。3.把创建的状态机放入模型中。
2025-01-05 12:31:54
327
原创 unity3d—(影响 drill call 元素 -》层级)
2个小猪图片是在一个图集 所以 drill call 为1 加了 别的图片并且塞在中间 那就分开了,变3了,除非别的图片层级不在中间,那就是2。
2024-12-09 13:40:10
323
原创 unity3d—demo(2d人物左右移动发射子弹)
transform是属性 获取Transform组件 Translate是Transfor组件方法函数。预设体 是 GameObject 类型。
2024-12-09 11:04:59
502
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人