查看原文
其他

虚幻4引擎教程:添加自定义光照模型(一)

2016-09-07 翻译:黄威 Gad-腾讯游戏开发者平台

其实这篇文章我在二月的时候就已经写完了,不过我最近才把它拿出来发表。

这就意味着这篇文章是在旧版本虚幻引擎的基础上写的。

不过新版本也不会有本质上的变化,所以只需要改变一下行号并在中间加上几行就可以在新版本中添加光照模型了。

在我先写的这三篇文章中,我想要介绍一下关于如何为虚幻引擎4中的材质编辑器添加一个自定义光照模型。这并不是一件很简单的事情,论坛上很多人都对这里有一些疑惑,所以我想要与大家分享我目前的研究成果。



1.粗糙度与镜面反射强度2.阴影平滑度3.光线4.普通贴图举例

首先,我先放出几张图片,这样你们就能直观地看到各种数据调节后的视觉效果。有了这些模型,你就能够更好地控制材质编辑器中的光照效果,这样就能使你的模型具有卡通着色的效果。它还能够支持金属、半透明等类型。材质编辑器还会处理一些像轮廓、菲涅尔反射或是颜色阴影等造成的影响。如果你对这些感兴趣,那就继续读下去吧。即使你对实现其他事情感兴趣或是只是简单地想要改变BRDF,你也可以继续读下去,因为这些基础方面的内容基本上都是一样的。

在我们开始之前,有几件事需要注意一下:

1你应该至少熟悉一种着色语言。虚幻引擎的渲染文件(.usf)和HLSL很相似
2这只是一篇关于对延期渲染管线做一些改变的向导,所以在移动设备上的渲染不会受影响(我没有对直向光照做任何改动)。我现在不打算考虑这方面的问题,如果你在这方面有任何信息,你可以在评论中告诉我们。
3我不会上传完整的引擎代码,所以不要向我索要这些代码。
4这个光照模型主要是基于在UE论坛上一个古老线程中发现的信息。我后来发现还有另一种创建自定义卡通渲染模型(原文超链接已失效)的创建方法,这是基于预览版的写的,所以你找不到某些东西的时候可以去检查一下行号。




让我们开始把!

无论是抓取一个新的源代码还是对所有文件进行备份,你都要进行编辑,然后在编辑器中选用你想用的解决方案。我使用虚拟引擎的4.10版本,如果你使用的旧版本的虚幻引擎,你可能会发现代码基础架构的不同,所以这可能会不兼容。在更新的版本中(由当前放出的预告推测出)虚拟引擎添加了几个新的光照模型,代码可能会有一些变化,更新版本的时候别忘记了(最有可能的就是行的变化以及自定义变量的新名称)。

 EngineTypes.h

首先我们需要添加我们新的光照模型,这样引擎才能对它进行识别。打开EngineTypes.h,滚动到203行。你应该能找到枚举EMaterialShadingModel,在MSM_Max之前添加一行:

 MSM_StylizedShadowUMETA(DisplayName = "Stylized Shadow"), 

 这将会在我们材质编辑器的下拉菜单中添加一个新的模型。你自然可以随意命名它,只要你能够记住枚举的名字就可以了。

 MaterialShared.cpp 

接下来我们需要在着色器中添加我们的新模型。在1257行最后一个光照模型之前添加一行:

 case MSM_StylizedShadow:OutEnvironment.SetDefine(TEXT("MATERIAL_SHADINGMODEL_STYLIZED_SHADOW"),TEXT("1")); break; 

Material.cpp

我们要做的最后一件事就是在我们的着色器中保证有额外定制模型有几个pin。向下滚动到大概490行,这一部分代码定义了不同光照模型会让哪个pin解锁。我们将会劫持一些已有的没有在使用中的pin,而不是创建出新的pin。在代码中找到cases MP_Clearcoat and MP_ClearcoatRoughness,然后在那之前添加一行:

Active = ShadingModel == MSM_ClearCoat|| ShadingModel == MSM_StylizedShadow; 

在预览版中这些变量应该被叫做MP_Custom之类的。因为它们可以在不同的光照模型中重新使用。我不会在这里添加一个新的输入,因为我不认为在必要时给显卡发送更多的信息是好的做法。如果你想要添加一个新的输入,那么就参考由上述提到的卡通渲染模型的代码改变。


我们的新光照模型

那么这篇文章到这里就结束了。如果你现在想要进行编辑,材质编辑器就会在下拉菜单中显示出我们刚刚添加的光照模型了。

在第二部分我们将会谈论着色器方面的问题。

【版权声明】

原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。


GAD小妹时间

GAD小妹

【直播报名】点击阅读原文报名

御龙主策:揭开御龙端游历久弥新的秘诀




近期热文

中枪了没有!游戏开发过程中容易忽略的事

中枪了没有!游戏开发过程中容易忽略的事(二)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存