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

embedded/2024/9/24 16:09:08/

目录

前言

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.ppmy.cn/embedded/12713.html

相关文章

Android RecycleView DiffUtil内部move导致item移动到屏幕可见范围之外原因及处理方案

DiffUtil.calculateDiff (Callback cb, boolean detectMoves) 方法中的 detectMoves 参数用于指示是否需要检测列表中的数据项是否有移动操作。 如果 detectMoves 设置为 true(默认),DiffUtil 将会尝试找出数据项的移动操作,即数…

pycharm远程连接server

1.工具–部署–配置 2.部署完成后,将现有的项目的解释器设置为ssh 解释器。实现在远端开发 解释器可以使用/usr/bin/python3

ISP比普通的静态代理相比有什么优势?

ISP(Internet Service Provider),即互联网服务提供商,是向广大用户综合提供互联网接入业务、信息业务、增值业务的电信运营商。而静态代理则是一个固定不变的代理IP地址,具有稳定性强、兼容性好和管理方便等特点。当我…

MySQL简解

文章目录 1. MySQL框架2. 执行流程2.1. 连接池:2.2. SQL 前端(SEVER)2.2.0. 查询缓存2.2.1. SQL 接口2.2.2. SQL 解析器2.2.3. SQL 执行器2.2.4. INNODB 中读写操作 2.3. 数据的保存形式 3.其他重要概念3.1. 索引3.1.1. 简单概念3.1.2. 索引优化:1. Usin…

C++11统一列表初始化,initializer_list

目录 1.C11统一了列表的初始化 2.initializer_list 3.initializer_list是如何支持的 1.C11统一了列表的初始化 现在无论内置类型和自定义类型都可以用列表初始化。 class Date {public:Date(int year, int month, int day):_year(year),_month(month),_day(day) {}private:…

Java | Leetcode Java题解之第45题跳跃游戏II

题目&#xff1a; 题解&#xff1a; class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0; int steps 0;for (int i 0; i < length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]); if (i end) {end maxP…

IDEA 编码格式设置 UTF-8

IDEA 编码格式设置 UTF-8 1.文件编码设置为UTF-8 Editor > File Encodings 2.编译编码设置为utf-8 Build&#xff0c;Execution&#xff0c;Deployment > Complier > Java Complier 按图中设置&#xff1a;-encoding utf-8

机器学习常用评价指标的公式和含义

在机器学习中&#xff0c;特别是在分类任务中&#xff0c;评价模型性能常用以下指标。这些指标主要基于混淆矩阵&#xff0c;该矩阵记录了实际类别与模型预测类别的对应情况。下面是这些指标的定义和计算公式&#xff1a; 1. TP&#xff08;True Positives&#xff09;: - …