如何正确钳位贝克曼分布

2024-01-04

我正在尝试实现 Microfacet BRDF 着色模型(类似于 Cook-Torrance 模型),但我在使用本文中定义的贝克曼分布时遇到了一些问题:https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf

其中 M 是微面法线,N 是宏面法线,ab 是 [0, 1] 之间的“硬度”参数。

我的问题是,这种分布经常返回非常大的值,特别是当 ab 非常小时。

例如,贝克曼分布用于计算根据以下方程生成微面法线 M 的概率:

概率必须在范围 [0,1] 之间,那么如果贝克曼分布给出的值大小超过 1000000000+,如何使用上面的函数获得此范围内的值呢?

那么有没有合适的方法来限制分布呢?或者我误解了它或概率函数?如果值超过 1,我曾尝试简单地将其限制为 1,但这并没有真正给出我想要的结果。


我也有和你一样的问题。

如果你读过

http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physicals_math_notes.pdf http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics_math_notes.pdf

and

http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physicals_math_notebook.pdf http://blog.selfshadow.com/publications/s2012-shading-course/hoffman/s2012_pbs_physics_math_notebook.pdf

你会发现这是完全正常的。引用链接中的内容:

“贝克曼 αb 参数等于 RMS(均方根)微面斜率。因此,其有效范围是从 0 开始(不包括 –0 对应于完美镜像或狄拉克 delta,并导致贝克曼公式中除以 0 错误)直至任意高的值。值 1 没有特殊意义 – 这仅意味着 RMS 斜率为 1/1 或 45°。(...)"

还有另一句话:

“微面方向的统计分布是通过微面正态分布函数 D(m) 定义的。与 F () 不同,D() 的值不限于 0 到 1 之间——尽管值必须是非负数,但它们可以是任意大(表示法线指向特定方向的微面的浓度非常高)。(...)"

您应该在 google 上搜索 Self Shadow 的基于物理的着色课程,其中充满了有用的材料(每年都有一篇博客文章:2010、2011、2012 和 2013)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确钳位贝克曼分布 的相关文章

  • 使用拼凑将组合子图(拼凑?)注释为单个图

    我试图弄清楚如何注释组合拼凑物 就好像它们是单独的图一样 我有一个由三个组合图和另一个单个图组成的拼凑而成 最终的复合图是顶部的第一个拼凑物和底部的单独图 我没有问题得到我想要的布局 但是当我使用plot annotation 它为每个图提
  • 在 JPanel 与 JComponent 中绘图

    我需要一些帮助来理解为什么 JComponent 与 JPanel 中的绘图工作方式不同 import java awt Color import java awt Graphics import java awt Graphics2D i
  • 光线追踪三角形

    我正在用java编写一个光线追踪器 并且我能够追踪球体 但我相信我追踪三角形的方式有问题 据我了解 这是基本算法 首先确定射线是否与plane三角形已打开 剪裁所有点 使它们与三角形位于同一平面上 因此xy以平面为例 根据沿着新平面向任意方
  • 如何在pdf中导出一对一的JTable[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 JTable 标题没有出现在图像中 https stackoverflow com questions 7369814 why does the jtable header not appea
  • 用圆形减去(遮盖掉?)路径

    我正在使用 Spark Path 在 Flex 中绘制一条路径 我想从这条路径中减去一个圆形 如下图所示 道路又黑又宽 有任何想法吗 我尝试使用 Shape 对象创建蒙版 但无法完全创建其中有圆孔的蒙版 找到了 不涉及口罩 我拿了Path并
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 测量字符串的像素宽度

    我需要在 Cocoa Touch 中测量字符串的像素宽度 谁能给我指出一个解释如何执行此操作的链接 在 iPhone 操作系统上略有不同 请查看NSString UIKit 添加参考 http developer apple com iph
  • 将四元数旋转转换为旋转矩阵?

    基本上 给定一个四元数 qx qy qz qw 我如何将其转换为OpenGL旋转矩阵 我也对哪个矩阵行是 向上 向右 向前 等感兴趣 我有一个四元数的相机旋转 我需要在向量中 以下代码基于四元数 qw qx qy qz 其中顺序基于 Boo
  • 我应该如何缓冲绘制的矩形以提高性能(C#/.NET/WinForms/GDI+)

    我在做什么 我正在开发一个 C NET 4 7 2 WinForms 应用程序 它使用以下命令在表单上绘制大量填充矩形Graphics FillRectangle https learn microsoft com en us dotnet
  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • 将签名位图转换为签名字符串(很奇怪的一个)

    基本上我需要将位图图像转换为字符串 但这不是常见的 困境在于该字符串由两部分组成 1 积分 2 线路 我需要将图像转换为由 分隔的两个部分 我得到的一个例子是 221A 221A270A270A25032503200720071716171
  • 是否有用于绘制图表的Python API(使用线条连接两个列表之间的相应值)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Given two lists which contain same elements of strin
  • 更改组合框下拉列表边框的颜色

    My code Private Sub ComboBox2 DrawItem sender As Object e As DrawItemEventArgs Handles ComboBox2 DrawItem If e Index lt
  • 测量以指定宽度包裹的文本高度

    如何计算渲染以指定宽度包裹的文本所需的高度 我在中找到了以下方法Graphics graphicsObj MeasureString text font width 但它需要一个实例Graphics当时我还没有图形实例 事实上 我更喜欢使用
  • 适用于图形应用程序的快速、像素精度 2D 绘图 API?

    我想创建一个跨平台的绘图程序 编写应用程序的一个要求是画布上具有像素级精度 例如 我想编写自己的画线算法 而不是依赖别人的 我不想要任何形式的抗锯齿 同样 需要像素级控制 我希望屏幕上的用户交互快速且响应灵敏 取决于我编写快速算法的能力 理
  • 重新创建窗口而不破坏上下文

    这个问题是关于使用 OpenGL 的图形应用程序 当时我正在使用 GLFW 框架 但我考虑更改它 我的目标是让用户 尽可能 在全屏模式和窗口模式之间不断切换 此过程应该花费不到一秒的时间 并且可以在运行时发生 例如 看看游戏 我的世界 用户
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • 帧缓冲区和在 opengl 中使用着色器

    我对帧缓冲区有点困惑 我想要做的是使用附加了多个纹理的帧缓冲区 填充每个纹理 然后使用着色器组合 混合 所有纹理以创建新的输出 听起来很容易 是的 我也是这么想的 但我不明白 如何将当前绑定的纹理传递给着色器 您需要的是将纹理放入特定的槽中

随机推荐

  • 将 ProgressDialog 与 onCreateDialog / onPrepareDialog 一起使用时出现问题

    我正在使用以下代码创建一个进度对话框 http developer android com reference android app ProgressDialog html 在我的里面Activity http developer and
  • 如何检查java类中是否有特定方法?

    我有一个 xml 模式 使用 trang 自动生成 它不断变化 这些变化并不是很详细 仅从此架构中添加或删除了一些元素 根据这个模式 我生成 java 类 使用 cxf 通过它我将解组 xml 文档 随着架构的更改 我自动生成的 java
  • 如何在Options和Into之间进行转换?

    我的项目中有一个结构A它在逻辑上与结构相关B来自不同的板条箱 两者内部都有一个可选的子结构 C D 假设对于这个例子 他们有这个结构定义 struct D name Option
  • PHP foreach 语句引用:重用迭代器时出现意外行为

    此代码产生意外的输出 array str split abcde foreach array as item echo item echo n foreach array as item echo item output abcde abc
  • 使用 stristr 在单个 if 条件中匹配数组中的任何值,无需多个运算符

    我在编写 PHP 代码时非常有能力 尽管我刚刚遇到了一种情况 我想知道是否可以使用stristr匹配 a 内数组中的任何值SINGLE如果条件 我不需要 想要一个类 一个专用函数或任何超级复杂的东西 我也没有做任何复杂的事情 例如尝试匹配特
  • 如何在没有动画的情况下执行展开转场?

    我如何在没有任何动画的情况下执行展开转场 我尝试设置一个展开转场 并在右侧的故事板中取消选中 动画 但它仍然是动画的 它向下滑动 我该如何解决这个问题 使用 Xcode 7 在 iOS 模拟器上运行 这可以按预期工作 只需在属性检查器中取消
  • 设置每个分支的拉取请求合并选项

    我的团队已经建立了一个 Github 工作流程 我们在其中压缩和合并针对开发分支的拉取请求 并重新调整和合并针对 master 的拉取请求 后者是为了保持跨部署的提交顺序 我可以从所有分支的 Github 设置中启用 挤压和合并 和 变基和
  • 如何查找 Tesseract OCR 配置文件中支持的参数

    我想知道Tesseract OCR使用的配置文件接受哪些参数 如何编写配置文件等 我在 上找不到任何关于此的文档他们的网站 https code google com p tesseract ocr 如何确定支持哪些参数及其含义 Tesse
  • 如何正确使用HTTP_X_FORWARDED_FOR?

    好的 我有一个小的身份验证问题 我的 Web 服务允许使用用户名和密码通过 HTTP 连接到我的 API 但此连接也可以限制为特定的 IP 地址 这意味着 SERVER REMOTE ADDR 可能是不正确的 我已经知道任何 IP 信息永远
  • 如何在 iOS 中从 MTKView 制作屏幕截图图像?

    我指的是金属套件必需品 https developer apple com metal 并通过以下方式制作模型查看器应用程序MetalKit in iOS 9 1 我想制作屏幕截图图像 RGBA 格式 MTKView 但是 我只得到黑色图像
  • 使用storm时如何将拓扑上下文中的对象访问到bolt中?

    我们在创建拓扑时需要传递一个对象 以便 Bolt 可以访问该对象并基于该对象进行一些进一步的处理 是否可以通过传递对象TopplogyContext如果是 怎么办 或者是否有其他方法可以在提交拓扑时传递对象 然后再提交 以便 Bolt 可以
  • 以编程方式更改 Xib 方向的最佳方法

    我有一个应用程序 它有一个设置页面 用户可以在其中更改应用程序的语言 最终 xibs的方向将会改变 解释一下 例如 如果语言是英语 则方向将为 LTR 但如果是阿拉伯语 则为 RTL Question 实现这一目标的最佳方法是什么 尝试解决
  • C# 中的正则表达式负向前瞻

    我需要匹配 this 但不是 this 我有这个代码 Match match Regex Match result RegexOptions IgnoreCase while match Success MessageBox Show ma
  • 如何使用代码更改组合框的边框颜色?

    我有一个组合框 我想将边框的颜色更改为红色以将其标记为必填字段 我正在通过我的代码动态生成此组合框列 为了更改边框颜色 我应该设置哪些属性 DataGridTemplateColumn dataGridComboBoxTemplateCol
  • 无法通过 PowerShell 将角色添加到 Azure 应用程序注册

    我正在使用 Powershell 将角色添加到 Azure 中的现有应用程序注册 我正在使用这个命令 Set AzureADApplication ObjectId myApp ObjectId AppRoles newAppRoles n
  • Pico 容器异常:org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependencyException:?

    我似乎遇到了 pico 容器异常 org picocontainer injectors AbstractInjector UnsatisfiableDependencyException 我的代码如下 代表网站特定页面的页面对象 publ
  • Linux 上的集群与lockf

    If lockf与 0 偏移量一起使用 两者之间有什么区别flock and lockf当在独占模式下使用时 如果有的话 我这么问是因为我正在阅读根据平台有条件地在这两个函数中进行编译的代码 并且我想了解可能的原因 之间的实际区别flock
  • 在 QTabWidget 中动态设置单个选项卡的样式

    如何单独 动态地访问单个选项卡 不是其内容或选项卡中的小部件 以实现样式目的 例如更改背景颜色或向其添加图形效果 应用程序可以通过让选项卡以另一种颜色闪烁来通知用户该选项卡需要他们的注意 就像在 Windows 任务栏中 如果窗口想要获得焦
  • Vue路由器不渲染/挂载根路径组件

    我正在制作一个页面vue vue router and laravel 问题 当我进入localhost myproject public html the Home组件未渲染在router view 如果我单击指向服务组件的路由器链接 它
  • 如何正确钳位贝克曼分布

    我正在尝试实现 Microfacet BRDF 着色模型 类似于 Cook Torrance 模型 但我在使用本文中定义的贝克曼分布时遇到了一些问题 https www cs cornell edu srm publications EGS