- 【Unity3D技术文档翻译】第3.0篇 光照总览 &
- 【Unity3D技术文档翻译】第2.1篇 纹理 (Texture
- 【Unity3D技术文档翻译】第2.3.1篇 光照内容与光照环境
- 【Unity3D技术文档翻译】第2.5篇 通过脚本访问和修改材质
- 【Unity3D技术文档翻译】第2.3篇 标准着色器 (Stan
- 【Unity3D技术文档翻译】第2.3.3.1篇 Renderi
- 【Unity3D技术文档翻译】第2.6篇 编写着色器 (材质、着
- 【Unity3D技术文档翻译】第2.4篇 PBR材质验证器(Ph
- 【Unity3D技术文档翻译】第3.6.7篇 反射探针概述(R
- 【Unity3D技术文档翻译】第3.6.4篇 烘焙环境遮蔽(Ba
上一章:【Unity3D技术文档翻译】第2.5篇 通过脚本访问和修改材质参数
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Materials, Shaders & Textures】→【Standard Shader】→【Writing Shaders】
编写着色器
在 Unity 中可以用三种不同方式之一编写着色器。
表面着色器(Surface Shaders)
如果你的着色器需要被光照和阴影影响,表面着色器(Surface Shaders)是最好的选择。表面着色器可以容易地以一个简洁的方式编写复杂的着色器——这是一个与 Unity 光照管线进行交互的高层级抽象。大多数表面着色器自动同时支持正向和延迟光照。你只要写几行 Cg/HLSL 表面着色器代码,就会有更多代码根据你所写的自动生成。
如果你的着色器没有对光照做任何处理,请不要使用表面着色器。对于后处理效果(post-processed effects),或者许多特殊效果着色器,表面着色器是次优选项,因为它们没什么好的理由去做一系列的光照计算。
顶点与片段着色器(Vertex and Fragment Shaders)
如果你的着色器不需要与光照交互,或者你所需的效果很特殊,表面着色器无法实现,那么就需要顶点与片段着色器(Vertex and Fragment Shaders)。用该方式编写着色器程序,是制作你想要效果的最灵活的方式(实际上表面着色器会被自动转化为一系列顶点和片段着色器),但是这也有代价:你不得不写更多代码,而且很难使它与光照交互。这些着色器也是用 Cg/HLSL 语言编写。
固定管线着色器(Fixed Function Shaders)
固定管线着色器是制作非常简单效果的遗留语句。它被推荐用于编写可编程着色器,因为它允许更多的灵活性。固定管线着色器完全由 ShaderLab 语句编写,这是一种与微软 .FX 文件,或者NVIDIA 的 CgFX 类似的语句。在着色器被导入时,所有固定管线着色器都会被转换为顶点与片段着色器。
ShaderLab
无论使用哪种方式,实际的着色器代码总是被包装进 ShaderLab,用于组织着色器结构。如下图所示:
Shader "MyShader" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// Place other properties like colors or vectors here as well
}
SubShader {
// here goes your
// - Surface Shader or
// - Vertex and Fragment Shader or
// - Fixed Function Shader
}
SubShader {
// Place a simpler "fallback" version of the SubShader above
// that can run on older graphics cards here
}
}
我们建议你先通过 ShaderLab reference 阅读 ShaderLab 语法的基本概念,然后继续学习下面列出的教程。
教程包含了丰富的不同类型着色器的例子。Untiy 的 post-processing effects 使你可以制作许多具有有趣效果的着色器。
阅读更多关于着色器介绍,请查阅 post-processing effects!
- Tutorial: ShaderLab & Fixed Function Shaders(教程:ShaderLab & 固定管线着色器)
- Tutorial: Vertex and Fragment Shaders(教程:顶点与片段着色器)
- Surface Shaders(表面着色器)
- Writing Vertex and Fragment Shaders(编写顶点与片段着色器)
如果本文对你有帮助的话,点个赞或者评论一下吧!
网友评论