12 KiB
Raw Blame History

相关资产路径

Content/ResArt/CommandMaterial

Functions

  • #ShadingModels
    • MF_ToonPBRShadingModel
    • MF_ToonBaseShadingModel
    • MF_ToonSkinShadingModel
    • MF_ToonHairShadingModel
  • #Effects
    • MF_Dissolve
    • MF_EdgeLight
    • MF_Fur
  • Tools
    • MF_DecodeArrayIDAndAlpha分离输入浮点数的整数与小数部分。整数部分作为TextureArrayID小数部分作为Alpha参数。
      • 主要用于MF_FaceOverlay的Face Overlay Color效果与M_Penetrate的Eye Overlay Color效果。
    • MF_Hash11
    • MF_Hash12
    • MF_Hash13
    • MF_Hash22
    • MF_Hash23
  • CameraLightCollection各个角色的主光照颜色、边缘光颜色与主光亮度以及LightDir。
  • MF_CharacterMainLightIntensity使用CustomNode编写的函数通过RoleID进行Switch Case计算对应角色的MainLightColor * MainLightIntensity这些一般在Sequence中进行修改。
  • MF_ApplyToonHairSpecular头发高光计算被M_ToonBase_V02调用。
  • MF_CharacterEffects基本所有角色相关材质都有使用。主要调用了MF_EdgeLight、MF_Dissolves实现了**边缘光与溶解效果。
  • MF_CharacterRimLightIntensity使用CustomNode编写的函数通过RoleID进行Switch Case计算对应角色的RimLightColor * RimLightIntensity这些一般在Sequence中进行修改。
  • MF_FaceHighlightAndShadow使用Shadow贴图渲染脸上的阴影效果通过Dot(LightVector,FaceRight)判断左右)以及边缘高光(通过Dot(LightVector,FaceFront)作为Mask)被M_ToonFace调用但没有使用脸部阴影效果只使用了高光实际看不出来
    • 其中的FaceRight、FaceFront、FaceLightDir使用了CustomPrimitiveData
  • MF_FaceOverlay脸部材质额外的BaseColorTexture叠加效果猜测是用来制作一些特殊表情的腮红效果被M_ToonFace调用。
  • MF_Inputs镭射材质效果只被M_ToonLaserPBR、MI_Leishezhi调用。
  • MF_MatcapMatcap效果输出2种贴图Multip 与 Add效果被MF_ToonPBRInput调用。
  • MF_Matcap_AddMF_Matcap的升级版。
    • OutputAdd = LightMap * LightMatcap
    • OutputEmissive = Matcap Texture 01 + Matcap Texture 02 + Matcap Texture 03 + Emissive Matcap * Emissive Texture
    • OutputNeckShadow = lerp( lerp(1.0, Matcap Color 04, Matcap Texture 04), 1, NeckShadow)
    • OutputInnerline = Innerline Matcap
  • MF_NormalMapIntensityNormal强度调整被大量材质引用。
  • MF_SceneEffects调用了MF_Dissolve实现了溶解效果。但备用他的材质并不多。
  • MF_ShiftTangentKajiya-Kay中的ShiftTangent被M_ToonHair_V01调用。
  • MF_StrandSpecKajiya-Kay中的高光计算逻辑被M_ToonHair_V01调用。
  • MF_SurfaceSurface材质相关属性逻辑被MF_ToonPBRInput、MF_ToonBaseInput调用。
  • MF_Surface_V02Surface材质相关属性逻辑被MF_ToonBaseInput_V02调用。
  • MF_TextureBooming材质没有上线。
  • MF_ToonBaseInput通用ToonBase材质逻辑函数。集合了MF_CharacterMainLightIntensity、MF_Matcap_Add、MF_Surface、MF_ToonBaseShadingModel材质函数以及一些变量材质设置。被M_ToonBase_V02_PenetrateM_ToonBase_V02_Test调用。
  • MF_ToonBaseInput_V02通用ToonBase材质逻辑函数V02。集合了MF_CharacterMainLightIntensity、MF_Matcap_Add、MF_Surface_V02、MF_ToonBaseShadingModel材质函数以及一些变量材质设置。被M_ToonBase_V02M_NaiLin_AnotherWorld02M_EggGym_Flower调用。
  • MF_ToonHairSpecularMaskUV计算Hair高光遮罩UV被MF_ApplyToonHairSpecular调用。
  • MF_ToonPBRInput通用ToonPBR材质逻辑函数。集合了MF_CharacterMainLightIntensity、MF_Matcap、MF_Surface、MF_ToonPBRInputl材质函数以及一些变量材质设置。被M_PenetrateM_ToonBase_V01M_ToonFaceM_ToonHair_V01M_ToonSkinM_BeiLa_Skin_AnotherWorldM_Wave
  • MF_TranslucentDOFTranslucent材质的景深效果没有看懂。被MF_Input、MF_SurfaceMF_Surface_V02、M_ToonFacee_old、M_ToonLaserPBR调用。
  • MF_VectorRotateAboutAxis向量旋转函数。被MF_WorldSpaceStarring调用。
  • MF_WorldSpaceStarring被M_NaiLin_AnotherWorld02调用。
  • SceneEffectsCollection场景效果材质参数集可能已经废弃因为UE5大世界不支持关卡流。会被MF_SceneEffects、BP_EmptyToStageA以及其他材质调用。

ShadingModels

采用CustomNode构造FMaterialAttributesde的之后传递到MaterialAttribute模式的材质中其他骚操作还有

  1. 使用宏开启MRT5#define PIXELSHADEROUTPUT_MRT5 1
  2. 设置ShadingModelIDResult.ShadingModel = 14;
  3. 使用FToonShadingPerMaterialCustomData ToonShadingPerMaterialCustomData位于Common.ush)来传递卡通渲染用数据之后在BasePassPixelShader.ush中将数据塞入GBuffer中。

MF_ToonPBRShadingModel

FMaterialAttributes Result;
Result.BaseColor = float3(1.0, 1.0, 1.0);
Result.Metallic = 0.0;
Result.Specular = 0.0;
Result.Roughness = 0.0;
Result.Anisotropy = 0.0;
Result.EmissiveColor = float3(0.0, 0.0, 0.0);
Result.Opacity = 1.0;
Result.OpacityMask = 1.0;
Result.Normal = float3(0.0, 0.0, 1.0);
Result.Tangent = float3(1.0, 0.0, 0.0);
Result.WorldPositionOffset = float3(0.0, 0.0, 0.0);
Result.SubsurfaceColor = float3(1.0, 1.0, 1.0);
Result.ClearCoat = 1.0;
Result.ClearCoatRoughness = 0.1;
Result.AmbientOcclusion = 1.0;
Result.Refraction = float3(0.0, 0.0, 0.0);
Result.PixelDepthOffset = 0.0;
Result.ShadingModel = 1;
Result.CustomizedUV0 = float2(0.0, 0.0);
Result.CustomizedUV1 = float2(0.0, 0.0);
Result.CustomizedUV2 = float2(0.0, 0.0);
Result.CustomizedUV3 = float2(0.0, 0.0);
Result.CustomizedUV4 = float2(0.0, 0.0);
Result.CustomizedUV5 = float2(0.0, 0.0);
Result.CustomizedUV6 = float2(0.0, 0.0);
Result.CustomizedUV7 = float2(0.0, 0.0);
Result.BentNormal = float3(0.0, 0.0, 1.0);
Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0);
Result.CustomEyeTangent = float3(0.0, 0.0, 0.0);

#define PIXELSHADEROUTPUT_MRT5 1

Result.ShadingModel = 14;
ToonShadingPerMaterialCustomData.ToonSpecularColor = saturate(SpecularColor.rgb);
ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb);
ToonShadingPerMaterialCustomData.ToonShadowLocation = saturate(CutPosition);
ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(CutSmoothness);

return Result;

MF_ToonBaseShadingModel

FMaterialAttributes Result;
Result.BaseColor = float3(1.0, 1.0, 1.0);
Result.Metallic = 0.0;
Result.Specular = 0.0;
Result.Roughness = 0.0;
Result.Anisotropy = 0.0;
Result.EmissiveColor = float3(0.0, 0.0, 0.0);
Result.Opacity = 1.0;
Result.OpacityMask = 1.0;
Result.Normal = float3(0.0, 0.0, 1.0);
Result.Tangent = float3(1.0, 0.0, 0.0);
Result.WorldPositionOffset = float3(0.0, 0.0, 0.0);
Result.SubsurfaceColor = float3(1.0, 1.0, 1.0);
Result.ClearCoat = 1.0;
Result.ClearCoatRoughness = 0.1;
Result.AmbientOcclusion = 1.0;
Result.Refraction = float3(0.0, 0.0, 0.0);
Result.PixelDepthOffset = 0.0;
Result.ShadingModel = 1;
Result.CustomizedUV0 = float2(0.0, 0.0);
Result.CustomizedUV1 = float2(0.0, 0.0);
Result.CustomizedUV2 = float2(0.0, 0.0);
Result.CustomizedUV3 = float2(0.0, 0.0);
Result.CustomizedUV4 = float2(0.0, 0.0);
Result.CustomizedUV5 = float2(0.0, 0.0);
Result.CustomizedUV6 = float2(0.0, 0.0);
Result.CustomizedUV7 = float2(0.0, 0.0);
Result.BentNormal = float3(0.0, 0.0, 1.0);
Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0);
Result.CustomEyeTangent = float3(0.0, 0.0, 0.0);

#define PIXELSHADEROUTPUT_MRT5 1

Result.ShadingModel = 13;
ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb);
ToonShadingPerMaterialCustomData.ToonShadowLocation = clamp(ShadowLocation, 0, SpecularLocation);
ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(ShadowSmoothness);
ToonShadingPerMaterialCustomData.ToonForceShadow = saturate(ForceShadow);
ToonShadingPerMaterialCustomData.ToonSecondaryShadowColor = saturate(SecondaryShadowColor.rgb);
ToonShadingPerMaterialCustomData.ToonSecondaryShadowLocation = clamp(SecondaryShadowLocation, 0, SpecularLocation);
ToonShadingPerMaterialCustomData.ToonSecondaryShadowSmoothness = saturate(SecondaryShadowSmoothness);

return Result;

MF_ToonSkinShadingModel

FMaterialAttributes Result;
Result.BaseColor = float3(1.0, 1.0, 1.0);
Result.Metallic = 0.0;
Result.Specular = 0.0;
Result.Roughness = 0.0;
Result.Anisotropy = 0.0;
Result.EmissiveColor = float3(0.0, 0.0, 0.0);
Result.Opacity = 1.0;
Result.OpacityMask = 1.0;
Result.Normal = float3(0.0, 0.0, 1.0);
Result.Tangent = float3(1.0, 0.0, 0.0);
Result.WorldPositionOffset = float3(0.0, 0.0, 0.0);
Result.SubsurfaceColor = float3(1.0, 1.0, 1.0);
Result.ClearCoat = 1.0;
Result.ClearCoatRoughness = 0.1;
Result.AmbientOcclusion = 1.0;
Result.Refraction = float3(0.0, 0.0, 0.0);
Result.PixelDepthOffset = 0.0;
Result.ShadingModel = 1;
Result.CustomizedUV0 = float2(0.0, 0.0);
Result.CustomizedUV1 = float2(0.0, 0.0);
Result.CustomizedUV2 = float2(0.0, 0.0);
Result.CustomizedUV3 = float2(0.0, 0.0);
Result.CustomizedUV4 = float2(0.0, 0.0);
Result.CustomizedUV5 = float2(0.0, 0.0);
Result.CustomizedUV6 = float2(0.0, 0.0);
Result.CustomizedUV7 = float2(0.0, 0.0);
Result.BentNormal = float3(0.0, 0.0, 1.0);
Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0);
Result.CustomEyeTangent = float3(0.0, 0.0, 0.0);

#define PIXELSHADEROUTPUT_MRT5 1

Result.ShadingModel = 15;
ToonShadingPerMaterialCustomData.ToonShadowColor = saturate(ShadowColor.rgb);
ToonShadingPerMaterialCustomData.ToonShadowLocation = saturate(CutPosition);
ToonShadingPerMaterialCustomData.ToonShadowSmoothness = saturate(CutSmoothness);

return Result;

MF_ToonHairShadingModel

FMaterialAttributes Result;
Result.BaseColor = float3(1.0, 1.0, 1.0);
Result.Metallic = 0.0;
Result.Specular = 0.0;
Result.Roughness = 0.0;
Result.Anisotropy = 0.0;
Result.EmissiveColor = float3(0.0, 0.0, 0.0);
Result.Opacity = 1.0;
Result.OpacityMask = 1.0;
Result.Normal = float3(0.0, 0.0, 1.0);
Result.Tangent = float3(1.0, 0.0, 0.0);
Result.WorldPositionOffset = float3(0.0, 0.0, 0.0);
Result.SubsurfaceColor = float3(1.0, 1.0, 1.0);
Result.ClearCoat = 1.0;
Result.ClearCoatRoughness = 0.1;
Result.AmbientOcclusion = 1.0;
Result.Refraction = float3(0.0, 0.0, 0.0);
Result.PixelDepthOffset = 0.0;
Result.ShadingModel = 1;
Result.CustomizedUV0 = float2(0.0, 0.0);
Result.CustomizedUV1 = float2(0.0, 0.0);
Result.CustomizedUV2 = float2(0.0, 0.0);
Result.CustomizedUV3 = float2(0.0, 0.0);
Result.CustomizedUV4 = float2(0.0, 0.0);
Result.CustomizedUV5 = float2(0.0, 0.0);
Result.CustomizedUV6 = float2(0.0, 0.0);
Result.CustomizedUV7 = float2(0.0, 0.0);
Result.BentNormal = float3(0.0, 0.0, 1.0);
Result.ClearCoatBottomNormal = float3(0.0, 0.0, 1.0);
Result.CustomEyeTangent = float3(0.0, 0.0, 0.0);

Result.ShadingModel = 14;
Result.Anisotropy = 1.0;
ToonShadingPerMaterialCustomData.CustomData0 = saturate(float4(ShadowColor.rgb, ShadowSmoothness));
ToonShadingPerMaterialCustomData.CustomData1 = saturate(float4(SpecularAbsorbance, SpecularRangeParam.xyz));

return Result;

Effects

  • MF_EdgeLight边缘光效果通过UE菲尼尔函数以及一些贴图、变量实现效果。主要被MF_CharacterEffects引用。
  • MF_Dissolve:溶解过度效果。主要被MF_CharacterEffectsMF_SceneEffects引用。
  • MF_Fur用于制作Fur效果的材质函数ToonShading_Standard_nooffset_fur引用。主要还是靠GFur插件,没有参考意义,升级难度+1。

Matcap

存放大量Matcap用的球形环境贴图

Materials

所有角色与新服装都迁移到V02版本V01已废弃。

  • Special
    • M_BeiLa_Skin_AnotherWorld特别定制的材质。
  • V02
    • Special
      • M_NaiLin_AnotherWorld02特别定制的材质。
    • M_ToonBase_V02
    • M_ToonBase_V02_Test
    • MI_Brow_V02
    • MI_Eye_V02
    • MI_EyeGlass_V02
    • MI_EyeHighlight_V02
    • MI_EyeShadow_V02
    • MI_MakeUp_V02
  • M_Eye_Highlight
  • M_Hide
  • M_Penetrate
  • M_ToonBase_V01
  • M_ToonBase_V02_Penetrate
  • M_ToonFace
  • M_ToonFace_old
  • M_ToonHair_V01
  • M_ToonSkin

MaterialInstance

Outline

主要存储

  • M_Outline_V01
  • M_Outline_V02
  • M_Outline_V03
  • MaterialInstance
    • MI_Outline_V03
    • MI_Outline_Face_V03
    • MI_Outline_Hair_V03
    • MI_Outline_Skin_V03
  • Dissolve
    • MI_Outline_V03_Dissolve
    • MI_Outline_Face_V03_Dissolve
    • MI_Outline_Hair_V03_Dissolve
    • MI_Outline_Skin_V03_Dissolve

Textures

存储一些默认贴图与一些测试用(无用)贴图。