Questions tagged «rendering»

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


6
现代游戏中的LOD [关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我目前正在研究有关LOD和网格简化的硕士论文,并且我一直在阅读有关该主题的许多学术论文和文章。但是,我找不到有关在现代游戏中如何使用LOD的足够信息。我知道许多游戏在地形上使用某种动态LOD,但其他地方又如何呢? 例如,3D图形的详细程度指出,由于连续LOD的性能开销,离散LOD(艺术家需要事先准备好几个模型)被广泛使用。那本书是在2002年出版的,我想知道现在情况是否有所不同。已经有一些使用几何着色器执行动态LOD的研究(例如,本文在ShaderX6中实现),是否可以在现代游戏中使用? 总而言之,我的问题是关于现代视频游戏中LOD的状态,使用什么算法以及为什么使用?特别是,是否使用了依赖于视图的连续简化方法,还是运行时开销使使用具有适当混合和冒充者的离散模型成为更具吸引力的解决方案?如果使用离散模型,是否使用一种算法(例如,顶点聚类)离线生成模型,艺术家是手动创建模型,还是使用两种方法的组合?

2
如何在XNA 4.0中正确设置Alpha透明度?
好的,我已经阅读了几篇文章,教程以及与此有关的问题。大多数人都指向不能解决我的问题的相同技术。我需要能够创建半透明的精灵(确实是texture2D)并使其覆盖另一个精灵。 我可以通过找到的代码示例来实现这一点,但是我对结果不满意,而且我知道有办法做到这一点。在移动编程(BREW)中,我们采用老式方法,并在渲染之前实际检查了每个像素的透明度。 在这种情况下,似乎将其下方的精灵与其上方的alpha混合在一起。这可能是我如何渲染纹理的产物,但是,正如我之前说的,所有示例都指向这一技术。在继续之前,我将继续粘贴示例代码。 public void Draw(SpriteBatch batch, Camera camera, float alpha) { int tileMapWidth = Width; int tileMapHeight = Height; batch.Begin(SpriteSortMode.Texture, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, camera.TransformMatrix); for (int x = 0; x < tileMapWidth; x++) { for (int y = 0; y < tileMapHeight; y++) { int tileIndex = …
14 xna  2d  c#  rendering  transparency 

5
有没有一种方法可以防止用户调整其伽玛校正以“欺骗”出“暗”区域?
在我所遇到的几乎所有游戏中,都有一个旨在改变用户与环境互动方式的黑暗环境,总是有些玩家调高其显示器的伽玛校正值,以抵消所需的效果。 有没有一种方法可以防止用户调整其伽玛校正以“欺骗”自己的方法呢?(那黑暗) 我想像一下,如果您可以可靠地检索用户显示器的当前伽马校正,则可以使用它或多或少地防止它会带来的好处,而不会给普通用户带来任何不便。

4
为3D标题中的关卡内容设置内容预算(例如多边形数)的可实现方法是什么?
在回答有关swquinn的问题时,答案提出了一个更相关的问题,我想听听这个问题的答案。我将发布我们自己的策略(保证我不会接受它作为答案),但我想听听其他人的意见。 具体来说:您如何为内容团队设置合理的预算。通常,开发中首先要问的一个问题是:我们的多边形预算是多少?当然,如今,很少有顶点/多边形数量是限制因素,而是着色器复杂性,填充率,照明复杂性都发挥了作用。 内容团队想要的是工作的一些硬性数字/限制,以便他们有合理的期望,即一旦内容真正进入引擎,它们的内容就不会太繁琐。鉴于“取决于”不是一个特别有用的答案,我想听听一种策略,该策略使我能够为他们提供可行的限制,而不会导致a)误导或b)错误。

2
DirectX11,如何管理和更新多个着色器常量缓冲区?
好吧,我很难理解常量缓冲区如何绑定到流水线阶段并进行更新。我知道DirectX11每阶段最多可以有15个着色器常量缓冲区,每个缓冲区最多可以容纳4096个常量。但是,我不明白用于与常量缓冲区交互的ID3D11Buffer COM是否只是用于填充这些缓冲区插槽的机制(或句柄),还是该对象是否实际引用了来回推送的缓冲区数据的特定实例?在GPU和CPU之间。 我认为我对该主题的困惑是导致我使用两个不同的常量缓冲区的问题的原因。 这是一些示例着色器代码。 cbuffer PerFrame : register(b0) { float4x4 view; }; cbuffer PerObject : register(b1) { float4x4 scale; float4x4 rotation; float4x4 translation; }; 我的代码的组织方式,相机将处理更新相关的每帧数据,而GameObjects将更新其自己的每对象数据。这两个类都有自己的ID3D11Buffer来执行此操作(使用集线器体系结构,因此一个GameObject类将处理世界上所有实例GameObject的呈现)。 问题是我一次只能更新一个,具体取决于插槽,并且我假设一个缓冲区被填充,而另一个缓冲区被填充为零的更新顺序。 这本质上是我的代码。这两个类使用相同的更新逻辑。 static PerObjectShaderBuffer _updatedBuffer; // PerFrameShaderBuffer if Camera class _updatedBuffer.scale = _rScale; _updatedBuffer.rotation = _rRotation; _updatedBuffer.translation = _rTranslation; pDeviceContext->UpdateSubresource(pShaderBuffer, 0 , 0, &_updatedBuffer, 0, …

3
如何创建自己的天空图?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 用云和大气阴影生成逼真的天空有哪些方法/工具? FOSS替代方案和球形投影可获得额外的积分。


1
OpenGL-立方体上的白色边缘
在我制作的类似于《我的世界》的游戏中,我的立方体上出现白色边缘: 在深色纹理中更明显。正在按以下方式设置纹理: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 有什么帮助吗?

1
有关渲染,批处理,图形卡,性能等的信息+ XNA?
我知道标题有点模糊,但是很难描述我真正想要的东西,但是这里有。 当涉及到CPU渲染时,性能通常很容易估计和直接,但是当涉及到GPU时,由于缺乏技术背景信息,我一无所知。我正在使用XNA,所以如果理论可以与之相关将非常好。 所以我真正想知道的是,当您执行特定的绘制动作时,何时何地(CPU / GPU)会发生什么?什么是批次?效果,预测等有什么影响?数据是否保留在图形卡上或是否在每个步骤中传输?当谈论带宽时,您是在谈论图形卡的内部带宽,还是从CPU到GPU的管道? 注意:我实际上并不是在寻找有关绘制过程如何进行的信息,这是GPU的业务,我对在此之前的所有开销都感兴趣。 我想了解执行动作X时发生了什么,以适应我的体系结构和实践。 非常感谢任何文章(可能带有代码示例),信息,链接,教程,它们提供了有关如何编写更好的游戏的更多见解。谢谢 :)

2
在libgdx中重复纹理
如何用重复纹理填充区域?现在,我正在使用下一个方法: spriteBatch.begin(); final int tWidth = texture.getWidth(); final int tHeight = texture.getHeight(); for (int i = 0; i < regionWidth / tWidth; i++) { for (int k = 0; k < regionHeight / tHeight; k++) { spriteBatch.draw(texture, i*tWidth, k); } } spriteBatch.end(); 很明显 也许有任何内置方法?

2
延期渲染是未来吗?
延迟渲染是否可以在PC硬件上进行实时3D渲染的未来(至少在光线跟踪变得可行之前)?我知道它的好处(很多指示灯,状态更改更少),还遇到了一些麻烦,例如抗锯齿,半透明的项目和更高的内存带宽。 但是下一代引擎会全部推迟使用吗?前向渲染已成为过去吗?

2
在单独的线程中更新和渲染
我正在创建一个简单的2D游戏引擎,我想在不同的线程中更新和渲染精灵,以了解其完成方式。 我需要同步更新线程和渲染线程。当前,我使用两个原子标志。工作流程如下所示: Thread 1 -------------------------- Thread 2 Update obj ------------------------ wait for swap Create queue ---------------------- render the queue Wait for render ------------------- notify render done Swap render queues ---------------- notify swap done 在此设置中,我将渲染线程的FPS限制为更新线程的FPS。此外,我sleep()经常将渲染和更新线程的FPS限制为60,因此这两个等待函数不会等待太多时间。 问题是: 平均CPU使用率约为0.1%。有时,在四核PC中,它会上升25%。这意味着一个线程正在等待另一个线程,因为wait函数是一个带有test and set函数的while循环,而while循环将使用您的所有CPU资源。 我的第一个问题是:是否有另一种方式同步两个线程?我注意到std::mutex::lock在等待锁定资源时不要使用CPU,因此它不是while循环。它是如何工作的?我无法使用,std::mutex因为我需要将它们锁定在一个线程中并在另一个线程中解锁。 另一个问题是;由于该程序始终以60 FPS的速度运行,为什么有时它的CPU使用率会跃升到25%,这意味着两个等待中的一个正在等待很多?(两个线程都限制为60fps,因此理想情况下它们不需要太多同步)。 编辑:感谢所有答复。首先,我想说的是,我不会在每个帧开始渲染新线程。我从一开始就开始了update和render循环。我认为多线程可以节省一些时间:我具有以下功能:FastAlg()和Alg()。Alg()既是我的Update obj又是render obj,而Fastalg()是我的“发送渲染队列到” renderer”“。在一个线程中: Alg() //update FastAgl() Alg() //render …

4
像SmoothVideo Project所使用的那样,帧插值是否可以在不影响性能的情况下增加游戏的帧率?
SmoothVideo项目使用帧插值将视频的fps从24提高到60。结果非常令人印象深刻。我想知道这是否可以应用,在电子游戏中看起来是否不错? 与渲染所有帧相比,它使用的资源要少得多,因此在某种程度的折衷下,允许较低端的装备以更好的装备的质量进行渲染。我知道它不会那么精确,并且会稍稍增加输入等待时间,因为它需要保持最新的帧才能生成和插入内插的帧。不过,这还不如全帧那么糟糕,根据我的推理,仅滞后时间就是插值时间加上原始fps刷新时间的一半。因此,对于30 fps,这将是33ms / 2 +内插时间。 也许这种滞后将使其不适用于快速过去的第一人称游戏,但我怀疑这会在节奏较慢的游戏中成为障碍。 在较高的启动速度时,延迟会变小,因此,我认为从60fps到100 + fps时值得这样做,虽然会稍有增加,但仍会给系统带来极大的负担,但可以改善用户体验。

2
如何制作自然的体素
我正在开发体素游戏,但我认为我使用了错误的技术。我目前使用扁平砖砌块,并且我认为有一种更好,更有效的方法。 我看过一个自然看似地形的体素游戏。我的意思是非阻塞。该游戏每立方米有4 * 4 * 4个块,并且块如泥土,沙子和石头,具有圆形边缘以及融化在一起(类似于普通游戏)。继承人截图 如何实现的?

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.