热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Unity标准着色器(StandardShader)参数讲解(一)

官方文档:https:docs.unity3d.comManualshader-StandardShader.html请注意,下文:50%谷歌翻译,30%自己翻译修正,20%自己瞎

官方文档:

https://docs.unity3d.com/Manual/shader-StandardShader.html

请注意,下文:50%谷歌翻译,30%自己翻译修正,20%自己瞎猜理解。

Unity标准着色器是一个内置的着色器,具有全面的功能。它可用于渲染“真实世界”的对象,如石头,木头,玻璃,塑料和金属,并支持几种着色器类型和组合(个人理解:就是标准着色器里,实际包含了以前的几种着色器的功能)。然后,通过使用或不使用材质编辑器中的各种纹理插槽(就是赋予对应的贴图)和参数,来启用或禁用对应的功能。

标准着色器设计有硬表面,可以处理大多数真实世界的材质,如石头,玻璃,陶瓷,黄铜,银或橡胶。甚至皮肤,头发和布等非硬质材质,也能表现出像样的效果。

-------------------- 【两种Standard】-----------------------

好,我们在Unity 面板中,看到的Standard Shader是这样的:

这两种,用Unity官网的话来说,就是两种工作流:

Standard ,使用金属工作流(Metallic workflow)。
Standard(Specular setup),  使用镜面工作流(Specular workflow)。 

个人理解:实际中,主要还是靠参数的调整。比如Standard 模式下,完全可以把金属材质参数设置为0(非金属)。

-------------- 下面我们逐个说明,这些【材质参数(Material parameters)】--------------:

使用这些参数,几乎可以重现,你所看到的现实世界的任何表面。

------------------------------------------------------------

1, 渲染模式:

Rendering Mode

Opaque - 不透明 - 是默认值,适用于没有透明区域的普通固体物体。

Cutout -  切边- 允许您创建透明效果,在不透明区域和透明区域之间具有硬边。 在这种模式下,没有半透明区域,纹理是100%不透明或不可见。 当使用透明度创建材料的形状(如叶子或具有孔和布料的布料)时,这是有用的。

Transparent - 透明- 适用于渲染真实的透明材料,如透明塑料或玻璃。 在这种模式下,材质本身将承担透明度值(基于纹理的Alpha通道和色调的alpha),然而反射和照明亮度将保持可视的全透明度,如真正的透明材料的情况。

Fade - 褪色- 允许透明度值完全淡出一个对象,包括任何镜面高光或反射。 如果要使对象渐变或缩小,则此模式很有用。 它不适用于渲染真实的透明材料,如透明塑料或玻璃,因为反射和亮点也将逐渐消失。

官方文档中,给了很多效果示例,详见:

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterRenderingMode.html

------------------------------------------------------------

2,反照率色彩和透明度

Albedo Color and Transparency

选择Opaque,不透明渲染时, 如下:

选择Cutout,带透明的渲染时,会有透明度滑块:

Albedo(反照率)参数, 控制表面的基色。

一般情况下,我们都是给Albedo参数分配纹理贴图。当然,为Albedo指定个颜色,也是可以的。 这代表对象表面的颜色。 重要的是要注意,纹理贴图上,不要包含任何光照(比如亮点或者阴影)。

关于透明效果:可以通过带有Alpha通道的纹理贴图,来控制材质的透明度。 Alpha通道值映射到透明度级别:白色完全不透明,黑色完全透明。 这可以让材质,可以具有不同透明度的区域的效果。(官网有破碎的玻璃窗例子)

官网文档:

https://docs.unity3d.com/Manual/StandardShaderMaterialParameterAlbedoColor.html

------------------------------------------------------------

3.1, Standard 下会有:金属参数

Metallic Parameter

金属模式,不仅仅是为了做看起来像金属的材料! 

这种模式被称为金属,因为您可以控制表面金属或非金属的方式。

根据您给出的金属和平滑度级别的设置,会产生细节反射。

默认情况下,Metallic没有分配纹理贴图。

这时,金属和平滑度参数,由每个滑块控制。整个物体具有单一的金属和平滑度值。

Metallic (金属参数)

金属参数,决定了表面的“金属状”。 当金属化参数调整到更大时,材质更金属化,它将更多的反映环境。反照率颜色(就是Albedo那个)将变得不太可见。当全金属时,表面颜色完全由来自环境的反射驱动。 而当表面金属少时,其反照率颜色更清晰。

下面是官网说明图:

金属值从0到1(平滑度均为0.8)

Smoothness (平滑度)

下面是官网平滑度说明图(从0到1):

Unity的“microsurface detail”(微表面细节)不是直接可见的。 这是在照明计算中使用的概念。 但是,您可以看到这个微表面细节的影响,这是通过从物体反射而扩散的光量所代表的。 光滑的表面,所有的光线倾向于以可预测和一致的角度反弹。 取而代之的是,一个完美光滑的表面反射光,像面镜子。 较不光滑的表面,在更宽的角度范围内反射光(因为光照在微表面的凸起),因此反射具有较少的细节,并且以更漫反射的方式,散布在表面上。

下图,平滑度从低到高(左中右)。材质理论上存在的微表面细节,如图示。 黄线表示光线,撞击不同平滑度的表面并反射。

面细节中具有高峰和谷,因此光在广泛的角度范围内反射。当平均时,则无明显反射的漫反射色。

如果我们给Metallic贴上一张纹理贴图,金属和平滑度滑块都将消失。那Metallic是什么样的贴图,贴上之后产生怎样的效果呢?

下面举例说明:


如果您的模型的表面反照率纹理(Albedo)贴图中,有材质类型混合的区域(比如布料和金属扣、拉链),则可以使用 Metallic纹理贴图 ,来控制材料表面的金属和平滑度的变化。你会希望扣和拉链比衣服织物有更高的金属质感。为了实现这一点,代替使用滑块值,可以在贴图中,把拉链区域做成较浅的颜色,织物部分做成深色。具体原理:


材质的金属水平由纹理的红色通道中的值控制,材质的平滑度水平由纹理的Alpha通道控制。 (这意味着绿色和蓝色通道被忽略)。这意味着您有一个单一的纹理,可以将区域定义为粗糙或平滑,以及金属或非金属,这对于覆盖具有不同要求的模型的许多区域的纹理贴图非常有用 - 例如,角色有1张纹理贴图,通常包括多个表面要求 - 皮鞋,布衣服,皮肤,和金属扣。

下面是官网文档的 Metallic贴图 示例:

扣环现在具有很高的金属值,并相应响应光线。 皮革皮带比皮革的皮革盒子光滑,但它们具有低的“金属”值,因此它似乎是非金属表面的光泽。 最右边的黑白地图显示了金属的是较浅色的区域,皮革是中低灰度。

对比下面这张,是不使用贴图,用默认滑块调整的:



推荐阅读
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 原文地址:https:blog.csdn.netqq_35361471articledetails84715491原文地址:https:blog.cs ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 利用Docker部署JupyterHub以支持Python协同开发
    本文介绍了如何通过Docker容器化技术安装和配置JupyterHub,以实现多用户的Python开发环境,特别适合团队协作场景。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
author-avatar
广东抱米花_冰月
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有