Questions tagged «rendering»

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

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


1
使用多种光源进行高效渲染
要使用phong阴影渲染具有单个光源的场景,可以基于材质和光源的环境/漫反射/镜面反射分量计算传递到片段着色器中的每个片段的最终颜色。 通过将将每个单独光源应用于片段的结果加在一起,可以很容易地扩展它以适应多个光源: final_color = (0, 0, 0, 1) for each light: final_color += apply_light(material, light) final_color = clamp(final_color, (0,0,0,1), (1,1,1,1)) 但是,在有大量光源的情况下,此过程非常缓慢;对于N灯光,这种方法需要计算phong阴影N每个片段的时间。 有没有更好的方法来渲染具有大量光源(数百个,数千个等)的场景?

3
为什么顶点缓冲区对象可以提高性能?
根据我的基本了解,顶点缓冲区对象的工作原理如下(伪代码): 通常,如果要说画一个正方形,可以发出画线命令。 line (0, 0) -> (1, 0) line (1, 0) -> (1, 1) line (1, 1) -> (0, 1) line (0, 1) -> (0, 0) 如果我理解正确,则使用VBO会将顶点加载到VBO中。 define VBO load (0,0) -> VBO load (1,0) -> VBO load (1,1) -> VBO load (0,1) -> VBO load (0,0) -> VBO 然后,您可以发出一个绘图命令。 …


3
现代游戏引擎中软件栅格化的用途是什么?
我本季度要参加计算机图形学课程。我们的实验室项目之一是软件光栅化。 现在,我正在计划项目建议书,并在考虑如何使它在当代游戏开发中对其他人有用。 经过短暂搜索后,我学习了一种称为“软件遮挡剔除”的技术。它对各种分辨率的缓冲区进行软件光栅化。我们可以使用分层z缓冲区查询遮挡。 我的问题:除了软件遮挡剔除之外,现代游戏引擎中的软件栅格化还有哪些用途?
9 rendering 

2
从根本上讲,二维位图是如何渲染的?
假设我们有一台64位的可字寻址的计算机,我们想对其进行编程,以将存储为二进制图像位图(例如下面的一个)的5x7字符输出到内存映射的显示器。 由于每个字符有5 x 7 = 35像素,因此我们可以在单个单词中使用35位存储字符。最低有效位从单词的左侧开始,并且图像中的每个像素由第n位表示,如上所示,数字“ 3”将在内存中存储为:011101000100001001100000100011000101110,后跟29个未使用位设置为0。 这是在旧/现代计算机中存储字符的方式吗?还是每个像素使用单个字节/字? 如果以这种方式存储它们,汇编/机器代码中的例程(仅使用基本指令,例如计算机指令集体系结构中的位,算术和数据传输操作)将用来将这些数据转换为图像显示器是什么样的?会是这样吗? 将要更新的当前像素的x和y显示坐标存储在某个寄存器中。 将两个选定的RGB值(在这种情况下,绿色为0,255,0,黑色为0,0,0)存储在其他两个单独的寄存器中。 还有两个寄存器用作初始化为5和7的计数器,以跟踪正在渲染的图像的当前行和列。 测试列寄存器是否不为0。如果不是,则测试位图的LSB是否设置为1,然后根据结果将相应的RGB值寄存器与x和y坐标寄存器进行“与”运算,然后对结果进行MOV到显示输出寄存器。 将行计数器寄存器减1,测试是否为0。如果为0,则将其设置回5,并将y坐标增加1,并将列计数器减少1。 将持有位图的寄存器向左移动1位。 JMP到指令4。 有没有更简单或更有效的方法来做到这一点?看起来像渲染单个小文本字符这样的简单操作也需要大量的操作,并且大约需要200个CPU周期。 最后,在机器级代码方面是否有任何不错的书籍或资源可用于从头开始显示图像,因为我找不到任何东西,因为它们掩盖了这个特定主题,或者代码是用高级语言编写的,或者是使用宏的汇编程序,所有这些都是“作弊的”,并且没有说明最低层的基本情况。

1
尝试实施Microfacet BRDF,但我的结果图像错误
我正在尝试实现微面BRDF模型。我正在读塞巴斯蒂安·拉加德的幻灯片。我在代码中实现了公式,但是我认为结果图像是错误的。 黄色是材料的底色。镜面反射颜色为红色才能正确看到。 我的代码: // Fragment Shader #version 330 core in vec3 Position; in vec2 TexCoord0; in vec3 Normal; in vec3 Tangent; out vec4 FinalColor; uniform vec3 uCameraPosition; // init value: vec3(0, 0, 5) #define PI 3.1415926f #define EPSILON 10e-5f #define saturate(value) clamp(value, 0.0f, 1.0f); float BRDF_Lambert(float NdotL) { return NdotL; …
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.