博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Unity Shader] Shader学习笔记2 - 概述2
阅读量:6785 次
发布时间:2019-06-26

本文共 1468 字,大约阅读时间需要 4 分钟。

hot3.png

 

Unity 有三种编写shader的方式:

surface shaders,
vertex and fragment shaders,
fixed function shaders.

  • fixed function shader (固定功能着色器):
    对应于固定管线硬件的操作,最简单的着色器类型,只能使用Unity3D自带的固定语法和提供的方法,适用于任何硬件,使用难度最小。
  • vertex and fragment shader (顶点片段程序着色器):
    顶点和片段着色器,如前所述,是可编程图形管线主要支持的方式。是效果最为丰富的着色器类型,使用Cg/HLSL语言规范,着色器由顶点程序和片段程序组成。所有效果都需要自己编写,使用难度相对较大。
  • surface shader (表面着色器):
    Unity推荐的shader类型。同样使用Cg/HLSL语言规范的着色器类型,不过把光照模型提取出来,可以使用Unity3D自带的一些光照模型,也可以自己编写光照模型,着色器同样由顶点程序和片段程序组成,不过本身有默认的程序方法,使用者可以只针对自己关系的效果部分进行编写。由于选择性比较大,所以可以编写出较为丰富的效果,使用难度相对vertex and fragment shader小。
    可以理解其是对Vertex 和 Fragment shader的一种包装。
    (surface shader有一个问题,它不支持SubShader内部的多pass,所以某些需要多pass的效果要实现起来会比较困难。)

Unity建议从ShaderLab语法开始学习shader。Fixed function shader 只能被ShaderLab编写。(但是 vertex and fragment shader 和surface shader 是不限于shaderlab的,可以使用Cg/HLSL/GLSL)。

Shaderlab基本结构
Shader "MyShader" {   Properties {     _MyTexture ("My Texture", 2D) = "white" { }     //其他属性  }   SubShader {     // - surface shader or    // - vertex and program shader or    // - fixed function shader   }   SubShader {     // 一个更简单的shader,可以运行在更弱的硬件上  }  Fallback "Legacy Shaders/VertexLit"  [CustomEditor]}

首先是一些属性定义,属性名是前面带下划线的,显示在编辑器的名字是后面字符串中的。

接下来是一个或者多个的子着色器,只有一个能被执行,哪一个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。
最后指定一个回滚,用来处理所有Subshader都不能运行的情况(比如目标设备实在太老,所有Subshader中都有其不支持的特性)。
CustomEditor是定制编辑器。

需要提前说明的是,在实际进行 surface shader 的开发时,我们将直接在Subshader这个层次上写代码,系统将把我们的代码编译成若干个合适的Pass。

转载于:https://my.oschina.net/u/2874878/blog/729194

你可能感兴趣的文章
MemDc Test
查看>>
Codeforces Round #228 (Div. 1) 解题报告
查看>>
Red Hat 6.5 本地yum源的配置
查看>>
【杭电ACM】1.2.3 hide handkerchief
查看>>
linux kernel笔记
查看>>
Django配置、静态文件与路由
查看>>
Hello World
查看>>
将HG版本库推送到Git服务器
查看>>
Struts2中ValueStack结构和总结
查看>>
如何从一个传统开发团队转向敏捷开发团队
查看>>
基于Vue.js 2.0 + Vuex打造微信项目
查看>>
作业十三
查看>>
Unity3D 常用 英文单词
查看>>
Go语言标准库_输入/输出
查看>>
题目1489:计算两个矩阵的乘积
查看>>
GPU-BASED PROCEDURAL PLACEMENT IN HORIZON ZERO DAWN
查看>>
mysql中[Err] 1366 - Incorrect string value: '\xE5\x8D\x问题
查看>>
Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
查看>>
Mysql用户管理(远程连接、授权)
查看>>
Coursera机器学习编程作业Python实现(Andrew Ng)—— 2.1 Logistic Regression
查看>>