欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity Shader - Writing Shaders 编写Shaders

程序员文章站 2022-07-04 11:07:47
...

目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Writing Shaders
版本:2019.1

Writing Shaders

Unity中的着色器可以用三种不同的方式编写:

Surface Shaders

表面着色器

如果你的Shader(着色器需)要受到光和阴影的影响,Surface Shaders表面着色器是你最好的选择。使用Surface Shaders可以轻松实现复杂的Shaders,这是一个与Unity的照明管道更高层次的抽象交互。大多Surface Shaders都自动支持forward(正向渲染)和deferred(延迟渲染)的光照。您可以用Cg/HLSL的几行代码编写表面着色器,然后自动生成更多的代码(Vertex and Fragment Shaders的代码)。

如果你的Shader没有光效,请不要使用Surface Shaders。对于post-processed effects(后处理效果)或许多特效Shader,表面着色器是次优选择,因为它们做了大量的光照计算。

Vertex and Fragment Shaders

顶点与片段着色器

如果你的Shader不需要光效,或需要编写比较特殊的Shader而Surface Shaders不能处理的,你可以使用Vertex and Fragment Shaders。以这种方式编写的Shader是创建所需效果的最灵活的方法(即使是Surface Shader也会自动转换为一堆Vertex and Fragment Shaders),但这是有代价的:你必须写更多的代码,而且很难让它与灯光交互。这些着色器也是用Cg/HLSL编写的。

Fixed Function Shaders

固定函数Shaders(很多前辈称之为:固定流水线Shader)

固定函数Shader是效果简单的,旧版语法的着色器。建议编写可编程着色器,因为这允许更大的灵活性。固定函数着色器完全是用一种叫b的语言编写的,这与微软的.FX或是Nvidia的CgFX文件很类似。其实在导入时,内部所有的固定函着色器都转化为Vertex and Fragment Shaders

ShaderLab

无论是用何种类型来编写你Shader,你的Shader代码都需要用ShaderLab来组织代码结构。就像这样:

Shader "MyShader" {
    Properties {
        _MyTexture ("My Texture", 2D) = "white" { }
        // 可放一些类似颜色、向量的属性在此
    }
    SubShader {
    	// 在这编写你的内容:
    	// - Surface Shader(表面着色器) 或是
    	// - Vertex and Fragment Shader(顶点和片段着色器) 或是
    	// - Fixed Function Shader(固定函数着色器)
    }
    SubShader {
    	// 这类是兼容版本的着色器(以上SubShader都不支持的),可以放一些Unity内置的"fallback" shader
    }
}

我们建议您从阅读ShaderLab参考资料中有关ShaderLab语法的一些基本概念开始,然后继续阅读下面列出的教程。

本教程包含了许多不同类型着色器的示例。Unity的post-processing effects(后处理效果)允许你用着色器创建许多有趣的效果。

继续阅读关于着色器的介绍,并查看Shader reference(着色器参考资料)!