- 用户指南
- Components
- 寻路
- 动画组件
- 资源组件
- 音频组件(AudioComponent)
- 音频侦听器(AudioListener)
- 音频源(AudioSource)
- 音频过滤器(AudioFilter)(仅限专业版)
- 混响区域(ReverbZone)
- 麦克风(Microphone)
- 物理组件(PhysicsComponent)
- 箱体碰撞体(BoxCollider)
- 胶囊碰撞体(CapsuleCollider)
- 角色控制器(CharacterController)
- 角色关节(CharacterJoint)
- 可配置关节(ConfigurableJoint)
- 恒定力(ConstantForce)
- 固定关节(FixedJoint)
- 铰链关节(HingeJoint)
- 网格碰撞体(MeshCollider)
- 物理材质(PhysicsMaterial)
- 刚体(Rigidbody)
- (SphereCollider)
- 弹簧关节(SpringJoint)
- 交互布(InteractiveCloth)
- 蒙皮布(SkinnedCloth)
- 车轮碰撞体(WheelCollider)
- 游戏对象(GameObject)
- 图像效果(ImageEffectScripts)
- 高光溢出和镜头光晕(BloomandLensFlare)
- 模糊(Blur)
- 相机运动模糊(MotionBlur)
- 颜色修正曲线(ColorCorrectionCurve)
- 颜色修正(ColorCorrection)
- 颜色修正查找纹理(ColorCorrectionLookupTexture)
- 对比度增强(ContrastEnhance)
- 对比度拉伸(ContrastStretch)
- 起皱(Crease)
- 视野深度(DepthofField)3.4
- 视野深度(DepthofField)
- 边缘检测(EdgeDetection)
- 鱼眼(Fisheye)
- 全局雾(GlobalFog)
- 发光(Glow)
- 灰度(Grayscale)
- 运动模糊(MotionBlur)
- 噪波和颗粒(NoiseAndGrain)
- 噪波(Noise)
- 屏幕叠加(ScreenOverlay)
- 棕褐色调(SepiaTone)
- 边缘检测效应
- 阳光照射(SunShaft)
- 屏幕空间环境光遮蔽(SSAO)(ScreenSpaceAmbientOcclusion(SSAO))
- 倾斜位移(TiltShift)
- 色调映射(Tonemapping)
- 旋转(Twirl)
- 渐晕(Vignetting)(和色差(ChromaticAberration))
- 状态同步详细信息
- 旋涡
- 设置管理器(SettingsManager)
- 网格组件(MeshComponents)
- 网络组
- 效果
- 渲染组件
- 变换组件(TransformComponent)
- UnityGUI组
- 向导
- 地形引擎指南(TerrainEngineGuide)
- 树木创建器指南
- 动画视图指南
- GUI脚本指南
- 网络参考指南
- 移动设备上的网络连接
- 高级网络概念
- Unity中的网络元素
- RPC详细信息
- NetworkLevelLoading
- 主服务器
- 最小化网络带宽
- 社交API
- 内置着色器指南
- Unity的后台渲染
- 着色器参考
- ShaderLab语法:Shader
- ShaderLab语法:Properties
- ShaderLab语法:子着色器(SubShader)
- ShaderLab语法:Pass
- ShaderLabsyntax:Color,Material,Lighting
- ShaderLab语法:剔除和深度测试(Culling&DepthTesting)
- ShaderLab语法:纹理组合器(TextureCombiners)
- ShaderLab语法:雾(Fog)
- ShaderLab语法:Alpha测试(Alphatesting)
- ShaderLab语法:混合(Blending)
- ShaderLab语法:通道标记(PassTags)
- ShaderLab语法:名称(Name)
- ShaderLab语法:绑定通道(BindChannels)
- ShaderLab语法:使用通道(UsePass)
- ShaderLab语法:GrabPass
- ShaderLab语法:子着色器标记(SubShaderTags)
- ShaderLab语法:回退(Fallback)
- ShaderLab语法:自定义编辑器(CustomEditor)
- ShaderLab语法:其他命令
- ShaderLab语法:Pass
- 高级ShaderLab主题
- ShaderLab内置值
- 其他
- 网络视图
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Mecanim 动画系统
- 动画状态机
- 混合树 (Blend Tree)
- 在 Mecanim 中使用动画曲线 (Animation Curves)(仅限专业版 (Pro))
- 循环动画片段
- Animation State Machine Preview (solo and mute)
- 动画参数
- 旧动画系统
- 使用类人动画
- 动画层
- 资源导入与创建
- 音轨模块
- 减少文件大小
- 光照贴图 UV
- 资源准备和导入
- 如何安装或升级标准资源 (Standard Assets)?
- FBX 导出指南
- 从 Maya 中导入对象
- 从 Cinema 4D 中导入对象
- 从 3D Studio Max 中导入对象
- 从 Cheetah3D 中导入对象
- 从 Modo 中导入对象
- 从 Lightwave 中导入对象
- 从 Blender 中导入对象
- 为优化性能建模角色
- 如何使用法线贴图 (NormalMaps)?
- 如何修正已导入模型的旋转?
- 程序材质
- 如何使用水?
- 分析器(仅限专业版)
- 绘制调用批处理
- 遮挡剔除(仅限专业版)
- Unity 中的高动态范围 (High Dynamic Range) 渲染
- 在 Unity 4 中使用 DirectX 11
- 文本场景文件格式(仅限专业版)
- 使用网络播放器模版
- 平台依赖编译
- 日志文件
- 首选项
- 粒子系统曲线编辑器
- 渐变编辑器
- 怎样制作网格粒子发射器?(旧粒子系统)
- 深入了解光照贴图
- 光照贴图快速入门
- 着色器
- 动画脚本(旧版)
- 自定义
- 布局模式
- 扩展编辑器
- 网络实例化
- 材质和着色器
- 如何使用细节纹理?
- 着色器:顶点和片段程序
- Unity 中的阴影
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
编写着色器时的性能提示
运用常识;)
只计算您需要的内容;任何实际不需要的内容都可清除。例如,支持每个材质颜色以使着色器更加灵活易用固然很好,但如果总是将该颜色设置为白色,那么在屏幕渲染的每个顶点或像素执行的计算都是无用的。
另外需要注意的是计算频率。通常情况下,渲染的像素(像素着色器执行)个数要比渲染的顶点(顶点着色器执行)个数更多;而要渲染的顶点个数比要渲染的对象多。所以,一般来说,尽可能将计算从像素着色器移到顶点着色器,或者从着色器中完全移出,并在脚本中再次赋值。
较少通用的表面着色器
表面着色器非常适于编写与光照相互作用的着色器。但是,其默认选项是为“一般情况”设置的。在许多情况下,您可以对着色器进行调整,使其运行速度更快,或者至少使其更小:
- 使用视图方向(即高光)着色器的
approxview
指令采用逐顶点(而不是逐像素)的方式使视图方向规范化。这虽然是近似的方法,但常常取得较好的效果。 - 用于高光 (Specular) 着色器类型的
halfasview
速度更快。半向量(光照方向和视图向量的中间)将按逐顶点进行计算并规范化。同时,光照函数已将半向量作为参数接收,而不是视图向量。 noforwardadd
将使着色器在正向 (Forward) 渲染中仅完全支持一个方向灯。其余灯仍然可以作为逐顶点光源或球谐函数对对象产生影响。这有利于将着色器变小,并且即使存在多个光源,也可以确保它始终在一个通道中渲染。noambient
将在着色器中禁用环境光照和球谐函数光源。这可以使着色器稍微提速。
计算精度
使用 Cg/HLSL 写着色器时,主要有三种基本的数字类型:float
、half
和 fixed
(以及由它们的向量和矩阵变量,如 half3 和 float4x4):
float
:高精度浮点。一般为 32 位,正如正规编程语言中的浮点类型。half
:中等精度浮点。一般为 16 位,范围是 -60000 到 +60000,精度是 3.3 的十进制数字。fixed
:低精度浮点。一般为 11 位,范围是 -2.0 到 +2.0,精度是 1/256。
尽可能使用最低的精度,这对像 iOS 和 Android 一样的移动平台尤为重要。较好的经验法则是:
- 对于颜色和单位长度的向量,使用
fixed
. - 对于其他内容,如果范围和精度合适,使用
half
,否则使用float
t。
在移动平台上,关键是尽可能确保在片段着色器中保持较低精度。在大多数移动 GPU 上,在低精度 (fixed/lowp) 类型上应用拌合花费较高;同时,在 fixed/lowp 和高精度类型之间进行转换也是相当昂贵的。
Alpha 测试
固定函数 AlphaTest 或与其等同的可编程函数 clip()
在不同的平台上拥有不同的性能特点:
- 一般来说,在大多数平台上使用它来剔除完全透明的像素是一个小优势。
- 但是,在 iOS 上发现的 PowerVR GPU 以及某些 Android 设备中,alpha 测试比较昂贵。请勿尝试用作“性能优化”,因为它将变得更慢。
颜色遮蔽图
在某些平台(主要为 iOS 和 Android 设备上找到的移动 GPU)上,使用 ColorMask 删除某些通道(如 ColorMask RGB
) )会比较昂贵,因此,请在真正必要时才使用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论