2.2 模型与材质基础

news2024/11/18 7:40:45

 

一、渲染管线与模型基础
1. 渲染管线

image.png


可编程阶段(蓝色区域):
1顶点着色器
2几何着色器
3片元着色器
2. 模型的实现原理
UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围(0~1)的二维坐标系中。
展开后的UV在SP中绘制贴图(漫反射贴图、法线贴图、高度贴图、金属度贴图、AO贴图)


一个模型包含的信息(OBJ文件)


Vertex顶点


Vertex Normal顶点法线


Vertex Texcoord顶点纹理坐标
1V:顶点坐标数据(模型空间中单个顶点的XYZ坐标)
2VT:贴图坐标(水平方向是U,垂直方向是V,范围0~1之间)
3VN:顶点法线
4顶点色(FBX格式才有):单个顶点的RGB颜色信息。一个顶点包含了法线,纹理坐标,顶点色等信息。
OBJ和FBX格式对比

image.png


总结下,FBX相较于OBJ多支持了骨骼动画相关的东西,同时也可以存储顶点色和LOD。
二、材质基础
1.漫反射

image.png


最容易模拟的模型。比如现实中的石头,水泥,砖块等。
光线均匀的反射出去。
Diffuse = baseColor * LightColor * dot(LightDir, Normal);
2.(光滑)镜面反射

image.png


镜面反射就是将入射光线根据表面发现进行反射,入射角等于出射角。
Specular = Pow(saturate(dot(RefDir,ViewDir,32)))* LightColor;
3.粗糙镜面反射


法线偏移较小。反射依然集中在一个区域,形成磨砂的质感。
4.折射


对于玻璃这种介质,除了反射之外还有根据物体的折射率折射一部分光线进入物体中,反射和折射能量的多少是根据菲尼尔定律决定的。
R = refract(View,Normal,ration);
ReflColor = tex2D(skybox,R);
5.粗糙镜面折射

image.png


毛玻璃会有这种现象。
6.多层材质

image.png


涂了透明油漆的木地板,上层是油漆,下层是地板,同时油漆还会反射上部的物体。
7.次表面散射

image.png


半透明的物体,例如玉石、蜡烛、牛奶、皮肤等。
以皮肤为例:光进入皮肤后照亮了毛细血管,因此在明暗分界的位置,反射出的红光就更容易被看到。
8.改变材质表面
现实世界中不存在完美平滑的表面,因此需要对模型表面的发现进行扰动。其中一个方法是使用法线贴图。
漫反射,高光,折射都与法线有关,因此改变法线,就能改变其光照结果。
三、模型数据在渲染中的作用
1.顶点动画
在顶点着色器中,修改模型的顶点位置,进而达到模型运动的效果。
○顶点着色器计算的是模型的每一个顶点,每一个顶点的数据是不同的,因此同一个计算公式在不同的顶点上计算出来的结果也是不同的。
○需要一定数量的顶点,顶点动画的效果才会明显。
○在一些三维建模软件中,动画的k帧也是一种顶点动画
2.纹理动画
在片段着色器中,修改模型的UV信息,使得采样贴图时发生位置而产生的运动效果。
效果:

image.png


利用法线贴图,改变反射与折射的朝向。
原理1:
○修改前,使用1这个法线,反射出去的就是1。
○修改后,使用2这个法线,反射出去的就是2.
○修改的只是法线信息,因此其他数据还是保持修改前的样子。


对背部画面采样的部分
原理2:
○改变UV采样点的位置,产生动画效果

image.png


3.顶点色
在渲染时,影响输出结果。控制颜色范围。

image.png


因为四边面本质上还是三角面组合而成,所以在绘制时会出现三角形的分界。
FragColor = FinalColor * VertexColor;

●可以通过判断顶点色,来做一些操作
○例如,顶点色到达一定的值,就可以做阴影
●Maya中顶点色的绘制


4.重心坐标

image.png

image.png


●具体可以参考下GAMES101—L9部分
5.顶点与面法线

image.png

image.png


原理:
面法线
○未使用平滑时,三角形三个顶点公用一个法线,那么插值时,因为三个顶点的法线相同,所以插值的结果相同。


顶点法线
○使用平滑后,一个顶点一个法线。三角形三个顶点的法线就不相同,插值结果也就不同。


平滑/未使用平滑,在模型文件内部存储方式

image.png


扩展
在NPR渲染中
○通常在顶点着色器中,将顶点往法线方向偏移。然后再在片段着色器中直接输出一个颜色,达到描边的效果。
○BackFacing描边时,描边线条断开就是因为没有平滑顶点之间的法线导致的。


作业
1.顶点色的其他作用
1.作为一种存储的mask使用(这样可以少使用一张图)
●不想让连上有菲尼尔效应,就把脸涂黑,乘上顶点色
●不想让某些地方有描边,同上
●拿到顶点色后可以做一些其他操作,塞入顶点色的信息必须是线性变化的,如果不是,就要做好精度打折的准备
●可用于预先指定光照、阻光和其他视觉效果
●可以把颜色信息存在顶点里,但是在低模的情况下效果很差。
简单说顶点色相当于一个数据存储的地方,你可以将任何数据塞到此处,然后利用这些数据进行操作,考虑优化时更应注重顶点色的应用。
2.模型光滑组对法线有什么影响
在模型上没有真正的光滑面,也没有真正的四边形面,所有面都是三角形组成的。
平常说的布线合理,拓扑其实是保持两个三角形面的一致性(构成一个四边面的两个三角形面)

image.png

image.png


①光滑组的含义
下图标出了面的亮度,纯打比方不是确切数字。
光滑组处理面之间的光照信息,提高它们的亮度、饱和度,两面之间的过渡就是两面亮度和平均值。

image.png


②光滑组如何计算?
如果一个面的光滑组是1,一个是2,那么他们之间不存在计算。

image.png


如果它们光滑组都是1,就会进行光照计算,并且影响最终渲染,也就是说他们光滑组一样的话,就会进行光照计算,产生光滑效果。
下图为不同数值下的光滑效果,数值一致就会有平滑效果。

image.png




网格平滑和涡轮平滑:通过增加面,把面分的更细腻来表达曲度。
自动平滑默认所有面的夹角小于45°的进行光滑,默认创建的球面的夹角都小于45°所以都平滑了,下图为数值为10的时候。

image.png



③光滑组对法线的影响
法线
●烘焙发现的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping法线贴图本质上就是一种图片,只是这样图片的用途比较特殊而已。
●没有光滑组的话,烘出来的法线贴图是一棱一棱的。一般情况华至少也要给一个光滑组。

光滑组(软硬边)和UV对法线的影响
●光滑组相连接的模型,法线贴图都存在打渐变色,导致魔性的法线效果会很奇怪(平面上有法案发凉的光影)。当你发现模型出现这种渐变时,一定是出现了光滑组的问题。
●中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和UV统一相连或断开,是不会出现明显接缝的,当遇到解封问题,优先考虑模型的光滑组和UV是否统一。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TEE GP(Global Platform)功能认证实验室

TEE之GP(Global Platform)认证汇总 GP认证实验室主要面向功能认证、SE安全认证、TEE安全认证,对于TEE来说,则分为TEE功能认证和TEE安全认证。本文对功能认证相关实验室机构进行总结和介绍。 一、国内3家 二、国外3家 参考: GlobalPlatform …

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…

安全杂记 - js中的this关键字

javascript里什么是this this是js中的一个关键字&#xff0c;它是函数在运行时生成的一个内部对象&#xff0c;是属性和方法。 this就是属性或方法“当前”所在的对象&#xff0c;也就是调用函数的那个对象 this的使用场合 1.函数调用 <script>var a100;function test…

jenkins部署vue项目

文章目录 1 先安装node.js上传到linux并解压 jenkins 创建任务执行脚本 build Stepsvue jenkins shell 脚本 (jenkins-web.sh)启动 如何在linux上安装jenkins可以看上一篇 linux安装jenkins(详细步骤) 1 先安装node.js 建议最好跟你本地安装版本一致,减少没有必要的麻烦:node.…

UCloud上线可商用LLaMA2镜像,助力AGI应用发展

随着人工智能技术的快速发展&#xff0c;大模型应用在自然语言处理、图像识别、智能交互等领域展现出了巨大的潜力&#xff0c;为企业带来了更多创新和商机。众多企业纷纷将大模型应用于产品开发和业务优化中&#xff0c;希望通过提升智能化水平和用户体验来赢得竞争优势。近日…

【黑马头条之文章详情-静态文件生成】

本笔记内容为黑马头条项目的文章详情-静态文件生成部分 目录 一、思路分析 二、实现步骤 基础知识可参考下面两篇文章 【黑马头条之对象存储服务MinIO】_蛋饼吧的博客-CSDN博客 【黑马头条之freemarker入门】_蛋饼吧的博客-CSDN博客 一、思路分析 文章端创建app相关文章时…

如何获得SOLIDWORKS全认证资格证书!

SolidWorks认证考试 完成SolidWorks认证考试并获得专业SolidWorks认证是一项伟大的成就。它不仅在你的简历上自豪地闪耀&#xff0c;而且还向雇主、决策者和同事展示了你对软件的技能和知识水平。公司通常会将某些策略和标准设定为一项业务&#xff0c;以帮助保持在竞争中的领头…

桃子叶片病害数据集

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 数据集链接 import os import jsonimport torch from PIL import Image from torchvision import transforms import tkinter as tk from tkinter import file…

MySQL 日志管理

目录 一、四种日志介绍 1.1 错误日志 1.2 通用查询日志 1.3 二进制日志 1.4 慢查询日志 三、查询日志是否已开启 四、分割二进制日志 MySQL的日志默认保存在数据库文件的存储目录&#xff08;一般为/usr/local/mysql/data/&#xff09;。也可以修改配置文件&#xff0c;…

低代码可视化开发,是时候去学一学了!

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…

认识需求不得不思考的5大因素

需求对项目非常重要&#xff0c;如果对需求认识不清晰不明确&#xff0c;往往会导致需求不完整&#xff0c;需求重复等问题&#xff0c;引起很多不必要的风险&#xff0c;因此如何认识需求&#xff0c;需要思考哪些因素&#xff0c;就显得尤为重要。以下5大因素&#xff0c;是我…

Spring 6【Lombok、基于注解方式的IoC】(六)-全面详解(学习总结---从入门到深化)

目录 十一、Lombok 十二、基于注解方式的IoC 十一、Lombok 在上面的课程讲解过程中&#xff0c;每次修改类的属性&#xff0c;都需要重新生成Getter/Setter方法及toString()方法。我 们可以借助Lombok来简化代码。 1 环境准备 下载Lombok插件 IDEA 2022.3.2 默认集成Lomb…

ICASSP 2023 | MCROOD: MULTI-CLASS RADAR OUT-OF-DISTRIBUTION DETECTION

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486484&idx1&snd43f92ca0230753e77f54557054653d6&chksmcf51beedf82637fb27d4cbb9279f273298779dabe25f7775cb93469787bcc12c1b6b2caec979#rd ICASSP 2023 | MCROOD: MULTI-CLASS…

golang利用go mod巧妙替换使用本地项目的包

问题 拉了两个项目下来&#xff0c;其中一个项目依赖另一个项目&#xff0c;因为改动了被依赖的项目&#xff0c;想重新导入测试一下。 解决办法 go.mod文件的require中想要被代替的包名在replace中进行一个替换&#xff0c;注意&#xff1a;用来替换的需要用绝对路径&#xf…

IDEA打开text文本文件弹出窗口“选择一个应用以打开此.text文件“

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【React】版本正确安装echarts-liquidfill(水球图表)包引入不成功问题

目标效果图&#xff1a; 安装&#xff1a; npm install echarts npm install echarts-liquidfill 引入&#xff1a; Import:import * as echarts from echarts; import echarts-liquidfill 或 import echarts-liquidfill/src/liquidFill.jsOr:import * as echarts from…

4.4. 深拷贝 vs 浅拷贝

文章目录 浅拷贝&#xff1a;对基本数据类型进行值传递&#xff0c;对引用数据类型进行引用传递般的拷贝&#xff0c;此为浅拷贝。深拷贝&#xff1a;对基本数据类型进行值传递&#xff0c;对引用数据类型&#xff0c;创建一个新的对象&#xff0c;并复制其内容&#xff0c;此为…

一招解决报错:pyassimp.errors.AssimpError: assimp library not found

文章目录 1 问题描述2 原因分析3 解决方法 1 问题描述 在使用pip install pyassimp安装pyassimp库后&#xff0c;调用时会出现错误&#xff1a; File"/root/anaconda3/envs/kgn/lib/python3.8/site-packages/pyassimp/helper.py", line 234, in search_library rais…

创造自己的宠物医院预约服务小程序,步骤详解

在现代社会&#xff0c;越来越多的人开始养宠物&#xff0c;而宠物的健康管理也成为了一个重要的话题。为了方便宠物主人随时随地进行宠物医院的管理和服务&#xff0c;开发一个宠物医院管理小程序是很有必要的。今天我们将分享一些制作宠物医院管理小程序的技巧&#xff0c;帮…

EasyExcel数据导出功能封装

起因&#xff1a; 最近需要用到excel导出功能&#xff0c;使用EasyExcel可以快速实现导出&#xff0c;又需要优雅的对EasyExcel进行封装&#xff0c;在实现自己的导出功能时又可以制定一定的规则&#xff0c;让其他同事方便使用&#xff0c;最近研究了下网上的常规写法&#x…