文章著作权归作者所有。转载请联系作者,并在文中注明出处,给出原文链接。

本系列原更新于作者的github博客,这里给出链接

需要做的准备

首先肯定是需要安装Unity,我这里选择的版本是Unity version :2018.3.7f1。学习任何事物都离不开趁手的工具,Shader也不例外。我们可以选择Sublime Text,JB Rider Free For Student,甚至VS作为我们的编辑器,但试用之后还是觉得VSCode是比较优的选择。下面我们将基于VSCode搭建一个Shaderlab编辑器。(编辑器不带调试功能,我们仍需要借助Unity进行调试。)

首先我们直接从VSCode官网下载VSCode Free ver。打开VSCode,选择Extensions--Search “Shaderlab”--Install “ShaderlabVSCode”。

接着我们配置Shaderlab的json文件。上方菜单:File--Preferences--User Snippets--Search “shaderlab”--选择shader.json进入。

	// Place your snippets for shaderlab here. Each snippet is defined under a snippet name and has a prefix, body and
// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the
// same ids are connected.
// Example:
// "Print to console": {
// "prefix": "log",
// "body": [
// "console.log('$1');",
// "$2"
// ],
// "description": "Log output to console"
// }

我们可以看到如上的文档说明,大意是:

在这里你可以定制你的shaderlab语法模板。用 {} 包围整个代码块,每一个模板用 , 分隔开。

对于每一个模板,内部每一个属性也用 , 分隔开。首先为模板起一个名字,对应 "Print to console" ,接着我们声明它的 prefix 属性,这是用于匹配你的模板的检索标志,对应 “log” ,即我们输入log时,匹配栏会出现这个模板。

接着编辑 “body” 部分,这是模板的内容,格式为["string",],在[]内部,每一个字符串自成一行,可以用转义字符实现缩进换行,若想实现高级定制,则可插入 \({number:hint}** 对于每一个 **\) ,会按照 number 从小到大的顺序,给出 hint 提示补全模板,使用 Tab 切换至下一个可编辑的单元,最终光标会停留在 $0 处。

基于这些,我们便可以灵活的配置自己所需的模板。下面也给出一份我自己常用的模板配置,这份模板也会不定期更新。

{
"Shaderlab": {
"prefix": "shaderlab",
"body": [
"Shader \"${1:Shader Name}\" {\n", "\tProperties {",
"\t\t_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",
"\t\t_Color (\"Color\", Color) = (1, 1, 1, 1)",
"\t}\n", "\tSubShader {",
"\t\tCGINCLUDE",
"\t\t#include \"UnityCG.cginc\"\n", "\t\tsampler2D _MainTex;",
"\t\tfloat4 _MainTex_ST;\n", "\t\tstruct a2v {",
"\t\t\tfloat4 vertex : POSITION;",
"\t\t\tfloat2 texcoord : TEXCOORD0;",
"\t\t};\n", "\t\tstruct v2f {",
"\t\t\tfloat4 pos : SV_POSITION;",
"\t\t\tfloat2 uv : TEXCOORD0;",
"\t\t};\n", "\t\tv2f vert(a2v v) {",
"\t\t\tv2f o;",
"\t\t\to.pos = UnityObjectToClipPos(v.vertex);",
"\t\t\to.uv = TRANSFORM_TEX(v.texcoord, _MainTex);",
"\t\t\treturn o;",
"\t\t}\n", "\t\tfixed4 frag(v2f i) : SV_Target {",
"\t\t\tfixed4 color;",
"\t\t\tcolor = tex2D(_MainTex, i.uv);",
"\t\t\treturn color;",
"\t\t}",
"\t\tENDCG\n", "\t\tPass {\n", "\t\t\tCGPROGRAM",
"\t\t\t#pragma vertex vert",
"\t\t\t#pragma fragment frag",
"\t\t\tENDCG",
"\t\t}",
"\t}\n", "\tFallBack \"Diffuse\"",
"}"
],
"description": "Shaderlab Template"
},
"Range()": {
"prefix": "range",
"body": [
"Range(${1:left}, ${2:right})"
],
"description": "Range for properties"
},
"Pass": {
"prefix": "pass",
"body": [
"Pass {",
"\t$0",
"}"
],
"description": "Pass for Shaderlab Subshader"
},
"Tags": {
"prefix": "tags",
"body": [
"Tags {",
"\t$0",
"}"
],
"description": "Tags in Pass"
}
}

0.3:Before We Start的更多相关文章

  1. css隐藏元素display:none,opacity:0;filter:alpha(opacity=0-100;,visibility:hidden的区别

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.我们一般有三种方式:display:none, opacity:0;fil ...

  2. SignalR 2.0 系列: 开始使用SignalR 2.0

    这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0 原文:Getting S ...

  3. Common Lisp学习笔记(0):从SLIME开始 | 优哉·幽斋

    Common Lisp学习笔记(0):从SLIME开始 | 优哉·幽斋 Common Lisp学习笔记(0):从SLIME开始

  4. [渣译文] SignalR 2.0 系列:SignalR的高频实时通讯

    原文:[渣译文] SignalR 2.0 系列:SignalR的高频实时通讯 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...

  5. [渣译文] SignalR 2.0 系列: SignalR 自托管主机

    原文:[渣译文] SignalR 2.0 系列: SignalR 自托管主机 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...

  6. [渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0

    原文:[渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP ...

  7. [渣译文] SignalR 2.0 系列: 支持的平台

    原文:[渣译文] SignalR 2.0 系列: 支持的平台 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP. ...

  8. [渣译文] SignalR 2.0 系列: SignalR简介

    原文:[渣译文] SignalR 2.0 系列: SignalR简介 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ...

  9. .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧

    原文:.Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧. 话说有了WebB ...

  10. SignalR 2.0 系列: SignalR简介

    SignalR 2.0 系列: SignalR简介 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET S ...

随机推荐

  1. iOS企业版打包 发布在线安装包 plist

    本文转载至 http://blog.csdn.net/u011452278/article/details/49511385 原文转载:http://blog.csdn.net/pang040328/ ...

  2. python文档自动翻译

    关键方法 提取文档内容 读取TXT文档 txt文档的读取很简单,直接用python自带的open()方法就好,代码如下所示: # 读取TXT文档 def read_txt(path): '''实现TX ...

  3. Java课程寒假之开发记账本软件(网页版)之一

    一.制定网页版记账本的基础功能 首先是下载了几个记账本APP,大致地看了一下记账本的功能:添加记录(支出,收入,自定义模板),查询流水(分类查询),账户. 二.开始做出框架 鉴于记账本有上面的功能,所 ...

  4. 在node环境使用axios发送文件

    yarn add form-data (async () => { const l = console.log; const axios = require("axios") ...

  5. common lisp里的几个操作符

    setf  赋值操作符,定义一个全局变量.返回值是最后一个赋值的结果. let 局部变量操作符.let表达式有两部分组成.第一部分是任意多的变量赋值,他们被包裹在一个()中,第二部分是任意数量的表示式 ...

  6. 6.cookie、session,localStorage、sessionStorage

    必须在服务器下运行 cookie/session 存东西 cookie 时间 过期时间 4k 服务器把一部分数据保存在客户端(浏览器) session 回话 时间 服务器存取用户信息 5M local ...

  7. 浅谈SFTP和FTP的区别

    一.适用场景 我们平时习惯了使用ftp来上传下载文件,尤其是很多Linux环境下,我们一般都会通过第三方的SSH工具连接到Linux,但是当我们需要传输文件到Linux服务器当中,很多人习惯用ftp来 ...

  8. NFC中国-中国第一NFC论坛,NFC中文论坛+NFC技术社区+NFC_电子发烧友网【申明:来源于网络】

    NFC中国-中国第一NFC论坛,NFC中文论坛+NFC技术社区[申明:来源于网络] NFC中国-中国第一NFC论坛,NFC中文论坛:http://nfcchina.org/forum.php NFC技 ...

  9. django-CRM-项目部署

    流程 rbac组件的应用 1:拷贝rbac组件到新的项目中,执行注册 2:数据库迁移 先删除rbac下migrations下除了init之外的所有文件 修改用户表 class User(models. ...

  10. day5_函数返回值

    每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元 ...