如何正确钳位贝克曼分布

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(使用前将#替换为@)

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

  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 为什么 OpenGL 有远裁剪平面,以及使用什么惯用法来处理这个问题?

    我一直在学习 OpenGL 持续困扰我的一个话题是远裁剪平面 虽然我可以理解近剪裁平面和侧剪裁平面 它们永远不会产生任何实际效果 因为它们之外的对象无论如何都不会被渲染 背后的推理 但远剪裁平面似乎只是一个烦恼 由于 OpenGL 背后的人
  • 带孔的多边形三角剖分

    我正在寻找一种算法或库 更好 将多边形分解为三角形 我将在 Direct3D 应用程序中使用这些三角形 最好的可用选项是什么 这是我到目前为止发现的 本 迪斯科的笔记 http www vterrain org Implementation
  • 图形未在 JLayeredPane 中显示(java swing)

    我正在尝试根据用户输入逐步构建图像 我想做的是创建一堆图形并将它们添加为图层 但是我遇到了一些问题 因为它们不会显示 这是我正在使用的代码 public class ClassA protected final static int dim
  • 如何使用 Java2D 创建硬件加速图像?

    我正在尝试创建一个快速图像生成器 它可以执行大量 2d 转换和形状渲染 因此我尝试使用 BufferedImage 然后获取 Graphics2D 对象来执行所有绘图 我现在主要关心的是 make 速度非常快 所以我创建一个像这样的 Buf
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 将数字限制为段的最优雅的方法是什么?

    比方说x a and b是数字 我需要限制x到段的边界 a b 换句话说 我需要一个钳位功能 https math stackexchange com q 1336636 clamp x max a min x b 有人能想出一个更易读的版
  • 有什么方法可以禁用 PDF/Postscript 输出中的“减号破解”吗?

    在 R 中 将绘图保存到 PDF 或 Postscript 文件时 轴标签中的连字符会变成减号 显然 这是设计使然 根据 postscript 设备的文档 正常编码规则 有一个例外 字符 45 始终设置为负号 其在 Adob e ISOLa
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 在python中实现特定的分布

    我想回来1
  • 金属中的 SCN 着色器修改器 - 将统一传递给着色器

    我正在尝试将着色器修改器与 Metal 一起使用 我无法弄清楚如何声明制服 到目前为止我的片段修饰符是 color changes pragma arguments float4x4 u color transformation pragm
  • 图像在 3D 空间中绕 Y 轴旋转

    我有一个 BufferedImage 我想用 theta 角而不是仿射变换绕 Java 中的 Y 轴旋转图像 图片 旋转将如下图所示 矩形将是图像 我可以通过旋转图像的每个像素并绘制图像来做到这一点 因为我必须旋转很多图像 所以我认为这不是
  • iPhone glShader二进制

    有谁有如何编译着色器 保存着色器二进制文件以及使用 glShaderBinary 稍后使用 iPhone iOS OpenGL ES 2 0 加载着色器的示例 这是不可能的 至少对于 iOS 4 及更低版本 iOS 不支持任何预编译的二进制
  • 学习 SVG 的书籍/教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在.net中创建一个圆形头像图像

    我想创建一个默认头像图像 它是一个带有缩写的圆圈 我想在服务器端以 png 格式执行此操作 使用 net 图形库可以实现这一点吗 我最终这样做了 感谢您为我指明了正确的方向 TaW public ActionResult Avatar us
  • 如何在 RSM (R) 中填充轮廓颜色并写入轴名称

    我有以下数据 ct lt structure list Conc c 50L 100L 150L 50L 100L 150L 50L 100L 150L 100L 100L 100L kGy c 10L 10L 10L 15L 15L 15
  • Android Paint:如何获得“喷枪”效果?

    我正在关注 API 演示中的 FingerPaint 演示 我需要获得 喷枪 效果 从某种意义上说 当我在同一个点上绘制时 它会变得越来越暗 请看图片 正如你所看到的 中心更暗 因为我不止一次在同一个地方涂上油漆 请问 如果绘制多次 如何获
  • Java制作一条有向线并使其移动

    我想画一条有向线并让它移动 我能够绘制一条有向线并移动该线 但当我移动该线时箭头会移位 这是我的绘画方法 Line2D Double line new Line2D Double startX startY endX endY g2d dr
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50

随机推荐

  • 将 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