Questions tagged «rendering»

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

1
在基于图的材料系统中,如何支持各种输入和输出类型?
我想换我的头周围怎么样材料系统这样,这个实现。这些功能强大且用户友好的,类似于图形的系统作为允许程序员和非程序员都可以快速创建着色器的方法,似乎相对普遍。但是,从我相对有限的图形编程经验来看,我不太确定它们是如何工作的。 背景: 因此,当我之前对简单的 OpenGL渲染系统进行编程时,通常会创建一个Material类,该类从我手动创建的静态GLSL文件中加载,编译和链接着色器。我通常还将此类创建为访问GLSL统一变量的简单包装。举一个简单的例子,假设我有一个基本的顶点着色器和片段着色器,并带有一个额外的均匀Texture2D用于传递纹理。我的Material类将简单地将这两个着色器加载并编译到材质中,从那时起,它将公开一个简单的接口来读取/写入该着色器的Texture2D制服。 为了使该系统更具灵活性,我通常以一种允许我尝试传递任何名称/类型的制服的方式编写它(即:SetUniform_Vec4(“ AmbientColor”,colorVec4); 如果材质中存在均匀的AmbientColor统一矢量,该矢量将被称为“ colorVec4”。 class Material { private: int shaderID; string vertShaderPath; string fragSahderPath; void loadShaderFiles(); //load shaders from files at internal paths. void buildMaterial(); //link, compile, buffer with OpenGL, etc. public: void SetGenericUniform( string uniformName, int param ); void SetGenericUniform( string uniformName, float param ); …

3
仅高细节渲染屏幕的一部分
如果以较大的视角渲染图形(例如,非常大的电视或VR头戴式受话器),则观看者实际上无法将注意力集中在整个图像上,而只是整个图像的一部分。(实际上,常规尺寸的屏幕也是如此。) 结合跟踪观众眼睛的方式(我想这在VR中几乎是可行的),您可以在理论上加以利用,并通过逐渐减少细节和分辨率来使图形远离观众焦点,从而获得性能,而不会损失感知质量。 今天有没有可用的或正在开发的技术?

3
为什么要从渲染中分离对象?
Disclamer:我知道什么是实体系统模式,但我没有使用它。 我已经阅读了很多有关分离对象和渲染的内容。关于游戏逻辑应独立于底层渲染引擎的事实。这一切都很好,很花哨,而且很合理,但同时也会引起很多其他麻烦: 逻辑对象和渲染对象(保持动画,精灵等的状态)之间需要同步 需要向公众开放逻辑对象,以便渲染对象读取逻辑对象的实际状态(通常使逻辑对象容易在笨拙的getter和setter对象中进行转换) 这听起来对我来说不是一个好的解决方案。另一方面,将对象想象为3d(或2d)表示形式非常直观,并且易于维护(也可能封装得更多)。 有没有一种方法可以将图形表示和游戏逻辑保持在一起(避免同步问题),但又抽象了渲染引擎?还是有一种方法可以将游戏逻辑和渲染分开,而不会导致上述缺点? (可能带有示例,我不太擅长理解抽象演讲)

1
跨多个监视器呈现Unity
目前,我正试图统一在2个监视器上运行。我已经进行了一些研究,并且知道这是完全可能的。有一种解决方法,您基本上必须弄乱窗口大小才能统一在两个监视器上进行渲染。 我所做的是创建一个新的自定义屏幕分辨率,该分辨率采用了两台显示器的宽度,如下图所示,即3840 x 1080: 但是,当我去运行我的统一游戏exe时,该大小不可用。我所得到的是以下内容: 我的自定义尺寸应该在最底端,但不是。当我通过自己的exe来运行游戏时,是否有我未曾做过或错过的事情会统一使用我的自定义屏幕大小? 奇怪的是,在统一编辑器中,拾取了我的自定义屏幕尺寸,并且可以在游戏窗口中将其设置为: 从文件菜单构建和运行游戏时,我有忘记做的事情吗?有人曾经打败过这个问题吗?
11 unity  rendering 

3
在慢动作中显示碰撞是否在计算上令人放松?
在许多赛车游戏(例如Burnout Paradise)中,当碰撞将要发生时,游戏会自动切换为慢动作并以缓慢的顺序进行,直到碰撞完成为止。 我一直以为这是为了效果。您不想错过任何碰撞!但是我的一位朋友最近建议这样做是为了确保在发生碰撞时不需要过多的处理速度。 现在我认为这实际上是相反的。当发生碰撞时,慢动作中会显示很多细节,我确信计算和渲染管道会产生开销。 什么是对的? 慢动作场景会增加还是减少CPU / GPU使用率?

4
实体系统和渲染
Okey,到目前为止我所知道的;该实体包含一个组件(数据存储),其中包含类似信息;-纹理/精灵-着色器-等等 然后我有一个渲染器系统,可以绘制所有这些图像。但是我不明白渲染器应该如何设计。每个“视觉类型”都应有一个组件吗?一个组件没有着色器,一个组件具有着色器,等等? 只需输入一些“正确方法”即可完成此操作。要提防的提示和陷阱。

1
如何创建基于高度的体积雾?
最近,我一直在寻找在游戏世界的某些Y位置上产生体积雾的技术。但是我发现的全部是使用粒子系统或内置引擎雾产生的雾,这些雾并不能真正满足我的需求。 就我而言,我需要一种既高效又浓的雾。它应该遍及整个游戏世界,但是显然,出于性能方面的考虑,它只能作为相机或着色器的一部分进行渲染,尽管它只是一种幻觉,但看起来就像是在移动。如果可以的话,我可以设置一个粒子系统,将其安装到相机上并使其移动。 因此,主要问题仍然存在-如何实现既浓密又有效的体积雾? 作为我正在使用的特定引擎,它是Unity。 例如,我的意思是,这里是我想要的具有效果的游戏的链接:Astromike
10 unity  shaders  rendering  fog 

1
纹理图集与数组纹理:CPU和GPU处理它们的方式有何不同,如何影响性能?
Unity 5.4(目前处于beta版)将带来一个期待已久的功能(自2013年起),即array-textures-与OpenGL的ArrayTexture相同。但是,在对数组纹理和纹理图集进行了一些阅读之后,我仍然不太了解CPU和GPU在使用它们方面的技术差异。 因此,更具体地说,我想请您解释一下CPU和GPU如何处理纹理图集和纹理阵列之间的主要差异,最重要的是,这些差异如何影响性能和内存处理(例如纹理阵列如何比纹理图集等具有更高的性能)。 如果由于不幸的封闭源而缺乏有关Unity实现的技术细节,那么我很乐意提供有关OpenGL.s ArrayTexture的答案。

1
如何在自制渲染系统中缓存资源
背景: 我正在为使用C ++和OpenGL的实体组件系统类型体系结构设计一个简单的3D渲染系统。该系统由一个渲染器和一个场景图组成。完成渲染器的第一次迭代后,我可能会将场景图分发到ECS架构中。目前,它是一种占位符。如果可能,以下是我对渲染器的目标: 简单性。这是一个研究项目,我希望能够轻松更改和扩展我的系统(因此采用ECS方法)。 表现。我的场景可能有很多小型模型,也有很多具有很多几何图形的体积。从OGL上下文中获取对象并在每个渲染帧中缓冲几何体是不可接受的。我的目标是数据本地化,以避免缓存未命中。 灵活性强。它必须能够渲染精灵,模型和体积(体素)。 解耦。编写渲染器后,场景图可以重构为核心ECS体系结构。 模块化。能够在不更改场景图的情况下交换不同的渲染器将是很好的。 参照透明性,表示在任何时间点我都可以给它任何有效的场景,并且它将始终为该场景渲染相同的图像。特别地,该目标不是必需的。我认为这将有助于简化场景序列化(我将需要能够保存和加载场景),并为我提供了在运行时出于测试/实验目的而在不同场景中交换的灵活性。 问题与思路: 我想出了一些不同的方法来尝试,但是我正在努力为每个渲染节点缓存OGL资源(VAO,VBO,着色器等)。以下是到目前为止我已经想到的不同的缓存概念: 集中式缓存。每个场景节点都有一个ID,渲染器具有将ID映射到渲染节点的缓存。每个渲染节点包含与几何图形关联的VAO和VBO。高速缓存未命中获取资源并将几何图形映射到高速缓存中的渲染节点。更改几何形状后,将设置脏标志。如果渲染器在遍历场景节点时看到肮脏的几何标志,则它将使用渲染节点重新缓冲数据。移除场景节点后,会广播事件,并且渲染器会在释放资源的同时从缓存中删除关联的渲染节点。或者,将节点标记为要删除,而渲染器负责将其删除。我认为这种方法最接近目标6,同时也考虑了4和5。2遭受了额外的复杂性和丢失了使用地图查找而不是数组访问的数据局部性的麻烦。 分布式缓存。除了每个场景节点都有一个渲染节点外,其他与上面类似。这会绕过地图查找。为了解决数据局部性,可以将渲染节点存储在渲染器中。然后场景节点可以改为具有指向渲染节点的指针,并且渲染器将指针设置在高速缓存未命中。我认为这种模仿实体组件方法,因此与架构的其余部分保持一致。这里的问题是,现在场景节点保存渲染器实现特定的数据。如果更改了事物在渲染器中的渲染方式(如渲染精灵与体积),则现在需要更改渲染节点或向场景节点添加更多“组件”(这也意味着更改场景图)。从好的方面来说,这似乎是启动并运行我的第一迭代渲染器的最简单方法。 分布式元数据。渲染器缓存元数据组件存储在每个场景节点中。此数据不是特定于实现的,而是包含ID,类型以及缓存所需的任何其他相关数据。然后,可以使用ID直接在数组中完成缓存查找,并且该类型可以指示要使用的呈现方法的类型(如精灵与体积)。 访客+分布式映射。渲染器是一个访客,场景节点是访客模式中的元素。每个场景节点都拥有一个只有渲染器才能操作的缓存键(就像元数据一样,只是一个ID)。该ID可以用于数组,而不是广义的地图查找。渲染器可以允许场景节点根据场景节点的类型调度不同的渲染功能,并且ID可以由任何缓存使用。默认或超出范围的ID将指示高速缓存未命中。 您将如何解决这个问题?或您有什么建议吗?感谢您阅读我的文字墙!

2
如何在动态变化的网格上投影泡沫轨迹
我正在尝试创建水,现在我通过在网格物体上动态生成波浪来获取水。但是现在我想让我的船操纵这些波浪,并在此之上引起开尔文唤醒。 事实是我使用不同的瓷砖生成水,并动态重复相同的图案。那么,如何在动态生成的网格(平面)之上生成此内容呢?是否还没有操纵其他图块(平面)?
10 c#  unity  rendering 

1
在OpenGL中,什么是“零状态”渲染?
最近在一次工作面试中,我提到我自学了现代OpenGL和如何使用顶点缓冲对象进行渲染,因为我的大学当时只教固定功能管道进行即时模式渲染。面试官简短地打扰了我,说VBO已被“零状态渲染”所代替,然后让我继续。 后来我忘了问这是什么意思了,因为我们很快转到了其他主题,并且由于忙碌的日程表,面试官最终没有时间了。 后来,我在网上搜索了“ OpenGL零状态”和“零状态渲染”,没有似乎相关的结果,大部分只是关于OpenGL状态的信息。 所讨论的组织是基于大量研究的,因此是否有可能是目前很少支持的扩展,还是由于其尖端的性质而使使用的术语有所不同?


2
如何在2.5D透视图中渲染地形,例如在《不要挨饿》游戏中?
我在制作2D侧面滚动游戏(例如Terraria)方面有经验,但是现在我想挑战自己,制作一款具有2.5D视角的游戏。我要模仿的游戏是《不要挨饿》。现在,我的重点是弄清楚如何渲染地面。我很难弄清楚它们是如何生成地面,然后渲染地面的。我认为他们渲染地面的方式是,首先在某些绘画程序中对地面进行绘画,然后以某种方式处理该平面图像,使其看起来具有深度。 我对如何实际渲染这种类型的地形完全感到困惑。我希望地形具有以下特征: 看起来像《不要挨饿》中的地形,这是一个视频,显示了《不要挨饿》中的地形 地形将是平坦的,并且摄像机的角度和视角将被固定 任何提示和提示将不胜感激,在此先感谢您。 (我正在使用轻量级Java游戏库(LWJGL)在Java中工作。)


4
是什么导致一个表面与另一个表面重叠?
我无法真正弄清楚是什么原因导致一个表面与另一个表面重叠。在我创建的3D引擎中,我的技术在极端情况下失败了。 我的方法是从最远到最近对要绘制的表面进行排序。为了确定紧密度,我在比较平均z值。但是,有时重叠的表面的平均z值比重叠的表面高。因此,距离较远的表面会被绘制在距离较近的表面上-产生如下奇怪的渲染: 只能看到立方体的紫色前表面,而红色的侧面涂在紫色的表面上。紫色表面的平均z值较高,因此“更远”。所以我对此技术是否正确存有疑问。 我还尝试过获取相机(即原点)到曲面的距离,但随后我需要一个点。我选择了每个表面的中间,但这似乎并不总是可行,因为并非所有表面都一样大。 因此,确定表面到原点的紧密程度的可靠方法是什么?
10 3d  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.