本文为个人从Unity文档翻译所得,如要转载请注明源博客地址:http://ymdzz.blog.51cto.com

ShaderLab Syntax 基本语法

Unity里的所有的Shader文件都是用一种说明性语言(declarative language)来编写。

在Shader文件里,用括号包含的语法来声明用于描述Shader的变量。

例如显示哪一些Shader属性(shader properties)到Material的监视面板中;做哪种硬件回滚操作;使用哪一种混合模式(blending modes)等等。而真正的Shader代码写在一个CGPROGRAM片段中。

Shader文件的第一个定义就是Shader的名字,每一个文件都必须定义一个(而且只能定义一个)Shader。Material所使用的Shader定义了有多少个物体要被渲染。

语法(Syntax)

Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }

它将会出现在Material的监视面板中,Shader可以定义成一系列的属性,并显示在Material的监视面板中。接着是一系列的SubShader,再往下是任意的回滚(fallback)或者是自定义编辑器声明。

细节(Details)

属性(Properties)

Shader可以有一系列的属性,任何定义在Shader里的属性都会显示在material的监视面板中,

典型的属性包括物体的颜色、贴图或者是Shader要用到的任意变量。

SubShaders & Fallback

每一个Shader包含了一系列的SubShader,至少要有一个,当加载一个Shader的时候,Unity会按顺序调用这一系列的SubShader,并且采用第一个支持当前用户机器的SubShader,如果没有一个SubShader可以被支持,那么Unity将会尝试使用回滚操作。

不同的显卡有不同的性能,这是一个所有游戏开发者都会遇到的不变的困扰,你想你的游戏运行在高端配置机器上效果更华丽,但是又不想让游戏只能在3%的机器上跑。于是SubShader出现了,你可以创建一个拥有所有华丽效果的SubShader,同时准备更多的SubShader用于低端的显卡,这些SubShader会实现你想在低端机器上跑的效果,或者更多的效果细节。

Shader的LOD(level of detail),即细节等级,和Shader replacement是两个在SubShader上的技术点。

例子:

以下是一个简单的Shader:

// colored vertex lighting

Shader "Simple colored lighting"

{

// a single color property

Properties {

_Color ("Main Color", Color) = (1,.5,.5,1)

}

// define one subshader

SubShader

{

// a single pass in our subshader

Pass

{

// use fixed function per-vertex lighting

Material

{

Diffuse [_Color]

}

Lighting On

}

}

}

这一个Shader定义了一个颜色属性_Color,将会以MainColor这个名字显示在Material的监视面板上,默认值是(1, 0.5, 0.5, 1),然后定义了一个SubShader,这个SubShader由一个Pass组成,这个Pass开启了fixed-function vertex lighting和为它创建了一个基本的Material。

转载于:https://blog.51cto.com/ymdzz/1753072

ShaderLab Syntax 基本语法相关推荐

  1. 再试译ScottGu's Posts 之 VS2008之语言特性--查询语法--New Orcas Language Feature: Query Syntax...

    学习一门新的语言,总要从其语法学起.为了方便大家学习,同时也为了自己学习,就将ScottGu的这篇关于3.5中增加的新的特性帖子译了出来.这次我翻译采用中汉对照的方式,不然像上次译的那个那样的话不但我 ...

  2. 语言(Language)和语法(Syntax)简述

    语言Language和语法Syntax简述 一字母表和字符串 二语法和语言 1几个基本概念 a语法Grammer b推导Derivation c归纳Reduction d语法规则的递归定义Recurs ...

  3. ShaderLab学习总结

    转载 Unity ShaderLab学习总结 Why Bothers? 为什么已经有ShaderForge这种可视化Shader编辑器.为什么Asset Store已经有那么多炫酷的Shader组件可 ...

  4. Unity ShaderLab学习总结

    http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 作者 DonaldW 关注 2014.07.20 17:17* 字数 4891 阅读 ...

  5. php的基本语法和数据类型

    php的基本语法 1,php可以和html代码混合,但是一定要使用 <?php //php代码 ?> 可以在php中嵌入html代码 <?php echo"hello ,w ...

  6. python3语法错误-【Python3之异常处理】

    一.错误和异常 1.错误 代码运行前的语法或者逻辑错误 语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) def test: ^ SyntaxError: inva ...

  7. 更适合程序员使用的Vim配置 显示行号 语法高亮 智能缩进

    在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进等功能的. 为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc. 在启动vim时,当前用 ...

  8. vim显示行号、语法高亮、自动缩进的设置

    在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc  在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc 在Red Hat Linux 中v ...

  9. linux如何使用vim显示行号语法高亮,(.vimrc简单使用)

    每次用vim,都要上网查如何使用插件.vimrc,索性就写成博客,省的以后再查了. vimrc就是vim配置文件,正常使用的vim配置很少,最重要的是不显示行号,没有语法高亮. 下面是我平时使用的配置 ...

最新文章

  1. iOS 实现多个可变 cell 复杂界面的制作
  2. JAVA 实现 快速排序算法
  3. 为什么使用缩进来分组语句?15个为什么,帮助你更好的理解Python!
  4. 如何第一时间了解研究领域最新动态?
  5. 尸鬼封尽の覆盖源码 管你什么鬼一招解决
  6. Django 笔记-20190521
  7. linux虚拟用户创建目录权限不足,centos7的FTP服务vsftpd里建立虚拟用户不同目录分配不同权限...
  8. 航空订票系统界面java_Java命令行界面(第21部分):航空公司2
  9. 使用python和pandas进行同类群组分析
  10. 企业实战04:Oracle数据库_管理表
  11. CArray动态数组
  12. Doris FE配置参数(全面)
  13. Action中动态方法的调用 Action中通配符的使用 Result的配置
  14. Origin 三种方法在图片中添加水平辅助线
  15. 计算机的操作系统有哪些
  16. SSH配置公钥后仍需要输入密码问题解析
  17. jenkins的应用
  18. 震旦ad188复印机报机器故障维修召唤c0211
  19. python不等于语法
  20. java 上传图片转base64_java将图片转为base64返回给前端

热门文章

  1. 一文了解机器学习中的交叉熵
  2. SAP WMS Posts
  3. 为什么大家都不戳破深度学习的本质?!
  4. 盘点52个全球人工智能和机器学习重要会议
  5. 为何生命进化的方向是衰老,而不是永生?
  6. 科技城|从专利布局看人工智能领域全球竞争与中国面临的挑战
  7. 自动驾驶发展调查:产业化还需技术“破冰”
  8. 首个单设备模拟神经元出现 可有效解决传统计算机所面临的问题
  9. 俄罗斯“木船”机器人系统将于2020年部署部队
  10. 新计算推动信息技术产业新发展?