Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 低级图形编程与ZBrush_Graphics_3d_Modeling - Fatal编程技术网

Graphics 低级图形编程与ZBrush

Graphics 低级图形编程与ZBrush,graphics,3d,modeling,Graphics,3d,Modeling,经过一段时间的3d建模和享受ZBrush无可挑剔的性能和众多功能后,我认为对我来说,创建类似的东西,仅仅是一个小的雕刻工具,将是一个很棒的OpenGL实践。当然,我做到了,我无法与ZBrush的表现相提并论,因为一队收入丰厚的专业人士胜过了一个业余爱好者。就目前而言,我只是假设ZBrush的硬件加速非常快,想象一下当我发现它不是,而且它既不使用opengl也不使用direct3d时,我的惊讶 这让我想在较低的水平上学习图形,但我不知道从哪里开始。图形库是如何制作的,如何在不使用opengl的情况

经过一段时间的3d建模和享受ZBrush无可挑剔的性能和众多功能后,我认为对我来说,创建类似的东西,仅仅是一个小的雕刻工具,将是一个很棒的OpenGL实践。当然,我做到了,我无法与ZBrush的表现相提并论,因为一队收入丰厚的专业人士胜过了一个业余爱好者。就目前而言,我只是假设ZBrush的硬件加速非常快,想象一下当我发现它不是,而且它既不使用opengl也不使用direct3d时,我的惊讶

这让我想在较低的水平上学习图形,但我不知道从哪里开始。图形库是如何制作的,如何在不使用opengl的情况下访问帧缓冲区。如果只显示一个像素而不使用任何现有的工具,会有多麻烦?是什么魔法赋予了ZBrush这样的性能

如果您能提供任何问题的信息,并推荐一本涵盖这些主题的书,我将不胜感激。我已经在读迈克尔·艾布拉什的《图形编程黑皮书》,但它并没有真正解决这些问题,或者说我还没有达到这一点

先谢谢你


(请不要发布像“使用opengl”或“学习数学”这样的答案,这似乎是我在发布这个问题时的反应,但这些回答都是离题的)

如果你想要一本从低级开始的书,有帧缓冲区之类的,试试Foley、van Dam等人的《计算机图形:原理与实践》。这本书比较老,传统的文本,但较新的书籍往往有更高层次的看法。对于更现代的文本,我还可以推荐Alan Watt的3D计算机图形。还有很多其他的好的介绍性文章——这只是我个人熟悉的两篇


以上两本书都与OpenGL无关——如果我没记错的话,它们都包含了从下到上理解和实现3D图形所需的特定数学和算法。

ZBrush在性能方面非常出色,但我认为这是因为它是由具有组装专业知识的图像处理专家制作的(这也可能是由于汇编代码的数量太多,他们在移植到64位时已经晚了将近20年)。它实际上一开始没有任何3D雕刻,只是一个2.5D的“pixol”画师,你可以在画布上喷洒像素,对“pixol”有一定的深度和照明.直到ZB 1.5左右,它才开始雕刻。即使如此,它也让人们印象深刻,你能以多么快的速度喷射这些2.5D“皮克斯”当一个大小相似的画笔仅仅用Photoshop或Corel Painter绘制平面像素时,会使帧速率出现停顿。因此,他们在处理3D之前就已经是性能最先进的,只不过是在画布上喷涂像素而已;这往往需要一些精英的微优化魔法

ZB在雕刻2000万个多边形模型时需要注意的一点是,它甚至不使用GPU光栅化。所有的光栅化都是在CPU中完成的。因此,它不能从一个有很多支持最新GLSL/HLSL版本的VRAM的坚固视频卡中获益;它所需要的只是能够绘制彩色像素的东西与MudBox相比,这可能是它使用如此少的内存的原因之一,因为它不必使用VBOs将内存使用量增加三倍(VBOs往往会将系统内存使用量增加一倍,同时还需要将数据存储在GPU上)

至于你是如何开始使用这些东西的,我认为让你的脚湿润的一个好方法是编写你自己的光线跟踪器。我不认为ZBrush使用,比如说,扫描线光栅化,它的成本会随着你拥有的多边形越多而成比例地增加,因为它们减少了在旋转模型时渲染的像素数。这就意味着指出,无论他们使用何种光栅化技术,其性能更取决于渲染的像素数量,而不是基本体(顶点/三角形/线/体素)的数量正在渲染。光线跟踪符合这些特征。另外,光线跟踪器实际上比扫描线光栅化器更容易编写,因为您不必为棘手的情况操心太多,而且消除过度渲染是免费的

一旦你有了一个软件,操作的成本与被渲染的像素数量比几何体的数量更成比例,那么你就可以像17年前他们在Siggraph以丝般的帧速率演示2000万多边形雕刻时那样,向它扔一船多边形

但是,很难让光线跟踪器以交互方式更新网格数据,因为网格数据不仅以交互方式雕刻,有时还以交互方式更改其拓扑结构。因此,很可能它们使用的数据结构不是光线跟踪中常用的标准BVH或KD树,而是数据结构结构,非常适合不仅变形而且拓扑结构也发生变化的动态网格。可能它们可以体素化和重像素化(或“像素化”和“重像素化”)快速移动网格,并将光线直接投射到体素表示中。考虑到他们的技术最初是如何围绕这些2.5D“像素”进行深度旋转的,这将开始有意义

无论如何,我建议从光线跟踪开始,即使它只是让你的脚湿了,还没有让你接近ZB的表现(在如何将3D几何体和照明转化为吸引人的2D图像方面,这仍然是一个很好的开始)。您可以在web上找到最少的光线跟踪器示例,这些示例仅需100行代码即可编写。构建光线跟踪器的大多数工作通常都是为了提高性能并处理丰富多样的着色器/材质。您不必为后者和材质而烦恼