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

本系列原更新于作者的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进入。

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

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

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

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

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

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

  1. {
  2. "Shaderlab": {
  3. "prefix": "shaderlab",
  4. "body": [
  5. "Shader \"${1:Shader Name}\" {\n",
  6. "\tProperties {",
  7. "\t\t_MainTex (\"Base (RGB)\", 2D) = \"white\" {}",
  8. "\t\t_Color (\"Color\", Color) = (1, 1, 1, 1)",
  9. "\t}\n",
  10. "\tSubShader {",
  11. "\t\tCGINCLUDE",
  12. "\t\t#include \"UnityCG.cginc\"\n",
  13. "\t\tsampler2D _MainTex;",
  14. "\t\tfloat4 _MainTex_ST;\n",
  15. "\t\tstruct a2v {",
  16. "\t\t\tfloat4 vertex : POSITION;",
  17. "\t\t\tfloat2 texcoord : TEXCOORD0;",
  18. "\t\t};\n",
  19. "\t\tstruct v2f {",
  20. "\t\t\tfloat4 pos : SV_POSITION;",
  21. "\t\t\tfloat2 uv : TEXCOORD0;",
  22. "\t\t};\n",
  23. "\t\tv2f vert(a2v v) {",
  24. "\t\t\tv2f o;",
  25. "\t\t\to.pos = UnityObjectToClipPos(v.vertex);",
  26. "\t\t\to.uv = TRANSFORM_TEX(v.texcoord, _MainTex);",
  27. "\t\t\treturn o;",
  28. "\t\t}\n",
  29. "\t\tfixed4 frag(v2f i) : SV_Target {",
  30. "\t\t\tfixed4 color;",
  31. "\t\t\tcolor = tex2D(_MainTex, i.uv);",
  32. "\t\t\treturn color;",
  33. "\t\t}",
  34. "\t\tENDCG\n",
  35. "\t\tPass {\n",
  36. "\t\t\tCGPROGRAM",
  37. "\t\t\t#pragma vertex vert",
  38. "\t\t\t#pragma fragment frag",
  39. "\t\t\tENDCG",
  40. "\t\t}",
  41. "\t}\n",
  42. "\tFallBack \"Diffuse\"",
  43. "}"
  44. ],
  45. "description": "Shaderlab Template"
  46. },
  47. "Range()": {
  48. "prefix": "range",
  49. "body": [
  50. "Range(${1:left}, ${2:right})"
  51. ],
  52. "description": "Range for properties"
  53. },
  54. "Pass": {
  55. "prefix": "pass",
  56. "body": [
  57. "Pass {",
  58. "\t$0",
  59. "}"
  60. ],
  61. "description": "Pass for Shaderlab Subshader"
  62. },
  63. "Tags": {
  64. "prefix": "tags",
  65. "body": [
  66. "Tags {",
  67. "\t$0",
  68. "}"
  69. ],
  70. "description": "Tags in Pass"
  71. }
  72. }

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. numpy学习之创建数组

    1.使用array函数创建数组 import numpy as np ndarray1 = np.array([1, 2, 3]) array([1, 2, 3]) ndarray2 = np.arr ...

  2. [原][openstack-pike][controller node][issue-3][horizon] dashboard show internal error 500 Cannot serve directory /var/www/html

    问题点: 安装完pike后发现只能使用 ip:80 登录到http的主页面 不能使用 http://controller_ip:80/dashboard 登录openstack登录页面.如下图 重启h ...

  3. mac 初次配置apache,及mac下安装mysql

    先打开apache,在浏览器上输入  localhost     回车后会如果屏幕上显示:It works! 如下图: 这说明你的apache已开启 mac 下apache配置(mac自带apache ...

  4. springmvc02,使用注解

    unit04_01 a.RequestMappingHandlerMapping组件 @RequestMapping("/login.do") 该标记用在Controller业务方 ...

  5. ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [13] Permission denied

    zabbix有默认两条自动发现规则,其中一条是自动发现已挂载文件系统,但笔者的三个挂载文件系统中两个监控成功了,一个失败 agentd端挂载情况: 仔细研究sdb1的挂载点,发现它是挂载在xiami用 ...

  6. form提交循环

    使用ajax提交数据时,如果数据非常多,提交会比较麻烦,这时可以给form表一个id=“form”,用serializeArray()方法进行提交. erializeArray()方法通过序列化表单值 ...

  7. 110A

    #include <stdio.h> #include<string.h> #define MAXSIZE 30 int main() { char digits[30]; m ...

  8. Apache环境下配置多个站点的SSL证书

    重新创建apache目录中conf/extra/下的httpd-ssl.conf文件 NameVirtualHost *:443 Listen 443 <VirtualHost *:443> ...

  9. python tuple的函数

    1. len(tuple) 计算元组元素个数 >>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) ...

  10. pytorch torchvision对图像进行变换

    class torchvision.transforms.Compose(转换) 多个将transform组合起来使用. class torchvision.transforms.CenterCrop ...