x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

[Closed] PackedLightandShadowMapTextureSizeとライトマップ解像度の関係性について

PackedLightAndShadowMapTexutreSizeが1024(デフォルト値)になっている状態でもLightMapTexture2Dがそれを超えたサイズになっているのは仕様でしょうか??

たとえば特定のメッシュのOverriddenLightMapResに1024といれてライトをビルドすると2048のライトマップが生まれました。

この場合、クックしてコンソール機で確認した場合にはどうなってしまうのでしょうか?? 2048x2048が読まれるのか、1024x1024に落とされたものが使用されることになるのか気になります。

プロジェクト側ではたまに4096x4096になっているライトマップの存在が確認されましたので、PackedLightAndShadowMapTextureSizeが何に使われるものなのか再確認したいと思った次第です。

alt text

解像度を変更しているプログラムコードは

LightMap.cpp

void FLightMap2D::EncodeTextures( UWorld* InWorld, bool bLightingSuccessful, bool bMultithreadedEncode)

のようなのですが、PackedLightAndShadowMapTextureSizeを使用していくつかの処理をしているようなのですが、 何をしようとしているコードなのかを読み解くことができませんでした。

こちらもよろしければご教授して頂けますと助かります。

よろしくお願いいたします。

Product Version: Not Selected
Tags:
000.png (39.5 kB)
more ▼

asked Oct 26 '18 at 11:11 AM in Japanese

avatar image

Answers.Archive STAFF
1.9k 206 313 684

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

The question has been closed Oct 26 '18 at 11:15 AM by Ken.Kuwano for the following reason:

The question is answered, right answer was accepted


1 answer: sort voted first

おっしゃる通りです。ご指摘された部分で、LightmapTextureのサイズを決定しております。

 if (!Texture)
 {
     int32 NewTextureSizeX = PackedLightAndShadowMapTextureSize;
     int32 NewTextureSizeY = PackedLightAndShadowMapTextureSize / 2;
 
     // Assumes identically-sized allocations, fit into the smallest 2x1 rectangle
     const int32 AllocationCountX = FMath::CeilToInt(FMath::Sqrt(FMath::DivideAndRoundUp(PendingGroup.Allocations.Num() * 2 * MaxHeight, MaxWidth)));
     const int32 AllocationCountY = FMath::DivideAndRoundUp(PendingGroup.Allocations.Num(), AllocationCountX);
     const int32 AllocationSizeX = AllocationCountX * MaxWidth;
     const int32 AllocationSizeY = AllocationCountY * MaxHeight;
 
     if (AllocationSizeX > NewTextureSizeX || AllocationSizeY > NewTextureSizeY)
     {
         NewTextureSizeX = FMath::RoundUpToPowerOfTwo(AllocationSizeX);
         NewTextureSizeY = FMath::RoundUpToPowerOfTwo(AllocationSizeY);
 
         // Force 2:1 aspect
         NewTextureSizeX = FMath::Max(NewTextureSizeX, NewTextureSizeY * 2);
         NewTextureSizeY = FMath::Max(NewTextureSizeY, NewTextureSizeX / 2);
     }
 
 

PackedLightAndShadowMapTextureSize自身は、最後にPackされるLightmap Textureの最小解像度だと思って良いと思います。このサイズになるべく詰めていこうと試みますが、これよりも大きなライトマップサイズを持つようなオブジェクトがあった場合、より大きなテクスチャを確保するようにしております。実際に大きなサイズを取るときの条件などは上記のコードから見て取れる様にに少々複雑なのですが、もしも厳密に理解したい場合、挙動を更に確認いたします。

more ▼

answered Oct 26 '18 at 11:11 AM

avatar image

Answers.Archive STAFF
1.9k 206 313 684

avatar image Answers.Archive STAFF Oct 26 '18 at 11:11 AM

ご確認して頂きありがとうございます。

大変お忙しい中申し訳ないのですが、コードが何を行おうとしているのか教えていただけますと助かります。

最も疑問に思っていることは最終的にPackされて小さくなるにも関わらず、高解像度状態でEditor上で表示されるという事は、実際にゲームを行った場合には低解像度の見た目となり、Editorでの見た目と、パッケージング済みのゲームでは見た目が大きく変わることになると思うのですが、何故これを良しとしているのかという事となります。

手動で大きなライトマップ解像度を指定されたとしても、Editor上でPackedLightAndShadowMapTextureSize以内に収めてもらえればパッケージ版でのみ何かおかしいという問題が発生しないと思いましたので、、、

もしかしてなのですが、Editor上で2048x2048になっていたとしてもパッケージ版では1024x1024が4枚とかになってくれているのでしょうか???

よろしくお願いいたします。

avatar image Answers.Archive STAFF Oct 26 '18 at 11:11 AM

多分誤解されている点があるのかなと思うのですが、

最終的にPackされて小さくなるにも関わらず、

各オブジェクトのライトマップがPackされる際、そのライトマップは縮小されません。もとの解像度のままパックされます。これは、例えば解像度64のライトマップ毎にテクスチャを用意した場合、もしもPackしなければ各オブジェクト毎にその小さなライトマップテクスチャを持ち、結果として大量のテクスチャを持つことになってしまいます。ですので、PackedLightAndShadowMapTextureSizeのテクスチャにひとまとめになるようにライトマップを作成しております。

avatar image Answers.Archive STAFF Oct 26 '18 at 11:11 AM +

PackedLightAndShadowMapTexutreSize=1024と仮定し、なにか大きなライトマップを持つオブジェクトでその解像度が2048だったとすると、そのオブジェクトのライトマップはもちろんPackedLightAndShadowMapTexutreSizeで指定したサイズには収まらないので、それを越えた2048のライトマップテクスチャを(この場合、そのオブジェクト一個のためだけの贅沢なものになりますが)作成します。

プロジェクト側で実機で解像度が荒くなるものがあるとのことですが、こちらLightMapのストリーミング及びMipが関係しているのではと疑っております。少なくとも、実際のライトマップの解像度がエディタサイズよりも実機では小さくなるということはないと認識しております。

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question