摘要:
CPU GC 序列化与反序列化,如protobuff,json解析 String的频繁构造,拼接,如ToString()会生成字符串,Object.name会返回拷贝 闭包和匿名函数,在闭包中调用外部变量时会创建临时class对象,匿名函数当做参数传入时,也会有内存开销 有开销的函数,如Camera.main等,缓存一下 Transform只存局部坐标,旋转,没次获取和设置都有计算开销 ... 阅读全文
摘要:
基础概念 在3D游戏引擎中,球体、立方体以及所有其它复杂的集合体都是由三角面片组成的。引擎只会渲染物体的表面,比如球体,半透明物体等.整个世界由各种空壳构成. 立体渲染(Volumetric Rendering)的基本概念:模拟光线在物体内部的传送,从而实现更震撼也更真实的视觉效果。 片段着色器最后返回的对象,是从特定角度看过去特定位置的颜色。 这种方式计算的颜色是完全随意的,因此返回的内... 阅读全文
摘要:
继承体系的问题,为什么要用ECS 面向对象的问题 当一个新的类型需要多个老类型的不同功能的时候,不能很好的继承出来 游戏开发后期会有非常多的类,很难维护 游戏中子系统很多,它们对一个对象的关注点往往互不相关,比如渲染.网络,战斗数据,如果都对应一个基础角色对象,这个类就会很大 ECS,通过组合而不是继承的方法来进行实体的构建 ECS的设计目的是用来把大量的模块进行集成并解耦,用最小的... 阅读全文
摘要:
简介 参考网页 SetReplacementShader(Shader shader, string replacementTag); 参数中的replacementTag,是Shader中Tags中键值对的Key值,即 "RenderType"="Transparent" 的 RenderType 替换规则是,按照键值对的值,从替换用的Shader中找到对应TagValue的SubSha... 阅读全文
摘要:
标题更小的标题共有6级标题分割线三个或以上*或是- 标题 更小的标题 共有6级标题 有序列表,数字和英文句点, 注意句点与文字中间有空格。不要求数字连续 无序列表-+*任意一种 也必须有空格 嵌套1 嵌套2 分割线三个或以上*或是- 字体 加粗 斜体 加粗斜体 删除线 printf("单行代码") int i = 0; i = 1; for (int i = 0... 阅读全文
摘要:
屏幕图像捕捉: Shader的GrabPass GrabPass可以很方便地捕获当前渲染时刻的FrameBuffer中的图像。 其原理就是从当前FrameBuffer中copy一份纹理,通过SetTexture的方式设置纹理。 至于GrabPass的性能问题,一般认为是对FrameBuffer 进行的一些pixel copy operations造成的, 具体Unity是怎么实现的,不... 阅读全文
摘要:
算法的基本思路是: 对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax ,用dmax与限差D相比: 若dmax <D,这条曲线上的中间点全部舍去; 若dmax ≥D,保留dmax 对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法。算法缺陷对于一般路径而言,Douglas-Peucker算法是有效的,但是不难想到,当出现折返路径时... 阅读全文
摘要:
https://en.wikipedia.org/wiki/Marching_squares http://blog.csdn.net/coolingcoding/article/details/17278959 根据一个Square的四个顶点信心分别标记边界,连起来就行还有一种:每种Square都有一种移动方式走一圈就是边界 阅读全文
摘要:
1. 前言 最近连续做了很多代码动态生成Mesh的工作,从动态生成修改瞄准范围的Mesh到可破坏的墙壁,以及之前写了一半导航网格生成. 想借此机会整理下最近的积累,如果在阅读过程中发现一些问题或是有争议的地方,欢迎交流2. Mesh数据简介 一个Mesh的必要结构有: 顶点,三角形 用于渲染的Mesh一般就会有: UV: 一般会有多组,一般0是主贴... 阅读全文
摘要:
参考Unity粒子系统的StretchedBillboard,在保持模型的右朝向不变的情况下,尽量朝向摄像机转化为数学问题: 一个向量在一个面上的投影基础的Billboard的方向应为: 从中点指向摄像机限制的平面为以right为法向量的平面算法 Vector3 rightward = transform.parent.forward; if (isShowLeft) rightward... 阅读全文