RVO2译文
Reciprocal n-body
Collision Avoidance 译文
前言:
本篇译文使用有道翻译进行辅助。译者并不保证翻译的正确性,请大家谨慎甄别(至少译者是看懂了部分)。文中出现的[1]表示引用,其中的数字对于引用的编号。本来我是想去掉这些的,但是文中部分如“ A more thorough solution would be to take these factors intrinsically into account in the derivation of the permitted velocities for the robots. [27] and [19] provide some interesting ideas in this direction.”,直接用引用来特指一些东西。所以我后面又补上了,大多数时候是忽略掉也没什么关系。
如果你有发现我翻译错误的地方,我欢迎你来指正。
摘要:在本文中,我们提出了一种多个物体互相避免碰撞方法,即当多个移动机器人需要在一个共同的工作空间中移动时,避免它们相互碰撞。在我们的公式中,每个机器人都是完全 ...
女神异闻录5皇家版
女神异闻录5皇家版
自黑猴以后,《女神异闻录5》能称得上是我近期玩过最好玩的游戏了。一开始朋友推荐给我时,我还有些不太想玩,当我玩了一段时间便完全沉入其中。黑猴聚焦于悟空的六根展开,而《女神异闻录5》则是以修改部分人扭曲的认知为主要的剧情。总体而言,这两部都是在探讨人类自身的欲望,我发现对于这类主题的游戏真的是非常的感兴趣。
虽然《女神异闻录5》在我心中已经是一部很好的作品了,但是它仍有一些游戏设计和一些表现让我感觉到难受。不过有些问题也不算是它的问题,只能说是受限于时代。
这其中最能体现“受限于时代”的问题就是游戏中的建模问题。随着这几年显卡性能的突飞猛进,各个游戏厂商也可以在游戏中放入高精度的3D模型,且在3D模型上的表现力和精细度是越来越强了。相对比起来,这个16年游戏所表现出来的模型质量就看起来有些粗糙了。不知道是否是他们艺术选择的原因,还是说仍然限制于时代。在整体的渲染表现上,《女神异闻录5》也不能说得上好看。我自己感觉来说,这画面就是挺常见的三渲二的方法。除此之外,人物整体的站姿在我看来也是有点问题。从某种意义上,他们这 ...
景深效果
景深效果
前言
本篇文章以Unity为工具,介绍了景深相关的知识。Unity在URP中已经提供了景深效果,本文中的代码自然是不能和Unity官方的代码相提并论。文章中的代码只是为了体现文章描述的知识点。
环境
windows10/windows11
Unity 2022.3.52f1c1
URP 14.0.1
什么是景深
景深也是一种非常常见的后处理手段,它用来模拟相机拍摄画面的效果。对于⼀个给定设置的相机镜头,它有⼀个物体聚焦的范围,即它的景深(depth
of field)。任何超出这个范围的物体都是模糊的,且距离越远越模糊。
实现方法
在《Real-Time Rendering 4th
Edition》(下面简称为《RTR4》)中,它提出了几种方法。
将景深和⾊调映射联系起来,使得失焦物体随着光照⽔平的降低⽽变得更加模糊。(这个方法书中和网络上,我都没找到具体的实现。说来惭愧,我也不知道该如何实现。所以这就当是一种思路的记录把。)
改变镜头上的观察位置并保持焦点固定,渲染出多张图片。然后我们对这些图片 ...
关于KDTree
关于KDTree
K-D Tree(KDT, K-Dimension
Tree)是一种可以高效处理K维空间信息的数据结构。在结点数n远大于\(2^k\)时,应用K-D Tree的时间效率很好(载自OI
Wiki)。
环境
Windows10 Unity2022.3.34f1c1
建树
在一堆数据中,我们先选取一个维度,在这个维度上我们遍历数据选择出一个中间值。以这个中间值为界将剩下的数据分成两个部分:比其大在右边,小于等于其的在左边。在遍历的过程中,我们可以得到一个这堆数据中在各个维度上的最大值和最小值。我们也要将这信息记录在节点中。接下来我们选择另一个维度,重复上述过程,如果维度用完了就再从头按照之前的顺序重复过程,直到最终叶子节点记录所有的数据。非叶子节点本身是仅记录其对应数据的范围,即我们在遍历过程中得到的各个维度上的最大值和最小值。关于维度,你可以想你要对一个三维空间下的物体进行划分,它有一个位置信息:x,y,z。那么我们就可以从x->y->z的顺序选择维度。当然顺序的选择看你如果操作。实 ...
2025-8随记
2025-8随记
我发觉最近我好像出了一些问题,我好像对大部分的东西失去了兴趣,特别是对技术方面的东西。我现在对技术方面有一种说不清道不明的情绪。对一个我不太明白的技术,若是有想法,我就会觉得无聊而不去实践,而如果这个技术所涉及的知识过广,我则会放弃。最终的结果就是这段时间,我一直原地踏步,技术没有一点增长。只有在真正的生产环境需要的时候,我才会稍微钻研一下。直到我看到了一个视频,我突然觉得我找到了原因。
我一开始发现我有这个问题是在有次我遇到了一个生产环境中需要,且我之前有想法的技术。当我正想用之前的想法去实现时,我发现这个想法在实际生产的过程中存在着许多的缺陷。并且我实践的过程中,我发现这个想法十分的麻烦。幸好这个需求不是什么偏僻的需求,我在网上查找这个问题的解决方法。既然在网上能找到了更好的解决方案,我自然想着深度了解一下这个方案是如何运行的。随着我钻研,我发现我自己之前的想法太天真了。我按着文章的思路一步步了解其中的思想,直到我看到了一个文章中的公式,这个公式非常的奇怪。对应的文章中也是突然就给出了这个公式,本来我想着看评论区中了解一下这个公 ...
最强蜗牛
最强蜗牛
前言
或许是因为无聊,或许单纯是我对那段时间的怀念,或许就是我矫揉做作想着记录游戏,总之这篇文章就摆在这里了。
正文
听到《最强蜗牛》这款游戏的名字,你或许会想起在某些平台的小广告中出现过《最强蜗牛》的推广广告。而我确实就是想聊聊这款“雁过拔毛”的氪金游戏。这游戏确实和我之前所写的任何一款游戏都不一样。它既不是单机,也没什么令人感动或是引入深思的剧情。它就是一款再常见不过的休闲氪金类游戏。但也正是因为它是一款休闲氪金类游戏,所以我才想写它。
休闲氪金类游戏无疑是最近最能赚钱的游戏类型,无论是《最强蜗牛》还是其他的能在广告中看到的休闲氪金类游戏,他们都可以靠着题材和养成稳定来吸引一批用户并为其氪金。我自己也没能抵住《最强蜗牛》的魔性广告而去玩。在这篇文章中,我想用自己游玩《最强蜗牛》的体验来记录并分析一下这款游戏。
最开始吸引我去玩《最强蜗牛》的原因就是因为它魔性的广告。几乎病毒式的宣发,让你可以在各各软件平台上看到关于《最强蜗牛》的广告。宣发广告对于任何一款游戏而言都十分的重要,因为游戏上线后的知名度 ...
Unity的八股收集(持续更新)
Unity的八股收集(持续更新)
前提说明:答案都是个人的理解 +
网络搜寻,不一定正确,请谨慎参考!
我个人认为面试回答应该尽量精简一些,防止被面试官追问太多,但是这样做可能也会给面试官留下不好的印象。所以才有回答中的扩展。大家可以根据自己的能力来挑选部分扩展的内容进行回答。如果自身能力不行,我建议还是不要展开太多扩展内容,以免给面试官机会被其追问。
有些面试题非常的基础,比如关于数据结构方面的知识。对于多年的程序员而言,我不建议大家把时间花费在这些基础知识上,因为这些知识在实际面试一般不会再提及了,当然你要是想巩固知识倒是可以看看。
下面的代码中,有部分我会标记为答案存疑,这是因为我个人感觉这有点问题,但是我也找不到权威的资料证明。那些没有被标记的答案实际上也不能说是百分百的正确,只能说是我个人感觉这样回答是没问题的。
通用概念
Q: 内存中,栈和堆的区别是什么?
答:
栈内存是为线程留出的临时空间,而且栈空间存储的数据只能由当前线程访问,所以它是线程安全的。其用于存储局部变量和方法调 ...
关于贝塞尔曲线/面
贝塞尔曲线/面
环境
windows 10
Unity 2022.3.52f1c1
贝塞尔曲线
在游戏开发的过程中,贝塞尔曲线是一个十分常用的知识。它常用来实现游戏中投掷物的抛物线效果。除此之外,游戏引擎中的动画曲线也是用类似的逻辑来实现。
什么是贝塞尔曲线
贝塞尔曲线(Bézier
curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。贝塞尔曲线于1962年由法国工程师皮埃尔·贝塞尔(Pierre
Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul
de Casteljau于1959年运用de
Casteljau演算法开发,以稳定数值的方法求出贝兹曲线。(上述段落取自百度百科。)虽然上文说是在二维图形中的应用,但是现在贝塞尔曲线在三维中也有广泛的应用。
一次(一阶)贝塞尔曲线
一次贝塞尔曲线是最简单的形式。我们值需要做两点间的线性插值简单的代码如下:
1234public Vector3 OneLevelBezier(Vector3 ...
Unity将预制体渲染到RenderTexture上
Unity将预制体渲染到RenderTexture上
前言
本篇文章会介绍一个简单想法,所以会有很多限制。比如无法设置光源、对预制体中的物体位置有一定的要求和在使用Unity默认的URP材质有一些奇怪的bug。
环境
Windows11
Unity2022.3.56f1c1
正文
本篇文章的想法非常简单简单到我都觉得水的程度。我们只要使用Unity提供的CommandBuffer就可以实现了。首先我们先设定好摄像机。不过我们不是真的要创建一个Camera组件,而是我们设定一个虚拟的摄像机。这个摄像机的屏幕比就是我们要渲染的RenderTexture的长宽比。然后我们再定好摄像机是否要进行透视投影,如果是透视投影的话,fov(Field
of view)是多少。如果是
正交投影的话,它窗口的大小又要是多少等等。最终我们通过这些属性建立我们投影矩阵和视图矩阵。听到这,如果你不了解整体的渲染流程或许你会很懵逼。所以我这边提供给你一个简单方法。我们只需要拿一个空场景设定好这个空场景的中的摄像机参数,千万别忘记将Unity编辑器的 ...
关于图片采样
关于图片采样
前言
在游戏开发中,我们经常会对图片进行采样。比如物体的纹理信息,阴影贴图的信息等等。我们都需要对图片进行采样,以丰富游戏的表现。
我们时常会遇到这样的一个问题,我们需要将一个图片渲染到屏幕上,而图片所覆盖的屏幕像素远大于图片自身的像素。这时候我们就需要对图片进行放大处理。又或是反过来,我们需要对图片进行缩小处理。这些都会涉及到如何对图像本身进行采样。
图像采样的方法和规则
我们假设现在我们有一张256x256的图片。我们需要分别将其渲染成64x64和1024x1024的图片。对于64x64的处理,你或许会觉得很简单,因为256刚好是64的4倍,我们直接按照他们的比例进行像素的选取就好了。但是对于1024x1024的处理,你是否有想法呢?如果我需要的是100x100的图片,那么你又该如何处理呢?
无论是放大(上采样)还是缩小(下采样),我们都可以去做一个映射操作。比如我想知道64x64中坐标为(31,31)(这里我依照程序里面下标从0开始计算)的像素点是什么颜色。我先计算出此坐标在原图中的比例,显 ...









