mrtk_developmentreleases/2.0.0releases/2.1.0releases/2.2.0
  • 指南
  • API 文档
  • 指南
  • 功能概述
  • 渲染 Rendering
  • Shaders
  • MRTK标准着色器 MRTK Standard Shader

    Show / Hide Table of Contents
    • MRTK入门
      • 发布说明
      • MRTK包内容
      • 从早期版本更新
      • 从HTK更新
      • 生成和部署MRTK
      • NuGet包
      • MRTK配置对话框
      • 开始使用 MRTK和XR SDK
      • 性能
      • 全息图稳定
      • 在大型项目中使用MRTK
    • 架构
      • 概述
      • 框架和运行时
      • 输入系统
        • 术语
        • 核心系统
        • Controllers, pointers, and focus
      • 系统,扩展服务和 data providers
    • 功能概述
      • 边界系统 Boundary System
        • 边界系统概述
        • 配置边界可视化
      • 相机系统 Camera System
        • 相机系统概述
        • Camera Settings Providers
          • Windows 混合现实相机设置
          • Unity AR相机设置[实验性]
          • 创建camera settings provider
      • 跨平台支持
        • 为iOS和Android配置MRTK
      • 检测平台能力
      • 诊断系统 Diagnostics System
        • 诊断系统概述
        • 配置诊断系统
        • 使用可视化分析器
      • 扩展服务 Extension Services
        • 扩展服务创建向导
        • 场景过渡服务概述
      • 输入系统 Input System
        • 输入概览
        • 输入动作 Input Actions
        • 输入事件 Input Events
        • Input Providers
          • Input Providers 概述
          • 创建一个 input data provider
        • 控制器 Controllers
        • 眼动跟踪 Eyes
          • 概述
          • 入门
          • 通过代码访问数据
          • 验证跟踪校准 Validate Tracking Calibration
        • 凝视 Gaze
        • 手势 Gestures
        • 手部 Hands
        • 如何添加近距离交互 Near Interaction
        • 编辑器内输入模拟 In-Editor Input Simulation
        • 指针 Pointers
        • 语音输入 Voice Input
          • 语音转录 Dictation
          • 语音(命令和控制) Speech
      • 多场景系统 Multi Scene System
        • 多场景系统概述
        • 场景类型 Scene Types
        • 内容场景加载 Content Scene Loading
        • 监测内容加载 Monitoring Content Loading
        • 光照场景操作 Lighting Scene Operations
      • 打包 Packaging
        • MRTK包 MRTK Packages
        • MRTK模块化 MRTK Modularization
      • 配置文件 Profiles
        • 配置文件概述
        • 配置指南 Configuration Guide
      • 渲染 Rendering
        • 材质实例概述 Material Instance Overview
        • Shaders
          • MRTK标准着色器 MRTK Standard Shader
      • 服务 Services
        • 什么是混合现实特性
        • 什么是 MixedRealityServiceRegistry 和IMixedRealityServiceRegistrar
        • 扩展服务 Extension services
      • 空间感知系统 Spatial Awareness System
        • 空间感知概述
        • Spatial Observers
          • 为设备配置 Observers
          • 为Editor配置 Observers
          • 通过代码控制 Observers
          • 创建自定义 Observer
      • 传送系统概述 Teleport System Overview
      • 工具
        • Dependency Window
        • Extension Service Creation Wizard
        • Holographic Remoting
        • Input Animation Recording
          • Input Animation File Format Specification
        • Optimize Window
        • Runtime tools
          • Controller Mapping tool
      • UX 构建模块
        • 工具箱窗口 Toolbox Window
        • 按钮 Button
        • 边界框 Bounding Box
        • 对象操纵器 Object Manipulator
        • Manipulation Handler [废弃]
        • Slate
        • 系统键盘 System Keyboard
        • 可交互的 Interactable
        • Solvers
          • 点击放置 Tap to Place
        • 对象集合 Object Collection
        • 提示工具条 Tooltips
        • 滑动条 Slider
        • 手部菜单 Hand Menu
        • 近处菜单 Near Menu
        • 应用程序栏 App Bar
        • 指尖可视化 Fingertip Visualization
        • 进度指示器 Progress Indicator
        • 对话框 Dialog [实验性]
        • 手势教学 Hand Coach [实验性]
        • 可滚动对象集合 Scrolling Object Collection [实验性]
        • 脉冲着色器 Pulse Shader [实验性]
        • 停靠控件 Dock Control [实验性]
        • HoloLens键盘助手 [实验性]
      • 示例场景
        • 示例中心
        • 手势交互示例场景
        • 眼动跟踪示例场景
    • Contributing
      • Contributing Overview
      • Coding Guidelines
      • Writing and Running Tests
      • Writing Documentation
      • Pull Requests
      • Experimental Features
      • Breaking Changes
      • How to use DocFX
    • Planning
      • Roadmap
    • Notice
    • Authors

    MRTK 标准着色器

    Standard shader examples

    MRTK标准着色系统(Standard shading system)利用一个单一的,灵活的着色器,可以实现类似于Unity的标准着色器的视觉效果,实现流畅设计系统原则,并保持性能在混合现实设备上。

    示例场景

    你可以在MRTK/Examples/Demos/StandardShader/Scenes/下面的MaterialGallery 场景中找到材质的例子。这个场景中的所有材质都使用了MRTK/标准材质。

    Material Gallery

    你可以在 MRTK/Examples/Demos/StandardShader/Scenes/下的StandardMaterialComparison 比较场景来比较和测试MRTK/标准着色器和Unity/标准着色器的例子。 Material Comparison

    架构

    MRTK/标准着色系统是一个"uber shader" 它使用[Unity's 的着色器程序变体特性] 根据材质属性自动生成最佳着色器代码。当用户在material inspector中选择材质属性时,他们只需要为启用的特性付出性能代价。

    Material inspector

    MRTK/标准材质有一个自定义的material inspector,叫做MixedRealityStandardShaderGUI.cs. inspector自动启用/禁用着色器功能,基于用户选择和辅助设置渲染状态。有关每个特性的更多信息,请在Unity编辑器的tooltip中悬停每个属性查看/

    Material Inspector

    inspector的第一部分控制材质的渲染状态。Rendering Mode决定了材质什么时候以及如何渲染。MRTK/Standard着色器的目标是镜像 Unity/Standard着色器中的渲染模式。MRTK/标准着色器还包括一个Additive(附加)渲染模式和Custom(自定义) 渲染模式,用于完整的用户控制。

    渲染模式 Rendering Mode
    Opaque (默认),适用于没有透明区域的普通实体
    Cutout 允许创建透明效果,在不透明和透明区域之间有硬边。在这种模式下,没有半透明区域,纹理要么是100%不透明的,要么是不可见的。这在使用透明创建材质的形状(如植被)时非常有用。
    Fade 允许透明度值完全淡出对象,包括它可能有的任何高光或反射。如果您想使淡入或淡出的对象具有动画效果,此模式非常有用。它不适合渲染逼真的透明材质,如透明塑料或玻璃,因为反射和高光也会淡出。
    Transparent 适用于渲染逼真的透明材质,如透明塑料或玻璃。在这种模式下,材质本身会有透明度值(基于纹理的alpha通道和颜色的alpha值)。然而,反射和照明高光将保持在完全清晰的情况下,因为是真正的透明材质。
    Additive 启用了添加的混合模式,该模式将以前的像素颜色与当前像素颜色相加。这是首选的透明模式,以避免透明排序问题。
    Custom 允许手动控制呈现模式的每个方面。仅供高级使用。

    Rendering Modes

    剔除模式 Cull Mode
    Off 禁用面剔除。只有当需要双面网格时,才应该将剔除设置为Off。
    Front 支持正面剔除
    Back (默认)启用背面剔除。为了提高渲染性能,应该尽可能多地启用背面剔除

    性能

    与Unity标准着色器相比,使用MRTK标准着色器的一个主要优点是性能。MRTK标准着色器是可扩展的,只利用启用的特性。然而,MRTK标准着色器也被编写为提供可与Unity标准着色器相媲美的美学效果,但成本要低得多。比较着色器性能的一个简单方法是通过需要在GPU上执行的操作数。当然,计算的大小可能会随着启用的特性和其他呈现配置的不同而变化。但是,一般来说,MRTK标准着色器执行的计算要比Unity标准着色器少得多。

    Unity 标准着色器统计示例

    Unity Standard Shader Statistics

    MRTK 标准着色器统计示例

    MRTK Standard Shader Statistics

    Note

    这些结果可以通过在Unity inspector中选择并查看shader asset生成,然后点击Compile and show code按钮。

    光照

    MRTK/标准使用了一个简单的近似照明。因为这个着色器没有计算物理正确性和能量守恒,它渲染得又快又有效率。Blinn-Phong是一种主要的照明技术,它混合了Fresnel和基于图像的照明,以近似物理照明。着色器支持以下照明技术:

    Directional light

    着色器将尊重场景中第一个Unity Directional Light的方向,颜色,和强度(如果启用)。 Dynamic point lights, spot lights,或任何其他Unity light将不考虑在实时照明。

    Spherical harmonics

    如果启用,着色器将使用Light Probes来近似场景中的光,使用Spherical Harmonics。为了降低计算成本,对每个顶点进行Spherical harmonics计算。

    Lightmapping

    对于静态照明,着色器将尊重Unity的Lightmapping system创建的lightmaps。只需将渲染器器标记为static(或lightmap static)就可以使用lightmaps。

    Hover light

    • 参见 Hover Light

    Proximity light

    • 参见 Proximity Light

    Lightweight Scriptable Render Pipeline support

    轻量级脚本渲染管线支持

    MRTK包含一个升级路径,允许开发人员在MRTK着色器中使用Unity的轻量级可脚本渲染管线(LWRP)。在Unity 2019.1.1f1和Lightweight RP 5.7.2包中测试。或关于如何开始使用LWRP的说明,请参见此页。

    要执行MRTK升级,选择: Mixed Reality Toolkit -> Utilities -> Upgrade MRTK Standard Shader for Lightweight Render Pipeline

    lwrp upgrade

    升级发生后,MRTK/标准着色器将被改变,任何品红(着色器错误)材质应该被修复。要验证升级成功,请检查控制台:Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader for use with the Lightweight Render Pipeline.

    UGUI 支持

    MRTK标准的着色系统与Unity的内置[UI系统]一起工作(https://docs.unity3d.com/Manual/UISystem.html)。在Unity UI组件上,unity_ObjectToWorld矩阵不是图形(Graphic)组件所在的本地转换的转换矩阵,而是它的父画布(Canvas)的转换矩阵。许多MRTK/标准的着色效果需要对象缩放才能知道。为了解决这个问题, ScaleMeshEffect.cs将在UI网格构建过程中将缩放信息存储到UV通道属性中。

    注意,当使用Unity图像(Image)组件时,建议为源图像指定 "None (Sprite)",以防止Unity UI生成额外的顶点。

    MRTK中的画布将提示添加 ScaleMeshEffect.cs ,当需要时:

    scale mesh effect

    Texture combiner

    为了提高与Unity标准着色器的相等,每个像素的金属,平滑,放射和遮挡值都可以通过通道包装(channel packing)来控制。例如:

    channel map example

    当你使用channel packing,你只需要采样和加载一个纹理到内存,而不是四个单独的。当你在Substance或Photoshop这样的程序中编写纹理贴图时,你可以像下面这样手工包装它们:

    Channel Property
    Red Metallic
    Green Occlusion
    Blue Emission (Greyscale)
    Alpha Smoothness

    或者,你可以使用MRTK纹理合并工具。要打开工具,选择: Mixed Reality Toolkit -> Utilities -> Texture Combiner,它将打开下面的窗口:

    texture combiner example

    这个窗口可以通过选择Unity标准着色器并点击"Autopopulate from Standard Material."来自动填充。或者,您可以手动指定每个红色、绿色、蓝色或alpha通道的纹理(或常数值)。纹理组合是GPU加速的,不需要输入的纹理是CPU可访问的。

    附加特性文档

    下面是MRTK/标准着色器提供的一些特性细节的额外细节。

    Primitive clipping

    primitive clipping

    • 查看 Clipping Primitive

    Mesh outlines

    许多mesh outline技术是使用post processing技术完成的。后期处理提供了高质量的轮廓,但在许多混合现实设备上可能非常昂贵。你可以在 MRTK/Examples/Demos/StandardShader/Scenes/下的OutlineExamples场景中找到一个演示mesh outline用法的场景。

    MeshOutline.cs和 MeshOutlineHierarchy.cs 可以用来渲染一个网格渲染器(mesh renderer)周围的轮廓。启用此组件将引入一个正在概述的对象的附加渲染通道,但设计用于在移动混合现实设备上高效运行,并且不使用任何post进程。这种效果的局限性包括它不能很好地工作在非watertight的对象(或要求是双面的)和深度排序问题可能发生在重叠的对象上。

    outline behaviors被设计用来与MRTK/标准着色器一起使用。轮廓材质通常是纯色的,但也可以配置成各种各样的效果。轮廓材质的默认配置如下:

    1. Depth Write - 应禁用outline材质,以确保outline不会阻止其他对象的绘制
    2. Vertex Extrusion - 需要启用render the outline
    3. Use Smooth Normals - 这个设置对于某些网格是可选的。Extrusion是通过沿着顶点法线移动一个顶点而发生的,在一些网格上沿着默认法线挤压会导致轮廓的不连续。要修复这些不连续性,可以选中此框以使用另一组由MeshSmoother.cs生成的平滑法线(smoothed normals)

    MeshSmoother.cs 是一个组件,可以用来自动生成一个网格上的平滑法线。此方法将网格中共享空间中相同位置的顶点分组,然后对这些顶点的法线求平均值。此过程创建基础网格的副本,仅在需要时使用。

    1. 通过MeshSmoother.cs生成的平滑法线。.
    2. 使用默认法线时,请注意立方体角周围的部分.

    模版测试 Stencil testing

    内建在可配置的模版测试支持,以实现广泛的影响数组。如入口:

    stencil test

    实例颜色支持 Instanced color support

    实例颜色支持给数以千计的GPU实例网格独特的材质属性:

    instanced properties

    三平面映射 Triplanar mapping

    三平面映射(Triplanar mapping)是一种以编程方式对网格进行纹理处理的技术。常用于地形,网格无uv,或难以展开的形状。这个实现支持世界或局部空间投影,混合平滑的规范,和法线贴图支持。注意,每个使用的纹理需要3个纹理样本,所以在性能关键的情况下要谨慎使用。

    triplanar

    顶点挤压 Vertex extrusion

    Vertex extrusion在世界空间。用于可视化挤压边界体积或网格内/外的过渡。

    normal map scale

    杂项 Miscellaneous

    用于控制反照率(albedo)优化的复选框。当没有指定反照率纹理时,将禁用优化反照率操作。这对于控制远程纹理加载非常有用。

    只需勾选此框:

    albedo assignment

    支持每个像素的裁剪纹理,基于局部边缘的抗锯齿和法线贴图缩放。

    normal map scale

    建议浏览

    • Interactable
    • Hover Light
    • Proximity Light
    • Clipping Primitive
    • Improve this Doc
    In This Article
    • 示例场景
    • 架构
    • Material inspector
    • 性能
    • 光照
      • Directional light
      • Spherical harmonics
      • Lightmapping
      • Hover light
      • Proximity light
    • Lightweight Scriptable Render Pipeline support
    • UGUI 支持
    • Texture combiner
    • 附加特性文档
      • Primitive clipping
      • Mesh outlines
      • 模版测试 Stencil testing
      • 实例颜色支持 Instanced color support
      • 三平面映射 Triplanar mapping
      • 顶点挤压 Vertex extrusion
      • 杂项 Miscellaneous
    • 建议浏览
    Back to top Generated by DocFX