普通视图
-
Moeif
- Gameplay 01 游戏开发中的平滑移动这篇博客,聊一聊在游戏开发中,控制角色或者其他物体的平滑移动。现实中,一个物体,从静止加速到匀速运动状态,或者从匀速运动状态变为静止状态,都会有一个过程。就像人走路,或者汽车开动。 一个物体在运动状态下,会有一个速度变量,也就是我们期望的速度。而从静止到运动状态的过程,会有一个加速度。 而游戏开发中,要做到一个物体平滑的运动,也就是模拟出这个从静止,通过加速度,达到期望速度的过程。 游戏是按帧运行的,在初始的时候,目标运动速度为0,随着每一帧的流逝,目标速度会不断累加一帧中的加速度,当累加到期望速度时,则会以期望速度来运动。 代码如下,这里是在 Unity 中实现的,但是原理对于所有游戏引擎通用 using System.Collections; using System.Collections.Generic; using UnityEngine; public class MovingSphere : MonoBehaviour { // 用户设定最大期望速度 [SerializeField, Range(0f, 100f)] private float maxSpeed = 10
-
Moeif
- This Week In Moeif 28现在已经 2022 年了,本来想跨年夜去外滩,看了一下新闻,好像也没什么活动,就在家里待着了。这个周又开始运动了,跑步加跳绳,保持健康。这周是单调的一周。这周还把博客使用 Cloudflare 加速了,能明显感觉也访问速度的提升。 项目进度 游戏码农:那些打工的日子 这周完成了外卖和自己做饭界面的UI及逻辑,下周开始添加学习内容的模块。这周的内容比较单调,好像也没做什么特别的事情。软件著作权还没有下来,这次真是好慢。 本周电影 寂静之海 고요의 바다 (2021) 本周书籍 《愿你迷路到我身旁》(阅读中) 下周初步计划 继续逻辑编写
This Week In Moeif 28
-
Moeif
- This Week In Moeif 27又是一周结束了,时间过的好快啊。这周在焦虑和烦躁中度过。上海也开启了冬天模式,很冷,还没有取暖设备,买了一个取暖器,也做不到整屋加热,不过还好距离过年也就剩一个多月了,可以回北方了。好像已经两个周没有出去跑步了…
This Week In Moeif 27
又是一周结束了,时间过的好快啊。这周在焦虑和烦躁中度过。上海也开启了冬天模式,很冷,还没有取暖设备,买了一个取暖器,也做不到整屋加热,不过还好距离过年也就剩一个多月了,可以回北方了。好像已经两个周没有出去跑步了…
This Week In Moeif 26
对于下一个游戏产品,有了一点点的方向,还没有深入去考虑。
Rust 光线追踪 13: 散焦模糊
散焦模糊,通俗来讲就是在聚焦区域外的东西,都是模糊的。通常这种效果被称为 Depth Of Field(DOF),也就是景深。最终效果如下
-
Moeif
- Rust 光线追踪 12: 正交相机正交相机所看到的东西大小,与远近无关,只与正交相机的视野(FOV)有关。FOV越大,能看到的世界范围就大,也就是能看到更多的东西,而FOV越小,能看到的世界范围就越小,也就是只能看到较少的东西。 由于FOV越小,看到的范围就越小,从而,相机的上下界,所发出的射线,所能覆盖的范围,就小。也就是相当于所有的射线,都集中在世界中一个小范围,从这个小范围中取得颜色,填充画布(最后渲染的图片),所以看到的东西就大。而如果FOV很大,射线所能覆盖的世界范围就大,用这个大范围来填充画布,自然同一个物体就会看起来小。 可以想象一个两个盒子,一个大的,假设口径是50厘米,扣在一把键盘上,可以扣住整个键盘,相当于摄像机看到了整个键盘。而将一个1厘米口径的盒子,扣在键盘上,可能只能覆盖其中一个键,也就是相机只能看到这一个键范围的东西。但最后都会将扣到的东西填充到画布上,所以,就相当于FOV越小,看到的东西就越大。 添加相机FOV逻辑 在本文中,相机的FOV,我们使用角度来表示,上图中,$\theta$ 就是相机的开口大小,而 $h = \tan(\frac{\theta}{2})$,$2 * h$就是视口的
Rust 光线追踪 12: 正交相机
-
Moeif
- Rust 光线追踪 11: 折射关于折射的实现,可以使用斯涅尔定律。当光波从一种介质传播到另一种介质时,如果两种介质拥有不同的折射率,那么光线就会发生折射现象。例如光线从空气中进入水中,或者从空气中进入玻璃中。 下面涉及到的公式,也可以不用理解推导过程,只要拿来用就行。 斯涅尔定律 斯涅尔定律表明,当光波从介质1传播到介质2时,假若两种介质的折射率不同,则会发生折射现象,其入射光和折射光都处于同一平面,称为“入射平面”,并且与界面法线的夹角满足如下关系: $n_{1}\sin\theta_{1} = n_{2}\sin\theta_{2}$ 其中,$n_{1}$、$n_{3}$ 分别是两种介质的折射率,$\theta_{1}$、$\theta_{2}$ 分别是入射光线、折射光线与界面法线的夹角,分别叫做入射角和折射角。 要求折射光线的方向,就需要解出 $\sin\theta_{2}$ 来。根据上面的公式可知 $\sin\theta_{2} = \frac{n_{1}}{n_{2}} \cdot \sin\theta_{1}$ 我们可以将折射光线的向量,分解为一个垂直向量和一个平行向量。计算出这两个向量,然后相加,即可
Rust 光线追踪 11: 折射
编译 Apple Silicon 版本 Aseprite
编译苹果 M1 芯片版本的 Aseprite,步骤如下
-
Moeif
- Rust 光线追踪 08: 漫反射和伽马校正漫反射的通俗理解是,当一个光线打到某一个物体的某一个点上,这条光线一部分会被吸收,一部分会被随机的反射出去,而反射出去的光线,又可能会打到另一个物体面上的一个点,然后又会被吸收,以及随机的反射出去。现实中的光线可能会无限递归下去,但是我们在程序中实现,不可能无限递归,会设置一个反射次数,达到了那个次数,就停止。
Rust 光线追踪 08: 漫反射和伽马校正
漫反射的通俗理解是,当一个光线打到某一个物体的某一个点上,这条光线一部分会被吸收,一部分会被随机的反射出去,而反射出去的光线,又可能会打到另一个物体面上的一个点,然后又会被吸收,以及随机的反射出去。现实中的光线可能会无限递归下去,但是我们在程序中实现,不可能无限递归,会设置一个反射次数,达到了那个次数,就停止。
-
Moeif
- Rust 光线追踪 07: 抗锯齿和相机抽象将上一节生成的图放大来看,可以看到球体的边缘与存在着很明显的锯齿,这一节我们首先将相机的代码进行抽象,写在一个 Camera 结构体里,然后加入抗锯齿的逻辑。
Rust 光线追踪 07: 抗锯齿和相机抽象
将上一节生成的图放大来看,可以看到球体的边缘与存在着很明显的锯齿,这一节我们首先将相机的代码进行抽象,写在一个 Camera 结构体里,然后加入抗锯齿的逻辑。
-
Moeif
- Rust 光线追踪 06: 代码抽象这一节的内容修改的比较多,我们会把前面的逻辑重新整理一下,将可光线可交互的世界物体,抽象成一个 Hittable Object,然后可以在场景中添加多个物体。也使用了 Rust 的 Trait,Vec 等。最终效果图如下
Rust 光线追踪 06: 代码抽象
这一节的内容修改的比较多,我们会把前面的逻辑重新整理一下,将可光线可交互的世界物体,抽象成一个 Hittable Object,然后可以在场景中添加多个物体。也使用了 Rust 的 Trait,Vec 等。最终效果图如下
-
Moeif
- This Week In Moeif 2211月马上快要结束了,时间过的真快,有一点点的焦虑,但是也还好。这周开始了不断输出博客内容,可能是因为和Rust有关,阅读数量和关注数量增长了很多,后面可以考虑在每一篇文章最后加上游戏的宣传链接。看起来写博客这件事情可以长期写下去,可能前期没什么,后期积累到一定程度,不确定会发生什么。 这周上海的温度还可以,但是今天下雨了,未来两天温度下降的很多。 项目进度 游戏码农:那些打工的日子 这周主要做的事情还是各个模块的数据配置,以及界面元素的考虑,具体的UI还没有仔细考虑。专业技能相关配置、厨艺配置、外卖配置、找工作和面试相关配置、通勤配置、行为配置。 夜莺号的记忆 这个项目这周做了很多事情,工程的搭建,游戏循环的逻辑,具体的关卡的逻辑等。 本周电影 欲望号快车 Crash (1996) 毒液 本周书籍 《KK三部曲》(阅读中) 下周初步计划 继续数据配置工作 夜莺号关卡逻辑 有时间的话考虑游戏码农的UI构建
This Week In Moeif 22
Rust 光线追踪 04: 显示球体的法线
法线的定义是垂直于面的向量。对于一个球体来说,法线的向量,就是球上某个点,减去球心坐标,所得到的向量。
-
Moeif
- Rust 光线追踪 03: 渲染一个圆下面的公式有点多,只是把原教程中的公式详细展开了,一步一步来,很简单,相信我。 给定一个点,判断一个点是否在一个半径为 $R$ 的圆或者圆外、圆内,我们可以使用下面的公式来判断。这里假设圆心在 $(0,0,0)$ 点,半径为 $R$ 如果一个点 $(x, y, z)$ 在圆上,则 $x^2 + y^2 + z^2 = R^2$ 如果一个点 $(x, y, z)$ 在圆内,则 $x^2 + y^2 + z^2 < R^2$ 如果一个点 $(x, y, z)$ 在圆外,则 $x^2 + y^2 + z^2 > R^2$ 假设圆心在点 $C = (C_x, C_y, C_z)$,半径为 r,则根据上面的第一个公式,可以得到 $(x - C_x)^2 + (y - C_y)^2 + (z - C_z)^2 = r^2$ 我们可以将点 $(x, y, z)$ 使用之前的 Vec3 向量表示,例如设 $点P = (x, y, z)$,则可以将上面的公式,换一种表达形式,也就是
Rust 光线追踪 03: 渲染一个圆
Rust 光线追踪 02: 使用光线生成渐变图
这个小节的目标是添加光线相光内容,根据光线打在屏幕上不同的位置,生成一张蓝白渐变图。
-
Moeif
- Rust 光线追踪 01: 输出PPM这个系列的博客是使用 Rust 来实现 《Ray Tracing in One Weekend》相关的内容,我们把整本书拆开,来分篇实现,这们可以进一步降低难度。PPM是一个简单的图片格式,它将RGB的颜色使用 ASCII 的形式记录在文件中。
Rust 光线追踪 01: 输出PPM
这个系列的博客是使用 Rust 来实现 《Ray Tracing in One Weekend》相关的内容,我们把整本书拆开,来分篇实现,这们可以进一步降低难度。PPM是一个简单的图片格式,它将RGB的颜色使用 ASCII 的形式记录在文件中。
-
Moeif
- This Week In Moeif 21这周的周记,拖到了周一才写。昨天周日,一天没干活,晚上的时候把博客从Hexo迁移到了Hugo,因为Hugo有更像样的主题。这个周小Q回家了,我一个人在上海,还是按原来的节奏开发,还在继续推进游戏码农项目,但是推的有点吃力,感觉好多东西没有想明白。
This Week In Moeif 21
这周的周记,拖到了周一才写。昨天周日,一天没干活,晚上的时候把博客从Hexo迁移到了Hugo,因为Hugo有更像样的主题。这个周小Q回家了,我一个人在上海,还是按原来的节奏开发,还在继续推进游戏码农项目,但是推的有点吃力,感觉好多东西没有想明白。
-
Moeif
- This Week In Moeif 20今天上海的天气开始大幅度降温了,现在外面开始下雨了,刚刚看完了一部电影《幸福终点站》,一开始想从里面寻找一下关于时间线的灵感,但是看着看着,就沉浸到剧情里了。
This Week In Moeif 20
今天上海的天气开始大幅度降温了,现在外面开始下雨了,刚刚看完了一部电影《幸福终点站》,一开始想从里面寻找一下关于时间线的灵感,但是看着看着,就沉浸到剧情里了。
-
Moeif
- This Week In Moeif 19这周买了滑板,现在每天下午 4:00 左右会出去跑步或玩会滑板。下午出去运动,没有以前晚上出去时那种任务的负重感,更像是放松一下。现在的状态还好,时间上算是比较自由,唯一的问题是还没有什么收入。之前一直关注的一个虚拟货币 GEEKCASH 这个月上线了,但是没有奇迹出现,这个慢慢等吧,只要不归0,就还有希望。
This Week In Moeif 19
这周买了滑板,现在每天下午 4:00 左右会出去跑步或玩会滑板。下午出去运动,没有以前晚上出去时那种任务的负重感,更像是放松一下。现在的状态还好,时间上算是比较自由,唯一的问题是还没有什么收入。之前一直关注的一个虚拟货币 GEEKCASH 这个月上线了,但是没有奇迹出现,这个慢慢等吧,只要不归0,就还有希望。