电脑图像

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

1
为什么3D Studio中的平滑网格最终得到相同数量的顶点/三角形?那么如何用相同的几何形状对它们进行平滑处理?
我试图理解为什么在3D Studio中平滑的网格(修改器/平滑器)在该过程之前或之后最终具有相同数量的顶点/面,以及完全相同的几何形状。 在以下示例中,两个网格都具有32个顶点和60个面。 尽管我有使用编程(c ++和c#)的经验,但我还是计算机图形学的初学者。因此,我的期望是,平滑网格的平滑外观将需要其他顶点,即三角形的细分,以便最终获得更详细的最终网格。但是,事实并非如此。 因此,我问: 1)如何在不增加网格几何细节的情况下进行平滑处理? 2)与原始网格相比,平滑处理是否至少增加了分配/用于存储新网格的内存? 超级欢迎您进行说明,但也欢迎您参考(学术界与否)。
11 3d  geometry  mesh  memory  model 

2
什么是环境照明?
维基百科说: 环境光源表示固定强度和固定颜色的光源,该光源均匀地影响场景中的所有对象。 说“平等地影响所有物体”,是指所有物体获得相同数量的光?因此,如果您的场景中有三栋房屋,则需要为环境光源计算一个特定位置,以使每个对象都获得相同的光量?如果没有,您将没有环境光源? 太阳的“正常”照明与环境照明之间有什么区别?
11 lighting 

2
屏幕空间环境光遮挡如何实现?
我不理解维基百科的解释。 对于屏幕上的每个像素,像素着色器都会对当前像素周围的深度值进行采样,并尝试从每个采样点计算遮挡量。 周围像素的深度值如何告诉您有关遮挡的信息?据我了解,遮挡发生在对象A站在另一个对象B的前面时,因此您看不到对象B。但是为什么现在要查看周围像素的深度像素呢?我的意思是您可以看到这些像素,所以没有遮挡。也许我理解遮挡是错误的。 我还不理解的是其他一些教程中的术语“内核”。什么是内核,为什么要在sao中使用它? 有人可以针对我的问题对算法进行详细说明吗?

1
更改着色器程序时是否需要重新绑定制服或属性?
渲染场景通常涉及多个着色器程序,在我的情况下,所有着色器程序都使用相同的属性,并且至少共享一些制服。为了使它们正常工作,我目前保持安全,这意味着我每次在着色器程序之间切换时都重新绑定属性并获得适当的统一位置。因此,基本上每个帧中都有多次,这可能不是最佳方法。 因此,在切换着色器程序之后,是否有必要(通常​​)重新绑定属性和制服?又为什么呢? 如果是这样,是否有办法在程序启动时执行一次,而不必再次触摸它们(设置统一值除外)?
11 opengl  glsl  shader 


3
倾斜时,朗伯反射镜是否被入射辐射的一小部分照亮?
在阅读有关Wikipedia的Lambertian反射率时,我发现以下短语(以粗体显示)对我来说听起来并不正确: 在计算机图形学中,朗伯反射通常用作漫反射的模型。此技术使所有封闭的多边形(例如3D网格中的三角形)在渲染时均能在所有方向上均等地反射光。实际上,围绕其法向矢量旋转的点不会改变其反射光的方式。但是,如果该点偏离其初始法向矢量,则该点将改变其反射光的方式,因为该区域被一小部分入射辐射照亮。 我描述段落中描述的情况的方式是,仅倾斜远离光源会导致较少的光入射到给定区域中。通常,远离初始法向矢量倾斜可能会导致每个区域的入射光增加或减少,因为这并没有说明光源的位置。 我是否误解了上下文,还是应该在Wikipedia上重写?
11 shading 

1
快速抗锯齿线图
布雷森汉姆(Bresenham)的线算法是一种仅使用快速整数运算(加法,减法和乘以2)绘制直线的方法。但是,它会生成锯齿线。有没有类似的快速方法来绘制抗锯齿线?

1
在片段着色器中计算纹理坐标时,为什么访问纹理要慢得多?
在GLSL中使用纹理时,最好在顶点着色器中计算最终的纹理坐标,然后使用varyings 将其移交给片段着色器。在y坐标中进行简单翻转的示例: // Vertex shader attribute vec2 texture; varying highp vec2 texCoord; // ... void main() { texCoord = vec2(texture.x, 1.0-texture.y); // ... } // Fragment shader varying highp vec2 textureCoordinates; uniform sampler2D tex; // ... void main() { highp vec4 texColor = texture2D(tex, texCoord); // ... } 如果vec2(0.5)在片段着色器中执行y坐标的翻转或什至更简单的操作(如添加到纹理坐标),则纹理访问会慢得多。为什么? 需要注意的是,例如,使用它们的加权总和来混合两个纹理在时间上要便宜得多,并且还需要针对每个像素完成,因此纹理坐标本身的计算似乎并不那么昂贵。

4
我学习OpenGL还是Direct3D都重要吗?
这两个API之间的区别是否只是次要的实现细节,是否意味着一旦我学到了一个API,便可以将其用于所有内容?或者,如果我希望能够在将来使用它而不需要重新学习另一个API的情况下,有理由学习一个而不是另一个吗?是一般的还是其他的? 特别是我希望能够为任何图形卡编写代码,因此代码不仅限于仅在特定制造商的卡或特定型号上运行。我还希望能够编写在没有显卡的情况下仍然可以运行的代码(尽管速度较慢)。 可移植代码在不同平台(操作系统/体系结构)之间的可移植性是否有所不同?我对与之兼容的其他库的可用性以及是否在更广泛的环境中导致较少的许可限制感兴趣。任何可衡量的因素都会影响其中之一是否是我唯一学习而不限制我的知识。
11 opengl  api  direct3d 

1
这是实施比尔定律的正确方法吗?
当我实施比尔定律(通过物体的距离吸收颜色)时,由于某种原因,它看起来永远不会很好。 当我在对象后面有颜色时,我将像这样计算调整后的颜色: const vec3 c_absorb = vec3(0.2,1.8,1.8); vec3 absorb = exp(-c_absorb * (distanceInObject)); behindColor *= absorb; 这将使我看起来像这样(请注意一点折射): 这里没有折射: 请注意,此处将其实现为着色器玩具。 这满足了比尔定律的作用的描述,但是与以下镜头相比,它看起来不是很好: 除了高光,我正在努力找出差异。难道仅仅是我的几何形状太简单而无法很好地展示出来吗?还是我执行不正确?

2
硬件加速绘制弯曲形状
如何快速绘制弯曲的形状? 通过“快速”我认为应该尽可能多地使用硬件设施 “弯曲”是指由二次贝塞尔曲线或三次贝塞尔曲线定义的边界 “形状”是指“胖”笔划(即大于1px宽)或奇数/非零填充的“ 2D弯曲多边形”,可能带有孔(即字母“ O”) 我问是因为我所知道的选项有几个缺点: 对形状进行三角剖分并将其发送到OpenGL-在CPU上完成最困难的工作,并且可能使用太多/很少的三角形(即浪费/粗大) 纹理图集-必须在每次更改(形状,比例,旋转等)时重新计算/上载纹理 带符号的距离字段-大规模时细节看起来不漂亮或必须重新计算/上载纹理 NV_path_rendering-可以,如果它仅在Nvidia的显卡上不起作用 OpenVG-可能的话,如果它不能仅在移动设备上运行 ? *在我看来,OpenVG并没有完全向前发展。有谁知道它的未来前景吗?今天值得关注吗? ** OpenGL 4+提供了对多边形进行动态镶嵌的方法。可以使用某种方式从“三角剖分”选项中细化网格,以使形状边界至少看起来不“成角度”吗?

1
体积渲染的基本概念和术语
关于渲染体积材料和效果的文献倾向于使用许多数学物理学术语。假设我对表面渲染所涉及的概念有很好的了解。体积渲染我需要了解什么概念?(实时和脱机渲染。) 在体积渲染中光散射的确切含义是什么?(为什么将它分为内向散射和外向散射?) 透射,衰减和吸收之间的关系是什么? 什么是相位函数?它如何在体积渲染中发挥作用?(尤其是Henyey-Greenstein相位函数。) 什么是比尔-朗伯定律?它与光散射有什么关系? 基本上,从这样的图表中我如何理解?

3
如何使我的冰块看起来真实?
我可以将冰块建模为具有水折射率的稍微变形的透明立方体,但是看起来并不令人信服。它们看起来像玻璃块而不是冰。 通过查看实际的冰块,我可以直观地描述一些差异,但是我不知道要更改哪些物理属性以匹配它们: 冰块是湿的。矿山看起来像干玻璃。 冰块在某些地方透明,而在其他地方则不透明。 尽管没有分离,但冰块经常会出现可见的裂纹。 在这种情况下,我试图对表面上的冰块建模(在空气中,而不是在水中漂浮)。 为了增加真实感,我需要包括哪些技术? 我不是在寻找实时技术,只是为了生成静止图像。我希望冰能够像照片一样逼真地关闭,并投射出逼真的焦散和阴影。 我尝试过使用弯曲的边缘,并在冰块上涂上一层薄薄的透明材料,以模拟融化的水层,但是似乎并没有给人以湿的印象。我还尝试过将透明球体嵌入其中心一半大小的透明球体中,并具有雾化效果,但它不会自然地融合到立方体中,而是看起来像是嵌入的。即使是一系列逐渐增加的雾的嵌套球体,看起来也不正确。

2
亚像素抗锯齿规则
最近,我遇到了文本的亚像素抗锯齿问题,该问题会产生非常粗糙的颜色,让我想知道如何正确完成它: 我绘制了一些黑色瓷砖的情况,这些瓷砖覆盖了下面的三分之二像素。 颜色与我所看到的颜色匹配,但是当我查看适当的抗锯齿文本时,结果却不及明亮和分散注意力: 我认为必须在良好的光强度和正确的颜色之间取得平衡。哪些方法可用于亚像素抗锯齿,但效果良好? 更新: 我已将白色茶壶渲染为具有3倍宽度和多重采样的图像。下面,我将平均每3个像素与分配给RGB进行比较。在某些情况下(尤其是与此处的示例相比),颜色仍然显得过亮,不是我的手机可以很好地捕捉它们。 好,我的显示器需要一点灰尘

3
如何光线追踪不适合记忆的场景?
如果要进行光线跟踪的场景无法存储在内存中,那么在不向机器添加更多RAM的情况下,在实际的时间范围内渲染场景似乎是不现实的,因为需要从磁盘上加载场景的不同部分,每个像素可能需要多次加载。 有没有办法解决?我正在尝试一种某种方式来一次执行涉及场景的特定子集的大量计算,以减少需要将其加载到内存中的次数。在这种情况下还有其他提高速度的方法吗?

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.