为什么我的Monte Carlo Raytracing的噪音这么大?
我已经使用蒙特卡洛方法实现了全局照明,并使用刮擦的像素教程作为指南.我的最终图像使其非常嘈杂!下面的示例为64个样本,以前我以前使用了高达512个样本,并且仍然非常嘈杂. 有什么想法可能是什么? 编辑: 这是带有128个样品和16倍超级采样的输出,产生了2048个样品.仍然有很多噪音! 解决方案 路径追踪很嘈杂;这是算法的本质.考虑Wikipedia的示例: 左上图的每个像素为1个样本,从那里(从左至右,上,底部),每个正方形都会加倍.因此,右下方是32768 spp. 还有其他相关算法可以减少相同数量的计算: biDirectional Pathal tracing tracing tracing photon映射
8 2023-05-23
编程技术问答社区
根据强度计算出光的体积半径
我目前在计算递延渲染器的光音量半径上有问题.在低光强度上,体积尺寸看起来正确,但是当光强度(因此是半径)增加时,光体积似乎越来越小. 我正在计算这样的光音量半径(在世界空间中): const float LIGHT_CUTOFF_DEFAULT = 50; mRadius = sqrt(color.length() * LIGHT_CUTOFF_DEFAULT); i然后使用此值来扩展一个框. 在我的着色器中,我会计算这样的衰减: float falloff = 5; float attenuation = max(0, 1.0 / (1+falloff*(distance*distance))); 很明显,我正在弄乱数学.衰减应该是线性的,对吗?但是,我现在如何正确计算光音量的世界尺度值? P.S.由于我打算使用HDR渲染,因此浅色可以超越(1,1,1). 解决方案 不使用该方程式,灯永远继续. plot 1.0 / (1+5*(x*
2 2023-05-10
编程技术问答社区
带有OpenGL GLSL的散射光
当前,我的OpenGL场景不使用任何灯,它仅使用具有固定颜色的线框 - 对我来说很好. 现在,我想添加第二种模式,其中线框显示为(半)固体模型.为此,我需要一些照明.照明应该很容易,只是一些具有固定颜色和方向的全球定向光. 所以两个问题:据我了解,我可以在片段着色器中做到这一点 - 这是正确的吗? and:我当前的片段着色器很简单: #version 130 uniform vec4 inputColor; out vec4 FragColor; void main() { FragColor=inputColor; } 在这里必须添加什么才能让我的几何形状被全球定向光点亮(但不是其他点光源)? 解决方案 要计算弥散的光甚至镜面灯光,您必须分别知道表面碎片的正常向量.弥漫光辐射率取决于入射光的方向 - 参见这是如何在Aerotwist上伪造的光?.镜面亮点还取决于视图的直接. 如果您没有正常的向量,则可以通过片段着色器中的视图空间位置的部分
4 2023-05-10
编程技术问答社区
GLSL聚光灯的投影量
在我的开源项目中,我使用QT3D设置了延期渲染管道.到目前为止,一切都很好,但是现在我想通过添加聚光灯投影量来向前迈进. (例如,现场有烟) 这样: 我正在使用的碎片着色器是问题的末尾. 我读到,对于每个片段,我都应该从光线位置行进,并找到与锥体的交叉点,但是我不知道如何将其转化为GLSL. 我可以轻松地添加来自Gbuffer的深度图(从相机角度来看)的统一图,但我不知道这是否有帮助. 由于我的GLSL知识非常有限,请使用实际代码回复,而不是我无法理解/转化为代码的冗长的数学解释.请对我耐心. uniform sampler2D color; uniform sampler2D position; uniform sampler2D normal; uniform vec2 winSize; out vec4 fragColor; const int MAX_LIGHTS = 102; const int TYPE_POINT = 0; const int TYPE
0 2023-05-10
编程技术问答社区
OpenGL: 渲染8个以上的灯光,如何?
我应该如何在OpenGL中实现8个以上的光? 我想有效地渲染无限量的灯. 那么,这样做的首选方法是什么? 解决方案 延期阴影. 简而言之,您可以在没有任何灯光的情况下渲染场景.取而代之的是,您将正态和世界位置以及纹理像素存储在多个帧缓冲器中(所谓的渲染目标).如果您使用多个渲染目标扩展名,甚至可以在单个通过中进行此操作. 准备好缓冲区后,您就开始渲染一堆全屏幕四边形,每个四边形都有一个像素着色器程序,可以读取正常和位置,并计算一个或多个光源的灯. > 由于光是添加剂,因此您可以根据需要渲染尽可能多的全屏幕四边形,并根据需要累积光线. 最后一步在您的灯光和未纹理的框架挡板之间进行组成. 这或多或少是做到这一点的最新方法.但是,使雾和透明度与这种系统一起工作是一个挑战. 其他解决方案 OpenGL灯是一个简单的系统,据我所知,它已经在不弃用的列表中.您应该通过编写 Shader 来处理灯光.看看在这里..
0 2023-05-10
编程技术问答社区
什么是OpenGL中的法线?
我听说我应该使用正常的代替颜色,因为颜色被贬低了. (这是真的吗?)正常人与光的反射有关,但我找不到明确而直观的解释.什么是正常? 解决方案 a 正常通常是一个单位向量在特定点.因此,它告诉您表面面向哪个方向.正态的主要用例是照明计算,您必须在给定的表面点和朝照明器或相机的方向之间确定正常之间的角度(或实际上通常其余弦). 其他解决方案 glNormal最小示例 glNormal是一种弃用的OpenGL 2方法,但要简单地理解,所以让我们研究一下.下面讨论了现代着色器替代方案. 此示例说明了一些有关如何 display函数的评论说明每个三角形的含义. #include #include #include #include /* Triangle on the x-y plane. */ static void draw_triangle() { glBegin(GL_
4 2023-05-10
编程技术问答社区
为什么照明出现在对面?
我试图使用 this 教程来构建照明.但是,照明出现在人类物体的错误一侧,我不知道为什么. 正态是每个三角形的.三角形的顶点基本上具有相同的正常值: glm::vec3 calculateNormal(glm::vec3 vertice_1, glm::vec3 vertice_2, glm::vec3 vertice_3) { glm::vec3 vector_1 = vertice_2 - vertice_1; glm::vec3 vector_2 = vertice_3 - vertice_1; return glm::normalize(glm::cross(vector_1, vector_2)); } 这是顶点着色器的代码: #version 330 core layout (location = 0) in vec3 pos; layout (location = 1) in vec3 normal; out vec4 ver
0 2023-05-10
编程技术问答社区
OpenGL钢网缓冲区OR操作?
我不确定是否可以做到这一点,但值得一试.我正在使用模板缓冲区减少使用此算法在延期渲染器中的光量(当相机在卷外): 时: 使用便宜的着色器,将面部抽回面孔,深度测试设置为Lequal,并将其标记在模板缓冲区中. 使用昂贵的照明着色器,绘制带有深度测试的前面面孔. 这只会导致光音量阴影内的像素.当绘制多个灯光时,这个问题出现了.首先,由于状态变化很昂贵,因此对于每盏灯的廉价和昂贵的着色器之间反复切换可能不是最好的主意.理想情况下,我想通过廉价着色器渲染8幅轻卷来利用所有8块模型缓冲液,然后用昂贵的着色器和8幅轻卷.但是,当灯光重叠时会出现问题,因为没有办法告诉哪个像素属于哪个灯. 提出的解决方案是每盏灯中的模板缓冲区中使用1位.因此,对于Light n ,在便宜的通行证中标记模板缓冲区中的 n ,然后在昂贵的通行证中仅使用该位渲染像素. 我以前从未使用过模板缓冲区,但根据我的阅读,这似乎不可能.为此,我必须使用位置或模板功能设置模板缓冲区.但是,我能看到的模板缓冲
2 2023-05-10
编程技术问答社区
GLSL固定函数片段程序替换
为顶点设置使用OpenGL固定函数管道时,片段程序看起来与固定函数顶点设置兼容?我想这通常取决于光源和纹理层等的数量. 解决方案 您可能有兴趣看看 shadergen .从描述: Shadergen是一个可以自动产生的着色器的程序,以模仿一组固定函数状态的结果.该工具用于验证第9章中描述的固定功能着色器代码. 顺便说一句,如果将固定功能和GLSL混合在一起,您很可能会遇到细微的驱动程序问题.这不是执行阴影的"最常用的方式",因此它具有很大的变化(至少在我尝试过时确实如此).如果您需要的是有效的,那就太好了!否则,您可能会在GLSL中编写顶点和碎片着色器.据我所知,现代GPU的驾驶员无论如何都使用引擎盖下的着色器来执行固定功能. 其他解决方案 while 标准的OpenGL灯模型是 phong shading ). 标准OpenGl blinn-phong blinn-phong blinn-phong 像光模型一样.这个: Ka ... ambient
0 2023-05-10
编程技术问答社区
改变安卓系统上的 "脉冲通知灯"/轨迹球灯设置(仅Nexus One?)
在Nexus One上(至少在2.1-update1中,我认为在2.1中),在声音和显示下有一个设置:"脉冲通知灯".这似乎不存在于" 2.1 with with Google apis"模拟器图像上.我还没有检查任何其他设备. 我想在没有用户交互的情况下以编程方式设置此此处,以便制作一个语言环境插件,因此当我在桌子上醒着时,该设备可以吸引我的注意力,而当有人在凌晨4点向我垃圾邮件时,它不会使房间泛滥.很明亮. 我没有在 android.provider.settings中看到它.系统此屏幕上的许多其他内容都在哪里,所以我在平台源中看到了一个. NotificationManagerService中有一些相关部分/server/notificationManagerService.java#l748" rel =" nofollow noreferrer"> enqueuenotificationwithTag and updateTalightSlocked .这是 har
0 2023-04-27
编程技术问答社区
在着色器程序中,光照模型的计算是如何进行的?
我正在尝试阅读本教程: https://aerotwist.com/tutorials/tutorials/an-introdiorcials/an-introduction -to shaders-part-2/ 但我无法跟进.基本上,代码通过使用直接在GPU上运行的着色器来创建定向灯.这是代码: // same name and type as VS varying vec3 vNormal; void main() { // calc the dot product and clamp // 0 -> 1 rather than -1 -> 1 vec3 light = vec3(0.5,0.2,1.0); // ensure it's normalized light = normalize(light); // calculate the dot product of // the light t
12 2023-04-26
编程技术问答社区
Unity-ProBuilder-烘焙光照图时的黑线和白线
我有一个问题,当我使用Probuilder在场景中生成烤灯图纹理时,将生成长,黑白线. 我已经确保了以下内容: 在所有probuilder对象上ran"生成UV2" 确保启用"自动灯图UVS" 单击"工具> Probuilder>维修>重建所有Probuilder对象" 确保您的对象是静态的 确保您的光线静态,并设置为烘烤(或混合) 打开照明设置并重置为默认设置,只是为了确保没有奇怪的设置冲突 增加填充和最大间距到完整 在所有对象上都没有选中/重新检查" stich seams" - 无效. 将我的定向光的正常偏差设置为0 版本 概率〜v5.0.3 Unity〜2021.1.15f1 屏幕截图 解决方案 我弄清楚了,这很疯狂……! 它似乎归结为硬件问题.如果我使用渐进式GPU(预览)生成,那么我会得到这些接缝. 但是,如果我切换到渐进式CPU (并更长300倍!),则灯图完美地构建! Unity和我的集成图形处理器之间必须有一些错误.
2 2023-04-21
编程技术问答社区
使用IDataErrorInfo在验证期间启用禁用保存按钮
使用IDataErrorInfo进行验证时如何禁用/启用按钮? 我正在使用MVVM使用Galasoft Light Framework.在我的模型类中,我已经实现了IDataErrorInfo以显示错误消息. public string this[string columnName] { get { Result = null; if (columnName == "FirstName") { if (String.IsNullOrEmpty(FirstName)) { Result = "Please enter first name"; } } else if (columnName == "LastName") { if (Strin
0 2023-04-07
编程技术问答社区
用于辐射计算的遮光罩算法
我正在使用软件(Ruby -Sketchup)来计算行人级别城市开发中的辐射(太阳,天空和周围建筑物).最终目标是能够创建一个显示总辐射水平的轮廓图.对于总辐射,我是指短波(光)和长波(热). (给您一个想法: http://www.iaacblog.com/maa2011-2012-digitaltools/files/2012/01/insolation-analysis-allasy-allsisy-allasy-ally.jpg ) ) 我知道有几个现有软件可以执行此操作,但是我需要写自己的计算,因为此计算只是更复杂的工作流程的一部分. (明显的)伪代码如下: Select and mesh surface for analysis From each point of the mesh Cast n (see below) rays in the upper hemisphere (precalculated) For each ray chec
6 2023-03-23
编程技术问答社区
光线组件在Unity的Image后面
我有两个不同的画布:一个用于背景,一个用于游戏场景 主要画布: 背景画布: 我遇到了这个问题:如果我将一个对象放在主要画布中,一切似乎都有效,但是如果我在此对象中添加一个光组件,我将看不到光(就像背景图像一样灯前方): 没有背景画布: 带有背景画布: 任何想法为什么? (问题不是BGCANVAS,问题是BgCanvas的图像组成部分,如果我禁用了它,我可以看到光) ) 解决方案 灯是3D场景对象 UI对象不受灯或场景对象的影响,因为它们存在于完全不同的渲染路径中:
8 2023-03-06
编程技术问答社区
光源设置不正确
我有这个代码,但是灯光似乎无法正常工作,当我使对象变暗时,当我旋转它时,光源似乎也会旋转.我无法弄清楚问题在哪里.我试图修改灯的模型,但仍无法正常工作 这是程序: while (!glfwWindowShouldClose(window)) { /* Render here */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glm::mat4 view = glm::mat4(1.0f); glm::mat4 projection = glm::mat4(1.0f); projection = glm::perspective(glm::radians(45.0f), (float)width / (float)heigh, 0.1f, 100.0f); view = glm::translate(
0 2023-02-25
编程技术问答社区
在Unity中引用一盏灯的问题
我正在尝试团结一致的驾驶游戏,作为其中的一部分,我试图使交通灯闪烁. 这是我的脚本,我将其附加到交通信号灯上.交通信号灯的层次结构是: 交通lights_a(基本交通灯) 红光(我想制作闪光灯的光) using UnityEngine; using System.Collections; public class Blink_Light : MonoBehaviour { public float totalSeconds = 2; // The total of seconds the flash wil last public float maxIntensity = 8; // The maximum intensity the flash will reach public Light myLight = Light RedLight; // The light (error)
16 2023-02-18
编程技术问答社区
Unity-2D着色器/照明,如Terraria或Starbound
我有一张带有很多精灵的地图.我可以用弥漫性阴影添加材料,而不是添加很多灯.但这不会给我我想要的结果.性能很重. 示例 在第一张图像中,您可以看到光线生成的光.它正在通过"开放空间"以最佳的方式扩展其灯光,并且可以很快被块停止. 这是顶层的一个很好的例子.我们可以看到某种2D定向光吗?请注意,房屋内部的照明再次由火炬产生.右侧的洞穴显示了如何处理光的更好的例子.另外,请注意背景中的孔,这会在洞穴中产生一些额外的光.好像灯确实在那里闪闪发光. 我拥有的 您可以在这里清楚地看到问题.灯光增加了强度.由于某种原因,光线在某些瓷砖周围产生了平方边缘.此外,很多灯都会很快引起性能问题. 雷广播? 我读到您可以以某种方式使用Raycasting?针对"开放空间"之类的东西?我没有着色器或游戏中的照明经验.我会喜欢如何实现这种Terraria/starbound照明效果,这是一个很好的解释答案.这并不意味着我是说雷广播是解决方案. Minecraft
18 2023-02-13
编程技术问答社区
CSS "逼真 "的阴影(光源)
请看下面的图片: 蓝色框是divs.现在我要做的是实现2.5D功能: 我希望灰色阴影有些3D.起初,我想将其分配给像这样的" y"轴: "box-shadow: -5px -5px 10px" + value.tallness + "#888" ,但结果是上面的图像. 关于如何仅在一侧制作阴影的任何想法,就像来自某个地方的光源吗? extra- 移动"光源"呢? 解决方案 您走了: http://jsfiddle.net/kacdn/15/15/ 拖动光源以影响阴影. 较高的块: 有更大的顶部,左边框 进一步落影 他们的影子更模糊 其他解决方案 如何简单地移动阴影: $(document).on('mousemove', function(e) { var elm = $("#test"), x = ~Math.round((e.pageX - elm[0].offsetLeft -
8 2023-02-09
编程技术问答社区