材质笔记 - Simluate Solid Surface

news2024/11/18 0:36:56

光的行为

    当光和物体相遇时,光会有三种行为:被物体反射、穿过物体(物体是透明或半透明的)或者被吸收。

高光反射和漫反射

    高光反射(Specular Reflection)会在表面光滑且反光的物体上看到,比如镜子,不锈钢球等,此时光线在物体表面是直接“弹”到了反射方向。还有一种反射叫做漫反射(Diffuse Reflection),此时光线被吸收并反射到了四面八方。下图白色箭头表示高光反射,红色箭头表示漫反射:


漫反射系数:Base Map

    在Unity中,URP/Lit Shader需要Base Map来表示漫反射系数。其他Shader通常称这个属性为Albedo或Diffuse Map(从技术上严格地来讲,它们并不是完全相同的东西)。

    Albedo这个词描述了漫反射的度量值。通常就是指颜色值,通过RGB三通道值表达。RGB值可以转换为Hue(色调),Saturation(饱和度)和Luminosity(亮度)。Albedo的luminosity对应于漫反射的量,hue和saturation描述了从表面出来的光的质量。

Specular workflow

    日常生活中有许多金属物体比如钢笔,不锈钢球等,在光源下它们会产生高光反射。在Shader中,高光又是怎么和漫反射进行描述和区别的呢?

    让物体表面看起来像是金属一样的属性叫做高光度(Specularity)。高光度和光滑度(smoothness)是不同的。我们可以将一颗苹果擦到很光滑,但没办法将它擦成金属外观。但是光滑的物体是有一些高光度的。

    下图中的苹果,smoothness都一样,但specularity从左至右依次增强。


       和漫反射表面一样,金属表面会吸收光。在阳光下放置一个金属物体,过一段时间后,它会变烫。

        Specular workflow

        有两种workflow可供我们使用来指定材质中的金属外观(metallic apperance)。当使用URP/Lit Shader中的Specularity属性时,用到的是Specular workflow(后面笔记再解释Metallic workflow)。

        在Specular workflow中:

  •         闪亮的金属表面拥有高Specularity以及高Smoothness。
  •         闪亮的非金属表面拥有低的Specularity和高Smoothness。
  •         Smoothness控制高光反射的范围,Specular Map控制了高光反射的量的大小以及高光反射的颜色。
  •         Specular Map可使用RGB颜色值

        下面通过实验来说明:

        在Unity场景中选择一个物体,比如苹果,选择苹果的材质


        Inspector中将其Workflow Mode设置为Specular


    将其Smoothness进行调整,比如设置为1。


    接下来,设置Specular Map,然其看起来像是一颗金属苹果,带镜面反射效果。


Metallic workflow

        在Unity中,Specular workflow是更加科学的让物体有金属感的方式。另一种方式,metallic workflow是一种更加简单的方式,但这种方式并不严格遵循物理光学的规则。

        Metallic workflow中:

  •         闪亮的金属表面拥有高Metallic和高Smoothness
  •         闪亮的非金属表面使用0或者低的Metallic和高Smoothness
  •         Smoothness控制高光反射的范围
  •         Metallic map值使用灰阶值

        之前的苹果的例子中,我们将Metallic Map设置为1,Smoothness设置为1,可以得到和Specular workflow类似的效果。

Specular workflow和Metallic workflow对比


        具体应用中改如何选择哪种workflow呢?在导入资源的时候,我们可能会看到有一些资源使用Specular workflow,另外一些资源使用Metallic。实际上我们也不必纠结,只要能达到想要的效果即可。Metallic workflow通常来说更常见,因为它使用起来更加简单,但其是一种经验性的近似。Specular workflow基于真实世界中反射的物理规则,但Specular Map用起来是很有挑战的事情。

Smoothness

       也称作gloss或glossiness。它影响高光的范围。光滑的表面上,光线会反射到统一的方向上,因此我们能够从物体表面看到光源的形状。对于一个粗糙的表面,仍然有高光反射存在,但反射光的方向是分散的。

        下图的五颗苹果,Metallic都是0.5,但Smoothness从左至右依次增加。

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

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

相关文章

SMART PLC时间间隔定时器应用(高速脉冲测频/测速)

高速脉冲计数测量频率,专栏有系列文章分析讲解,这里不再赘述(原理都是利用差分代替微分)。具体链接如下: 西门子SMART PLC高速脉冲计数采集编码器速度(RC滤波)_RXXW_Dor的博客-CSDN博客这篇文章主要讲解西门子 SMART PLC高速计数采集编码器脉冲信号计算速度,根据编码器脉…

鸢尾花数据集分类(PyTorch实现)

一、数据集介绍 Data Set Information: This is perhaps the best known database to be found in the pattern recognition literature. Fisher’s paper is a classic in the field and is referenced frequently to this day. (See Duda & Hart, for example.) The data…

[Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

戴尔游匣G16电脑U盘安装系统操作教程分享

戴尔游匣G16电脑U盘安装系统操作教程分享。有用户在使用戴尔游匣G16电脑的时候遇到了系统问题,比如电脑蓝屏、自动关机重启、驱动不兼容等问题。遇到这些问题如果无法进行彻底解决,我们可以通过U盘重新安装系统的方法来解决,因为这些问题一般…

I.MX6ULL内核开发7:led字符设备驱动实验

目录 一、led字符设备驱动实验 二、驱动模块初始化 三、虚拟地址读写 四、自定义led的file_operation接口 五、拷贝数据 六、register_chrdev函数 七、 __register_chrdev函数 八、编译执行 一、led字符设备驱动实验 驱动模块内核模块(.ko)驱动接口(file_operations) …

Mysql 增删改查(一) —— 查询(条件查询where、分页limits、排序order by)

查询 select 可以认为是四个基本操作中使用最为频繁的操作,然而数据量比较大的时候,我们不可能查询所有内容,我们一般会搭配其他语句进行查询: 假如要查询某一个字段的内容,可以使用 where假如要查询前几条记录&#…

STM32----搭建Arduino开发环境

搭建Arduino开发环境前言一、Arduino软件1.软件下载2.软件安装3.软件操作二、Cortex官方内核三、烧录下载四、其他第三方内核1.Libmaple内核2.Steve改进的LibMaple 内核3.STMicroelectronics(ST)公司编写的内核总结前言 本章介绍搭建STM32搭建Arduino开发环境,包括…

leetcode470 用Rand7()实现Rand10()

力扣470 第一步:根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1 调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7 这时我们设置:生成1,2&a…

“深度学习”学习日记。卷积神经网络--用CNN的实现MINIST识别任务

2023.2.11 通过已经实现的卷积层和池化层,搭建CNN去实现MNIST数据集的识别任务; 一,简单CNN的网络构成: 代码需要在有网络的情况下运行,因为会下载MINIST数据集,运行后会生成params.pkl保留训练权重&…

【吉先生的Java全栈之路】

吉士先生Java全栈学习路线🧡第一阶段Java基础: 在第一阶段:我们要认真听讲,因为基础很重要!基础很重要!基础很重要!!! 重要的事情说三遍。在这里我们先学JavaSE路线;学完之后我们要去学第一个可视化组件编程《GUI》;然后写个《贪吃蛇》游戏耍…

微搭低代码从入门到精通05-变量定义

我们上一篇对应用编辑器有了一个整体的介绍。要想零基础开发小程序,就得从各种概念开始学起。 如果你是零基础学习开发,无论学习哪一门语言,第一个需要掌握的知识点就是变量。 那么什么是变量?变量其实就是存放数据的一个容器&a…

专题 | 防抖和节流

一 防抖:单位时间内,频繁触发事件,只执行最后一次 场景:搜索框搜索输入(利用定时器,每次触发先清掉以前的定时器,从新开始) 节流:单位时间内,频繁触发事件&…

Yii2模板:自定义头部脚部文件,去掉头部脚部文件

一、yii安装完成之后,运行结果如下图二、如何自定义头部脚部文件呢0、默认展示1、在类里定义,在整个类中生效2、在方法中定义,在当前方法中生效3、home模板介绍三、去掉头部脚部文件1、控制 $layout 的值2、把action中的render改为renderPart…

前端对于深拷贝和浅拷贝的应用和思考

浅拷贝 浅拷贝 : 浅拷贝是指对基本类型的值拷贝,以及对对象类型的地址拷贝。它是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据。最简单直接的浅拷贝就…

java ssm集装箱码头TOS系统调度模块的设计与实现

由于历史和经济体制的原因,国内码头物流企业依然保持大而全的经营模式。企业自己建码头、场地、经营集装箱运输车辆。不过近几年来随着经济改革的进一步深入和竞争的激烈,一些大型的码头物流企业逐步打破以前的经营模式,其中最明显的特征就是…

利用机器学习(mediapipe)进行人脸468点的3D坐标检测--视频实时检测

上期文章,我们分享了人脸468点的3D坐标检测的图片检测代码实现过程,我们我们介绍一下如何在实时视频中,进行人脸468点的坐标检测。 import cv2 import mediapipe as mp mp_drawing = mp.solutions.drawing_utils mp_face_mesh = mp.solutions.face_mesh face_mesh = mp_fac…

ubuntu 驱动更新后导致无法进入界面

**问题描述: **安装新ubuntu系统后未禁止驱动更新导致无法进入登录界面。 解决办法: 首先在进入BIOS中,修改设置以进行命令行操作,然后卸载已有的系统驱动,最后安装新的驱动即可。 开机按F11进入启动菜单栏&#xf…

【JavaScript 逆向】安居客滑块逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标验证码:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0以上均做了脱敏处…

如何准备大学生电子设计竞赛

大学生电子设计竞赛难度中上,一般有好几个类型题目可以选择,参赛者可以根据自己团队的能力、优势去选择合适自己的题目,灵活自主空间较大。参赛的同学们可以在暑假好好学习相关内容,把往年的题目拿来练练手。这个比赛含金量还是有…

数据可视化,流程化处理pycharts-

本文直接进入可视化,输入讲解输入列表生成图片,关于pandas操作看这篇pandas matplotlib 导包后使用 import matplotlib.pyplot as plt饼图 使用 plt.figure 函数设置图片的大小为 15x15 使用 plt.pie 函数绘制饼图,并设置相关的参数&…