お世話になっております。
表題の件について質問がございます。
ある木のアセットをShadowの最適化のため、「CastShadowを無効にしたSMコンポーネント」と、「Visibleを無効にしてHiddenShadowを有効にしたSMコンポーネント」を含むBPにして、レベル上に配置するようにしています。
この木BPを、LayerTypeが「Instancing」のHLODLayerでビルドした場合、HLODにはVisibleが有効なコンポーネントのみが含まれることから、ShadowをキャストしないSMコンポーネントのみがHLODアクターに含まれることになります。
HLODアクターのISMコンポーネントには、ビルド元のコンポーネントとは異なりShadowをキャストさせるように設定したいのですが、この場合どのような対応が考えられますでしょうか?
再現プロジェクト(HLODBuildTest.zip)を添付しておりますので、必要であればご確認いただければと思います。
以上、よろしくお願いいたします。
再現手順
添付したプロジェクトの、「HLODTest」レベルを開きます。
「BP_Tree」がプロジェクトの木BPの作りを再現したものであり、レベル内のHLODには影がキャストされないことを確認することができます。
HLODに特殊な設定を適用するにはカスタムのHLODBuilderを利用できます。
例えばUHLODBuilderInstancingを継承したUMyHLODBuilderInstancingを実装し、なんらかの方法でコンポーネントを識別して追加の設定を付与することができます。
以下はコード例です。
`TArray<UActorComponent*> UMyHLODBuilderInstancing::Build(const FHLODBuildContext& InHLODBuildContext, const TArray<UActorComponent*>& InSourceComponents) const
{
TArray<UActorComponent*> HLODComponents = Super::Build(InHLODBuildContext, InSourceComponents);
for (UActorComponent* HLODComponent : HLODComponents)
{
// if (HLODComponents.ComponentHasTag(FName(“Shadow”))) //なんらかの方法で識別
{
if (UInstancedStaticMeshComponent* ISMComponent = Cast(HLODComponent))
{
ISMComponent->SetCastShadow( true );
}
}
}
return HLODComponents;
}`
ご返答頂きありがとうございます。
ご紹介頂いた方法で目的が達成できるか確認しようと思いますので、また問題等があった際は別途質問させて頂ければと思います。
お忙しい中ご対応頂きありがとうございました。
今後ともよろしくお願い致します。