Questions tagged «rendering»

通过计算机程序从模型生成图像或一系列图像的过程。

2
为什么有些游戏使用某种抖动模式而不是传统的Alpha透明度?
最近,我看到一些3D游戏(例如:)GTA IV使用某种有序抖动来模拟透明度/ alpha。 多边形不像往常一样透明,而是呈现抖动纹理,该纹理从左到右逐渐切换以模拟透明度: 效果并非令人不愉快,但乍看之下却令人惊讶(相对于传统的alpha混合) 除了产生的视觉美学效果外,有些游戏是否有其他理由(更好的性能,节省的带宽或其他我没有想到的原因)? 我已经在网上搜索过,但找不到有关此技术的任何信息。

1
等轴测渲染和拾取?
我一直在寻找在菱形世界中绘制(世界->屏幕)和鼠标拾取(世界->屏幕)等距图块的公式。我尝试过的似乎总是不对劲。这样做的通常/正确方法是什么?

6
将游戏数据/逻辑与渲染分离
我正在使用C ++和OpenGL 2.1编写游戏。我在想如何将数据/逻辑与渲染分开。目前,我使用基类“ Renderable”,该基类提供了一种纯虚拟方法来实现绘图。但是每个对象都有如此专门的代码,只有对象知道如何正确设置着色器制服和组织顶点数组缓冲区数据。最后,我在代码中多次进行gl *函数调用。有没有通用的绘制对象的方法?
21 c++  opengl  rendering  logic  data 

2
在AAA游戏中越界
在许多常见的AAA游戏中(尤其是Source引擎游戏),当玩家到达“未归类”的区域时,例如越界或在地图下打c;屏幕上出现奇怪的效果(缓冲区撕裂?)。 可以将其描述为类似于Windows XP的窗口轨迹,Windows XP可能会在系统挂起时留下被拖动的窗口。 我只能假定开发人员在刷新屏幕时不会清除颜色缓冲区吗? 那是对的吗?如果是这样,为什么?
21 rendering 

3
我通常应该在游戏的一帧中使用几个活动着色器?5个或更多,例如100个?
在现代游戏中,通常同​​时在一个场景中同时激活多少个着色器?我知道正在使用多个着色器,游戏在每一帧中在它们之间切换,通常通过着色器绘制对象: 使用着色器一绘制所有对象 从着色器一更改为着色器二 使用着色器2绘制所有对象 不过,我知道这并不是那么简单,尤其是对于整个场景的光晕效果,渲染到纹理等效果,但是我想我们可以假设它在大多数时间都可以正常工作,对吗?“按着色器分组”方法很好,因为切换着色器是一项昂贵的操作。 一方面,您不能有太多的着色器,因为您想快速渲染场景。另一方面,您需要用于皮肤,金属,水等的许多不同的着色器(或带有分支的超级着色器-非常相似)。 理论上的,现代的,第三人称3D PC侦探游戏(如果需要的话,是DirectX 11)将使用多少个(以及哪个)不同的着色器?在某个“帧X”处,将是5个,20个或更多(例如100个活动着色器),仅计算活动着色器吗?我知道这不是一个数字,但我想知道在考虑PC游戏时,什么规模和因素很重要。 在我的示例游戏中,我将每帧使用大约9-11(将其视为不同的小型着色器或一个超级着色器-现在不重要): 皮肤着色器 眼影器(不是太多吗?但它们是不同的) 金属着色器 地面着色器 雪/雨着色器(如果需要) 着色器(如果场景中存在水) 发光着色器(仅当涉及某些特殊效果时) 发光器着色器(路灯等) 标准着色器(对于所有其他着色器,仅是标准着色) 具有法线贴图的标准着色器 2D着色器(用于GUI等) 是“很多”还是“不是很多”?我是否忘记了一些我需要的重要着色器?

2
创建老式(假3D)赛车游戏的最佳技术?
为使用伪3D风景的老式学校赛车游戏开发渲染系统的最佳方法是什么?例如Outrun或Lotus Esprit Turbo Challenge?那里有无尽的滚动路,风景图也像广告牌一样放置。我想你明白了。 这些是以类似于Mode7的方式开发的,还是背后有不同的技术?该技术是否具有我可以在网上搜索的特定名称?我需要在Flash中开发类似的东西。
20 3d  rendering  racing 

6
使用什么坐标系来处理2D UI?
在长宽比问题之后,我很想听听其他人在2D UI系统(最有可能是他们自己开发的解决方案)上工作时正在使用什么。具体来说,如何处理坐标系。我认为有三种选择: 硬编码的坐标(例如:0-> 720,0-> 576) 归一化的坐标(0.0-> 1.0,0.0-> 1.0),在渲染之前映射到真实坐标 虚拟坐标(例如:0-> 1600、0-> 1000),在渲染之前已映射到真实坐标 硬编码显然仅在以下情况下有用:在固定平台上并且事先知道屏幕空间坐标是什么,或者准备为每组可能的屏幕尺寸编写屏幕布局。 归一化的坐标很好,但是当屏幕的宽高比不固定时(例如0.75映射到宽屏而不是4:3时,则0.75映射到不同的物理坐标)会产生歧义。同样,对于作者来说,将UI元素声明为(0.2 x 0.2)真的违反直觉,只是发现渲染时它实际上不是正方形。 虚拟坐标是明确的,但在重新映射阶段遇到与标准化坐标相同的问题:很小的十进制差异会导致偏离一对一的错误,这意味着应该平铺的UI元素之间现在有接缝。 同样,当您有固定分辨率的屏幕时,归一化坐标和虚拟坐标都意味着很难保证UI图像中艺术家的精细像素与屏幕上像素之间的1:1映射,这意味着您存在以下风险:令人讨厌的缩放伪影(假设您在屏幕上渲染为带纹理的四边形)。 我们采用了虚拟坐标方法,特别是为了避免对宽高比产生歧义。因此,当渲染到16:10屏幕时,UI空间为(0,0)->(1600,1000),但是当渲染为4:3时,可用的UI空间实际上为(133,0)->(1467 ,0)。 有我不知道的更好的解决方案吗?有什么好的策略可以最小化这三种方法的问题?
20 rendering  gui 

4
如何防止游戏中的“水下视线”
在许多玩家可以进入水下的游戏中,当您看屏幕的上半部分在空中,屏幕的下半部分在水下时,几乎就像不存在水一样,播放器正在...随着水声缓慢飞行? 有解决这个问题的逻辑方法吗?算法?由于许多游戏仍然具有此功能,因此似乎还没有解决方案。我不想犯同样的错误。

3
如何对渲染输出进行单元测试?
我最近一直在接受测试驱动开发(TDD),它对我的​​开发输出和代码库的弹性产生了出色的影响。我想将此方法扩展到我在OpenGL中所做的一些渲染工作,但是我一直找不到任何好的方法。 我将从一个具体的例子开始,以便我们知道我想测试什么类型的东西;可以说,我想创建一个绕某个轴旋转的单位立方体,并且要确保对于一定数量的帧,每个帧都可以正确渲染。 我如何为此创建一个自动化测试用例?最好,我什至能够编写一个测试用例,然后再编写任何代码以呈现多维数据集(按照常规的TDD惯例。)除其他外,我想确保多维数据集的大小,位置和方向是在每个渲染帧中正确。我什至可能要确保着色器中的光照方程在每帧中都是正确的。 我遇到的唯一对此有用的远程方法是将渲染的输出与参考输出进行比较,这通常会妨碍TDD的实践,而且非常麻烦。 我可以继续执行其他所需的要求,但恐怕我已经列出的要求已无法实现。

6
无缝的tilemap渲染(无边界的相邻图像)
我有一个2D游戏引擎,可通过从tileset图像绘制图块来绘制图块。由于默认情况下OpenGL只能包装整个纹理(GL_REPEAT),而不仅仅是部分纹理,因此每个图块都被拆分为单独的纹理。然后,将同一图块的区域渲染为彼此相邻。这是按预期工作时的样子: 但是,一旦引入分数缩放,接缝就会出现: 为什么会这样?我以为这是由于线性过滤混合了四边形的边界,但仍然发生在点过滤中。到目前为止,我发现的唯一解决方案是确保所有定位和缩放仅在整数值处进行,并使用点过滤。这可能会降低游戏的视觉质量(尤其是子像素定位不再起作用,因此运动不太流畅)。 我尝试过/考虑过的事情: 抗锯齿可以减少但不能完全消除接缝 关闭mipmapping,无效 分别渲染每个图块并将其边缘拉伸1px-但这是一种非优化,因为它不再能够一次性渲染图块区域,并且会沿着透明区域的边缘创建其他伪像 在源图像周围添加1px边框并重复最后一个像素-但随后它们不再是2的幂,从而导致与不支持NPOT的系统的兼容性问题 编写自定义着色器以处理平铺图像-但是您将有何不同呢?GL_REPEAT应从边框的图像另一侧抓住像素,而不要选择透明度。 几何形状完全相邻,没有浮点舍入错误。 如果片段着色器经过硬编码以返回相同的颜色,则接缝消失。 如果将纹理设置为GL_CLAMP而不是GL_REPEAT,则接缝消失(尽管渲染错误)。 如果纹理设置为GL_MIRRORED_REPEAT,则接缝消失(尽管渲染还是错误的)。 如果我将背景设为红色,则接缝仍为白色。这表明它是从某个地方(而不是透明度)采样不透明的白色。 因此,接缝仅在GL_REPEAT设置时出现。仅出于某种原因,仅在此模式下,几何图形的边缘会出现渗色/泄漏/透明性。这个怎么可能?整个纹理是不透明的。

4
如何获得平滑的2D照明效果?
我正在XNA中制作基于2D瓦片的游戏。 目前,我的闪电看起来像这样。 我怎样才能使它看起来像这样? 并非每个块都有自己的色彩,而是具有平滑的覆盖层。 我假设使用某种着色器,并将周围瓷砖的照明值传递给着色器,但是我是着色器的初学者,因此我不确定。 我当前的照明计算光,然后将其传递到a SpriteBatch并使用tint参数进行绘制。每个图块都有一个Color在绘制之前在我的照明算法中计算出的,用于着色。 这是一个有关我当前如何计算光照的示例(我也从左,右和下进行此操作,但是我真的厌倦了逐帧进行此操作...) 因此,到目前为止,获取和吸引人们的光是没有问题的! 我看过无数关于战争迷雾的教程,并使用渐变圆形叠加创建平滑的闪电,但是我已经有了一个不错的方法为每个瓦片分配一个闪电值,只需在它们之间进行平滑即可。 所以要复习 计算照明(完成) 绘制图块(完成,我知道我需要为着色器进行修改) 阴影图块(如何传递值和应用“渐变”)

5
在OpenGL中渲染文本的首选方法
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 2年前关闭。 我将再次为大学项目准备计算机图形学。在以前的项目中,我使用了一个名为FTGL的库,它感觉很沉重(我尝试了很多渲染技术,但是文本渲染的伸缩性不是很好),对此我并不满意。 我的问题是,是否有一个良好且高效的库?如果不是,那么实现快速但美观的文本的方式将是什么?一些预期用途是: 浮动对象/字符标签 对话对话 选单 平视显示器 编辑:最好也可以加载字体

3
CPU-GPU内存数据流
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我是一名新手图形程序员,最近我一直在想-模型数据(网格和材质)如何从应用程序(CPU内存)流到图形卡(GPU内存?)?假设我有一个静态模型(例如建筑物),该模型一次加载和设置一次,并且在整个应用程序生命周期中都没有改变。 它的数据是否仅发送到GPU内存一次并永久存在? 当实际渲染模型的每个帧时,GPU处理器是否每次都必须从GPU内存中获取其数据?我的意思是-如果我有2个模型分别渲染多次,那么,如果我先多次渲染第一个模型,然后又多次渲染第二个模型,或者如果我仅一次渲染第一个模型,第二个就渲染一次,那将很重要一直像那样交织在一起?从这个意义上讲,我可以将此问题称为“内部GPU数据流”。 显然显卡的内存有限-当无法容纳渲染1帧所需的所有模型数据时,我猜想它一直在每帧从CPU RAM提取(部分)数据,对吗? 我知道互联网上有很多关于这方面的书籍和内容,但是也许您有一些关于如何管理此数据流的快速通用指南(何时发送什么和多少,何时以及如何呈现)? 编辑: 我忘了一个区别:将数据发送到GPU,并且将缓冲区设置/绑定为当前。后者会导致任何数据流吗? Edit2: 阅读Raxvan的文章后,我想提出一些动作: 通过初始化创建缓冲区(正如他所说,我可以将数据存储在CPU ram或GPU之一中) 缓冲数据更新(当数据保存在CPU内存中时,我认为这很简单;当数据保存在GPU内存中时,需要从GPU提取到CPU内存(然后取回)) 将缓冲区绑定为活动状态(这是一种告诉API我希望此缓冲区在下一次绘制调用中呈现的方式,并且它本身不会执行任何操作吗?) API绘图调用(在这里我想听听您在那里实际发生的事情)

5
游戏逻辑线程与渲染线程之间的同步
一个游戏逻辑和渲染如何分开?我知道这里似乎已经有问题要问,但是答案对我来说并不令人满意。 据我所知,将它们分成不同的线程的目的是使游戏逻辑可以立即开始为下一个滴答运行,而不必等待下一个vsync,在此,渲染最终从swapbuffer调用返回而一直处于阻塞状态。 但是,具体来说,使用什么数据结构来防止游戏逻辑线程和渲染线程之间的竞争状况。大概渲染线程需要访问各种变量来确定要绘制的内容,但是游戏逻辑可以更新这些相同的变量。 是否有实际的标准技术来处理此问题。就像在每次执行游戏逻辑后复制渲染线程所需的数据一样。无论采用什么解决方案,同步的开销还是比仅运行单线程的所有开销都要少?

6
2D游戏中的对象应该渲染吗?
我正在制作不是基于图块的2D街头霸王般的游戏。通常人们建议将实体提供给渲染它们的渲染器,而不是渲染它们自己,但是看起来反函数更好, 为什么一个比另一个更好? 谢谢
16 c++  rendering 

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.