Unity3D:内置着色器的用途和性能

码海映风使
• 阅读 423

Unity3D:内置着色器的用途和性能
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

https://www.mvrlink.com/unity3d-usage-and-performance-of-buil...

内置着色器的用途和性能Unity 中的着色器是通过__材质__来使用的,材质本质上结合了着色器代码与纹理等参数。此处提供了关于着色器/材质关系的深入说明。当选择材质本身或选择一个使用材质的__游戏对象__时,材质属性将显示在 Inspector 中。材质检视面板 (Inspector) 如下所示:
Unity3D:内置着色器的用途和性能
每种材质在 Inspector 中看起来会有所不同,具体取决于其使用的具体着色器。着色器本身决定了可在 Inspector 中调整的属性类型。有关材质检视面板的详细说明,请参阅材质参考页面。请记住,着色器是通过材质实现的。因此,着色器定义将要在 Inspector 中显示的属性时,每种材质实际上包含来自滑动条、颜色和纹理的调整数据。在这方面要记住的最重要的一点是,可在多个材质中使用单个着色器,但单个材质不能使用多个着色器。着色器名称更改旧着色器的名称可能会影响其功能。这是因为在 Unity 5.0 之前,着色器的某些功能由其路径和名称决定。这仍然是旧版着色器的工作方式。有关详细信息,请参阅旧版着色器名称性能注意事项有许多因素会影响游戏的整体性能。本页面将专门讨论内置着色器的性能注意事项。着色器的性能主要取决于两个方面:着色器本身以及项目或特定摄像机使用的渲染路径。有关编写您自己的着色器时的性能提示,请参阅 ShaderLab 着色器性能页面。Rendering Paths and shader performance在 Unity 支持的渲染路径中,延迟着色和顶点光照路径具有最可预测的性能。在延迟着色中,每个对象通常被绘制一次(无论哪些光源影响它)。同样,在顶点光照中,每个对象通常被绘制一次。因此,着色器的性能差异主要取决于它们使用的纹理数量以及它们执行的计算。Shader Performance in Forward rendering path在前向渲染路径中,着色器的性能取决于着色器本身和场景光照这两种因素。以下部分将进行详细介绍。从性能角度看,有两种基本的着色器类别:__顶点光照 (Vertex-Lit)__ 和__像素光照 (Pixel-Lit)__。前向渲染路径中的__顶点光照__着色器总是比像素光照着色器的成本更低。这些着色器同时使用所有光源基于网格顶点来计算光照。因此,无论在对象上有多少光照,都只需要绘制一次。__像素光照__着色器计算绘制的每个像素的最终光照。因此,必须绘制一次对象以获取环境和主方向光,并针对每次额外光照绘制一次对象。因此,方案为 N 个渲染 pass,其中 N 表示照射在对象上的最终像素光照数。这种方案增加了 CPU 处理和发送命令到显卡以及在显卡上处理顶点并绘制像素的工作负载。像素光照对象在屏幕上的大小也会影响绘制该对象的速度。对象越大,绘制得越慢。所以,像素光照着色器会带来性能成本,但这样的成本可产生一些出色的效果:阴影、法线贴图、漂亮的镜面高光和光照剪影,不一而足。请记住,可强制光照进入像素(“重要”)或顶点/SH(“非重要”)模式。在像素光照着色器上照射的任何顶点光照都将基于对象的顶点或整个对象进行计算,并且不会计入与像素光照关联的渲染成本或视觉效果。General shader performance内置着色器的复杂程度从低到高的顺序大致如下:无光照 (Unlit)。这只是一种纹理,不受任何光照的影响。 *顶点光照 (VertexLit)。漫射 (Diffuse)。法线贴图 (Normal mapped)。此项比漫射的成本略高:增加了一个纹理(法线贴图)和一些着色器指令。镜面反射 (Specular)。此项增加了镜面高光计算。法线贴图镜面反射 (Normal Mapped Specular)。同样,此项比镜面反射的成本略高。视差法线映射 (Parallax Normal mapped)。此项增加了视差法线贴图计算。视差法线贴图镜面反射 (Parallax Normal Mapped Specular)。此项增加了视差法线贴图计算和镜面高光计算。移动端简化着色器此外,Unity 还有几个针对移动平台的简化着色器,位于“Mobile”类别下。这些着色器也适用于其他平台,因此如果能容忍使用它们经过简化这一事实(例如近似镜面反射、无每种材质的颜色支持等),可尝试使用它们!要查看每个着色器已进行的具体简化情况,请查看“内置着色器”包中的 .shader 文件,此文件顶端的一些注释中列出了相关信息。移动端着色器中常见的一些更改示例如下:着色器没有用于着色的材质颜色或主色。对于采用法线贴图的着色器,使用了基础纹理的平铺和偏移。粒子着色器不支持 AlphaTest 或 ColorMask。有限的功能和光照支持,例如,一些着色器仅支持一个方向光。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(