电脑图像

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

2
在这种情况下,计算饱和度的正确方法是什么?
我正在尝试对xyY颜色空间进行HSV表示。为了从颜色计算色相,我在xy色度图中使用了该颜色与红色(波长745)之间的夹角,其中白色为中心。(1(x,y)(x,y)(x, y)(13,13)(13,13)(\frac{1}{3}, \frac{1}{3}) 饱和度为白色之间的距离之间的比率,以及白色和的完全饱和的版本(它是之间的线之间的交点和以及色度图的边缘)。(x ,y )(1(x,y)(x,y)(x, y)(x,y)(x,y)(x, y)(x,y)(13,13)(13,13)(\frac{1}{3}, \frac{1}{3})(x,y)(x,y)(x, y) xy色度图: 我遇到的问题是,当我绘制颜色空间(值= 1)并将其与RGB的HSV表示形式进行比较时,饱和度(与中心的距离)似乎与颜色的“色彩”不匹配实际上是: 我的色彩空间(饱和度似乎是错误的): RGB的HSV色彩空间: 我应该如何计算饱和度呢?

2
为什么在路径跟踪中使用帐篷过滤器?
C路径跟踪器Smallpt的99行会为其打算渲染的每个像素渲染一个2x2的子像素网格,然后执行一个帐篷过滤器将它们合并。 有一个有趣的演示解释代码在这里,它提到了帐篷过滤器,但没有解释为什么它的存在。 谁能解释为什么在这种情况下,帐篷过滤器比盒子模糊(仅对样本取平均值)更合适? 使用比帐篷过滤器更好的东西(例如双三次Hermite插值)会更高质量吗?

2
将光线转换为对象空间以进行运动模糊
我的raytracer支持各种各样的对象。为了使它们相交,我使用了将光线转换为对象空间的标准技术。在我添加运动模糊之前,这非常有效。 我将运动模糊建模为一系列转换(为简化讨论,确切地说是两个)而不是一个。我的方法是在两个关键帧处进行射线的逆变换,并控制位置/方向。 对于翻译来说,这似乎工作正常,但对于旋转来说,它却失败了。例如,这是两个分别旋转30度和90度的三角形: (4个样本,MN重建,红色样本来自两个关键帧附近) 在拐角处,我希望弯曲的样本位于两个顶点之间的直线上。相反,它们向外凸出。错了 在具有更多有趣转换的更有趣场景中,它会导致多种故障模式。例如,这是螺旋桨旋转45度: (100个样本,法线可见) 某些问题是由于BVH断裂(假定对象的极值位于关键帧处)造成的,但是即使是强行渲染也不正确。 我只能通过执行正向变换(变换对象,而不是光线)来解决所有问题,但这仅适用于可能的对象(实际上只有三角形)。 如何使我的光线跟踪器通过变换光线而不是对象来产生线性近似值来进行变换(尤其是旋转)?


2
如何为生成的几何计算表面法线
我有一个基于调用代码的输入生成3D形状的类。输入的内容包括长度,深度,弧度等。我的代码完美地生成了几何图形,但是在计算表面法线时遇到了麻烦。点亮时,由于计算出的不正确的表面法线,我的形状具有非常奇怪的着色/纹理。从我所有的研究中,我相信我的数学是正确的,似乎我的技术或方法有问题。 在高层次上,如何以编程方式计算所生成形状的表面法线?我在我的代码上使用iOS上的Swift / SceneKit,但是通用答案很好。 我有两个数组代表我的形状。一个是一组3D点,这些点代表组成形状的顶点。另一个数组是第一个数组的索引列表,这些索引将顶点映射为三角形。我需要获取该数据并生成一个第三数组,该数组是一组有助于形状发光的表面法线。(请参见SCNGeometrySourceSemanticNormalSceneKit`) 顶点和索引的列表始终根据类的输入而有所不同,因此我无法预先计算或对表面法线进行硬编码。

1
同步连续的OpenGL Compute Shader调用
我有几个需要按一定顺序执行的计算着色器,它们的输出取决于以前的输入。理想情况下,我永远不需要在客户端复制缓冲区并在GPU上完成所有工作。 考虑一下,我有两个计算着色器已编译并链接为program_one和program_two。假设我还有一个GL_SHADER_STORAGE_BUFFER包含由写入program_one和读取的数据的program_two。我可以简单地执行以下操作: glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); 是否可以保证第一个计算着色器的所有调用将在第二个计算着色器的任何调用之前完成(以避免读写之间的数据争用buffer)?如果没有,如何同步它们?

2
逼真的渲染:我需要考虑人眼和大脑的哪些过程?
逼真的渲染的目的是渲染图像,就像真实的相机会捕获它一样。尽管这已经是一个雄心勃勃的目标,但在某些情况下,您可能需要更进一步:以人眼可以捕捉到的图像甚至人类可以感知到的方式渲染图像。您可以将其称为视觉现实或感知现实渲染,但是如果有人能提出一个更吸引人的术语(或告诉我已经存在一个术语),我将不胜感激。 这里有一些例子可以说明我的观点。用低照度的相机拍摄照片时,您可能拥有好的镜头或噪点较大的图像。对于人类观察者来说,暗视会产生作用并产生浦肯野效应(颜色会变成蓝色)。这种效果取决于HDR亮度信息,当我在LDR显示器上显示图像时,这些信息会丢失。另外,人脑可以使用深度信息来“过滤”感知到的图像-在最终(非立体)渲染中丢失的信息。 整理详尽的清单可能是一个难以实现的目标。您能否建议我需要考虑的对眼睛和大脑的某些影响?

1
图像的2D傅立叶变换如何工作?
我了解1D傅立叶变换如何将信号分成其分量频率,但是我很难理解2D傅立叶变换如何影响2D图像。 在另一个问题上,约翰·卡尔斯贝克(John Calsbeek)链接到一篇有关测量噪声函数质量的有趣论文。这显示了各种噪声函数和每个函数的傅立叶变换。 这是像素数据的离散变换,还是用于在任意点生成噪声的连续插值函数的连续变换? 环形形状是否类似于在每个可能的角度对通过图像中心的线进行一维傅立叶变换?还是在整个2D空间中而不是仅沿着穿过中心的线也测量了每个可能角度的变换?我正在尝试使输入图像中的哪些变化与傅立叶变换中的哪些变化相对应。

1
光能传递VS光线追踪
基本上,光能传递是允许这样做的原因: 在康奈尔大学关于辐射的教程中,提到: 图像的光线追踪版本仅显示通过直接反射到达观看者的光-因此错过了色彩效果。 但是在Wikipedia中: 从某种意义上说,光能传递是一种全局照明算法,到达表面的照明不仅直接来自光源,而且还来自反射光的其他表面。 ... 当前计算机图形环境中的光能传递方法源自(并且与热传递中的光能传递方法基本相同)。 并且,如果光线跟踪能够: 模拟各种各样的光学效应,例如反射(漫反射)和散射(即,光线从直线路径偏转,例如由于传播介质,粒子或两种介质之间的界面不规则而引起的偏转) 该教程是否没有考虑这些效果,或者是否可以在射线追踪中使用光能传递方法来启用它们? 如果不是,这些光学效果是否不能完全模拟光能传递性,或者光能传递算法在解决漫反射问题上是否更有效?

1
偏振反射和折射,可包裹水面
我想在环绕轨道的栖息地中渲染逼真的水。该图像不需要实时生成,尽管我也不想花费数周的时间。我正在寻找一种可以在数小时或数天内生成逼真的图像的方法。 栖息地是圆柱形的,弯曲的内表面是生活空间。圆柱体绕其轴线的旋转提供了重力的近似值。我不是在寻找模拟物理过程的细节,而只是在寻找图像的渲染。 我想了解的特定方面是极化。从水表面反射的光被偏振,使进入水中的光垂直于反射光偏振。在只有一个水表面的情况下,忽略这种影响并简单地对反射和透射的光的比例进行建模就可以很好地工作,但是如果圆柱状栖息地的水体占曲面的比例很大,那么给定的光线将使多种不同角度的多次反射。这意味着被反射的光的比例将取决于先前施加给它的偏振角。 是否有现成的方法结合了这种效果,可以从弯曲的水表面产生逼真的多重反射图像?他们还需要对偏振模型进行建模。在某些地方水会很浅,所以我希望偏振折射会影响结果。 如果没有,我可以改用现有的光线跟踪器,还是需要从头开始? 我正在寻找现实主义,以便发现意想不到的效果,而不仅仅是将现实主义传递给随便的观察者。显然,大多数观察者(包括我)都不知道要寻找的效果,因为他们对日常生活并不熟悉,因此我在寻找“在生理上正确的方式”,而不仅仅是“令人信服”。

5
有3D图形表示的标准规范吗?
我正在读一本有关计算机图形学的书,在某些时候,它显示了一个由.dat文件创建的3D模型。 以下是.dat文件创建的一些规则: 由顶点位置/面列表组成 逆时针写 面以点(。)结尾 分数也是可以接受的 我想知道这是否是标准,如果不是,定义3D对象的标准方法是什么。 另外,如果有规范,谁来定义它以及在哪里找到?
12 3d 

2
OpenGL-边缘检测
我想加载任意网格并沿边缘绘制粗黑线以获得类似卡通色调的外观。我设法通过使用模板缓冲区在对象周围绘制了一个黑色的轮廓。您可以在此处查看结果: 但是缺少的是对象本身的黑线。我考虑过检查法线不连续性:检查相邻像素的法向矢量是否不同于当前像素。如果是,则找到边缘。不幸的是,无论是在OpenGL中还是在GLSL顶点/片段着色器中,我都不知道如何实现这种方法。 对于这种方法或其他有关边缘检测的帮助,我将非常高兴。 编辑:我不对我的网格使用任何纹理。 太精确了,我想创建一个看起来像这样的CAD / CAM解决方案(摘自Top Solid https://www.youtube.com/watch?v=-qTJZtYUDB4):

1
将光泽度转换为粗糙度,反之亦然的公认方法是什么?
大多数现代渲染器使用基于物理的材料,其模型通常会根据粗糙度进行参数化。由于渲染器并非总是如此,因此常规资产通常没有粗糙感。相反,我们将“光泽度”或“镜面反射力”视为常见的材料参数。 我知道两者之间没有精确的转换,但是对于已知镜面反射能力或光泽度的材料,是否有经验法则/近似方法获得粗糙度?
12 specular  brdf  pbr 

1
“ makeContextCurrent”到底能做什么?
我对该功能非常困惑。GLFW上下文参考如下: 该函数使指定线程的指定窗口的OpenGL或OpenGL ES上下文在调用线程上为当前。每次只能在一个线程上使一个上下文成为当前上下文,而每个线程一次只能具有一个当前上下文。 但这对我没有太大帮助。 可以像glBind-方法一样工作吗?(glBindBuffer,glBindVertexArray等)
12 opengl  c++ 

1
在计算间接光的贡献时,余弦加权半球采样是否仍需要NdotL?
从均匀的半球采样转换为余弦加权半球采样时,我在一篇文章中感到困惑。 我目前的间接贡献计算如下: Vec3 RayDir = UniformGenerator.Next() Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir) 点积为cos(θ) 但是在这篇有关更好采样的文章(http://www.rorydriscoll.com/2009/01/07/better-sampling/)中,作者建议PDF为(cos(θ)/ pi),并且没有证据表明N点L的计算。 我的问题是-这是否意味着我不再需要执行常规的点rayDirection,因为它已包含在PDF中,还是除pdf之外?

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.