- 博客(18)
- 收藏
- 关注
原创 Unity GPU Instacne动画解决方案
GPU Instancing 是 Unity 中优化大规模重复物体渲染的利器,通过减少 Draw Calls、节省资源、支持动态属性,显著提升性能表现。结合合理的 Shader 设计和脚本控制,可以在不牺牲视觉效果的前提下实现高效渲染。
2025-03-10 14:36:08
923
1
原创 物理引擎同步和位置变化问题
我设置射线起点的位置为(-1000,-800,1000),按照代码运行逻辑,我创建了一个Plane预制体,并且将它的位置设置为(-1000,-1000,1000),同时向下发出射线检测,由于(-1000,-800,1000)点在(-1000,-1000,1000)平面的上方,射线碰撞到物体,打印出log。,所以在本帧内物体的位置还是(0,0,0),所以才会出现(-1000,-800,1000)检测不到平面而(-1000,1,1000)检测的到,因为一个在平面上,一个在平面下。
2025-02-25 17:14:07
453
原创 ubuntu 24.04 安装图形化界面
3、将默认开启方式设置为图形化界面 sudo systemctl set-default graphical.target。2、安装桌面图形化工具 sudo apt-get install ubuntu-desktop。1、确保apt源可用并更新源 sudo apt-get update。5、重启 reboot。
2025-01-13 14:21:24
1840
原创 Unity Transform.GetSiblingIndex()
用于返回 GameObject 的同级索引。如果 GameObject 与其他 GameObject 共享一个父级并且处于同一级别(即它们共享相同的直接父级),则这些 GameObject 被称为同级对象。同级索引显示每个 GameObject 在该同级层级视图中的位置。当 GameObject 的同级索引发生更改时,其在“Hierarchy”窗口中的顺序也会改变。顺序是根据同级索引从0开始,且在运行时修改物体的层级视图中的位置GetSiblingIndex的值也会发生对应的变化。
2024-12-06 10:48:42
297
原创 关于两个Shader的ZTest 全部设置为always渲染出现bug问题
本次测试的结论就是这个,但是我无法理解为什么渲染结果会和材质的Instance ID有关,以及为什么深度测试开启always后,如果选择了错误的材质顺序,会影响到unity对不透明物体的渲染顺序,在我的理解中就是应该近处物体先渲染,远处物体后渲染,深度测试只是对缓冲区的深度进行筛选,应该不会改变渲染的顺序。这一看我更加疑惑了,untiy居然先渲染的是红色平面,再渲染蓝色平面,也就是先渲染的远处的物体,再渲染的近处物体,这与unity对不透明物体先渲染近处物体再渲染远处物体完全相反。发现结果和我预料的一样。
2024-11-13 17:06:17
1015
原创 Unity LayerMask原理以及在射线检测中的应用
Unity使用了一个int32类型来表示Layer层,其本质在于用一个32位来表示32层,unity存储层的方式是将该位置1其余位置0来表示,比如声明了一个Ground的层其层编号为9,那么在unity的存储方式为000000000000000000000001000000000(二进制)将第九位置为1其余的置为0来表示该层,将这串二进制转换为Int32类型为512。同理LayerMask.LayToName(int)则是根据层索引,返回层名称,比如说我写入9,那么返回的应该是Ground。
2024-06-14 10:09:43
377
1
原创 C# 获取月份的天数的方法
DateTime dateTime = new DateTime(2023, 8, 17);int days = DateTime.DaysInMonth(dateTime.Year ,dateTime.Month);
2023-08-18 11:11:38
735
1
原创 Unity渲染绘制接口 Graphics.Blit
Graphics.Blit通常用于后处理,需要注意的是使用后会修改RenderTexture.active,在此接口后直接使用Graphics绘制接口,不会生效。Graphics.Blit(source, dest,mat):使用着色器拷贝原纹理到RenderTexture。
2023-08-14 17:36:25
1260
原创 Unity DOTS技术
添加//为单个实体添加组件//方法1//方法2//批量添加组件//方法1:通过NativeArray//方法2:通过EntityQuery//为一个实体添加多个组件数据初始化数据初始化有两个方法,一是通过AddComponentData通过代码在添加组件的同时初始化,二是为组件类添加[GenerateAuthoringComponent]特性,这样该组件就可以被挂载在物体上通过Inspector面板赋值});组件的获取和修改//组件获取//设置组件的值});组件的删除。
2023-07-27 17:42:41
10409
2
原创 Unity 光照渲染
Directional Light可以用来模拟太阳光,此光源的光照强度和衰减属性与位置无关Color:改变光照的颜色Instensity:光照强度。
2023-07-26 20:14:23
1638
1
原创 Unity Shader学习-高光反射
Phong高光反射公式:specular = 环境光颜色* 高光颜色* pow(max(0,cos。为反射光和视线方向的夹角。
2023-05-10 14:18:17
153
原创 素数筛(埃氏筛和欧拉筛)
我们简化为i = a * m,其中m为b * c * ...,a为最小质因数,我们用一个数组prime来存储目前的素数集合,我们设目前遍历到的数字为i,由正整数的唯一分解定理可知,i = a * m,假设a为最小质因数,那么在遍历到i之前已经确定了[2,i-1]内所有质数的倍数了,比如说i = 12,那么在i = 6,prime[j] = 2时已经标识过一次。我们对上面的算法可以进行一些改进,我们在判断素数的时候遍历到n,但实际情况两个数相乘x * y = n,那么x,y必须有一个大于。
2023-05-06 10:36:29
287
原创 树形DP算法
而要求左右子树的最大深度,我们要分别对左右子树进行递归,递归计算树的深度的同时,我们也可以计算以该子树的直径,并用一个值ans来维护,找到ans的最大值即为我们要求的二叉树直径的最大值。那么我们该如何求二叉树的直径呢,学过数据结构的同学可能知道,二叉树具有着天然的和原问题相似的子问题结构,在求树的深度的时候我们就可将树分为左子树,右子树和根,分别对左右子树递归得到树的深度。首先我们先分析题目什么是二叉树的直径,如下图所示,红色部分即是二叉树的直径,可以经过根节点也可以不经过根节点。
2023-04-27 10:09:23
157
1
原创 Unity Shader学习-编写一个简单的shader
在第三点我们介绍了struct结构体,我们每次写一个新的脚本时我们都要自己定义一个结构体用于管理输入和输出,但是这些结构体他们形式上都是一致的,支持的语义也是固定的,每次写一个新的脚本我们都要重写一次无疑增加了我们的代码量。如上述代码所示,如果传入和返回值有很多个怎么办,传入值可以写入多个,但是这样就显得代码异常冗余,而且如果有多个返回值我们也没有方法传出,所以我们引入了结构体,我们可以将参数和返回值定义成结构体以此达到传入和传出多个值。用法:我们写一个简单的例子,我们不必在意里面写的是什么意思,上代码。
2023-04-24 16:38:42
641
2
原创 Unity Shader基本结构
ShaderLab提供了一系列渲染状态的指令,在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。在 Pass 代码块中使用这些命令可为该 Pass 设置渲染状态,或者在 SubShader 代码块中使用这些命令可为该 SubShader 以及其中的所有 Pass 设置渲染状态。作用:声明变量会显示在Inspector面板中。在属性块中声明的变量,可以在材质面板中进行调整。
2023-04-24 11:00:54
294
2
原创 Unity Shader学习-数学基础-矩阵
定义:M矩阵的转置为M矩阵沿着主对角线反转,记作。单位矩阵:主对角线上的值全为1,其余值全为0。设M1:a行b列矩阵,M2:b行c列矩阵。条件:第一个矩阵的列等于第二个矩阵的行。对角矩阵:除主对角线的以外的值全为0。1.矩阵乘以对应的单位矩阵等于他本身。结果:M1 * M2为a行c列矩阵。例如:3 x 3矩阵。行向量:1 x n的矩阵。列向量:n x 1的矩阵。方阵:n x n阶矩阵。三者的关系:单位矩阵。
2023-04-13 10:48:35
745
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人