首先简单回顾一下典型的纯金属与绝缘体的PBR属性:

  • 纯金属:

    • Albedo(diff): 0
    • F0(spec): >0.3 (or 0.5, epic/allegorithmic etc.)
    • Metallic: 1
  • 绝缘体:
    • Albedo(diff):可为0-1
    • F0(spec):0-0.08 (allegorithmic etc.), 典型值0.04
    • Metallic: 0

已知某材质的BaseColor、Metallic、SpecularScale(默认值0.5),欲求其diff(albedo)与spec(F0),可用如下公式:

half DielectricSpecular = 0.08 * SpecularScale;
half3 DiffuseColor = BaseColor * (1 - Metallic);
half3 SpecularColor = DielectricSpecular * (1 - Metallic) + BaseColor * Metallic;

可以看出:

  • 对于纯金属而言: Metallic=1

    • DiffuseColor=0
    • SpecularColor = BaseColor
  • 对于绝缘体而言: Metallic=0
    • DiffuseColor = BaseColor
    • SpecularColor = DielectricSpecular = 0.08 * SpecularScale(默认0.5)= 0.04(默认)
  • 对于介于两者之间的半导体而言: Metallic=(0,1)
    • DiffuseColor = BaseColor * (1 - Metallic)
    • SpecularColor = DielectricSpecular * (1 - Metallic) + BaseColor * Metallic = 0.08 * SpecularScale * (1 - Metallic) + BaseColor * Metallic

由此可见:

  1. 对于一张贴图而言,因为SpecularScale是统一指定的,所以对于其贴图中的绝缘体而言,其F0是统一的
  2. 对于一般的半导体metallic情况,其spec为DielectricSpecular、BaseColor二者的lerp,但注意,其实F0位于0.08-0.3(or 0.5)之间的情况很少;而其diff则可用basecolor与(1-metallic)简单计算出来
  3. 考虑一般的半导体metallic情况,DiffuseColor + SpecularColor=(BaseColor + DielectricSpecular) * (1 - Metallic) + BaseColor * Metallic,其中DielectricSpecular的最大值为0.08,而BaseColor、Metallic均位于(0,1),但BaseColor=1、DielectricSpecular=0.08且Metallic=0时,整个式子最大值为1.08,基本能量守恒

PBR Metallic/Roughness工作流中Albedo与F0的计算方法的更多相关文章

  1. 【转】SharePoint工作流中常用的方法

    SharePoint中使用工作流对象模型. SharePoint工作流对象模型在Microsoft.SharePoint.Workflow命名空间.你可以利用此对象模型对你的工作流进行编程.你可以启动 ...

  2. javascript状态机及在工作流中的应用

    #javascript状态机及在工作流中的应用 ##状态机 什么叫状态机(Finite State Machine),书面上的解释可以自己借助搜索引擎寻找到.通俗地来讲是一个状态定义.查找.切换和事件 ...

  3. odoo 在原有工作流中添加审批流

    odoo 在原有工作流中添加审批流 步骤: 1.加入所需的工作流节点以及相连的线(即所添加的审批流),代码如下: <?xml version="1.0" encoding=& ...

  4. 通达OA 在工作流中直接查询表单内容的开发尝试(图文)

    一个朋友提出要在工作里直接查询表单内容的需求,原来他们把工作流当做业务系统来用.也算把工作流用到极致了.为了实现像软件里直接的查询功能,他想在办理工作流的时候直接能查询到表单里面的内容. 通过研究通达 ...

  5. git 工作流中的 Sourcetree 和命令行操作对比

    git 工作流操作 1.初始化本地仓库文件夹 终端进入项目文件夹 git init 隐藏文件夹中有 .git 文件夹则初始化成功 2.git 查看仓库状态 这里以新建一个 demo.txt 为例 ① ...

  6. 工作流中容器化的依赖注入!Activiti集成CDI实现工作流的可配置型和可扩展型

    Activiti工作流集成CDI简介 activiti-cdi模块提供activiti的可配置型和cdi扩展 activiti-cdi的特性: 支持 @BusinessProcessScoped be ...

  7. 测试PHP-FPM的工作流中的疑惑点

    顺序比较乱,想到什么测试什么,测试环境 PHP7.2 和 MariaDB10.3.11 PHP-FPM是 master/worker 多进程模型master负责和web-server通讯,把接受到请求 ...

  8. 工作流中的数据持久化详解!Activiti框架中JPA的使用分析

    Activiti中JPA简介 可以使用JPA实体作为流程变量, 并进行操作: 基于流程变量更新已有的JPA实体,可以在用户任务的表单中填写或者由服务任务生成 重用已有的领域模型,不需要编写显示的服务获 ...

  9. 工作流中的流程追溯!详细解析Activiti框架中的历史组件

    Activit中的历史简介 历史: Activiti中的一个组件,可以捕获发生在进程执行中的信息并永久的保存.与运行时数据不同的是,当流程实例运行完成之后它还会存在于数据库中 历史实体对象有5个: H ...

随机推荐

  1. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解

    1,什么是ODF .NE,?就是Oracle 为 .NET (ODP.NET) 专门编写了 Oracle Data Provider,一个用于 Microsoft .NET 环境下的 Oracle 数 ...

  2. Tomcat无法访问中文路径的解决办法

    来源于:http://sccassiel.blog.51cto.com/5398709/1141821/ 修改tomcat下的conf/server.xml文件下的 <Connector por ...

  3. usr/bin/X11各个程序中文详解

    X11程序 animate 输出图形结果 bitmap bmtoa bounce 输出X屏幕保存结果 display 浏览编辑image magick图像 editres 编辑X11资源 flsfon ...

  4. Struts2常见配置(草稿)

    Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件) 1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该 ...

  5. linux 下查看磁盘IO状态

    from:脚本之家 linux 查看磁盘IO状态操作 作者:佚名 字体:[增加 减小] 来源:互联网 时间:11-15 15:13:44我要评论 Linux系统出现了性能问题,一般我们可以通过top. ...

  6. 【SqlServer】在SqlServer中把数据导入导出为Excel文件

    这里笔者介绍利用SqlServer数据库操作EXECEL文件. 1.将Excel表中的数据导入为SqlServer数据库 把Excel表中的数据导入为SqlServer数据库中的数据. 新建一个Exc ...

  7. MyBatis---使用MyBatis Generator生成Dto、Dao、Mapping

    由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类.Dao接口类甚至Mappi ...

  8. 【C语言】练习1-20

    题目来源:<The C programming language>中的习题 练习1-20:编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方. 思 ...

  9. Java 内存模型及GC原理 (转载)

    一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...

  10. virtualbox主机与虚拟机互访,虚拟机上网

    实现virtualbox主机与虚拟机互访,同时虚拟机还可以上网: 主要通过配置两块网卡来实现: 1,先配置好一台虚拟机Slave1,这里使用CentOS : 2,使用VirtualBox复制这台虚拟机 ...