博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0.3:Before We Start
阅读量:6525 次
发布时间:2019-06-24

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

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

本系列原更新于作者的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"    }}

转载于:https://www.cnblogs.com/Li-F/p/10635464.html

你可能感兴趣的文章
Oracle 12c 日常维护
查看>>
CF 445A DZY Loves Chessboard
查看>>
Cobbler简介
查看>>
恢复 git reset -hard 的误操作
查看>>
C# WinForm 文件上传下载
查看>>
Spring Integration概述
查看>>
RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分
查看>>
Android安全问题 静音拍照与被拍
查看>>
cocos2d-x 3.1.1 学习笔记[13] listen 监听器
查看>>
WTL介绍
查看>>
应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)
查看>>
放量滞涨,抛出信号
查看>>
BeanFactory not initialized or already closed - call 'refresh' before accessing beans解决办法
查看>>
linux主机下的Vmware Workstation配置NAT设置 端口映射-Ubuntu为例
查看>>
unity physics joint
查看>>
TD的访问地址
查看>>
【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制
查看>>
一张图看懂normal,static,sealed,abstract 的 区别
查看>>
Task的使用
查看>>
grep和正则表达式
查看>>