摘要:
PBR中环境光预计算有两种方式: (1) 提前计算球面间接光照积分,并烘焙到一个辐照度贴图(CubeMap)中,在游戏运行时直接采样得到对应的间接光照积分结果。 可以看:LearnOpenGL的漫反射辐照度部分以及解释更清晰的深入理解 PBR/基于图像照明 (IBL) (2) 第二种就是球谐光照,在 阅读全文
摘要:
参考:Quick Game Art Tips - Unity Liquid Shader 关于这个液体瓶效果,其实网上也有挺多的版本的,但是我看了下貌似还有改进的余地: 1.网上的版本在FillAmount上的取值范围有点随意,可能因为他们是在世界空间下算的液体高度,所以觉得直接设个大点的值,然后能 阅读全文
摘要:
#边缘检测 边缘检测有两种方式: 色差检测:以像素中心周围的像素颜色为根据判断中心像素点是不是在边缘线上。 深度法线检测:检测像素点所对应的视角空间中的深度和法线,以此做判断当前点是否在边缘上。 ##色差检测 我们可以首先回想一下边到底是如何形成的。如果相邻像素之间存在差别明显的颜色、亮度、纹理等属 阅读全文
摘要:
在sRGB颜色空间下是: \(luminance = 0.299 * color.r + 0.587 * color.g + 0.114 * color.b\) 在线性颜色空间下是: \(luminance = 0.2125 * color.r + 0.7154 * color.g + 0.0721 阅读全文
摘要:
实现置灰非常简单,只要用原来颜色的rgb分量按照不同的权重加起来,就可以得到一个灰度值,这个灰度值就是新的颜色的rgb分量。 Shader "WS/Gray" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tag 阅读全文
摘要:
为了提高游戏性能,降低游戏运行时的DrawCall,Unity会对网格顶点进行批处理,而批处理又分成了动态批处理和静态批处理 ###动态批处理 优点:不用自己做任何事情,Unity会在游戏中自动进行动态批处理,只要满足下述条件。 在Unity中,要进行动态批处理需要满足以下条件: 顶点属性要小于90 阅读全文
摘要:
###万向节死锁 使用欧拉角会有万向节死锁的问题。 首先要先确定的就是欧拉角的确是能正确标识一个旋转的,无论有没有出现万向节死锁。 那万向节死锁到底会导致什么问题呢? 当我们要在两个欧拉角之间进行插值的时候就会出现问题了。你可以想象一个情况(也可以看这个视频,我也只是把里面说的用自己的文字描述而已: 阅读全文
摘要:
为了让一个代理(Agent)能够在某种状态(State)下自主选择应该执行的行为(Action),程序会用某种算法来控制代理如何做出这种选择。 如果代理可以执行的行为不多,需要做的判断不多的时候,可以简单的采用有限状态机模式(Finite State Machine)来做这种决策。 但是当代理可选择 阅读全文
摘要:
#Unity游戏中的寻路方案 ##使用Unity自带的Navigation系统 首先把地图场景在hierarchy中编辑好,然后可以用脚本遍历每个地图元素,把其navigation static选中,然后打开Unity的navigation 窗口,点击烘焙,把场景里的navmesh data烘焙出来 阅读全文
摘要:
####为什么需要用到对象池呢?(C#) 因为实例化一个类需要在内存堆中划出一块内存来让这个对象使用(泛指C#这种有自己的内存管理机制的语言,像C++这种自己管理内存的就不是了),但是这些实例化的对象并不是在整个程序生命周期中都是有用的,当这个对象的工作完成之后它就没用了,那这块内存咋办,会立刻释放 阅读全文