当前位置:   article > 正文

在Unity 2019.2中扩展Shader Graph,实现自定义光照_subgraph获取场景中主光源函数

subgraph获取场景中主光源函数

本文转自Unity Connect

本文将分享如何在Unity 2019.2中扩展Shader Graph,从而实现自定义光照。

随着Unity 2019.1的发布,Shader Graph着色器视图资源包正式脱离预览阶段。在Unity 2019.2中,我们为Shader Graph着色器视图加入了更多新功能。

Unity 2019.2中Shader Graph新功能

自定义函数和子视图更新

为了在Shader Graph着色器视图中使用自定义代码,你可以使用全新的Custom Function节点自定义输入和输出,对其重新排序,并将自定义函数直接插入节点中,或者引用外部文件。

Sub Graphs子视图功能也进行了更新,你可以基于不同类型,可自定义名称和可重新排序的端口,为子视图自定义想要的输出数据。此外,子视图的Blackboard面板现在支持主视图支持的所有数据类型。

颜色模式和精度模式

你可以使用Shader Graph着色器视图轻松创建出强大而优化的着色器。

在Unity 2019.2中,你可以在视图中手动设置计算的精度,既可以设置整个视图的计算精度,也可以设置单个节点的计算精度。新的Color Modes颜色模式可以轻松快捷地可视化精度流,节点分类以及为特定用途显示自定义颜色。

了解更多关于新功能的信息,请访问Shader Graph着色器视图文档。

示例项目

为了帮助你熟悉使用新的自定义函数工作流程,我们提供了一个示例项目。该示例项目将向你展示如何使用Custom Function节点,以及如何为轻量级渲染管线LWRP编写自定义光照着色器。

请访问GitHub下载示例项目:https://github.com/Unity-Technologies/ShaderGraph-Custom-Lighting

温馨提醒:打开示例项目,请确保使用Unity 2019.2和LWRP资源包6.9.1或更高版本。

从主光源获取数据

首先,我们需要从场景中的主光源获取信息。点击Create > Shader > Unlit Graph,创建新的Unlit Shader Graph着色器视图。在Create Node菜单中,找到新的Custom Function节点,单击右上角齿轮按钮,打开节点菜单。

在节点菜单中,我们可以添加输入和输出数据。我们添加二个输出接口,它们分别是Direction和Color,接口类型为Vector 3 。如果遇到“undeclared identifier”(未声明标识符)警告提示,不必担心,在我们添加代码后,警告会自动消失。

在Type下拉菜单中,选择String,把函数名称改为MainLight。现在,我们可以开始在文本框添加自定义代码。

image

首先,我们要使用#ifdef SHADERGRAPH_PREVIEW标识。

由于节点上的预览方框无法访问光线数据,所以我们需要告诉节点在视图内的预览框显示什么内容。#ifdef会让编译器在不同情况下使用不同代码。首先定义输出接口的回退值。

#if SHADERGRAPH_PREVIEW
       Direction = half3(0.5, 0.5, 0);
       Color = 1;
  • 1
  • 2
  • 3

接下来,我们使用#else告诉编译器不在预览框内的时候要做什么。

我们会在此获取光线数据,使用LWRP资源包的内置函数GetMainLight()。我们可以使用获取到的信息来指定Direction和Color输出。

自定义函数代码如下。

#if SHADERGRAPH_PREVIEW
       Direction = half3(0.5, 0.5, 0);
       Color = 1;
#else
       Light light = GetMainLight();
       Direction = light.direction;
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/98227
推荐阅读
相关标签
  

闽ICP备14008679号