- 用户指南
- 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 中的阴影
特定平台的渲染差异
Unity 在不同的平台上运行,而且在某些情况下存在运行差异。大部分时间里 Unity 都向您隐藏差异,但有时您仍然可以撞见它们。
渲染纹理坐标
垂直纹理坐标的惯例与 Direct3D、OpenGL 和 OpenGL ES 不同:
- 在 Direct3D 中,坐标顶部为零,向下增加。
- 在 OpenGL 和 OpenGL ES 中,坐标底部为零,向上增加。
大多数时候这都无关紧要,除了渲染到渲染纹理时。在此情况下,Unity 渲染到 Direct3D 上的纹理时,在内部翻转渲染,以便平台之间的惯例匹配。
当使用图像效果和抗锯齿 (Anti-Aliasing) 时,不会出现这种情况。在此情况下,Unity 渲染到屏幕以获得抗锯齿选项,然后将渲染“解析”为 RenderTexture 以便用图像效果 (Image Effect) 进一步处理。产生的图像效果的源纹理在 Direct3D 上没有翻转(不同于其他所有的渲染纹理 (Render Texture))。
如果图像效果 (Image Effect) 简单(一次处理一个纹理),这无关紧要,因为 Graphics.Blit 会进行处理。
然而,如果在图像效果 (Image Effect) 中同时处理一个以上的 RenderTexture,它们很可能会在不同的垂直方向出现(仅在类似 Direct3D 的平台上,并且仅在使用抗锯齿选项时)。您需要在顶点着色器中手动“翻转”屏幕纹理,像这样:
//在 D3D 上使用 AA 时,主纹理与场景深度纹理 //将在不同垂直方向出现。 //因此在这种情况下翻转纹理采样(主纹理 //纹理元件大小将为 Y 轴负值)。 #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) uv.y = 1-uv.y; #endif
请在着色器替换样例工程中查看边缘检测 (Edge Detection) 场景以了解这样的示例。此处的边缘检测同时使用屏幕纹理和相机的深度 + 法线纹理。
Alpha 测试 (AlphaTest) 和可编程着色器
某些平台,尤其是手机 (OpenGL ES 2.0) 和 Direct3D 11,没有固定函数 alpha 测试功能。使用可编程着色器时,建议改为使用像素着色器的 Cg/HLSL clip()
函数。
Direct3D 11 着色器编译器对语法更挑剔
Direct3D 9 和 OpenGL 使用 NVIDIA 的 Cg 来编译着色器,但 Direct3D 11(和 Xbox 360)使用 Microsoft 的 HLSL 着色器编译器。HLSL 编译器对着色器各种细微错误更挑剔。例如,它不接受没有适当初始化的函数输出值。
您会遇到此类情况的最常见位置是:
- 有一个“输出”参数的表面着色器顶点修改器。确保像这样初始化输出:
void vert (inout appdata_full v, out Input o) { UNITY_INITIALIZE_OUTPUT(Input,o); // ... }
- 部分初始化的值,例如返回 float4 的函数,但代码仅设置它的 .xyz 值。确保设置所有的值,或如果只需要这些值,就将其改为 float3。
- 在顶点着色器中使用
tex2D
由于顶点着色器中不存在 UV 导数,因此 tex2D 无效;您需要抽取一个详细的纹理层次,例如使用tex2Dlod (tex, float4(uv,0,0))
。您还需要添加#pragma glsl
,使其在 OpenGL 上运行。
DirectX 11 HLSL 语法和表面着色器 (Surface Shader)
当前表面着色器编译管线的有些部分无法理解特定于 DX11 的 HLSL 语法。如果是诸如 StructuredBuffers、RWTextures 和其他非 DX9 语法的 HLSL 功能,则您必须将其纳入只有 DX11 的预处理宏:
#ifdef SHADER_API_D3D11 // 特定于 DX11 的编码,如 StructuredBuffer<float4> myColors; RWTexture2D<float4> myRandomWriteTexture; #endif
使用带 OpenGL ES 2.0 的 OpenGL 着色语言 (GLSL) 着色器
OpenGL ES 2.0 只为 OpenGL 着色语言 (GLSL) 提供 有限的本地支持,例如 OpenGL ES 2.0 层不为着色器提供 内置参数。
Unity 执行内置参数的方式与 OpenGL 完全相同,但缺失以下内置参数:
- gl_ClipVertex
- gl_SecondaryColor
- gl_DepthRange
- gl_LightSourceParameters 结构的 halfVector 属性
- gl_FrontFacing
- gl_FrontLightModelProduct
- gl_BackLightModelProduct
- gl_BackMaterial
- gl_Point
- gl_PointSize
- gl_ClipPlane
- gl_EyePlaneR, gl_EyePlaneS, gl_EyePlaneT, gl_EyePlaneQ
- gl_ObjectPlaneR, gl_ObjectPlaneS, gl_ObjectPlaneT, gl_ObjectPlaneQ
- gl_Fog
iPad2、MSAA 和 alpha 混合几何结构
当 MSAA 已激活并且用 RGBA colorMask 绘制 alpha 混合几何结构时,Apple 驱动程序有产生假象的错误。为避免出现假象,遇到此配置时我们强制使用 RGBA colorMask,尽管它会将内置 Glow FX 渲染成无法使用(因为它需要 DST_ALPHA 获取强度值)。同时,如果您自己编写程序,请更新着色器(请参阅Pass Docs)中的“渲染设置 (Render Setup) -> ColorMask”。)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论