- 用户指南
- 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 会定义几个预处理宏。
目标平台
SHADER_API_OPENGL
- 桌面 OpenGLSHADER_API_D3D9
- Direct3D 9SHADER_API_XBOX360
- Xbox 360SHADER_API_PS3
- PlayStation 3SHADER_API_D3D11
- 桌面 Direct3D 11SHADER_API_GLES
- OpenGL ES 2.0(桌面或移动),使用 SHADER_API_MOBILE 的存在来确定。SHADER_API_FLASH
- Flash Stage3DSHADER_API_D3D11_9X
- 用于 Windows RT 的 Direct3D 11 目标
此外,当目标着色语言为 GLSL 时定义 SHADER_TARGET_GLSL
(当定义了 SHADER_API_GLES
时总是为真;在使用了 #pragma glsl
后,SHADER_API_OPENGL
可以为真)。
为“移动”平台 (iOS/Android) 进行编译时,为 SHADER_API_GLES
定义 SHADER_API_MOBILE
;在为“桌面”(本地客户端)进行编译时不定义。
平台差异帮助
由于不是特别有前瞻性,因此不建议直接使用这些平台的宏。例如,如果您正在编写检查 D3D 的着色器,那么也许将来该检查应扩展到包括 D3D11。相反,Unity 定义了一些帮助宏(在 HLSLSupport.cginc
中)来对此提供 帮助。
UNITY_ATTEN_CHANNEL
- 光衰减纹理的哪个通道含有数据;用于逐像素光照代码。定义为‘r’或‘a’。UNITY_HALF_TEXEL_OFFSET
- 在将纹理元件映射到像素时需要半纹理元件偏移调整的平台上定义(如 Direct3D 9)。UNITY_UV_STARTS_AT_TOP
- 总是使用值 1 或 0 定义;值 1 在纹理 V 坐标在“纹理顶部”为零的平台上。类似 Direct3D 的平台使用值 1;类似 OpenGL 的平台使用值 0。UNITY_MIGHT_NOT_HAVE_DEPTH_TEXTURE
- 在某个平台可通过将深度手动渲染到纹理中来模仿阴影贴图或深度纹理时定义。UNITY_PROJ_COORD(a)
- 给定一个 4 分量向量,返回一个适合投影纹理读取的纹理坐标。在大多数平台上,其直接返回给定的值。UNITY_NEAR_CLIP_VALUE
- 定义为近裁剪平面的值;类似 Direct3D 的平台使用 0.0,而类似 OpenGL 的平台使用 -1.0。UNITY_COMPILER_CG、UNITY_COMPILER_HLSL 或 UNITY_COMPILER_HLSL2GLSL
确定使用哪个底层着色器编译器;在细微语法差异迫使您编写不同着色器代码的情况下使用。UNITY_CAN_COMPILE_TESSELLATION
- 在着色器编译器“理解”密铺着色器 HLSL 语法(目前仅 D3D11)时定义。UNITY_INITIALIZE_OUTPUT(类型,名称)
- 将给定类型的名称变量初始化为零。UNITY_COMPILER_HLSL、UNITY_COMPILER_HLSL2GLSL、UNITY_COMPILER_CG
- 指明正在使用哪个着色器编译器编译着色器。分别有 Microsoft 的 HLSL(用于 DX11、Xbox360、WinRT)、HLSL 到 GLSL 转换器(#pragma glsl 时用于 iOS/Android 和桌面 OpenGL),以及 NVIDIA 的 Cg(用于 D3D9 和非 GLSL 桌面 OpenGL 目标)。当您遇到非常特殊的情况如编译器之间着色器语法处理差异,以及想要为每个编译器编写不同代码时使用。
阴影贴图宏
在不同的平台上,阴影贴图的声明和采样可能非常不同。因此 Unity 有几个宏可为此提供 帮助:
UNITY_DECLARE_SHADOWMAP(tex)
- 用名称“tex”声明阴影贴图纹理变量。UNITY_SAMPLE_SHADOW(tex,uv)
- 在给定的“uv”坐标处对阴影贴图纹理“tex”进行采样(XY 组件为纹理位置,Z 组件为要比较的深度)。返回单个浮点值,其中阴影术语在 0..1 范围内。UNITY_SAMPLE_SHADOW_PROJ(tex,uv)
- 与以上类似,但会进行投影的阴影贴图读取。“uv”是 float4,所有其他组件除以 .w 以进行查找。
常量缓冲区宏
Direct3D 11 将所有着色器变量集合到“常量缓冲区”中。大多数 Unity 内置变量都已经集合了,但对于您自己的着色器变量而言,更理想的方法是根据期望的更新频率将其放入不同的常量缓冲区中。
为此,使用 CBUFFER_START(name)
和 CBUFFER_END
宏:
CBUFFER_START(MyRarelyUpdatedVariables) float4 _SomeGlobalValue; CBUFFER_END
表面着色器通道标志
编译表面着色器时,着色器以产生用于不同通道照明的大量代码结束。编译每个通道时,定义下列宏之一:
UNITY_PASS_FORWARDBASE
- 正向渲染基础通道(主方向灯、光照贴图、SH)。UNITY_PASS_FORWARDADD
- 正向渲染附加通道(每个通道一个灯)。UNITY_PASS_PREPASSBASE
- 延时光照基础通道(渲染法线和高光指数)。UNITY_PASS_PREPASSFINAL
- 延时光照最终通道(使用光照和纹理)。UNITY_PASS_SHADOWCASTER
- 阴影投射渲染通道。UNITY_PASS_SHADOWCOLLECTOR
- 方向灯阴影的阴影“收集”通道。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论