游戏开发

专业和独立游戏开发人员的问答

1
为什么阴影贴图是标准的?
尽管我是一名程序员,但我几乎没有接触过游戏开发。我这个问题已有一段时间了,现在我正在研究游戏开发,所以我认为这是个好时机。 为什么阴影贴图似乎是游戏用来制作阴影的唯一方式?直言不讳,它看起来很糟糕。即使现代游戏的阴影设置已达到最大值,也会出现锯齿状的块状Y阴影,这非常分散注意力。 11年前制作的《毁灭战士3》使用的阴影体积看上去比我见过的任何阴影贴图实现都要好得多,其中包括在发布此问题的同一周发布的AAA游戏。《毁灭战士3》的第三方修改器甚至使阴影的边缘变得柔和,使它们在视觉上更加令人印象深刻。 实现诸如阴影卷之类的东西是否存在某种技术问题或限制?阴影贴图是否易于实施,以至于开发人员甚至不需要考虑其他任何东西? 我能够找到的关于该主题的唯一信息是,构成体积的多边形可能很大,从而要求更高。影子卷可能对系统有更高的要求,但是如果是这样的话,它们在2004年如何摆脱使用它们的困扰? 这个问题并非仅针对阴影映射与阴影体积,它们只是我在完整产品中使用过的仅有的两个,而我只是无法在其他任何技术上找到很多信息。

7
基于经验点动态计算等级的算法?[关闭]
我在游戏开发中一直遇到的难题之一就是确定如何实现归因于获得关卡的经验值。在我玩过的许多游戏中似乎都没有提高等级的模式,因此我假设它们具有静态的字典表,其中包含经验值与等级。例如 Experience Level 0 1 100 2 175 3 280 4 800 5 ...没有韵律或理由说明280点等于第4级。 我不确定如何确定这些级别,但是肯定不是动态的。我还考虑了指数级的可能性,因为不必保留单独的查找表,例如 Experience Level 0 1 100 2 200 3 400 4 800 5 1600 6 3200 7 6400 8 ...但是这似乎会很快失去控制,随着游戏的发展,游戏中的敌人将不得不提供大量的经验来提升水平-这将很难控制。调平将成为不可能的任务。 有没有人有他们使用来决定如何任何指针,或方法级别基于经验的字符?我想公平地练级,并且想保持领先地位,不要担心不断增加新的经验/关卡查询。

4
为什么现代游戏对镜子使用“渲染到纹理”方法?
当查看诸如Mario64或DukeNukem3D之类的旧游戏时,游戏中的所有镜子本质上都是墙壁上的孔,并且在它们后面放置了镜子前面的几何图形。在DukeNukem3D的情况下,甚至可以激活无剪辑并走进那个镜像的房间。 相反,现代游戏对镜子使用“渲染到纹理”方法。这导致镜子在靠近镜子时变得明显像素化。我注意到这种方法的第一批游戏之一是Luigi's Mansion,但它似乎已在几乎所有现代游戏中使用。 如今,硬件或引擎的哪些变化使第二种方法如此占主导地位,它有什么好处?就纯视觉效果而言,第一种方法似乎更好,因为它没有像素问题。
40 3d  rendering 

3
如何在程序生成的地图中确定海湾和海峡?
我有一个使用Voronoi单元程序生成的地图,其中包含定义的海平面和可信的高度图。 到目前为止,我已经成功地标注了某些地理特征:土地,海洋,湖泊,河流,河口,汇合处,山脉和生物群落。生物群落包括苔原,北方森林,草原和温带森林。那里还有其他一些生物群落,但就我的目的而言,它们现在并不重要。 我想标记下海湾和海峡,但我对如何正确执行此操作感到困惑。海湾是一条凹陷的沿海水域,直接与海洋相连。 海峡是自然形成的,狭窄的水路,连接了海洋的两部分。基本上,两片土地几乎相接,两岸都是海洋。也称为“渠道”。 为了确定功能,我可以按以下类型遍历任何功能: for each (var feature:Object in geography.getFeaturesByType(Geography.LAND)) // loop through lands for each (var cell:Cell in feature.cells) // loop through cells for each (var neighbor:Cell in cell.neighbors) // loop through a cell's neighbors trace(neighbor.hasFeatureType(Geography.LAND));


9
我应该告诉玩家他们没有机会完成关卡吗?
假设玩家已经达到了完全没有机会完成当前关卡的地步,必须重新启动并重试。 我是否应该通知他们继续进行游戏并不会重新获得任何好处?如果是这样,我该怎么告诉他们呢?一个类似“没有机会,重新开始”之类的消息框会好吗?还是我应该让他们继续玩耍并发现自己? 请注意,这些级别并不是很大,每个级别通常大约需要一分钟才能完成。因此,例如,如果用户错过了大约30秒后升级的机会,我是否应该停止游戏并使它们重新启动?

13
离线玩家与在线玩家互动的持久元素
很长一段时间以来,我一直在思考一个非常抽象的游戏设计问题,但目前还没有一个好的解决方案。简而言之:一个玩家如何在一个持久的多玩家世界中拥有基地,单位和基础设施,这些基础,单位和基础设施可以与其他玩家进行交互或攻击,而拥有的玩家可能一直处于离线状态并且无法提供自己的输入? 作为一个具体的例子: 假设您有一个非常大的2D世界,您可以在其中建立基地并拥有护卫基地的单位。其他参与者可以访问该基地或将其用作自动交易台,在其中您代表卖方。但是基地也应该能够被敌对的玩家竞争-无论是掠夺还是彻底破坏。 如何解决攻击中基地所有者下线的问题?还是玩家在人们通常不在线的时候(睡觉,工作,上学)发动攻击?还是为了利用潜在的保护机制,玩家可能主动上线或下线?我如何避免在一定时间范围内强迫玩家在一定时间上网以维持这种保护? 想法(虽然并不令人满意): 无法以常规方式攻击基地。人们可以延迟发送“部队”,希望足够长的时间以确保其他玩家可以提供他的可选输入。这些战斗的结果是自动计算的结果。此类筛查可能持续数天。 基地只能在其所有者在线时-或离线时间过长时受到攻击。但是,由于仍然应该进行交易,因此,对于那些不能被攻击的原因,仍然缺乏足够的解释。 当玩家打算进攻时,两位玩家都必须以某种方式进行约会才能在线并开始战斗。出于显而易见的原因,这是一个不好的解决方案。 当其所有者离线或将其设置为非活动状态时,基地处于非活动状态且无敌,并且交易/其他活动仅根据先前的在线/活动时间暂时继续。这就带来了可见的基础和正在进行的基础架构的问题,因为它们本质上需要隐藏或隐藏,并且其他参与者可能会因为无法访问而受到困扰。 为了使用持久性元素解决此在线-离线问题,存在或可以采用什么其他方法?我也愿意接受数学或系统的解决方案。请注意,其他玩家也应该能够为双方提供帮助,并且他们的在线/离线时间也需要一些考虑。

6
我们如何解决2D游戏中大视频存储需求?
我们如何解决2D游戏中大视频存储需求? 我们正在开发使用Allegro C / C ++的2D游戏(Factorio),并且随着游戏内容的增加,我们面临视频存储需求增加的问题。 目前,我们收集了有关将首先使用的图像的所有信息,尽可能地裁剪所有这些图像,并尽可能紧密地将它们组织成大图册。这些地图集存储在视频内存中,视频内存的大小取决于系统限制。目前,它通常是2张图像,最高可达8192x8192,因此它们需要256Mb至512Mb的视频内存。 这个系统对我们来说非常不错,因为通过一些自定义优化以及拆分渲染和更新线程,我们能够以60 fps的速度在屏幕上绘制成千上万的图像。我们在屏幕上有许多对象,因此允许大缩放是一项关键要求。由于我们要添加更多内容,因此视频内存要求会出现一些问题,因此该系统无法容纳。 我们想要尝试的一件事是拥有一张包含最常见图像的地图集,而第二幅则作为缓存。图像将根据需要从内存位图移到那里。这种方法有两个问题: 从内存位图到视频位图的绘制速度非常缓慢。 在Allegro中,除了主线程之外,无法使用视频位图,因此实际上是不可用的。 这是我们还有的一些其他要求: 游戏必须是确定性的,因此性能问题/加载时间永远不能改变游戏状态。 游戏是实时的,并且很快也会成为多人游戏。我们需要不惜一切代价避免甚至最小的结结巴。 游戏的大部分是一个连续的开放世界。 该测试包括批量绘制1万个精灵,大小从1x1到300x300,每种配置几次。我在Nvidia Geforce GTX 760上进行了测试。 当源位图在各个位图之间没有变化时(图集变体),视频位图到视频位图的绘制每个子图花费0.1us。大小没关系 视频位图到视频位图图形,而源位图在图形之间切换(非图集变体),每个子图形花费0.56us;大小也没关系。 内存位图到视频位图的绘制确实令人怀疑。从1x1到200x200的大小每个位图要花0.3us,所以速度并不是那么慢。对于较大的尺寸,时间开始急剧增加,201x201的时间为9us,291x291的时间为3116us。 使用Atlas可将性能提高5倍以上。如果我有10ms的渲染时间,则使用Atlas将每帧限制为100000个精灵,如果没有它,则限制为20000个精灵。这将是有问题的。 我还试图找到一种方法来测试阴影的位图压缩和1bpp位图格式,但是我无法找到在Allegro中执行此操作的方法。

1
GLSL:如何将浮点数转换为int?
在GLSL片段着色器中,我试图将A投射float为int。编译器会引发错误: ERROR: 0:60: '=' : cannot convert from 'mediump float' to 'highp int' 我试图提高的精度int: mediump float indexf = floor(2.0 * mixer); highp int index = indexf; 但无济于事。 如何int正确投放?
40 opengl  glsl  opengl-es 

5
解决Android暂停时丢失OpenGL上下文的方法?
Android文档说: 在某些情况下,EGL渲染上下文将丢失。通常在设备进入睡眠状态后唤醒时会发生这种情况。当EGL上下文丢失时,与该上下文关联的所有OpenGL资源(例如纹理)将被自动删除。为了保持正确的渲染,渲染器必须重新创建仍然需要的任何丢失的资源。onSurfaceCreated(GL10,EGLConfig)方法是执行此操作的便捷位置。 但是在暂停后重新进入应用程序时,必须在OpenGL上下文中重新加载所有纹理既痛苦又伤及用户的游戏体验。我知道“愤怒的小鸟”会以某种方式避免这种情况,我正在寻找有关如何实现相同目标的建议? 我正在使用Android NDK r5(CrystaX版本。)确实找到了解决此问题的方法,但是我试图避免构建整个自定义SDK版本。

9
是否可以计算或数学证明游戏是否平衡/公平?
这个问题不是针对电子游戏而是针对一般游戏。昨天我去了一个棋盘游戏交易会,问自己是否有一种计算游戏公平性的方法。当然,其中一些需要很大的运气,但是有可能计算出某些角色是否过强。特别是在角色扮演游戏和交易纸牌游戏中。例如,考虑到可用卡的数量惊人,“魔术:聚会”的创建者如何确保没有“一张牌能击败所有人”?

7
学习创造更好的艺术(2D游戏)
在我的其中一款游戏“大放异彩”之前,或者我被金锭淹没之前,我将不得不自己处理大部分或全部游戏美术。我的问题的症结在于:我如何学习足够的艺术,以超越“程序员艺术”,并成为我真正引以为傲的东西? 我的问题的重点是2D,而不是3D。 我已经掌握了: Photoshop / GIMP(图像处理和创建) Flash(动画和绘画简单艺术) 简单绘图(手工绘制) 数字化手绘艺术 平面设计 但是,游戏需要复杂多样的艺术作品。从背景到图标,精灵,动画和复杂效果的任何事物。 在艺术上,我如何弥合差距?我已经有经验和信心可以做到。我只需要知道我的谦虚努力的方向。我知道这会有所收获,特别是从长期来看。但是我不确定如何到达那里。 我已经做过使用现有艺术品的事情,因此请不要在您的问题中提及。
40 2d  art 

5
我应该使用大小不为2的幂的纹理吗?
在OpenGL和DirectX的早期,纹理大小要求是2的幂。这意味着浮点值的内插可以非常快地使用移位等方法完成。 从OpenGL 2.0开始(以及之前的扩展,通过扩展),已支持非二次幂纹理尺寸。 二次幂纹理在现代集成和离散GPU上是否具有性能优势?非二次方纹理有什么优势? 是否有大量台式机拥有支持非二次幂纹理的卡?

4
在Go中开发游戏?[关闭]
Google的新Go语言仍处于起步阶段,尚未在现实​​世界中得到广泛使用或支持。即使这样,这似乎是一个有希望的实验,我想知道它是否可以在游戏开发方面有未来。我在其他地方找不到很多有关Go的游戏特定讨论,并且认为CW讨论可能是适当的。 一些想法: 根据golang.org的说法,Go程序“几乎可以与类似的C或C ++代码一样快地运行” –足够快吗? Go的垃圾回收器非常适合游戏吗? 要在并发goroutine领域创建游戏,需要多少心理工具? Go通常被称为“系统”级语言,以服务器软件为例。听到这一点,很难不想到多人游戏服务器。 你的意见?
40 go 

3
为什么需要针对相同架构的新处理器优化引擎?
新一代处理器发布后,大多数网站报告说,游戏引擎和程序需要针对新硬件进行优化。我不太明白为什么。处理器通常具有定义其使用哪种指令集的体系结构。如今我们都使用的是amd_x86_64。如果所有处理器都使用相同的体系结构,为什么需要更新任何程序或编译器?当然,在新处理器的管道中有一些功能可以优化机器代码的执行,但是如果不需要该体系结构,为什么还要更改机器代码本身呢?
39 hardware  cpu 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.