征服Unity3dUnity Shader分享Unity技术分享

【Unity3D技术文档翻译】第2.6篇 编写着色器 (材质、着

2018-06-29  本文已影响13人  何三思
Unity3D技术文档翻译

上一章:【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

如果本文对你有帮助的话,点个赞或者评论一下吧!

下一章:【Unity3D技术文档翻译】第3.0篇 光照总览 & 灯光

上一篇下一篇

猜你喜欢

热点阅读