前言

在Unity2018.1之后新增了Shader Graph功能。(emmm,现在都2020了,只怪自己平时关注新知识太少了)Shader Graph可以在一个可视化的面板中完成shader功能的实现,一句代码都不需要写,大大降低了shader的开发难度。

官方文档:https://docs.unity3d.com/Packages/com.unity.shadergraph@7.2/manual/index.html

环境

Unity版本2018.1或者更新,同时需要在Package Manager中安装好URP,HDRP或者LWRP。装好URP或者其他会自动帮你安装好Shader Graph Package。

本文用的是Unity2019.3,以及URP

创建第一个Shader Graph

Package都安装好后,我们在Project中右键Create->Shader中就可以看见有几个Graph选项。我们创建一个PBR Graph,就会生成一个.shadergraph的文件,简单的命名为PBRGraph,双击该文件就可以打开我们的编辑界面。

左边的面板会显示我们Shader的可配置参数,右边的面板会显示预览效果,我们可以通过右上角的两个按钮来开关它们。

首先先简单的介绍下下面几种Graph:

PBR Graph:(physically based rendering)

用于制作基于物理的Shader,可以用于金属或镜面效果等。其输入的值有如图这些:

Vertex Position 每个顶点在模型空间中坐标
Vertex Normal 顶点的法线
Vertex Tangent 顶点的法线切线
Albedo 定义Material的反射率
Normal 定义Material的法线,法线最好在切线空间中
Emission 定义Material的发散效果
Metallic 定义Material的金属效果
Smoothness 定义Material的光滑程度
Occlusion 定义Material的环境光遮挡值
Alpha 定义Material的alpha值,被用于透明材质或者alpha裁剪
AlphaClipThreshold alpha低于该值的片段会被丢弃

Unlit Graph:

用于制作无光照效果的Shader,参数相对比PBR的要来的少

Sub Graph:

子模块,类似于我们代码中的函数,会有一个Output(也就是return)来输出值。我们可以通过设置自定义输出的类型以及个数等。适用于一些模块会被频繁使用的时候,可以做成一个Sub Graph,然后在其他地方要使用的时候,添加Node并选择它即可。

          

Material选项

在我们的Master Node上点击小齿轮按钮,会出现Material的相关配置选项,如下图。例如,若我们要使Shader实现透明效果,需要在Surface选项中选择Transparent

选项 可选值 作用
Precision Inherit / Float / Half 定义精度
Workflow Speculat / Metallic 设置Material的默认工作模式
Surface Opaque / Transparent 定义Material是否透明
Blend Alpha / Premultiply / Additive / Multiply 当Material设置为透明,定义其混合模式
Fragment Normal Space Tangent / Object / World 定义默认的坐标空间值
Two Sided True / False 设置为true,则Mesh的两面都会被渲染

言归正传,在打开我们创建的PBRGraph编辑界面后,我们可以右键来创建Node,这些Node同样的可以看做是一个个函数,都拥有对应的输出值,有些Node也会有对应的输入值。这里我们先创建一个Color的Node(可以利用搜索功能直接定位),然后将其输出的值拖到Albedo上,此时预览界面的效果也随之变化,点击左上角的Save Asset保存一下。

接着我们创建一个新的Material,在Shader中选择我们的PBR Graph,然后替换物体原有的material,就可以看见效果了。

添加Property

此时我们无法通过修改Material的参数来修改颜色,解决方法就是利用我们的Properies。进入到我们的编辑界面,我们可以直接在Color节点上右键,选择Convert To Property,这样就可以将我们的color的值转换为一个可以修改的参数,显示如图:

        

当然,我们也可以在Properties面板中点击加号,直接添加参数,然后拖到编辑面板中,进行关联。保存一下后,就可以发现现在我们可以通过Material来自己调整需要的颜色了。

生成Shader文件

我们可以通过在Master面板上右键,选择Copy Shader就可以得到对应的hlsl语法的Shader脚本了。

在下一篇我们会通过一个简单的案例,来更加熟悉Shader Graph和Node

Shader Graph学习(一)相关推荐

  1. Shader Graph学习各种特效案例(持续更新)

    文章目录 前言 案例 unity 2019.4.10 外发光 进阶 带方向的外发光 裁剪 进阶 带边缘色的裁剪 溶解 进阶 带边缘色溶解 卡通阴影 水波纹 积雪效果 不锈钢效果 UV抖动 水波纹 红旗 ...

  2. Unity Shader Graph实现模型任意方向剖切(学习笔记/五毛钱特效)

    使用Shader Graph:Unlit Master 使用Position获取物体Object的空间坐标信息. 使用Split拆分物体的空间坐标信息,比如拆分为x.y.z. 使用Split拆分后的x ...

  3. Unity初学者Shader Graph教程

    Unity初学者Shader Graph教程 了解面向非程序员的 Unity 引擎可视化着色器编程工具的来龙去脉 课程英文名:Your Ultimate Guide to Shader Graph f ...

  4. 泡泡 shader graph unity

    #shader graph 案例学习 泡泡 shader graph 制作 之前在Youtube看到的一个教程,比较老,如果全部照做效果出不来.对此改进了一下 效果图:不同角度颜色不一样 源码: 贴图 ...

  5. 使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器

    本文转自Unity Connect Unity的技术经理Ciro Continisio在Connect上分享创作模仿任天堂游戏<塞尔达传说:旷野之息>角色风格的着色器,受到不少用户的关注, ...

  6. 技术研究:Unity中Shader Graph之飘动的旗帜(一)

    公众号[知享奇] 发送"ShaderGraph00"获取本文章的shader. 目的 学习使用Shader Graph制作一个可以飘动的旗帜. 效果展现 制作准备 Unity版本 ...

  7. php代码着色器,使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器(转)...

    马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x Unity的技术经理Ciro Continisio在Connect上分享创作模仿任天堂游戏& ...

  8. 边缘发光材质unity_Unity Shader Graph 小功能实现(一)边缘发光

    在Unity 2018.2 版本正式启用了高清渲染管线,shader可视化编程. 现在我们就尝尝鲜,来实现了个物体边缘发光的shader效果. 准备 点击Windos->Package Mang ...

  9. Unity Shader Graph 使用安装步骤缺失材质球,以及场景原本物体材质球丢失问题解决

    Unity Shader Graph 使用安装步骤,以及原本物体材质球丢失问题 我是用的版本是2019.3.9版本的,仅供参考. 第1步:Window-PackageManager-点击All Pac ...

最新文章

  1. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 华东赛区
  2. JavaScript之各种继承方式和优缺点
  3. 自定义 View 循环滚动刻度控件
  4. Swift语言指南(二)--语言基础之注释和分号
  5. printf 小代码 大问题
  6. nginx websocket 代理
  7. 基于Jenkins+Gitlab+Harbor+Rancher架构的CI/CD实现
  8. 一文读懂MapReduce
  9. 小程序wx.showActionSheet 调起转发、分享
  10. getwmi php 报错,调用win32_service类就报错“get-wmiobject :常规故障”,这是wmi类损坏?...
  11. Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载
  12. 【Python】Pandas实现二表查重高亮、去重
  13. Mac 连接显示器,外接显示器不出影像
  14. React中的SVG陷阱
  15. Spark 基础知识
  16. 电脑开机蓝屏怎么解决?3个方法,快速解决电脑蓝屏
  17. java集合——Set
  18. EJB:First component in name xxx not found - Java / Java EE
  19. python pandas合并单元格_利用Python pandas对Excel进行合并的方法示例
  20. 解读Linux零拷贝之mmap

热门文章

  1. 十二、偏向锁、轻量级锁、重量级锁,锁的膨胀过程
  2. 基于区域生长的图像分割算法!
  3. ubuntu14.10+QT4编写ARM9(mini2440)应用的配置与安装
  4. 常用benchmark小结
  5. dpdk发送RST报文(一)—— 构建RST包
  6. 关于自行修改人人商城模板文件目录指引
  7. SpringBoot邮件发送(抄送、密送、图片、多文件等一应俱全哦)
  8. 记一次被“呼死你”电话骚扰的反骚扰经历
  9. 字节跳动以 50 亿元收购 Pico 入局 VR;哪吒汽车与华为达成合作;韩国计划禁止苹果和谷歌向开发者抽取佣金 | EA周报...
  10. Arduino 实验 —— 红外遥控RGB灯