【Unity】Shader Forge插件入门教程

摘要:
ShaderForge插件入门教程说明:现在Unity2018都提供了官方的ShaderGraph,建议学新不学旧,学官方不学第三方。/content/14147其他渠道下载ShaderForgePackage。Sprite:2D精灵Shader模板,基于2D。黄色区域为预览窗口,用来观察Shader效果。Settings:ShaderForge界面的一些设置,讲解见后文。通过简单的制作流程,来了解ShaderForge的基本使用。点击CompileShader,建议Auto。)回到Unity,选择.shader文件并creatematerial。
【Unity】Shader Forge插件入门教程

说明:现在Unity2018都提供了官方的ShaderGraph,建议学新不学旧,学官方不学第三方。——2018.6.21

一.安装说明

~下载

  1. Unity Asset Store购买并下载https://www.assetstore.unity3d.com/en/#!/content/14147
  2. 其他渠道下载ShaderForge Package。

~安装

  1. 将Package导入到Unity。
  2. Unity引擎菜单栏:Windows标签->Shader Forge打开插件使用界面

二.界面说明

~打开插件后的界面

【Unity】Shader Forge插件入门教程第1张

New Shader:新建一个Shader文件

Load Shader:导入已有的Shader文件

PolyCount thread:PolyCount页面

Unity:Unity Forum的页面,在Unity Asset Store上架的资源在Unity Forum均有页面,有问题可以去里面提问。

Node Documentation:Shader Forge中的节点说明文档(重要)

Wiki:Shader Forge的维基文档

~选择New Shader后的界面

【Unity】Shader Forge插件入门教程第2张

Unlit:无光照的Shader模板,选择此模板,使用该Shader的材质将不受光照影响。

Lit(PBR):符合Unity PBR的Shader模板,采用基于物理的光照模型。

Lit(Basic):使用Blinn-Phong光照模型的Shader模板。

Custom Lighting:自定义光照Shader,在此Shader模板中实现自己的光照模型。

Sprite:2D精灵Shader模板,基于2D。

Particle(Additive):主要应用在发光效果的粒子Shader。

Particle(Alpha-Blended):主要应用在细碎效果的粒子Shader,如风沙。

Particle(Multiplicative):主要应用在昏暗效果的粒子Shader,如黑烟。

Sky:天空。

Post-Effect:屏幕空间后期处理Shader

~以选择Unlit模板进入的界面来说明

【Unity】Shader Forge插件入门教程第3张

红框区域为Shader的通道,黑色的通道为该Shader模板激活的通道,灰色通道为该Shader模板冻结的通道。只有激活的通道可以连接节点。

红框区域常用通道:

Diffuse:漫反射

Specular:镜面反射

Normal:法线

Emission:自发光

Opacity:不透明度

橙色区域为节点,图中的节点是新建Shader后默认连接的Color节点。

黄色区域为预览窗口,用来观察Shader效果。

黄色区域上方属性:

Return to menu:返回界面1。

Settings:Shader Forge界面的一些设置,讲解见后文。

Compile shader:编译为.shader文件,编译成功按钮为绿色,编译不成功or改动后按钮为红色。

Auto:是否自动编译shader,建议选中。

黄色区域内属性:

属性1:选择预览的模型。

属性2:预览窗口的背景色。

Skybox:选择天空盒,在不受天空影响的模板中被冻结。

Rotate:选中后模型自动旋转。

紫色区域为相关属性选择列表,讲解见后文。

三.简单案例

根据目前移动平台的依旧广泛使用Blinn-Phong光照模型的特点,我们选择Lit(Basic)模板,来制作一个移动平台的Shader。通过简单的制作流程,来了解Shader Forge的基本使用。

【Unity】Shader Forge插件入门教程第4张

以上效果可以分解为漫反射通道制作,法线通道制作,高光通道制作,描边制作。

具体步骤:

  1. 选择New Shader,在新界面中选择Lit(Basic)模板,修改你的文件名并选择文件路径确定。
  2. 预览窗口中的预览模型使用默认的球体,背景色改为白色,选中Rotate。
  3. 在节点编辑窗口中,鼠标左键拖动视图,将节点以及通道调整的合适的位置。
  4. 鼠标右键菜单中Properties->Texture2D,选中并在节点视窗生成一个Texture2D节点。(在Settings中,选中show node browser panel可以在屏幕右侧面板快速选中。)鼠标左键拖动到Color节点附近。
  5. 选中Texture2D节点,点击节点上出现的Select按钮,在出现的窗口中选择一张漫反射纹理贴图。
  6. 选中Color节点,点击节点上出现的颜色选择按钮,在出现的色盘中选择颜色。
  7. Arithemtic->Multiply生成一个Multiply(乘)节点,将Color和Texture2D的RGB输出引脚分别拖动连接到Multiply的A,B两个输入引脚上。(节点的右侧引脚为输出引脚,左侧引脚为输入引脚。连接方式为:节点1输出引脚——节点2输入引脚or通道)
  8. 调整三个节点的位置,Alt+鼠标左键框选三个节点并移动到通道附近,将Multiply的输出引脚连接到Diffuse通道上。
  9. 点击Compile Shader,建议Auto。这时可以看到预览窗口中已经有了纹理叠加颜色后的效果了。(color1*color2,等同于Photoshop中的正片叠底效果。)
  10. 重复步骤4生成一个Texture2D节点,重复步骤5选择一张法线贴图。
  11. 勾选Texture2D节点上的Normal map,并将上方的White改为Bump。(Normal map使用法线贴图必勾选,White修改为Bump使得在材质编辑器中选择一张Texture Type为Default类型的纹理时,会提醒你是否修复为Normal map。)
  12. 将法线纹理节点的RGB引脚连接到Normal通道上。预览窗口中的模型将表现出法线的凹凸效果,可以鼠标右键移动光源观察。
  13. 重复步骤4生成一个Texture2D节点,重复步骤5选择一张高光贴图。
  14. 将法线纹理节点的RGB/R/G/B/A引脚连接到Specular通道上。(高光贴图如果只占用一个通道,那就只选择相应的通道引脚连接。)
  15. Constant Vectors->Value,生成一个Value节点,输入0.05并连接到Outline Width通道,此时预览窗口可以看到黑色的轮廓边缘。
  16. Properties->Color,生成一个Color节点并修改颜色,连接到Outline Color通道,此时预览窗口可以看到相应颜色的轮廓边缘。
  17. 在左下角的属性选择列表区域,点开Properties标签,修改节点的名称(英文)。(或者在节点上方的label里修改。)里面每个属性标签都将暴露在材质编辑器界面供美术进行参数调节,修改的名称则是你在材质编辑器中看到属性名称。
  18. 上下拖动标签可以改变属性的顺序。

但是调节边缘宽度的属性并没有暴露出去

  1. 将Value节点连接到Outline Width的线断开(Alt+鼠标右键),使用Properties->Value替换该节点。(Constant Vectors->Value生成的Value节点是常量,不可修改,也就不会暴露给编辑器。)
  2. 回到Unity,选择.shader文件并create material。

基础操作和讲解见官方入门指南http://www.neatcorporation.com/Projects/ShaderForge/Media/ShaderForge_QuickStart-sc.pdf

更多案例详见官方教程文档

http://acegikmo.com/shaderforge/tutorials/

【Unity】Shader Forge插件入门教程第5张

四.节点

【Unity】Shader Forge插件入门教程第6张

节点在Shader Forge里面分为以上几个大类。

  1. Arithmetic:包含各种数学计算公式。常用abs(绝对值),Max/Min(最大/最小值),OneMinus(1-),Lerp(线性插值),Floor(向下取整),Multiply(乘)。
  2. Constant Vectors:常数变量,一维到四维以及4*4矩阵,不会暴露给材质编辑器。
  3. Properties:包含暴露给材质编辑器的各种属性。常用Color,Texture2D。
  4. UV Operations:针对UV的相关操作。
  5. Geometry Data:包括了几何体的输入数据,包括模型的UV,法线方向,世界坐标等等。
  6. Lighting:光照的相关数据,主要用于Custom Lighting Shader模板中。
  7. External Data:其他数据,包括视点位置,屏幕参数,时间等。
  8. Scene Data:场景数据,包括fog颜色,场景深度等信息。
  9. Math Constants:数学常量,如π。
  10. Trigonometry:三角函数。
  11. Code:代码块,函数块。
  12. Utility:略。

节点详述请参考节点文档:http://acegikmo.com/shaderforge/nodes/?lang=zh_cn

五.属性列表

Shader Settings标签

【Unity】Shader Forge插件入门教程第7张

Path:文件路径,可修改。

Fallback:在运行平台硬件不支持该shader的情况下,选择替代shader。

Allow using atlased sprites:2D开发使用,3D默认即可。

Draw call batching:批处理绘制调用,默认Enable。

Inspector preview mode:3D/2D/sky,制作的什么类型选什么。

Target renderers:目标渲染器,如无特殊需求,默认。

Properties标签

【Unity】Shader Forge插件入门教程第8张

在此标签修改暴露给材质编辑器的属性名称(英文),顺序以及默认值。

Lighting标签

【Unity】Shader Forge插件入门教程第9张

Render Path:渲染路径,正向渲染或延迟渲染,移动平台选择正向渲染即可。

Light Mode:光照模型,对应不同的Shader模板。分别是无光照(UnLit模板)、Blinn-Phong光照模型,Phong光照模型,PBL(基于物理光照,Lit(PBR)模板)。

Gloss Mode:使用光泽度还是粗糙度模型,根据自己需要。

Transparent Mode:透明度模式,淡出or反射。

Remap gloss from [0,1] to [1,2048]:重映射光泽度从[0,1]到[1,2048]。

Enery Conversing:能量守恒,PBR需要勾选。

Lighting Count:光源数量,单一定向光(太阳光)or多重光源

Lightmap & light probes:灯光贴图&灯光探针。

Per-pixel light probe sampling:逐像素光照探针采样。

Reflection probe support:支持反射探针。

Receive Ambient Light:是否接受环境光。

Mask directional light specular by shadows:定向光高光是否被阴影遮挡。

Geometry标签

【Unity】Shader Forge插件入门教程第10张

Face Culling:面剔除,默认是剔除背面,可选剔除正面,也选择双面渲染。

Normal Quality:法线质量,插值或归一化,默认使用归一化。

Vertex Positioning:顶点位置,世界空间or裁剪空间or广告牌(法线面向摄像机)。

Normal Space:法线空间选择,切线or建模or世界,默认切线空间。

Vertex offset mode:顶点偏移模式,相对偏移or绝对偏移。基于模型空间的顶点偏移叫做相对偏移,世界空间的顶点偏移叫做绝对偏移。

Tessellation Mode:细分模式,一般不需要用到细分,DirectX11特性。

Outline Extrude Direction:描边挤出方向,一般都是沿着顶点法线方向。

Per-pixel screen coodinates:逐像素屏幕坐标。

Show 2D sprite pixel snap option in material:在材质中显示2D精灵像素单元设置,3D开发忽略。

Blending标签

【Unity】Shader Forge插件入门教程第11张

Blend Mode:混合模式,如果是不透明的就选择Opaque,其余根据需要选择。

Source*_+Destination*_:源*_+目标*_,决定了源图像与目标图像以哪种方式混合。

Color Mask:颜色遮罩,需要过滤的通道取消选择。

Dithered alpha clip:抖动透明裁剪,开or关。

Offset Factor:偏移因子。

Offset Units:偏移单位。

Per-object refraction/scene color (expensive):

Receive Fog:应用雾。

Auto Sort:自动排序,如需手动改变排序,在Order中改变数值。数值越小,在渲染队列越靠前。

Depth Test:深度测试。

Ignore Projectors:忽略投影器。

Write to Depth buffer:是否写入深度缓存。

Stencil Buffer:是否开启模板缓存。

Settings内容

【Unity】Shader Forge插件入门教程第12张

Real-time node rendering:实时节点渲染,是否开启看需求。

Using scroll in the quickpicker:在快速拾取中使用滚动。

Show variable name & precision:显示变量名和精度,看需求开启。

Show node browser panel:显示节点浏览面板,是否开启看个人习惯。

Hierarchal Node Move:层次节点移动。

六.优化

  1. 节点尽量精简。
  2. 浮点精度降低,开启Show variable name & precision后,每个节点会显示变量名称和精度。针对移动平台,需要降低浮点精度以符合GPU的需求。Float/Half/Fixed精度分别为32/16/11位。常规颜色使用fixed,包括纹理数据;短向量,方向,模型空间坐标以及高动态范围颜色用half;世界空间坐标,纹理坐标,以及需要复杂计算的三角函数,指数幂函数计算使用float。
  3. 计算过程中,尽量避免数据类型转换。

免责声明:文章转载自《【Unity】Shader Forge插件入门教程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python正则表达式匹配中文日期时间Linux客户端终端(命令行)访问samba下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

unity的一些重要技巧(转)【整理他人的东西】

刚开始学习Unity3D时间不长,在看各种资料。除了官方的手册以外,其他人的经验也是非常有益的。偶尔看到老外这篇文章,觉得还不错,于是翻译过来和大家共享。原文地址: http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/  关于这些技巧 这些技巧不可能适用...

Unity3d之音效播放和调用手机震动

http://blog.csdn.net/sunshine_1984/article/details/12943979 今天研究了下Unity3d音效播放相关内容,整理下实现细节。 1,添加音效文件到Assets/Resources目录,我这里添加到Assets/Resources/audio目录了。 2,新建C# Script命名为audio 3,编写a...

记录一款Unity VR视频播放器插件的开发

效果图## 先上一个效果图: 背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两款Unity插件: AVPro 这个在Unity商店售价150$,最新release版本为1.6.15,功能包括: Power...

使用Unity实现VR中在黑板上写字(初级篇)

一、工具 1.开发用的是Unity 5.6.2版本 2.VR中的物理交互用的是VRTK插件,这个插件集成了比较好的物理交互功能; 3.HTC Vive 二、概述 实现的功能: 在一个白板上,用不同颜色的笔,在白板画出任何想要的图形; 因为只是一个初级篇所以只是用两个脚本简单的实现,而且并没有黑板擦等功能 ,也不能两个笔同时画画,这些功能将会在未来的升级篇...

Unity面试题汇总(第一部分)

一、什么是渲染管道? 答:就是告诉GPU一些数据,经过一系列的操作,得到最终要显示的数据。渲染管道中的很多步骤,总的来说是将几何物体从一个坐标系变换到另一个坐标系中去。 主要步骤如下: 本地坐标系 -- 经过世界变换矩阵 --> 世界坐标系 -- 经过视图变换矩阵 --> 视图坐标系 -- 经过投影变换矩阵 --> 投影坐标系 -- 经过...

[原] OpenGL ES 学习笔记 (一)

1.OpenGL ES 的坐标系在屏幕上的分布 OpenGL ES 的坐标系{x, y, z} 通过图片的三维坐标系可以知道: - 它是一个三维坐标系 {x, y, z} - 三维坐标中心在正方体的几何中心 {0, 0, 0} - 整个坐标系是 [0, 1] 的点,也就是说 OpenGL 中只支持 0 ~ 1 的点 (这里所讲的 0 和 1 ,最好理...