电脑图像

计算机图形学研究人员和程序员的问答

2
GL_STATIC_DRAW与GL_DYNAMIC_DRAW与GL_STREAM_DRAW:有关系吗?
在OpenGL中,缓冲对象函数(glBufferData,glBufferSubData和,可能还有其他一些)具有参数usage,该参数在文档中被描述为预期用途的暗示,可能意在帮助实现更好的性能。 用法 指定数据存储的预期使用方式。符号常量必须是GL_STREAM_DRAW,GL_STREAM_READ,GL_STREAM_COPY,GL_STATIC_DRAW,GL_STATIC_READ,GL_STATIC_COPY,GL_DYNAMIC_DRAW,GL_DYNAMIC_READ,或GL_DYNAMIC_COPY。 [...] 用法向GL实现提供了有关如何访问缓冲区对象的数据存储的提示。这使GL实现能够做出更明智的决策,从而可能显着影响缓冲区对象的性能。但是,它并不限制数据存储的实际使用。 维基同样含糊不清: 毕竟,这些只是提示。在创建STATIC缓冲区之后修改它,或者永远不要修改STREAM缓冲区,这是完全合法的OpenGL代码。 [...] 这些问题只有通过仔细分析才能回答。即便如此,答案也仅对来自特定硬件供应商的特定驱动程序版本是准确的。 最后,这个参数有多相关(如果有的话)?驾驶员是否真的考虑到了这一点,如果确实如此,根据您的经验,它在实践中会对性能产生多大影响?您有数据要共享吗? 我已经编写了一个薄的图形API抽象层,打算将其作为现有API中的任何一个实现,并且很想完全忽略此参数并将其从公开的抽象中隐藏起来。


1
为什么相邻的三角形在栅格化时永远不会重叠?
对于以下菜鸟问题表示歉意,只是我在任何地方都找不到令人满意的答案... 当我绘制一个由两个三角形组成的简单的与轴对齐的四边形时,我不明白为什么在这些三角形相交的对角线边缘上从来没有可见的伪像。其中一些像素必须同时位于两个三角形中,对吗?因此,如果我的碎片着色器总是发出部分透明的颜色(比如说50%黑色),那么在生成的四边形中是否应该没有可见的深色对角线? 显然,这不是必须解决的实际问题,这很好,我只是不明白为什么不是这样。是什么使它始终有效?
11 opengl  gpu  rasterizer 

1
海浪渲染
我如何为带有白帽和泡沫且波动强度可变的水体生成波浪?表面是具有法线贴图的网格吗?是否有生成该公式的公式?是否有类似的方法可以确定在哪里以及如何渲染白帽?我碰到了这篇论文,但不是很清楚。 在本文中,我了解了有关波浪产生的部分。有专门针对白帽和泡沫的部分,它确实提供了生成白帽和泡沫的公式,但是您如何仅将其应用于需要它的水部分?根据我的观察,它只是将F表示为需要白帽的区域,有人可以阐明它的工作原理吗?

2
导数图与切线空间法线图
我发现某些引擎使用导数贴图代替切线法线贴图。 经过一番阅读之后,替换切线空间法线似乎是一种很棒的方法,但是使用它们会不会有一些不利之处?为什么仍继续使用切线空间法线? 是否可以将优点和缺点进行比较?


2
人体指甲的渲染将涉及哪种技术?
有许多参考文献涉及基于物理的人体模型,如皮肤,头发,眼睛等。 但是,我找不到有关模拟逼真的指甲的特定信息。例如,我没有发现人类指甲对光反应的特征的特异性。 我有一些想法: 根据Wikipedia的文章,指甲“由坚硬的保护性蛋白质制成,称为角蛋白。(...)由死皮细胞组成”。 头发也是由角蛋白组成的,所以指甲的渲染可能与头发的渲染有一些相似之处?但是,我认为头发渲染的主要特征是由于头发纤维内部的内部反射而使镜面高光着色。这种现象是否显着或者甚至发生在指甲上? 检查表明指甲是透明的,并且它们具有亚表面散射效应。是否有结合这些现象的模型? 与皮肤的接近也似乎表明指甲下的皮肤具有奇异的外观特性。该层是否也需要模拟某些特定技术? 将涉及哪种技术来精确模拟人指甲的渲染? 数字艺术家使用哪种技巧来模拟人类指甲的外观?

1
单散射微面BSDF模型中的能量损失补偿
Walter等人针对粗糙介电表面的单散射基于微面的表面模型(例如原始的Torrance-Sparrow BRDF)或派生模型(例如BSDF)。忽略了微面之间的光的相互反射,这导致能量损失,导致变暗,尤其是在较高的粗糙度值下。 使用炉子测试可以很容易地证明这个问题。下图显示了我使用Smith模型和GGX分布对粗糙度参数从0.2到1.0进行导电微刻面BRDF的实现的行为(此处故意将菲涅耳系数设置为1,以使问题更容易看到): 使用Smith模型和GGX微面分布对粗糙度参数从0.2到1.0的粗糙电介质(IoR 1.51)BSDF进行炉试验: 埃里克·海茨(Eric Heitz)等。Heitz最近在LuxRender论坛上提出了一种多重散射模型,该模型可以通过完全解决光相互作用来解决变暗问题,但是由于其评估程序的随机性,因此存在性能问题。 是否存在已知的补偿方法来恢复单散射模型的能量损失?不一定在物理上是正确的,但至少不会破坏物理上的合理性(亥姆霍兹互惠性和能量守恒),并且理想情况下无需手动调整参数。 在迪士尼BSDF中,有一个称为“光泽”(基本上是基于菲涅耳的光泽叶)的参数化成分,可用于补偿边缘变暗,但是正如他们在Siggraph 2015课程中提到的,这是非常特殊的方法: “ ...这非常近似,对于其他粗糙度值效果不佳...” 在上述意见从埃里克·海茨中的LuxRender论坛还建议使用一些补偿黑客,但不幸的是,不会进入任何细节: 据我所知,您可以使用一些更简单的技巧来改善单个散射模型中的能量节省(例如调整反照率)。但是,如果这样做,则在不破坏BSDF的可逆性的情况下就无法获得完美的节能材料(例如,完美的白色毛玻璃)。

3
点变换和向量变换有什么区别?
这是我的讲师在课程中告诉我的: 我们仅考虑4 * 4矩阵。这些用于旋转,缩放或平移对象(或这些操作的任意组合)。稍后还将在虚拟相机模型的实现中使用矩阵。如果您不知道矢量变换和点变换之间的区别,请查找它。 我似乎无法仅为这个问题找到答案并为此网站注册了一个帐户。
11 vectors 

1
着色器中的循环性能
我想知道在着色器中集成动态循环功能的最佳方法是什么? 首先,似乎动态数组是不可能的。因此,创建最大大小的数组并仅填充其中一部分或使用预定义的大小定义数组会更好吗? 那么,迭代此数组的最佳方法是什么? 使用展开循环或动态循环进行4到128次迭代比较好吗?我还看到有可能将其展开到最大的预定义迭代次数,然后使用诸如的条件将其停止if (i == myCurrentMaximumIterationNumber)。

1
我的GPU正在等待什么?
我正在编写一个与我的AMD Radeon HD 7800系列GPU一起使用的OpenCL程序。根据AMD的OpenCL编程指南,这一代GPU具有两个可以异步操作的硬件队列。 5.5.6命令队列 对于Southern Islands及更高版本,设备至少支持两个硬件计算队列。这样一来,应用程序就可以通过两个用于异步提交和可能执行的命令队列来提高小型调度的吞吐量。硬件计算队列按以下顺序选择:第一个队列=偶数OCL命令队列,第二个队列=奇数OCL队列。 为此,我创建了两个单独的OpenCL命令队列,以将数据提供给GPU。大致来说,在主机线程上运行的程序如下所示: static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static const int N = 256; cl_mem gl_buffers[N]; cl_event finish_events[N]; clEnqueueAcquireGLObjects(default_queue, gl_buffers, N); int queue_idx = 0; for (int i = 0; i < N; ++i) { cl_command_queue queue = work_queue[queue_idx]; cl_mem …
11 gpgpu  opencl 

1
“ 6分离”和“ 26分离”体素化是什么意思?
我正在阅读有关NVIDIA体素化库Voxelpipe的本文,并在第2部分体素化中发现术语6分隔和26分隔 我发现这个网站试图解释体素化的基本思想,但了解所提到的术语并没有太大帮助。 有人可以解释或指出其他可以帮助我理解的资源吗?

1
有多少个直接/计算/复制队列有意义?
DirectX 12公开了图形(称为“ Direct”),计算或复制任务的命令队列。就提供的功能而言,每一个都是下一个的超集。该规范指出命令队列可以由设备并发执行。但是,API并没有以任何方式限制命令队列的数量(至少我不知道有任何限制)。 显然,不同的供应商处理此问题非常不同: 英特尔在最近的一次演讲(幻灯片23)中指出,当前其GPU无法并行处理Graphics&Compute,并且复制引擎的吞吐量很弱。他们建议不要使用多个图形/计算队列。 AMD 早就开始宣传从Mantle和当前的Gen控制台开始的队列/“异步着色器”的使用。还有一些开发人员(示例)通过并行执行计算和图形任务来确认显着的性能提升。 最近有一些关于Nvidia不支持硬件中的异步着色器的大惊小怪的事情:一次使用单独的Graphics和Compute队列似乎会使速度变慢,这表明驱动程序是仿真的。另一方面,并​​行复制操作已得到CUDA的长期支持,这清楚地表明DMA引擎可以独立工作。 有什么方法可以在运行时确定将CommandList提交给多个CommandQueue而不是一个CommandQueues是否有意义?(鉴于以前的案例不涉及太多的工程开销) 虽然我可以轻松地看到并行执行与计算/图形操作并行的内存操作有何用处,但令我感到震惊的是,并行运行多个计算和图形进程不必要地复杂(除非没有主要的性能优势)。对我来说还不清楚,这如何能带来明显更好的性能。除了许多小型连续任务无法产生足够的GPU负载的病理情况外。
11 directx12  api 


2
基于物理的渲染和光线跟踪
我有很多困惑,我需要澄清一些术语并汇总知识。 如果我说引擎是光线跟踪器(因此它使用光线跟踪算法来渲染场景),那么它是否自动是基于物理的引擎?我的意思是,根据其定义,光线跟踪是基于物理的,还是可能有一些不是基于物理的光线跟踪器?(并且,对称地存在一些基于物理的非射线追踪器?) 而且,“基于物理”是否也意味着“解析光传输方程”,这是真的吗?
11 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.