【Unity3D】Shader Graph简介

news/2024/11/20 11:45:02/

1 Shader Graph 简介

        Shader Graph 是 Unity 官方在 2018 年推出的 Shader 制作插件,是图形化的 Shader 制作工具,类似于 Blender 中的 Shader Editor 和 UE 中的 Material Editor,它使用流程图的形式表达顶点变换和片元着色的流程。

        Shader Graph 主要支持的渲染管线是 URP(Universal Render Pipeline)和 HDRP(High Definition Render Pipeline),它与 built-in 管线(Forward 和 Deffered)不兼容。

2 Shader Graph 环境搭建

        对于 URP 模板和 HDRP 模板创建的项目,会自动安装 Universal RP 插件,并配置 Universal Render Pipeline Asset;对于 3D 模板创建的项目,需要手动安装 Universal RP 插件,并配置 Universal Render Pipeline Asset。

        1)下载 Universal RP 插件

        依次点击【Window → Package Manager】打开包管理器,下载 Universal RP 插件,如下。

        2)配置 Universal Render Pipeline Asset

        在 Assets 目录下创建 URP Settings 目录,在该目录下右键,弹出菜单栏,依次点击【Create → Rendering → URP Asset (with Universal Renderer)】,会生成以下两个文件,如下。

        依次点击【Edit → Project Settings → Graphics】,将上述创建的 Universal Render Pipeline Asset 文件拖拽到 Scriptable Render Pipline Settings 中,如下。

        配置完后,Main Camera 对象下面会自动添加 UniversalAddtionalCameraData 组件,Directional Light 对象下面会自动添加 UniversalAddtionalLightData 组件。

3 Shader Graph 窗口介绍

        1)创建 Shader Graph

        在 Assets 窗口右键,弹出菜单栏,依次选择【Create → Shader Graph → URP】,再选择 Lit Shader Graph 或 Unlit Shader Graph,创建 Shader Graph。

        Lit Shader Graph 和 Unlit Shader Graph 的区别是:前者带有光照模型,并且是基于物理的光照模型(PBR),用法类似于表面着色器;后者不带光照模型,需要自己写光照计算流程。

        2)Shader Graph 窗口组成

        Shader Graph 由 Blackboard、Graph Inspector、Main Preview、Vertex、Fragment、Node 等模块组成(前 3 个模块可以通过右上角的按钮控制显示和隐藏),如下。  编辑好 Shader Graph 后,点击左上角的 Save Asset 按钮保存。

  • Blackboard:用于创建外部属性,相当于 Shader 中的 Properties,可以创建 Float、Vector2~4、Color、Boolean、Gradient、Texture2D、Texture2D Array、Texture3D、Cubemap、Matrix2~4 等类型变量。
  • Graph Inspector:包含节点设置和图设置两个选项卡,节点设置中可以设置节点命名、参数值域、默认值等信息;图设置中可以设置着色器数值计算精度、支持的渲染管线、Built-in 和 Universal 管线参数等。
  • Main Preview:用于预览着色器渲染效果,在该窗口右键,可以选择预览的模型。
  • Vertex:顶点着色器,顶点变换、法线变换、切线变换在这里进行。
  • Fragment:片元着色器,光照计算、贴图在这里进行,在 Graph Inspector 窗口的 Graph Settings 选项卡里的 Material 中可以选择 Lit(PBR 光照模型)或 Unlit(无光照模型)的片元着色器。
  • Node:节点,在 Shader Graph 窗口的空白区域右键,选择 Create Node,创建相应节点,节点类型主要有 Artistic(对比度、饱和度、白平衡等美术调整)、Channel(合并和分离通道)、Input(顶点位置、颜色、法线、时间等输入)、Math(加减乘除等数学运算)、Procedural(噪声、圆形、多边形等程序纹理)、Utility(逻辑运算、Infinite 无穷大检验、Na​N 合法数值检验、自定义函数等实用工具)、UV(鱼眼扭曲、球形扭曲、旋转贴图等 uv 变换)。

4 Shader Graph 简单案例

4.1 纯色着色

        创建 Unlit Shader Graph,重命名为 My Unlit Shader Graph。双击打开 My Unlit Shader Graph 文件,在 Blackboard 窗口新建 Color 变量,并重命名为 _Color。

         将 _Color 变量拖拽到空白区域,并与 Base Color 相连,选中 _Color 后,在 Node Settings 中设置默认颜色,如下。点击左上角的 Save Asset 按钮保存编辑。

         在 Assets 窗口创建材质,重命名为 UnlitMat,将 My Unlit Shader Graph 文件拖拽到 UnlitMat 中,并设置颜色为绿色,如下。

        在场景中创建 Cube 和 Sphere,修改其材质为 UnlitMat,显示如下。

4.2 漫反射着色

        在 4.1 节的基础上,修改 My Unlit Shader Graph 文件如下。 

        其中 MainLight 是自定义函数,选中 MainLight,在 Node Settings 中配置如下,SHADERGRAPH_PREVIEW 用来判断是否是预览窗口。

#if SHADERGRAPH_PREVIEWDirection = half3(0.5, 0.5, 0);Color = half4(1, 0, 0, 1);
#elseLight light = GetMainLight();Direction = light.direction;Color = light.color;
#endif

         显示效果如下。

4.3 贴图

        在 4.1 节的基础上,修改 My Unlit Shader Graph 文件如下。 

         在 Assets 窗口创建 2 个材质,分别重命名为 CubeMat、SphereMat,将 My Unlit Shader Graph 文件拖拽到 CubeMat 和 SphereMat 材质中,并设置纹理图片,将 CubeMat 和 SphereMat 分别拖拽到 Cube 和 Sphere 对象上,显示效果如下。


http://www.ppmy.cn/news/999918.html

相关文章

Amazon Aurora Serverless v2 正式发布:针对要求苛刻的工作负载的即时扩展

我们非常兴奋地宣布,Amazon Aurora Serverless v2 现已面向 Aurora PostgreSQL 和 MySQL 正式发布。Aurora Serverless 是一种面向 Amazon Aurora 的按需自动扩展配置,可让您的数据库根据应用程序的需求扩展或缩减容量。 亚马逊云科技开发者社区为开发者…

Pod hang住问题记录

智能信息费服务,上游是SOA调用,上线一段时间后,偶尔有短暂上游调用接口出错告警,之后立刻恢复。排查日志发现有7-8s间单台pod的所有请求被hang住,之后立刻恢复,在hang住期间出问题的pod可以正常接收上游请求…

若依(RuoYi)系统添加自定义的模块

RuoYi系统是干什么用的,这里不过多说明了,自己搜一下,其提供的功能己经基本满足了一些简单的系统应用,如果想进行二次开发的小伙伴,可能会想仅仅用Ruoyi的后台权限管理,但是业务功能想进行自定义&#xff0…

nodejs环境部署

1.前言 前端的打包必须要使用nodejs环境 2.部署 下载安装包,在下面的路径中找到适合自己项目合适的版本在下载,可以问一下前端开发人员 路径:Index of /dist/ 我这里是下载了14.21.3版本的nodejs环境,上传到需要部署的主机中 mkdir /opt…

LeetCode 热题 100 JavaScript -169多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 …

java在idea开发工具中测试Spring Boot上线后临时变量是否可用

上文 java Spring Boot上线运维 启动jar时控制台调整零时变量 我们亲手在项目部署之后 调试了临时变量 但是 目前就还有一个问题 这些指令一般是运维人员去操作的 但是 我们作为开发人员 要保证这些临时变量都是可操作的 或者 不能操作也要提前说清楚 毕竟项目是你写的 你也要负…

JDK8:Lambda表达式使用介绍,Lambda表达式源码及原理分析

文章目录 一、Lambda表达式使用1、Lambda表达式介绍2、Lambda使用规范(1)Lambda基础格式 3、Lambda表达式与传统方式比对(1)遍历集合(2)使用Lambda替换匿名内部类使用(3)实现Lambda实…

46.C++模板

今天进行了新的学习,关于c模板的使用。模板是 C 中一种泛型编程的机制,允许在编写代码时使用参数化类型或参数化值。通过模板,可以编写通用的代码,以处理多种不同类型的数据,从而提高代码的复用性和灵活性。 C 中有两…