景深效果
景深效果
前言
本篇文章以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开始计算)的像素点是什么颜色。我先计算出此坐标在原图中的比例,显 ...
我对直播弹幕游戏的理解
我对直播弹幕游戏的理解
前言
我做直播弹幕类游戏也有一段时间了。这是一个刚刚兴起的游戏类型,我刚开始制作的时候还一头雾水,但现在我也有了一些自己的想法。我正好写一篇文章来阐述自己对于其的理解。下面文章中的大部分数据并没有实际考究,很多也是我从业以来的听闻,如果有错欢迎指正。本篇文章封面由豆包生成。
特别用标题来提醒,本篇文章充满作者个人想法请仔细甄别
对弹幕游戏的简单介绍
什么是直播弹幕游戏?
直播弹幕游戏,是一种以主播直播,观众通过向主播发送弹幕和送礼物的方式来进行游玩的游戏。直播弹幕游戏可以分为两大类:一类是玩家与主播之间的互动,另一类是玩家与玩家之间的互动,在直播平台中又被称为“弹幕互动类玩法”。
玩家与主播之间互动的弹幕游戏,通常是获取主播直播间弹幕和礼物信息转换为对应游戏内的指令。而这游戏本身可以是市场上已有的游戏。比如说,《超级马里奥》、《我的世界》、《黑神话:悟空》等。以《超级马里奥》为例,玩家可以发送弹幕或是送出礼物来对主播的操作进行干扰,从而让主播出洋相或是让其过不了关卡。本质上这属于是通过工具获取直播间信 ...
四元数学习记录
四元数学习记录
前言
如果你去看网络上的游戏开发教程,他们大都告诉你四元数是用来防止欧拉角的万向锁。但是他们都不会去深究或者说讲明。因为四元数确实很困难,但是在开发的过程中,我们确实需要一些关于四元数的知识来为我们的开发做理论基础。这篇文章,我只说明我自己所了解的部分,也算是我对于学习四元数的阶段总结。
特别说明,本文全部的计算都按照右手坐标系法则,所有的旋转都是逆时针旋转。
正文
四元数(Quaternion)是一种扩展复数的数学概念,它可以用来表三维空间中的旋转。它由威廉·罗恩·哈密顿于1843年提出,形式为:
\[q=a+bi+cj+dk\]
其中,\(a,b,c,d\)是实数。\(i,j,k\)是虚数单位,满足以下乘法规则:
\[i^2=j^2=k^2=ijk=-1\]
四元数的实部\(a\)、虚部为\(bi,cj,dk\),所以也有下面这样的表示:
\[q = (a,\vec{v})\]
其中,\(\vec{v}=(b,c,d)\)是三维向量(在我看到的资料中也有\(q =
(\vec{v},a)\)的表 ...