MY BLOG DIRECTORY:
YivanLee:专题概述及目录zhuanlan.zhihu.comINTRODUCTION:
下面的球使用的是我用GlobalShader画出来的RT赋上的颜色
这个球的颜色是通过自己的shader实现的:
下面就来一步一步实现使用自己的shader吧。
MAIN CONTENT:
首先我们先创建一个插件。插件其实相当于一个独立的模块,我不想再项目里做,当然再游戏模块里做也是没问题的。我们先把整个流程搞清楚了再去改引擎。
首先创建个插件,名字取为ShadertestPlugin
然后打开工程里的这个插件,在插件目录下加一个Shaders文件夹
然后再在Shaders文件夹里加Private文件夹
然后再在private里面夹里新建一个文本文档,然后把后缀名改位.usf
在这个MyShader.usf里键入如下代码:
#include "/Engine/Public/Platform.ush"
float4 SimpleColor;
void MainVS(
in float4 InPosition : ATTRIBUTE0,
out float4 OutPosition : SV_POSITION
)
{
// screenspace position from vb
OutPosition = InPosition;
}
void MainPS(
out float4 OutColor : SV_Target0
)
{
OutColor = SimpleColor;
}
我声明了一个MyColor的颜色,这个变量后面会和c++绑定,到时候就可以让它跟cpu交互了。然后声明了一个顶点着色器和像素着色i器。
完成了这个之后,再在插件的source文件夹下加两个文件
新建两个文本文档然后把后缀改位.h和.cpp就可以了。做完这些之后记得右键Uproject文件重写generate一下工程
然后重新加载vs项目就可以啦。
然后在把ShadertestPlugin.uplugin文件改一下,如下图。把加载顺序改成在引擎前加载。PostConfigInit。shader必须要在引擎加载完成前加载完才行。
做完这个后,再在MyShader.h中打入如下代码:
然后再在MyShader.cpp中打入如下代码:
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
稍后我会一行行解释这些代码的意思。然后我们要修改下c#文件
完成这些后再generate一下工程,然后就可以打开项目了。我们新建如下资源:
打开BP_Shader_Test蓝图做如下设置
新建一个颜色变量,然后再beginplay函数先清空一下我们的那张ShaderTestRT渲染目标,然后把我们这个shadertestrt渲染目标给我们的DrawTestShaderRenderTarget函数。还需要注意设置input,这样actor才能接收到我们的input事件。
做完这些之后再建一个材质,把RT拖到材质里(这里只是想让我们的shader效果被看到,我们的shader已经可以运作了)
这个操作其实已经是多pass了!!!然后把BP_Shader_Test拖到场景里,你按下1 2 3 就能看到如下效果了:
SUMMARY AND OUTLOOK:
虽然是一个简单的例子,但是终于可以在Unreal中使用自己的着色器了。
Enjoy it
NEXT:
YivanLee:虚幻4渲染编程(Shader篇)【第三卷:第二卷代码解释】zhuanlan.zhihu.com