问题标签 [pbr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
three.js - ThreeJS GLTFExporter 不导出 PBR 材质贴图
我有一个带有 PBR 材质的简单立方体。使用的贴图是颜色、金属度、粗糙度、凹凸。当我通过此代码导出场景时,导出的 glb 缺少除颜色之外的所有地图。这是 ThreeJS 中的错误吗?
opengl - PBR 纹理和 Phong Shading 模型材质参数
我正在研究 Phong 着色模型,看起来材料具有以下属性:
- 环境、漫反射和镜面反射系数(显示它们如何对光的这些属性作出反应)
- 镜面反射分量的光泽度
现在,假设我想编写一个没有固定值的着色器,而是从 PBR 纹理中获取它们,我可以在 3D Studio Max 或 Maya 等 3D 图形软件中生成它们。这样的纹理集通常由以下组成:
- 颜色/反照率/漫反射贴图(我猜它会取代“漫反射”系数)
- 环境遮挡(我认为它将取代“环境”系数)
- 高度图(不知道着色器将如何使用它)
- 法线贴图(简单,它取代了该点的法线)
- 金属/镜面反射(我认为这些替换了“镜面反射”系数,不确定哪个工作流程最适合 phong 模型)
- 粗糙度贴图(也许它取代了“光泽度”?不确定)
我在这里没有正确理解什么?我可以首先做到这一点吗?我在 Wikipedia 上读到环境遮挡不是像 Phong Shading 这样的本地方法,这可能只是意味着必须使用某种全局方法计算地图(对我来说没有问题,因为我在 3D 软件中生成它),但这让我怀疑如果 Phong 模型实际上适合我正在尝试做的事情。
blender - 就新材料/BSDF 而言,开放着色语言 (OSL) 到底有哪些限制?
我正在研究 BRDF 描述和实现技术,而 OSL 是这样做的主要语言之一。我很好奇使用 OSL 实现新 BRDF 的方式,或者是否可以在不弄乱源代码的情况下这样做。
OSL 文档提供了一组任何渲染器都应该使用的材料。例如,Blender 提供了一组可在 OSL 中使用的扩展的已实现材质(这些材质实际上已作为 Cycles 中的节点提供)。我对创建新材料 (BRDF) 很感兴趣。根据这个线程,OSL 不应该像这样使用,而是用户应该利用已经可用的材料闭包(BSDF)来创建新材料。该线程中的 OP 试图实现 BRDF 但无法取得进展,因为他找不到获得所需某些向量的方法。
最后,我的问题是:为了创建用于 OSL 的新材料(BRDF),是否有必要先在 C++ 中实现它们并重新编译 OSL,才能最终使它们可用?我无法找到这个问题的明确答案。
opengl - 解决预过滤卷积中的亮点时的错误结果
在learnopengl高光IBL教程中,解决预滤波卷积中的亮点,教程参考这篇文章和预滤波计算如下:
这是我的代码:
当我只在我的球体上显示预过滤器颜色时,它看起来像这样:
如果我使用它会变得不那么绿色,const uint SAMPLE_COUNT = 4096u;
并且在使用时没有带亮点的绿色我prefilterColor += textureLod(environmentMap, L, 0.0).rgb;
应该在这个代码中提醒哪里得到既没有绿色也没有亮点的结果?
cocoa-touch - ARKit 人脸追踪 PBR
我正在使用 ARKit 面部跟踪配置并实时显示面部网格,我可以成功为其添加漫反射和法线贴图,并且它们显示正确,但是粗糙度或金属度没有运气,粗糙度没有效果,金属度渲染全黑和沉闷/不透明,我尝试过的事情:
self.contentNode?.geometry?.firstMaterial?.roughness.contents = UIColor.black //UIColor.white
self.contentNode?.geometry?.firstMaterial?.metalness.contents = UIColor.black //UIColor.white
self.contentNode?.geometry?.firstMaterial?.roughness.contents = myMetallnessTextureImage
self.contentNode?.geometry?.firstMaterial?.metalness.contents = myRoughnessTextureImage
值得注意的是,大部分光照管理是由会话完成的,这就是为什么网格在使用它时会响应环境光和直射光,而当只有环境光时,网格看起来是介电/粗糙的,而当有很强的定向光,看起来金属/光滑,是会话控制了这些参数吗?
如果我将面网格导出为.obj
,在 Xcode 上打开它时,我可以调整材质属性,并且可以获得完全金属光泽的面,但是当实时将相同的参数应用于我的网格时,它们不起作用。
最后,我想要的是能够通过使用灰度图使脸部的某些部分变成金属色。
另外我知道面部跟踪配置不允许环境贴图(如果错误,请纠正我),因此完全镜像的纹理看起来非常不现实,但无论如何,它应该可以工作。
谢谢!
c - cmake灯丝渲染项目时出错
我试图 Cmake 谷歌灯丝项目(https://github.com/google/filament)。但是我遇到了下面的错误显示。
我已按照 Windows 构建部分中提到的步骤进行操作,但仍然出现错误。有没有其他方法来构建这个项目?
c++ - 来自朗伯曲面的反采样
在Physically Based Rendering一书中,朗伯曲面通过以下方式进行采样(参见http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Sampling_Reflection_Functions.html#):
我现在想要做的是,给定
wo
和wi
,计算u
使得调用Sample_f(wo, &wi_other, u)
产量wi_other == wi
(至少近似)。
虽然基本上解决这个问题并不难,但我的解决方案是浮点不精确。如果您熟悉光线追踪:如果遵循精确计算的方向的光线wi
撞击表面点p
,则可能会证明近似计算的方向wi_other
与所在的整个表面非常接近p
。
到目前为止,这是我的解决方案:
我们能以某种方式减少解决方案的错误吗?
shader - Direct3D11 / PBR 着色器 - 场景太暗 - 有 BRDF(白肋烟/迪士尼)着色器的经验吗?
我成功地潜入了 DirectX/3D11 (SharpDX/C#),我将一切变为现实,最后,我想实现 PBR。我非常想要像 Disney / Burley 这样的唯一 BRDF,幸运的是,我在 Shader 文件夹中找到了 Microsoft Shipped PBREffect.fx,这是一个完全符合我目标的 HLSL 着色器。
最后,我所有的常量缓冲区都在传递,PBR 本身工作正常 - 但在更大的场景中,我成功应用的唯一灯光非常小,如镜面反射点,其他一切都保持黑暗。例如,在太阳能电池板纹理上,如果没有空间光晕,ALBEDO 根本不可见。粗糙度、AO、法线一直都在应用,因为我有可见的环境光遮蔽灯白线,这是来自其他贴图。
我处于某种不可能的境地。我无法实现其他 Light 解决方案,因为这会变砖或覆盖整个 PBR。通过所有功能实现不同的实现。
是否有人对这个着色器有一些经验和想法,如何获得“世界之光”,我在 Bis 场景中的所有对象上都有一个基本亮度。像 1000.0f 和更高的渲染空间。
斯蒂芬。
附上3张截图。
[地图/PBR 完美应用,但仅在聚光灯下] https://i.stack.imgur.com/JeUH3.jpg [黄铜 PBR 材料 - 仅在现场点亮] https://i.stack.imgur .com/KZNK7.png [image1] https://i.stack.imgur.com/Unmvm.jpg