Top > エンジン改造-マテリアルの出力にパラメーターを追加
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Development</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>9.0.30729</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{FD7C5E1A-CFE4-4FD5-A525-1EB1599A39AC}</ProjectGuid> <OutputType>Exe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>UnrealBuildTool</RootNamespace> <AssemblyName>UnrealBuildTool</AssemblyName> <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent> <IsWebBootstrapper>false</IsWebBootstrapper> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <FileUpgradeFlags> </FileUpgradeFlags> <OldToolsVersion>3.5</OldToolsVersion> <UpgradeBackupLocation /> <TargetFrameworkProfile> </TargetFrameworkProfile> <PublishUrl>publish\</PublishUrl> <Install>true</Install> <InstallFrom>Disk</InstallFrom> <UpdateEnabled>false</UpdateEnabled> <UpdateMode>Foreground</UpdateMode> <UpdateInterval>7</UpdateInterval> <UpdateIntervalUnits>Days</UpdateIntervalUnits> <UpdatePeriodically>false</UpdatePeriodically> <UpdateRequired>false</UpdateRequired> <MapFileExtensions>true</MapFileExtensions> <ApplicationRevision>0</ApplicationRevision> <ApplicationVersion>1.0.0.%2a</ApplicationVersion> <UseApplicationTrust>false</UseApplicationTrust> <BootstrapperEnabled>true</BootstrapperEnabled> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Development|AnyCPU' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <OutputPath>..\..\..\Binaries\DotNET\</OutputPath> <DefineConstants>TRACE</DefineConstants> <Optimize>false</Optimize> <DebugType>pdbonly</DebugType> <PlatformTarget>AnyCPU</PlatformTarget> <ErrorReport>prompt</ErrorReport> <AllowUnsafeBlocks>false</AllowUnsafeBlocks> <Prefer32Bit>false</Prefer32Bit> <UseVSHostingProcess>false</UseVSHostingProcess> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <OutputPath>..\..\..\Binaries\DotNET\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <Optimize>false</Optimize> <DebugType>pdbonly</DebugType> <PlatformTarget>AnyCPU</PlatformTarget> <ErrorReport>prompt</ErrorReport> <Prefer32Bit>false</Prefer32Bit> </PropertyGroup> <ItemGroup> <Reference Include="Ionic.Zip.Reduced"> <HintPath>..\..\..\Binaries\DotNET\Ionic.Zip.Reduced.dll</HintPath> <Private>False</Private> </Reference> <Reference Include="RPCUtility"> <HintPath>..\..\..\Binaries\DotNET\RPCUtility.exe</HintPath> <Private>False</Private> </Reference> <Reference Include="System" /> <Reference Include="System.Core"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference> <Reference Include="System.Data" /> <Reference Include="System.Management" /> <Reference Include="System.Web.Extensions" /> <Reference Include="System.Windows.Forms" /> <Reference Include="System.Xml" /> <Reference Include="System.Xml.Linq" /> </ItemGroup> <Choose> <When Condition="Exists('XboxOne\UEBuildXboxOne.cs')"> <ItemGroup> <Compile Include="XboxOne\UEBuildXboxOne.cs" /> <Compile Include="XboxOne\XboxOneToolChain.cs" /> <Compile Include="XboxOne\XboxOneDeploy.cs" /> <Compile Include="XboxOne\XboxOneProjectGenerator.cs" /> <Compile Include="XboxOne\XboxOneResourceGenerator.cs" /> <Compile Include="XboxOne\XboxOneManifestGenerator.cs" /> </ItemGroup> </When> </Choose> <Choose> <When Condition="Exists('Switch\UEBuildSwitch.cs')"> <ItemGroup> <Compile Include="Switch\UEBuildSwitch.cs" /> <Compile Include="Switch\SwitchToolChain.cs" /> <Compile Include="Switch\UEDeploySwitch.cs" /> <Compile Include="Switch\SwitchProjectGenerator.cs" /> </ItemGroup> </When> </Choose> <Choose> <When Condition="Exists('PS4\UEBuildPS4.cs')"> <ItemGroup> <Compile Include="PS4\PS4ProjectGenerator.cs" /> <Compile Include="PS4\PS4ToolChain.cs" /> <Compile Include="PS4\UEBuildPS4.cs" /> <Compile Include="PS4\UEDeployPS4.cs" /> </ItemGroup> </When> </Choose> <ItemGroup> <Compile Include="Configuration\ModuleRules.cs" /> <Compile Include="Configuration\TargetInfo.cs" /> <Compile Include="Configuration\TargetRules.cs" /> <Compile Include="Mac\MacToolChain.cs" /> <Compile Include="Mac\UEBuildMac.cs" /> <Compile Include="Mac\MacProjectGenerator.cs" /> <Compile Include="Mac\UEDeployMac.cs" /> <Compile Include="System\ConfigCache.cs" /> <Compile Include="System\ConfigFile.cs" /> <Compile Include="System\ConfigFileAttribute.cs" /> <Compile Include="System\ConfigHierarchy.cs" /> <Compile Include="System\CustomBuildSteps.cs" /> <Compile Include="System\FileSystemReference.cs" /> <Compile Include="System\InstalledPlatformInfo.cs" /> <Compile Include="System\LocalizationDescriptor.cs" /> <Compile Include="System\ObsoleteOverrideAttribute.cs" /> <Compile Include="System\RulesAssembly.cs" /> <Compile Include="System\SupportedConfigurationsAttribute.cs" /> <Compile Include="System\SupportedPlatformsAttribute.cs" /> <Compile Include="System\TargetReceipt.cs" /> <Compile Include="System\VersionManifest.cs" /> <Compile Include="ToolChain\AppleToolChain.cs" /> <Compile Include="TVOS\TVOSProjectGenerator.cs" /> <Compile Include="TVOS\TVOSToolChain.cs" /> <Compile Include="TVOS\UEBuildTVOS.cs" /> <Compile Include="TVOS\UEDeployTVOS.cs" /> <Compile Include="Android\UEBuildAndroid.cs" /> <Compile Include="Android\UEDeployAndroid.cs" /> <Compile Include="Android\AndroidAARHandler.cs" /> <Compile Include="Android\AndroidToolChain.cs" /> <Compile Include="Android\AndroidProjectGenerator.cs" /> <Compile Include="System\UnrealPluginLanguage.cs" /> </ItemGroup> <ItemGroup> <Compile Include="Utilities\BinaryReaderExtensions.cs" /> <Compile Include="Utilities\BinaryWriterExtensions.cs" /> <Compile Include="Utilities\HashSetExtensions.cs" /> <Compile Include="Windows\WindowsDeploy.cs" /> <Compile Include="Windows\WinResources.cs" /> </ItemGroup> <ItemGroup> <Compile Include="IOS\IOSProjectGenerator.cs" /> <Compile Include="IOS\IOSToolChain.cs" /> <Compile Include="IOS\UEBuildIOS.cs" /> <Compile Include="IOS\UEDeployIOS.cs" /> </ItemGroup> <ItemGroup> <Compile Include="HTML5\HTML5ProjectGenerator.cs" /> <Compile Include="HTML5\HTML5ToolChain.cs" /> <Compile Include="HTML5\UEBuildHTML5.cs" /> <Compile Include="HTML5\HTML5SDKInfo.cs" /> </ItemGroup> <ItemGroup> <Compile Include="Linux\LinuxProjectGenerator.cs" /> <Compile Include="Linux\LinuxToolChain.cs" /> <Compile Include="Linux\UEBuildLinux.cs" /> </ItemGroup> <Choose> <When Condition="Exists('System\NotForLicensees\TelemetryProviderET.cs')"> <ItemGroup> <Compile Include="System\NotForLicensees\TelemetryProviderET.cs" /> </ItemGroup> </When> </Choose> <ItemGroup> <Compile Include="..\DotNETCommon\MetaData.cs"> <Link>Properties\MetaData.cs</Link> </Compile> <Compile Include="Configuration\UEBuildClient.cs" /> <Compile Include="Configuration\UEBuildDeploy.cs" /> <Compile Include="Configuration\UEBuildBinary.cs" /> <Compile Include="Configuration\UEBuildEditor.cs" /> <Compile Include="Configuration\UEBuildGame.cs" /> <Compile Include="Configuration\UEBuildModule.cs" /> <Compile Include="Configuration\UEBuildPlatform.cs" /> <Compile Include="Configuration\UEBuildServer.cs" /> <Compile Include="fastJSON\Formatter.cs" /> <Compile Include="fastJSON\Getters.cs" /> <Compile Include="fastJSON\JSON.cs" /> <Compile Include="fastJSON\JsonParser.cs" /> <Compile Include="fastJSON\JsonSerializer.cs" /> <Compile Include="fastJSON\Reflection.cs" /> <Compile Include="fastJSON\SafeDictionary.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Configuration\UEBuildConfiguration.cs" /> <Compile Include="Configuration\UEBuildTarget.cs" /> <Compile Include="System\ActionGraph.cs" /> <Compile Include="System\ActionHistory.cs" /> <Compile Include="System\BuildException.cs" /> <Compile Include="Configuration\BuildConfiguration.cs" /> <Compile Include="System\BuildHostPlatform.cs" /> <Compile Include="System\FlatCPPIncludeDepencencyCache.cs" /> <Compile Include="System\Distcc.cs" /> <Compile Include="System\CodeLiteGenerator.cs" /> <Compile Include="System\CodeLiteProject.cs" /> <Compile Include="System\KDevelopGenerator.cs" /> <Compile Include="System\CMakefileGenerator.cs" /> <Compile Include="System\ModuleDescriptor.cs" /> <Compile Include="System\PluginDescriptor.cs" /> <Compile Include="System\ProjectDescriptor.cs" /> <Compile Include="System\QMakefileGenerator.cs" /> <Compile Include="System\MakefileGenerator.cs" /> <Compile Include="System\SNDBS.cs" /> <Compile Include="System\VCSolutionOptions.cs" /> <Compile Include="System\DirectoryLookupCache.cs" /> <Compile Include="System\CPPEnvironment.cs" /> <Compile Include="System\CPPHeaders.cs" /> <Compile Include="System\DependencyCache.cs" /> <Compile Include="System\DynamicCompilation.cs" /> <Compile Include="System\ExternalExecution.cs" /> <Compile Include="System\FileItem.cs" /> <Compile Include="System\JunkDeleter.cs" /> <Compile Include="System\LinkEnvironment.cs" /> <Compile Include="System\LocalExecutor.cs" /> <Compile Include="System\Plugins.cs" /> <Compile Include="System\Project.cs" /> <Compile Include="System\ProjectFileGenerator.cs" /> <Compile Include="System\ResponseFile.cs" /> <Compile Include="System\RPCUtilHelper.cs" /> <Compile Include="System\RulesCompiler.cs" /> <Compile Include="System\SourceFileSearch.cs" /> <Compile Include="System\Telemetry.cs" /> <Compile Include="System\ThirdPartyHeaderFinder.cs" /> <Compile Include="System\UEPlatformProjectGenerator.cs" /> <Compile Include="System\Unity.cs" /> <Compile Include="System\UnrealBuildTool.cs" /> <Compile Include="System\UProjectInfo.cs" /> <Compile Include="System\Utils.cs" /> <Compile Include="System\VCProject.cs" /> <Compile Include="System\VCProjectFileGenerator.cs" /> <Compile Include="System\XcodeProject.cs" /> <Compile Include="System\XcodeProjectFileGenerator.cs" /> <Compile Include="ToolChain\RemoteToolChain.cs" /> <Compile Include="ToolChain\UEToolChain.cs" /> <Compile Include="System\XGE.cs" /> <Compile Include="Utilities\DictionaryExtensions.cs" /> <Compile Include="Utilities\GraphVisualization.cs"> <SubType>Code</SubType> </Compile> <Compile Include="Utilities\JsonObject.cs" /> <Compile Include="Utilities\XmlConfigLoader.cs" /> <Compile Include="Windows\UEBuildWindows.cs" /> <Compile Include="Windows\VCEnvironment.cs" /> <Compile Include="Windows\VCToolChain.cs" /> <Compile Include="Windows\WindowsProjectGenerator.cs" /> </ItemGroup> <ItemGroup> <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> <Visible>False</Visible> <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> <Install>false</Install> </BootstrapperPackage> <BootstrapperPackage Include="Microsoft.Net.Framework.2.0"> <Visible>False</Visible> <ProductName>.NET Framework 2.0 %28x86%29</ProductName> <Install>true</Install> </BootstrapperPackage> <BootstrapperPackage Include="Microsoft.Net.Framework.3.0"> <Visible>False</Visible> <ProductName>.NET Framework 3.0 %28x86%29</ProductName> <Install>false</Install> </BootstrapperPackage> <BootstrapperPackage Include="Microsoft.Net.Framework.3.5"> <Visible>False</Visible> <ProductName>.NET Framework 3.5</ProductName> <Install>false</Install> </BootstrapperPackage> <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> <Visible>False</Visible> <ProductName>.NET Framework 3.5 SP1</ProductName> <Install>false</Install> </BootstrapperPackage> </ItemGroup> <ItemGroup> <None Include="app.config" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> --> <PropertyGroup> <PostBuildEvent> </PostBuildEvent> <PreBuildEvent> </PreBuildEvent> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\DotNETCommon\DotNETUtilities\DotNETUtilities.csproj"> <Project>{5d7d66e8-8c76-4af9-b3ec-2ef03421d730}</Project> <Name>DotNETUtilities</Name> </ProjectReference> </ItemGroup> </Project> #contents ---- UE4.15.1で検証 * 参考 [#vd9b40e9] - [UE4] GBufferを拡張せずに異方性スペキュラをやってみる - もんしょの巣穴blog http://monsho.blog63.fc2.com/blog-entry-193.html - UE4でマテリアル出力にピンを追加(UE4.14.0) - Qiita http://qiita.com/com04/items/6dc75c647ce97ba72ba4 * メモ [#q58a0421] - EMaterialProperty - MP_MAXは33が限界。Uint32でビットマスクにして使っている。 * やってみた [#a1051e1c] + Engine\Source\Runtime\Engine\Public\SceneTypes.h ++ enum EMaterialProperty #code(C,nonumber,nomenu){{ MP_PixelDepthOffset, }} の下に追加分 + Engine\Source\Runtime\Engine\Classes\Materials\Material.h #code(C,nonumber,nomenu){{ FScalarMaterialInput PixelDepthOffset; }} の下に追加するパラメーターの変数を追加する #code(C,nonumber,nomenu){{ UPROPERTY() FScalarMaterialInput CellShadeParam; }} -- FScalarMaterialInput -- FVector2MaterialInput -- FVectorMaterialInput + Engine\Source\Runtime\Engine\Private\Materials\Material.cpp ++ void UMaterial::Serialize(...) #code(C,nonumber,nomenu){{ static_assert(MP_MAX == 29, }} を追加した分のMP_MAX値にする #code(C,nonumber,nomenu){{ static_assert(MP_MAX == 33, }} ++ UMaterial::PostLoad() #code(C,nonumber,nomenu){{ DoMaterialAttributeReorder(&PixelDepthOffset, UE4Ver); }} の下に追加分 #code(C,nonumber,nomenu){{ DoMaterialAttributeReorder(&CellShadeParam, UE4Ver); }} ++ FExpressionInput* UMaterial::GetExpressionInputForProperty(...) #code(C,nonumber,nomenu){{ case MP_PixelDepthOffset: return &PixelDepthOffset; }} の下に追加分 #code(C,nonumber,nomenu){{ case MP_CellShadeParam: return &CellShadeParam; }} ++ UMaterial::CompilePropertyEx #code(C,nonumber,nomenu){{ case MP_PixelDepthOffset: return PixelDepthOffset.CompileWithDefault(Compiler, Property); }} の下に追加分 #code(C,nonumber,nomenu){{ case MP_CellShadeParam: return CellShadeParam.CompileWithDefault(Compiler, Property); }} ++ bool UMaterial::IsPropertyActive(EMaterialProperty InProperty) const #code(C,nonumber,nomenu){{ case MP_PixelDepthOffset: Active = !bIsTranslucentBlendMode; break; }} の下に追加。このピンを使用するShadingModelを記述する。 #code(C,nonumber,nomenu){{ case MP_CellShadeParam: Active = ShadingModel == MSM_Cell || ShadingModel == MSM_CellSaturation || ShadingModel == MSM_CellEye || ShadingModel == MSM_CellHair || ShadingModel == MSM_CellHairSaturation || ShadingModel == MSM_CellOutline; break; }} + Engine\Source\Runtime\Engine\Private\Materials\MaterialExpressions.cpp ++ int32 UMaterialExpressionMakeMaterialAttributes::Compile(...) ++ UMaterialExpressionBreakMaterialAttributes::UMaterialExpressionBreakMaterialAttributes(...) #code(C,nonumber,nomenu){{ static_assert(MP_MAX == 29, }} を追加した分のMP_MAX値にする #code(C,nonumber,nomenu){{ static_assert(MP_MAX == 33, }} ++ UMaterialExpressionBreakMaterialAttributes::UMaterialExpressionBreakMaterialAttributes #code(C,nonumber,nomenu){{ Outputs.Add(FExpressionOutput(TEXT("PixelDepthOffset"), 1, 1, 1, 1, 0)); }} の下に追加分。 #code(C,nonumber,nomenu){{ Outputs.Add(FExpressionOutput(TEXT("CellShadeParam"), 1, 1, 1, 1, 0)); }} ++ int32 UMaterialExpressionBreakMaterialAttributes::Compile #code(C,nonumber,nomenu){{ PropertyToIOIndexMap.Add(MP_PixelDepthOffset, 24); }} の下に追加分 #code(C,nonumber,nomenu){{ PropertyToIOIndexMap.Add(MP_CellShadeParam, 25); }} + Engine\Source\Runtime\Engine\Private\Materials\MaterialShared.cpp ++ void FMaterialAttributeDefinitionMap::InitializeAttributeMap() #code(C,nonumber,nomenu){{ Add(FGuid(0x0AC97EC3, 0xE3D047BA, 0xB610167D, 0xC4D919FF), TEXT("PixelDepthOffset"), MP_PixelDepthOffset, MCT_Float1, FVector4(0,0,0,0), SF_Pixel); }} の下に追加分。GUIDは被ってはいけない。ピンの初期値もここ。 #code(C,nonumber,nomenu){{ Add(FGuid(0x0AC97EC4, 0xE3D047BE, 0xB610168C, 0xC4D91203), TEXT("CellShadeParam"), MP_CellShadeParam, MCT_Float4, FVector4(0, 1, 0, 0), SF_Pixel); }} + Engine\Source\Runtime\Engine\Classes\Materials\MaterialExpressionMakeMaterialAttributes.h #code(C,nonumber,nomenu){{ FExpressionInput PixelDepthOffset; }} の下に追加するパラメーターの変数を追加する #code(C,nonumber,nomenu){{ UPROPERTY() FExpressionInput CellShadeParam; }} + Engine\Source\Runtime\Engine\Private\Materials\HLSLMaterialTranslator.h ++ FHLSLMaterialTranslator(...) #code(C,nonumber,nomenu){{ SharedPixelProperties[MP_PixelDepthOffset] = true; }} の下に追加するパラメーターの分初期化を追加 #code(C,nonumber,nomenu){{ SharedPixelProperties[MP_CellShadeParam] = true; }} ++ bool Translate() #code(C,nonumber,nomenu){{ Chunk[MP_PixelDepthOffset] = Material->CompilePropertyAndSetMaterialProperty(MP_PixelDepthOffset,this); }} の下に追加するパラメーターの分、値の取得を追加 #code(C,nonumber,nomenu){{ Chunk[MP_CellShadeParam] = Material->CompilePropertyAndSetMaterialProperty(MP_CellShadeParam, this); }} + Engine\Source\Editor\UnrealEd\Private\MaterialGraph.cpp #code(C,nonumber,nomenu){{ MaterialInputs.Add(FMaterialInputInfo(LOCTEXT("PixelDepthOffset", "Pixel Depth Offset"), MP_PixelDepthOffset, LOCTEXT( "PixelDepthOffsetToolTip", "Pixel Depth Offset" ) )); }} の下に追加 #code(C,nonumber,nomenu){{ MaterialInputs.Add(FMaterialInputInfo(LOCTEXT("CellShadeParam", "Cell Shading Param"), MP_CellShadeParam, LOCTEXT("CellShadeParamToolTip", "Cell Shading Param"))); }} + シェーダーからマテリアルのパラメーターを取得する Engine\Shaders\MaterialTemplate.usf こんな感じ #code(C,nonumber,nomenu){{ half4 GetMaterialCellShadeParamRaw(FPixelMaterialInputs PixelMaterialInputs) { return PixelMaterialInputs.CellShadeParam; } half4 GetMaterialCellShadeParam(FPixelMaterialInputs PixelMaterialInputs) { return GetMaterialCellShadeParamRaw(PixelMaterialInputs); } }} |