失敗1、2020年になってCustomノードが安定してきたみたいで
constで宣言しておくとそのままMyFloat使える
Codeにreturn MyFloat;で使える。
CodeにMyreturn MyFunction();で関数を呼び出せる。
const static float3 MyFloat = float3(1.0,0.0,0.0);
float3 MyFunction()
{
return float3(0.0,1.0,0.0);
}
TestOutput1 = float3(0,0,1);
return 0.0;
Additional Output :TestOutput1
OutputType CMOT Float1
で
コンパイルされて自動生成されたHLSLコードの中身は
エラーコードで出てくるこれは
/Engine/Generated/Material.ush
マテリアルエディタのメニュー「ウインドウ>シェーダーコード>HLSL コード」を選択。
すると HLSL コードのウインドウが開き、コンパイルされた全マテリアルの内容が HLSL で表示される。
このプロジェクトの作り方は
【UE4】USF(Unreal Shader File) をすぐに始める環境設定 Project編さん
でのShaderフォルダの読み込み設定が必要だった。。50個ぐらいエラーがでるので見ない方がいいかも
今回はプロジェクト名は:Shader_MatCustomにしたよ
プロジェクト設定でCPP
Shader_MatCustom.h
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FShader_MatCustom : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;
};
Shader_MatCustom.cpp
// Copyright Epic Games, Inc. All Rights Reserved.
#include "Shader_MatCustom.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FShader_MatCustom, Shader_MatCustom, "Shader_MatCustom" );//3つの書き換え
void FShader_MatCustom::StartupModule()
{
FString ShaderDirectory = FPaths::Combine(FPaths::ProjectDir(), TEXT("Shader"));
if (!AllShaderSourceDirectoryMappings().Contains("/Project"))
{
AddShaderSourceDirectoryMapping("/Project", ShaderDirectory);
}
}
void FShader_MatCustom::ShutdownModule()
{
}
Shader_MatCustom.Build.cs
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class Shader_MatCustom : ModuleRules // ←クラス名リネーム
{
public Shader_MatCustom(ReadOnlyTargetRules Target) : base(Target) // ←クラス名リネーム
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { //改行して展開した。
"Core",
"CoreUObject",
"Engine",
"InputCore",
"RenderCore", // ←追記
"RHI" // ←あとで必要になるので追記(パス追加に関係ない)
});
PrivateDependencyModuleNames.AddRange(new string[] { });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
VSでビルドをしてコンパイル
Shaderフォルダ作成
マテリアル作成
CustomNode作成
MyShader.usf作成
IncludeFilePathに/Project/MyShader.usf
MyShader.usf
const static float3 MyFloat = float3(1.0,0.0,0.0);
float3 MyFunction()
{
return float3(0.0,1.0,0.0);
}
やっとうまくいったので
C++サンプルプロジェクトは丸ごとだ。.slnも入ってるよ
https://drive.google.com/file/d/1-ClY_v2cudLARAkMmAfPGrAnFndNnWIX/view?usp=sharing
参照
キンアジさんのところで見つけてしまった。
コメント