问题标签 [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.

0 投票
2 回答
859 浏览

ios - SceneKit:如何在不禁用 PBR 的情况下在 iOS 10 上重现 iOS 9 灯光颜色效果(一种方向,一种环境)?

正如Apple 论坛上的这个帖子所提到的,iOS 10 上的灯光现在变弱了,并且改变了场景的外观。

该线程建议设置SCNDisableLinearSpaceRendering为“是”,但这不起作用。换句话说,使用SCNDisableLinearSpaceRendering不会使您的场景在 iOS 10 上看起来与在 iOS 9 上相同——至少在我们的测试中不会。

我们也试过:

下面的屏幕截图显示了同一场景之间的差异。请注意,即使照明相同,地板也是如何从绿色变为黄色的。

场景包含一种定向光和一种环境光。

重现场景的文件:https ://www.dropbox.com/sh/cg5f7hyf1oonxfu/AAAJef7LhpSxuJyUSjqfGbmca?dl=0 。

即使它确实有效,设置SCNDisableLinearSpaceRendering为 YES 似乎也会禁用 PBR。

我们的应用程序允许用户自定义定向光的颜色。目标是在利用 PBR 的同时,在 iOS 10 场景中重现来自 iOS 9 场景的相同自定义光照。

1) 我们如何确保 iOS 10 场景看起来与 iOS 8/9 场景相同?

2) 如何在受益于 PBR 的同时实现 #1?

iOS 8/9(在模拟器上运行):

在此处输入图像描述

iOS 10(在用户设备上运行):

在此处输入图像描述

0 投票
0 回答
356 浏览

unity3d - 无统​​一 PBR 资产和标准着色器

我们是一个由两个开发人员组成的小型工作室,我们已经在资产商店购买了所有资产,但现在我们需要扩展我们的模型数据库,所以我们还要看看 Turbosquid。我们只想要 PBR 资产,因为它们在 unity 5 中看起来好多了。

Turbosquid 上的许多资产都带有这些纹理

在此处输入图像描述

反照率/金属和规范。在 Unity 标准着色器中有它们对应的位置,但是 Roghness 和 AO 呢,有没有关于将这些资源转换为 Unity 5 标准着色器的教程?

在 Unity 5 中,我们有一个叫做 Smoothness 的东西,它是否对应于 Roughness,如果是,任何提示如何将其作为 Alpha 包含在 Metallic 纹理中?

在此处输入图像描述

0 投票
1 回答
347 浏览

opengl - Frostbite PBR:同一纹理的不同纹理通道上的不同压缩

是否有可能,如果是的话,如何在 OpenGL4.x 中的不同通道上创建和读取具有不同压缩算法的 RGBA 纹理:

没有实际意义的示例 A:

  1. RG通道存储以 3Dc 编码的法线贴图
  2. B通道存储高度值,让我们说带有一些编码的镶嵌
  3. 通道存储未压缩的原始 MaterialID

示例 B:

  1. RGB存储用 DXT1 压缩的材质参数
  2. A保存 MaterialID 不压缩

背景:

在第 15 页和第 18 页的基于物理的渲染 PBR (PDF)的 Frostbite 实现中,作者描述了他们如何将材质参数结构化到不同的纹理通道中。他们还提到他们避免在某些通道上进行纹理压缩,而没有详细说明他们指的是哪些通道。

第 15 页

所有基本属性(Normal、BaseColor、Smoothness、MetalMask、Reflectance)都需要可混合以支持延迟贴花。不可混合的属性(例如 MaterialId)存储在 Alpha 通道中。我们还避免了可能影响混合质量的压缩和编码机制。

第 18 页

在这种情况下,我们选择避免​​压缩我们的少数属性并依赖简单的线性插值 alpha 混合。

0 投票
0 回答
469 浏览

java - PBR GGX 镜面去饱和颜色

我正在尝试实现 PBR 渲染器。我的镜面高光颜色不饱和(尤其是在掠射角中),并且超出了我的光体积边界球。为什么会这样?

我用来计算 GGX 镜面反射的函数:

然后在我将它与漫反射朗伯项合并在一起:

从顶部观看时,镜面高光有颜色,但随着相机靠近地面,颜色开始褪色。

镜面高光是彩色的 从放牧角度看,颜色被洗掉了

这是正确的行为吗?因为在查看湿沥青的照片时,反射的颜色似乎被保留了下来。

在此处输入图像描述

我设法通过将F0颜色更改为light.color

vec3 specular = mix(light.color, albedo * light.color, metallic);

但我读过,非金属的 F0 值应该是 0.04 左右,并且我的镜面反射超出了我的边界球。

0 投票
1 回答
1013 浏览

reflection - BRDF 通常是如何实现的?

我有一个小的路径跟踪器,我正在尝试弄清楚如何实现一些基本的 BRDF。以下是我使用的管道的简要说明(没有递归):

所以,我在 step 中计算反射光线的方向1.1.1) I construct a path

目前,我已经实现了漫反射、镜面反射、光泽反射、折射。现在我想实现一个复杂的 BRDF,比如说 Cook-Torrance BRDF。我看到它包含几个组件(漫反射和镜面反射)。我应该如何追踪这些光线以获得组合?我应该在diffuse_ray/specular_ray之间随机选择,然后像往常一样累积值(乘以一些系数)吗?(比如,如果随机值大于0.5,那么我跟踪漫射光线,否则 - 镜面反射)或者我应该跟踪多条光线从每个路口?

它通常如何在基于物理的渲染器中实现?

PS如果有人知道关于这个主题的一些好文章,我会很高兴看到它们。我试图阅读 pbrt 但它对我来说似乎非常复杂和巨大。有些东西的实现方式不同,比如相机模型和其他东西。

0 投票
0 回答
73 浏览

c++ - PBRT 到世界的转变

我习惯于使用nori 渲染引擎,并试图将一些代码转换为pbrt,以便我可以更轻松地创建具有分析球体的场景。我正在尝试从半球中采样一个矢量并将其转换为着色法线的坐标系,并且无法找出如何干净地执行此操作。我希望我的代码看起来像这样:

关于如何做到这一点的任何建议?

0 投票
1 回答
498 浏览

opengl - 基于物理的渲染:环境光在 BRDF 中的作用

我试图弄清楚我的 BRDF 方法是否正确。

我的问题:我正在添加环境光 2x。计算环境颜色时为 1x,通过将其添加到进入 BRDF 的光量中为 1x。

我不知道这是否正确,因为在我看来 BRDF 需要环境光,因为它是到达表面的照明的一部分。但另一方面,它已经通过将其与反照率颜色相乘并作为基色添加来计算...

任何帮助深表感谢!

0 投票
2 回答
556 浏览

c++ - 我应该通过 API 还是通过项目的源代码本身来使用 Intel Embree?

我正在考虑在我的渲染器中使用 Intel Embree,目前正在使用 Embree 教程。

那么,问题是,是否可以通过 API 有效地使用 Intel Embree?

我的意思是,我可以看到这些函数 <embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.c使用了一些内部数据结构,例如RTCRay. 显然,由于我不能重载任何运算符,我总是必须将我的数据结构转换为 Embree 数据结构,反之亦然。这甚至不仅仅是一个类型转换,它是一个新对象的构造。

例如,在调用之前,rtcIntersect(RTCScene scene, RTCRay ray);我从我的类对象构造RTCRay射线Ray,然后当函数返回一些数据时,我将一些值复制回来。

这看起来不是使用 Intel Embree 的好方法。

0 投票
1 回答
1388 浏览

ios - SceneKit 视图呈现为 phong 而不是基于物理的材质

我的场景中有几个对象,所有这些对象都将其材质的“照明模型”设置为基于物理的。

当我运行该应用程序时,我得到的视图看起来不像场景编辑器 - 它看起来更像 Phong 材质。

我是否需要更改根节点才能使其从一开始就以物理方式呈现?我是objective-c的新手,所以我不确定是否需要将根节点的光照模型设置为基于物理的,如果需要,我将如何访问根节点(此外,根节点可以甚至具有光照模型属性,因为它本身不可渲染)。

我的模型在ZBrush中创建,在 UIViewController 中重新拓扑和 UV 映射,并在 Blender 中转换为 .dae 文件。这些程序之一是否有可能将材质着色器设置为 phong?SceneKit 编辑器不会覆盖它并将其设置为基于物理的吗?

据我所知,所有版本的 Xcode、iOS 和 SceneKit 都足够支持 PBR。

感谢您的任何帮助 :)

0 投票
1 回答
1396 浏览

three.js - Three.js:将SSAO(Screen Space Ambient Occlusion)应用于置换贴图

我是否在我的 Three.js 项目中正确实现了屏幕空间环境光遮挡,并且运行完美,如下所示:

但是,当我使用displacementMap 设置材质(在没有启用SSAO 的情况下正常运行)时,结果就是这样。请注意,SSAO 已“正确”应用于原始球体(带有奇怪的透明人工制品),但我需要将其应用于球体的“位移顶点”)

SSAO 不正确

这是我的作曲家通行证:

这是composer的渲染循环

如果(后处理作曲家){

如何使用置换贴图归档应用到网格的正确屏幕空间环境光遮蔽?谢谢。

[更新]:经过一些工作后,我尝试使用置换贴图对场景中的每个子项执行此过程,以定义一个新的场景覆盖材料,该材料等于具有子材料置换贴图参数的 depthMaterial。

这个解决方案听起来不错,但不起作用。