材质系统(1):起源与概念

目录

前言

1. 材质系统的源头

2. 材质系统与光照模型的关系


前言

材质系统是计算机图形学的一部分。在图形学中,材质(Material)是一种描述表面外观的属性。在三维计算机图形中,通常需要为每个物体指定材质,以便在渲染时准确地呈现物体的外观。材质可以包括多个属性,例如颜色、反射率、透明度等等。

本文主要内容来源为计算机图形学核心知识、本人项目经验以及GPT辅助。如有错误烦请指正。

计算机图形学主要研究的领域有三个:建模、渲染、动画。
(1)建模(Modeling):构建三维的几何模型
(2)渲染(Rendering):将模型显示在屏幕上
(3)动画(Animation):模拟真实世界的物理运动
三者有部分的先后继承关系:渲染依托场景中建好的模型,动画依托模型运动以及渲染表现。
材质系统是渲染环节着重研究的内容。以下是一些该领域常见名词:

英文名中文名
material材质
texture  贴图、纹理
shader  着色器

当在引擎中创建一张材质后会自动分配默认的shader,材质可以没有贴图,即显示纯色。

1. 材质系统的源头

材质系统的概念并没有一个明确的单一起源或提出者,因为它是随着计算机图形学的发展逐渐演进和完善的。材质系统的发展与3D图形渲染技术、着色器技术、以及对真实世界物理特性模拟需求的增加紧密相关。在早期的计算机图形学中,材质的外观主要通过简单的颜色和纹理来定义,但随着技术的进步,材质系统变得越来越复杂,包含了更多关于光与物质相互作用的物理属性。

第一阶段:早期材质系统
在20世纪70年代和80年代,随着3D计算机图形学的初期发展,人们开始尝试模拟现实世界中不同材质的表面特性。那时,材质系统通常包括基础的颜色和纹理贴图,但这些系统相对简单,并没有形成完整的理论体系。

第二阶段:纹理映射技术普及
到了90年代,随着实时渲染技术的发展,尤其是随着实时3D游戏和高级视觉效果需求的增加,材质系统开始包含更高级的属性,如反射、折射、凹凸映射等,以实现更加逼真的视觉效果。

第三阶段:PBR的普及
21世纪初,特别是随着PBR(基于物理的渲染)理念的提出和普及,材质系统开始更加注重物理真实感,模拟光线在不同材质表面的物理行为。PBR的概念在很大程度上统一了材质系统的参数和工作流程,促进了材质系统在游戏和电影制作等领域的标准化。

2. 材质系统与光照模型的关系

材质系统和光照模型在计算机图形学中是紧密相关但各自独立的两个概念,它们共同作用于渲染过程中,以模拟和再现真实世界中物体的视觉外观。下面是它们之间的关系:
材质系统
材质系统负责定义物体表面的视觉特性,包括:

  • 颜色(Color):物体表面的基本颜色(固有色)。
  • 纹理(Texture):表面的细节,如图案和细微结构。
  • 粗糙度(Roughness)或光泽度(Glossiness):表面反射光的柔和度或镜面反射的清晰度。
  • 金属度(Metalness):材质是否反射像金属那样的光线。
  • 透明度(Transparency)和折射率(Refractive Index):控制光线通过物体的程度和弯曲程度。
  • 法线(Normal)、凹凸(Bump)和置换(Displacement)贴图:增加表面的复杂几何细节。

光照模型
光照模型则关注光线如何与场景中的对象相互作用,包括:

  • 光源类型:如点光源、聚光灯、无限远光(太阳光源)、环境光源等。
  • 光照强度:光源发出的光量。
  • 光照颜色:光源发出的光的颜色。
  • 阴影:光线被物体遮挡产生的效果。
  • 全局光照(Global Illumination, GI):考虑了场景中所有表面相互之间的光照影响,如反射和折射。

两者关系

  • 相互作用:材质系统定义了物体表面对光的反应方式,而光照模型则提供了光的来源和特性。材质的外观在很大程度上取决于光照条件,而光照效果也会因材质的不同特性而变化。
  • 渲染结果:在渲染过程中,材质系统和光照模型相结合,决定了最终图像的视觉效果。例如,一个高光泽度的材质会在强光源下产生明显的高光点,而在柔和的光照条件下则看起来更均匀。
  • 真实感模拟:材质系统的参数通常需要与光照模型的特性相匹配,以实现更加逼真的渲染效果。例如,在物理上准确的渲染(PBR)中,材质的金属度、粗糙度等参数与光照模型的物理基础紧密相连。
  • 艺术控制:艺术家和设计师可以通过调整材质和光照参数来创造不同的视觉效果和情绪,这对于电影、游戏、建筑可视化等应用至关重要。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/568977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客NC195 二叉树的直径【simple DFS C++ / Java /Go/ PHP】

题目 题目链接: https://www.nowcoder.com/practice/15f977cedc5a4ffa8f03a3433d18650d 思路 最长路径有两种情况: 1.最长条路径经过根节点,那么只需要找出根节点的左右两棵子树的最大深度然后相加即可。 2.最长路径没有经过根节点&#xf…

JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)

目录 Arrays Arrays类提供的的常见方法 用法示例 Comparable、Comparator Comparable Comparator 本篇学习Arrays,不算作是重点知识,但是为学习后面的Lambda表达式打一个基础,或者说,作为铺垫。 Arrays 用来操作数组的一个…

初见-响应式编程-002

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace #Reacti…

lnmp架构

目录 环境 步骤 下载nginx源码包,并解压 安装依赖包 进行预编译 、编译安装 安装php、设置开机自启 配置nginx让其支持php服务 浏览器测试 安装mariadb 部署discuz论坛 简介 LNMP架构是一种常见的Web服务器架构,由Linux、Nginx、MySQL和PHP组成。它…

高级数据结构—线段树(一)

学线段树的原因是因为cf的一道题目始终想不出来怎么优化,后来知道区间查询和修改要用到线段树。。。 原题:Iva & Pav 线段树的作用 区间最值查询:可以高效地找到给定区间内的最大值、最小值等。 区间和查询:可以高效地计算…

Leetcode算法训练日记 | day34

专题九 贪心算法 一、K次取反后最大化的数组和 1.题目 Leetcode:第 1005 题 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个…

关于Spring事务管理之默认事务间调用问题

由事务的传播行为我们知道, 如果将方法配置为默认事务REQUIRED在执行过程中Spring会为其新启事务REQUIRES_NEW, 作为一个独立事务来执行. 由此存在一个问题。 如果使用不慎, 会引发org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back bec…

ACE框架学习

目录 ACE库编译 ACE Reactor框架 ACE_Time_Value类 ACE_Event_Handler类 ACE定时器队列类 ACE_Reator类 ACE Reactor实现 ACE_Select_Reactor类 ACE_TP_Reactor类 ACE_WFMO_Reactor类 ACE库编译 首先去ACE官网下载安装包,通过vs2017或者2019进行编译&#x…

【洛谷 P8605】[蓝桥杯 2013 国 AC] 网络寻路 题解(图论+无向图+组合数学)

[蓝桥杯 2013 国 AC] 网络寻路 题目描述 X X X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块,每一个类,每一个方法和用例之前都加上mark标签,那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时,自主选择执行全部用例、某个模块用例、某个流程用…

数据分析专家能力模型

招式:懂商业(业务能力) 外功更偏重于技能,首先需要懂招式,即懂商业,数据分析最终是为业务服务的,无论是互联网企业准求的用户增长和UJM分解,还是传统企业追求的降本增效和精细化运营…

appium相关的知识

>adb shell dumpsys window | findstr mCurrentFocus adb devices # 实例化字典 desired_caps = dict() desired_caps[platformName] = Android desired_caps[platformVersion] = 9 # devices desired_caps[deviceName] = emulator-5554 # 包名 desired_caps[appPackage] …

重建大师出现“密集匹配失败”的情况是什么原因?

答:一般出现密集匹配失败的情况,就是瓦块连接点过少,空瓦块边缘瓦块等原因导致。遇见这种情况,确定是边缘瓦块导致后,就可以不用管,不是模型主体,不影响成果。 重建大师是一款专为超大规模实景三…

MySQL__索引

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724 🎉 主题: MySQL__索引) ⏱️ 创作时间:2024年04月23日 ———————————————— 索引介绍…

消消乐算法总结

前言 最近在工作中遇到一个问题,做一个消消乐的demo项目,连续相同数目超过四个后就要消除。我在网上看了很多解决方案,有十字形,横向,纵向,梯形搜索。越看越迷糊。这不是用一个BFS就能解决的问题吗&#x…

MySQL数据库进阶篇一(存储引擎、索引)

目录 一、存储引擎1.1、MySQL体系结构:连接层,Server层,引擎层,存储层1.2、存储引擎1.2.1、存储引擎:InnoDB(MySQL 5.5后默认的存储引擎)1.2.2、存储引擎:MyISAM (MySQL早期默认存储引擎)1.2.3、存储引擎&a…

数据可视化———Tableau

基本认识: 维度:定性—字符串文本,日期和日期时间等等 度量:定量—连续值,一般属于数值 数据类型: 数值 日期/日期时间 字符串 布尔值 地理值 运算符 算数运算符:加减乘除,%取余,…

【Flask】Flask中HTTP请求与接收

一、接收http请求与返回响应 在Flask中,可以通过app.route装饰器来定义路由函数。 app.route(/BringGoods,methods [POST, GET]) GET请求:使用request.args.get(key)或者request.values.get(key)来获取URL中的参数。 POST请求: 使用req…

Python自学之路--001:Python + PyCharm安装图文详解教程

目录 1、概述 2、Python解释器 2.1、下载 2.2、Python安装 2.3、Python环境变量配置,必选项 3、PyCharm安装 3.1、PyCharm下载 3.2、PyCharm安装 4、建一个Hello World 5、Phcarm设置 5.1、Phcarm汉化 5.2、Phcarm工具栏显示在顶部 5.3、Phcarm通过pip安…

【QT学习】9.绘图,三种贴图,贴图的转换,不规则贴图(透明泡泡)

一。绘图的解释 Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDev…
最新文章