Three.js: BasisTextureLoader次のステップ

䜜成日 2019幎05月22日  Â·  60コメント  Â·  ゜ヌス: mrdoob/three.js

https://github.com/mrdoob/three.js/pull/16522で远加された.basisテクスチャの初期サポヌト

  • [x]コヌド内の残りのTODOをクリヌンアップしたす
  • [x] eslint修正を適甚する
  • [x]ドキュメントを远加する
  • [x]䟋を远加
  • [x] setMaxWorkers()メ゜ッドを远加したす
  • [x]ミップマップをサポヌトする
  • [] iOSでのミップマップサポヌトを修正
  • [] @austinEngによっお提案されたブヌトストラップを䜿甚しおベヌシストランスコヌダヌを再コンパむルしたす
  • [] load()から同期的にテクスチャを返したすアルファなし
  • []アルファをサポヌト
  • []ナヌザヌ蚭定可胜なトランスコヌド出力フォヌマットをサポヌト
  • [x] ESモゞュヌルを远加したす
Enhancement Loaders

最も参考になるコメント

この回避策トランスコヌドを呌び出す盎前のワヌカヌでは私にずっおはうたくいくようです。 もちろん、これはトランスコヌダヌで修正する必芁がありたすが、JSでこれを怜蚌するのは簡単です。

var mipWidth = basisFile.getImageWidth( 0, mip );
var mipHeight = basisFile.getImageHeight( 0, mip );
var mipSize = basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format );

if ( config.pvrtcSupported ) {

    // Basis incorrectly computes mip sizes for PVRTC, let's fix them up using the spec:
    // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt
    mipSize = Math.floor((Math.max(mipWidth, 8) * Math.max(mipHeight, 8) * 4 + 7) / 8);

}

var dst = new Uint8Array( mipSize );

党おのコメント60件

コヌドに぀いおはただ詳しく調べおいたせんが、他のテクスチャロヌダヌず同じようにloadからtextureを同期的に返すこずができたすか

䞀貫性に良いず思いたす。 たた、テクスチャを同期的に返さない堎合、ナヌザヌはコヌルバックでmaterial.needsUpdate = trueを呌び出す必芁がありたすアニメヌションルヌプがすでに開始されおいる堎合。

var material = new XXXMaterial();
textureLoader.load(..., function (texture) {
  material.map = texture;
   // .map is from null to non-null.
   // User needs to call material.needsUpdate = true here if already started animation loop
   // because whether material.map is null or not affects the final shader code.
  material.needsUpdate = true;
});

THREE.CompressedTextureで動䜜するこずを確認するためにただチェックしおいたせんが、動䜜する堎合は、それが最善であるこずに同意したす。 👍

その他のクリヌンアップテクスチャに割り圓おられたプロパティは、 flipY=falseように、少し任意ですベヌシスデモから残されおいたす。 そしお、ワヌカヌには未䜿甚のstartTime倉数がありたす。

私が正しければ、ミップマップはサポヌトされおいないようです。 トランスコヌダヌはサポヌトしおいたせんか たたは、ロヌダヌはただミップマップのサポヌトを実装しおいたせんか

はい、 .basisファむルには耇数のミップマップレベルを含めるこずができたす。 トランスコヌダヌはすでにそれをサポヌトしおいるず思いたすが、私はそれをテストしおいたせん。 BasisTextureLoaderはただサポヌトしおいたせん。

トランスコヌダヌの新しい/小さいバヌゞョンにも曎新する必芁がありたす https 

うん、トランスコヌダヌはそれをサポヌトする必芁がありたす。 mipレベルをlevelIndexからtranscodeImage枡したす。
https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L197

説明ありがずうございたす。

たた、ロヌダヌがただサポヌトしおいない機胜が他にあるが、トランスコヌダヌがサポヌトしおいる堎合は、TODOリストに远加しおください。 実装をお手䌝いしたす。

䟋を䜜った。 16553単玔すぎるかもしれたせんが、マヌゞされた堎合は、埌で拡匵/亀換しおください。

トランスコヌダヌにはあるがTHREE.BasisTextureLoaderにはない他の機胜では、䞻な違いは、トランスコヌダヌが倚くの远加フォヌマットを出力できるこずです。

https://github.com/mrdoob/three.js/blob/dev/examples/js/loaders/BasisTextureLoader.js#L264 -L273

これらすべおをい぀䜿甚するかは正盎わかりたせん。 ナヌザヌがそれを制埡したい堎合もあれば、ロヌダヌGLTFLoaderなどがテクスチャの目的に基づいお決定を䞋す堎合もあるず思いたす。 たずえば、 material.map ベヌスカラヌずmaterial.aoMap アンビ゚ントオクルヌゞョンで異なる圧瞮圢匏を遞択する堎合がありたす。

これをサポヌトする最も明癜な方法は、 detectSupport( renderer )代替手段を远加するこずです。

// Let loader decide, based on device capabilities:
loader.detectSupport( renderer );

// Or, choose a particular format:
loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC4 );

これには朜圚的な問題がありたす。耇数のテクスチャをロヌドしおいる堎合、それらすべおを同じ圢匏にトランスコヌドしたくない堎合がありたす。 耇数のロヌダヌを䜜成するこずもできたすが、既存のWebワヌカヌを再利甚するのは難しくなりたすこれは重芁です。 フォヌマットをload()メ゜ッドに枡すこずはできたすが、TextureLoaderずの䞋䜍互換性はありたせん。 私はこれを行うこずを確実にするこずが最善かもしれないず思いたす...

loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC4 );
var fooTex = loader.load( 'foo.basis' );

loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1 );
var barTex = loader.load( 'bar.basis' );

...デコヌドが非同期であっおも、各テクスチャに垞に正しいフォヌマットが適甚されたす。

関連 http 

別の泚意点ずしお、これをどこかで远跡するために、 examples/js/libs/basisのJSラッパヌには、ベヌシスリポゞトリのバヌゞョンからのマむナヌな倉曎が含たれおいたす。 最初の宣蚀 var Module はModuleだけに眮き換えられ、WebWorkerで䜿甚される遅延初期化を有効にしたす。 これは、異なるフラグを䜿甚しおトランスコヌダヌをコンパむルするか、 https//github.com/BinomialLLC/basis_universal/issues/21を介しお、おそらく異なる方法で実行でき

BasisTextureLoaderはglTFず連携しお動䜜する必芁がありたすか テクスチャを.basis圢匏に手動で゚ンコヌドし、BasisTextureLoaderを次のようなロヌダヌずしお远加しおみたした。

var basisLoader = new THREE.BasisTextureLoader();
basisLoader.setTranscoderPath( 'basis/' );
basisLoader.detectSupport( renderer );

THREE.Loader.Handlers.add( /\.basis$/i, basisLoader );

ただし、テクスチャは適切にレンダリングされず、コン゜ヌルには次の出力がありたす。

[.WebGL-000002B68031CEF0]RENDER WARNING: texture bound to texture unit 1 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.

@zeuxが説明するのず同じ問題

私はこれをデバッグしたした、そしおこれは以䞋のために起こりたす

  1. glTFロヌダヌは通垞magフィルタリングをLinearMipMapLinearFilterに蚭定したす
  2. BasisTextureLoaderはミップマップをサポヌトしおいたせん
  3. webGLでは、mipチェヌンが完党である必芁がありたす-/

@zeux公匏にはサポヌトされおいたせん–コアglTF仕様では、JPEGおよびPNGテクスチャのみが蚱可されおいたす。 ただし、KTX2ラッパヌを介したベヌシスの拡匵機胜は、圧瞮されたテクスチャのサポヌトをフォヌマットに远加するこずを蚈画しおいるメカニズムです。 ドラフト拡匵機胜に぀いおはhttps://github.com/KhronosGroup/glTF/pull/1612を参照しここでは最初の2぀のみが関係したす、フィヌドバックを自由に远加しおください。

ずは蚀うものの、BasisTextureLoaderでミップマップがサポヌトされおいないのは、玔粋にただそれに到達しおいないためです。 私の知る限り、トランスコヌダヌ自䜓がそれをサポヌトするはずです。

mipmapサポヌトを修正するためにPRを提出したした-これにより、 -mipmapオプションを䜿甚しおテクスチャを倉換する限り、少なくずもデスクトップでは、䞊蚘のロヌダヌを远加する限り、glTFロヌダヌは機胜したす。 モバむルiPhoneたたはAndroidで実行できたせんでしたが、回転するキュヌブを䜿甚したthreejs.orgの䟋はiPhoneでも機胜しないため、別の問題になる可胜性がありたす。

モバむルiPhoneたたはAndroidで実行できたせんでした

ベヌシスドキュメントから–

たずえば、iOSでは、PVRTC1に䜿甚できるのは2テクスチャ次元の2乗のみであり、この制限を回避するためにBasisが珟圚実行できるこずは䜕もありたせん。 私たちは、小さな非pow2テクスチャを2 PVRTC1テクスチャのより倧きなパワヌにすぐに倉換する機胜をサポヌトする予定です。

このデモでは512x768のテクスチャを䜿甚しおおり、おそらくその制玄に適合するものに眮き換える必芁がありたす。

わかりたした-それは理にかなっおいたす。 私がテストしおいたAndroidフォンには、ベヌシステクスチャに関連するだけでなく、耇数のWebGLデモに関する倚くの問題がありたす。別のAndroidフォンは問題なく動䜜したす。 そうですね、iOSで問題になるのはおそらく2の环乗の制限だけです。

https://github.com/mrdoob/three.js/pull/16675にあるBasisTextureLoaderのさたざたな曎新

アルファをサポヌトする方法に぀いおも怜蚎する必芁がありたす...基本ドキュメントでは、オプションhttps://github.com/BinomialLLC/basis_universal/#how-to-use-the-systemに぀いお詳しく説明しおいたすが、䞀郚の堎合はこれには耇数のトランスコヌディング出力が含たれるデバむス

ETC1のみのデバむス/ API2぀のETC1テクスチャにトランスコヌドし、シェヌダヌでサンプリングしたす。 2倍の高さの1぀のETC1テクスチャを䜿甚するこずも、2぀の別々のETC1テクスチャを䜿甚するこずもできたす。

これたでのずころ、APIはTextureLoaderず䞀臎したす。これは、単䞀の.basisテクスチャから耇数のトランスコヌドされた出力を返すこずをサポヌトするために倉曎する必芁がありたすたたは代替APIが必芁です。

https://github.com/mrdoob/three.js/pull/16686で正方圢の2乗テクスチャに倉曎するず、iOSでのデモが修正され

INVALID_VALUEcompressedTexImage2DArrayBufferViewの長さがディメンションに察しお正しくありたせん。

PVRTCを䜿甚したミップマップに特別なこずをする必芁がありたすか

それは最埌の数回のミップの1぀で起こっおいたすか

どのmipを特定するのに十分なほど厳密にデバッグしおいたせんでしたが、゚ラヌは3回出力され、最埌の3぀はすべお同じバッファヌサむズでした。 🀔

Basisが最埌の数ミップのサむズバむト単䜍を正しく蚈算しおいないのではないかず思いたす。 PVRTC1 4bppの堎合、ブロックの寞法は8に䞞められるため、4x4、2x2、および1x1は8x8ず同じサむズである必芁がありたす。 ベヌシストランスコヌダヌは4x4に䞞められるず思いたす。 サむズ8x8、4x4、2x2、1x1のすべおの画像は32バむトを取る必芁がありたす。 4x4以䞋の堎合、ベヌシスは、8バむトで32ではなく8バむトを提䟛する1぀の4x4ブロックであるず想定しおいたす。@ richgel999

画像サむズの蚈算匏は次のずおりです https 

   For PVRTC 4BPP formats the imageSize is calculated as:
     ( max(width, 8) * max(height, 8) * 4 + 7) / 8

この回避策トランスコヌドを呌び出す盎前のワヌカヌでは私にずっおはうたくいくようです。 もちろん、これはトランスコヌダヌで修正する必芁がありたすが、JSでこれを怜蚌するのは簡単です。

var mipWidth = basisFile.getImageWidth( 0, mip );
var mipHeight = basisFile.getImageHeight( 0, mip );
var mipSize = basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format );

if ( config.pvrtcSupported ) {

    // Basis incorrectly computes mip sizes for PVRTC, let's fix them up using the spec:
    // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt
    mipSize = Math.floor((Math.max(mipWidth, 8) * Math.max(mipHeight, 8) * 4 + 7) / 8);

}

var dst = new Uint8Array( mipSize );

ありがずう 私はこれをできるだけ早く修正したす。

PVRTC1ミップマップサむズのバグを修正する必芁がありたす。 トランスコヌダヌを修正しお、小さい幅8ピクセル/高さ未満ミップの䜙分なバむトをクリアするようにしたした。 そしお、正しいサむズを返すようにラッパヌを修正したした。 問題がある堎合はお知らせください。できるだけ早く修正したす。

@donmccurdy 「 loadメ゜ッドからtextureを同期的に返す」をtodoリストに远加できたすか takahiroxが䞊で提案したように

@ Ben-Mackが远加されたした。 アルファチャネルを持぀テクスチャは耇数のテクスチャにトランスコヌドされる可胜性があり、同期的にそれがわからないため、別のAPIが必芁になるこずに泚意しおください。

@ richgel999ありがずうございたす https://github.com/BinomialLLC/basis_universal/commit/ab722fa2e18536f9a1d5f33814f3088232446d52がwebgl/transcoder/basis_wrappers.cppのみを曎新したため、WASMトランスコヌダヌの再構築に問題がありたす。 macOSでのコンパむル

$ emcmake cmake ../
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/donmccurdy/Documents/Projects/basis_universal/webgl/transcoder/build

$ make
[ 33%] Linking CXX executable basis_transcoder.js
Traceback (most recent call last):
  File "/Users/donmccurdy/Documents/Projects/emsdk/emscripten/1.37.22/em++", line 16, in <module>
    emcc.run()
  File "/Users/donmccurdy/Documents/Projects/emsdk/emscripten/1.37.22/emcc.py", line 882, in run
    exec 'shared.Settings.' + key + ' = ' + value in globals(), locals()
  File "<string>", line 1, in <module>
NameError: name 'emmalloc' is not defined
make[2]: *** [basis_transcoder.js] Error 1
make[1]: *** [CMakeFiles/basis_transcoder.js.dir/all] Error 2
make: *** [all] Error 2

理論的には、トランスコヌダヌをPavingStones.basisテクスチャをミップマップを含む次のテクスチャに眮き換えるこずができるはずです。

PavingStones.basis.zip

線集おっず、これはhttps://github.com/BinomialLLC/basis_universal/pull/27に関連しおいる可胜性があり

@donmccurdyこれには、 https//github.com/BinomialLLC/basis_universal/pull/27をマヌゞする必芁があるず思いたす。うたくいけば、これはすぐに発生する可胜性がありたす。 たた、emscriptenバヌゞョンはemmallocの存圚よりも前のものである可胜性がありたす。珟圚、three.jsの䞀郚であるファむルは、1.38.31でビルドされおいるず思いたす。

この゚ラヌは、耇数のベヌシスファむルを同時にロヌドしようずしたずきに発生したした。

Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already neutered.

再珟するには、次のようにloadメ゜ッドを2回呌び出すだけです。

loader.load( 'textures/compressed/PavingStones.basis');
loader.load( 'textures/compressed/PavingStones.basis');

@ Ben-Mackおそらくただ修正する䟡倀がありたすが、その゚ラヌは、たったく同じテクスチャを2回ロヌドしおいるためであり、ロヌダヌは2぀のワヌカヌに同時に転送できないArrayBufferを再利甚したす。 以䞋のコヌドは、2回の䜜業を犠牲にしお実行されたす。

loader.load( 'textures/compressed/PavingStones.basis?v=1' );
loader.load( 'textures/compressed/PavingStones.basis?v=2' );

@donmccurdyアルファのサポヌトに぀いおは、次のようなものはどう

load(...) // as usual
//then :  
loader.getRGBTexture() //return by the load function as usual
loader.getAlphaTexture() //can be use as alphaMap

アルファをサポヌトするオプションもミップマップのモデルに远加される可胜性がありたす。
loader.generateAlpha = true //default

@ Makio64そのようなもの ほずんどのthreejsロヌダヌはステヌトフルではありたせん単䞀のロヌダヌが耇数のものを䞊行しお凊理しおいる可胜性がありたすので、おそらく

const [ map ]           = loader.loadRGB( 'foo.basis', { ...options } );
const [ map, alphaMap ] = loader.loadRGBA( 'bar.basis', { ...options } );

^どちらの堎合も、特にアルファ版では、メ゜ッドの構成を必芁ずするために、さたざたな方法があるず思いたす。

たたは、代わりに、新しいメ゜ッドで非同期にするこずもできたす。

loader.loadRGBA( 'bar.basis', { ...options }, ( map, alphaMap ) => {
  // ...
} );

非同期゜リュヌションは、ワヌカヌを䜿甚しお実装し、他のthreejsのロヌダヌず連携する方が簡単に芋えたす。

解像床768x512たたは384x 256などのテクスチャのみをロヌドできたす。他の解像床はThree.jsおよびBasisTextureLoaderでロヌドに倱敗し、譊告が衚瀺されたす。
「テクスチャナニット0にバむンドされたテクスチャはレンダリングできたせん。おそらく2の环乗ではなく、互換性のないテクスチャフィルタリングがありたす。」

@ mozg4Dは、ベヌシスのドキュメントを参照しおください。特に、iOSでは2の环乗のテクスチャが必芁です。 ドキュメントが衚瀺されおいる動䜜ず䞀臎しない堎合は、新しいバグを報告しおください。 遞択したテクスチャフィルタリングに互換性がない可胜性もありたす。その堎合でもデモが必芁であり、新しいバグが圹立぀でしょう。 ありがずう

@donmccurdyベヌシスアルファサポヌトはたもなくリリヌスされたすか

バグを芋぀けたず思いたす。iOSのみで、テクスチャゞオメトリの゚ッゞ党䜓に奇劙な「テクスチャグロヌむング」効果がありたす17597

他の誰かがこれに遭遇したしたか

iOSではPVRTCを䜿甚する可胜性が高いず思いたす。 これは以前のバヌゞョンr108で発生したすか
たぶん、 https//github.com/BinomialLLC/basis_universalで問題をたすか

これは以前のバヌゞョンr108で発生したすか

私が提出したバグはr108甚です。

たぶん、 https//github.com/BinomialLLC/basis_universalで問題をたすか

ちょうどそうしおいる途䞭でした https 

バグを芋぀けたず思いたす。iOSのみで、テクスチャゞオメトリの゚ッゞ党䜓に奇劙な「テクスチャグロヌむング」効果がありたす17597

私はbasis_universalgithubで返信したした。 テクスチャを取埗しお、䜕が起こっおいるかを確認したす。 ほずんどの堎合、これは、ラップ/クランプアドレス指定トランスコヌドフラグが正しく蚭定されおいないこずに関連するアヌティファクト、たたはリアルタむムPVRTC1゚ンコヌダヌによっお匕き起こされるアヌティファクトです。 どちらかが問題である堎合、通垞は回避策がありたす。 トランスコヌドCPU時間/メモリを増やすこずで、PVRTC1の品質を向䞊させるこずもできたす。

https://github.com/BinomialLLC/basis_universal/issues/78#issuecomment-536159690に曎新を投皿したした-スクリヌンショットが含たれおいたす。

これは、回転しおいない立方䜓のラップアラりンドの問題を瀺しおいたす。

別のバグを芋぀けたしたただし、おそらく無関係です https 

別のバグを芋぀けたしたただし、おそらく無関係です 17546コメント

17622で修正されたした。

ミップマップに関しお、ミップマップを.basisファむルに埋め蟌むこずなく、基本テクスチャファむル.gltfファむル内で参照されるを適切にロヌドする方法はありたすか

-mipmapを䜿甚しお.basisファむルを生成するず、プロパティをロヌドできたすが、これにより、.basisファむルに倚くのファむルサむズが远加されたす。ただし、 -mipmap䜿甚せずに.basisファむルを生成するず、オプションの堎合、threejsを䜿甚したブラりザでは単に黒で衚瀺されたす。

ミップマップに関しお、ミップマップを.basisファむルに埋め蟌むこずなく、基本テクスチャファむル.gltfファむル内で参照されるを適切にロヌドする方法はありたすか

-mipmapを䜿甚しお.basisファむルを生成するず、プロパティをロヌドできたすが、これにより、.basisファむルに倚くのファむルサむズが远加されたす。ただし、 -mipmap䜿甚せずに.basisファむルを生成するず、オプションの堎合、threejsを䜿甚したブラりザでは単に黒で衚瀺されたす。

今のずころ、ミップマップを無効にしおテクスチャを衚瀺するこずができたす。
https://discourse.threejs.org/t/compressed-texture-workflow-gltf-basis/10039/12?u=johannesdeml
https://github.com/JohannesDeml/three.js/commit/909d9cc6dc9192f398df7455f52b7e71e3bf61e2

もちろん、これはミップマップのサポヌトではありたせんが、テクスチャを衚瀺するこずだけが目的の堎合は、簡単な解決策になる可胜性がありたす。

これはもう機胜しおいないようです。1぀のミップマップのみが怜出された堎合https://github.com/mrdoob/three.js、BasisTextureLoaderにも同様のコヌドmin / magFilter = LinearFilterを蚭定があるようです。 /blob/e66e86901abd84ffc260fea9665170631a2b0493/examples/js/loaders/BasisTextureLoader.js#L170-L171-これは、 -mipmapオプションなしでbasisu生成するものです。 しかし、それはただ黒です。

ファむルを共有できたすか 私は先週ず同じくらい最近これを行っおいたしたが、それは.basisではなく.ktx2コンテナのベヌシス.basis ...

そしお確認するために–実行時にこれらのミップマップを生成するこずはできず、関連する補間制玄を凊理する必芁があるこずを知っおいたすか

承知したした。ご芧いただきありがずうございたす。

body_green.basis.zip

そしお確認するために–実行時にこれらのミップマップを生成するこずはできず、関連する補間制玄を凊理する必芁があるこずを知っおいたすか

はい、私もそれを理解したした、圧瞮されたjpgず比范しお.basisの䜎いファむルサむズで芋たゲむンの倚くが倱われるので少し残念です-GPUメモリゲむンがただそこにあるこずを知っおいたすが、私はほずんどでしたテクスチャのダりンロヌド/転送サむズに焊点を圓おおいたす。

そしお確認するために–実行時にこれらのミップマップを生成するこずはできず、関連する補間制玄を凊理する必芁があるこずを知っおいたすか

jpg / pngの代わりにbasisを䜿甚する堎合、これは垞に圓おはたりたすか

フォヌマットがREADMEでこれをサポヌト/蚀及しおいるため、キュヌブマップのフェむスリストずしお6぀のテクスチャを単䞀の基本ファむルにパックするナヌスケヌスに぀いおはどうでしょうか。 ここではPMREMゞェネレヌタヌは圹に立たず、基本ファむルには生成された各テクスチャのミップマップが含たれおいる必芁がありたすか

ThreeJSでキュヌブマップずしお䜿甚するためにこのパックされたテクスチャデヌタを提䟛するのはどうですか 通垞、個々のテクスチャごずに匕数を枡したすか このテクスチャロヌダヌのサポヌトに぀いおは、耇数のテクスチャを含む基本ファむルが可胜かどうかをただ調べおいたせん代替手段は、キュヌブマップずしお䜿甚するフェむスリストパックの基本ファむルを提䟛するのに適しおいる可胜性があるKTX2経由です。

アルファの凊理に぀いお説明しおいたずきのこの䜿甚法に関する最埌の質問ですが、これらのテクスチャはRGBEたたはRGBMずしお゚ンコヌドできたすThreeJSはM7およびM16をサポヌトしおいたす。 それらが基本的にどれだけうたく圧瞮されるかに぀いおは調査しおいたせんが、法線マップが知られおいるのず同様の問題が発生する可胜性がありたす。 アルファチャネルデヌタは、そこでサポヌトするために非垞に重芁です。どの圧瞮テクスチャ圢匏にトランスコヌドされるかはわかりたせん。以䞋のリンク先の蚘事で説明しおいるように、結果がかなり悪いものもありたす。

ARMは、たずえばASTCずRGBMの問題に関する蚘事を曞きたした。 蚘事で蚀及されおいるUnity゚ンゞンはRGBM5を䜿甚したす。これは、ほずんどの堎合、適切なHDR範囲をカバヌするはずです。デヌタが範囲制限内に収たる堎合、乗数が䜎いほど、乗数定数が高い堎合よりも圧瞮品質の問題が少なくなるず考えられたす。

申し蚳ありたせんが、これらの質問に察する答えはわかりたせん。 BasisUniversalたたはKTXGitHubリポゞトリの方が幞運かもしれたせん。 KTX2がベヌシスペむロヌドを持぀キュヌブマップをサポヌトするように蚭蚈されおいるこずを私は知っおいたす。

ここで説明しおいるThreeJSサポヌトを䜿甚するのに関連するケヌスのように思われたので、ここでそれらを取り䞊げたした。

ベヌシスは、キュヌブマップの6぀のテクスチャすべおを1぀のベヌシスファむルに保存できたす。 ベヌシスをサポヌトするKTX2は、耇数のテクスチャを備えたキュヌブマップをより適切にサポヌトできたすが、ファむルは1぀です。

ThreeJSが将来それを凊理できるかどうかは䞍明です。 おそらく、6぀の異なる基本ファむルを提䟛するか、基本ロヌダヌのサポヌトでKTX2を取埗する必芁がありたす。

RGBM5には個別のPRが必芁です。珟圚存圚するのは、RGBM7たたはRGBM16か、乗数の倀を調敎するためにナニフォヌムを䜿甚するバリアントです。 そこにある䞻な重芁な郚分は、正しく圧瞮するためにアルファを適切に凊理する必芁があるため、この号の前半で説明したように、アルファをある皋床制埡できるこずは、法線マップずその線圢/ず同様に、アルファが圹立぀別の䟋です。非カラヌ゚ンコヌディング。圧瞮のサポヌトに応じお、フォヌマットが2぀の可胜なテクスチャXの堎合は単色RGB、Yの堎合はアルファに分割される堎合がありたす。

Three.jsは珟圚、ベヌシスナニバヌサルをサポヌトしおいたす。 新しいベヌシスフォヌマットであるUASTCは、ほんの数週間前にリリヌスされたした。 それ以前は、ベヌシスが単䞀のファむルでキュヌブマップをサポヌトしおいたずは思いたせん。 プルリク゚ストは倧歓迎です。

KTX2ロヌダヌが進行䞭です。https//github.com/mrdoob/three.js/pull/18490がありたす。

README for Basisの叀いバヌゞョンUASTCより前ですが、珟圚のREADMEにはただ存圚したすは、単䞀ベヌスのファむル機胜ぞの耇数のテクスチャパッキングに぀いおの蚀及を瀺しおいたす。

ベヌシスファむルは䞍均䞀なテクスチャ配列をサポヌトしおいるため、キュヌブマップ、ボリュヌムテクスチャ、テクスチャ配列、ミップマップレベル、ビデオシヌケンス、たたは任意のテクスチャ「タむル」を1぀のファむルに保存できたす。 コンプレッサヌはファむル党䜓の色ずパタヌンの盞関関係を利甚できるため、ミップマップを含む耇数の画像を1぀のファむルに非垞に効率的に保存できたす。

プルリク゚ストは倧歓迎です。

どこから始めたらいいのかわからないし、今のずころ暇もありたせん。 おそらく、この問題が完了たで進行し、KTX2ロヌダヌの準備ができたら、圧瞮/パックされたキュヌブマップのサポヌトに察凊できたす。 それたでに暇があれば、PRに貢献しおみおください:)

こんにちは、iOSで断続的な問題が発生したしたaawww maaaan
基本的に、テクスチャがうたく読み蟌たれるこずもあれば、衚瀺されないこずもありたす。
コン゜ヌルに゚ラヌはありたせん。ロヌドの進行状況は100なので、ネットワヌクの問題ではありたせん。
公匏の䟋https://threejs.org/examples/?q=basis#webgl_loader_texture_basisず私自身のプロゞェクトの䞡方でテストしたした。 私のiPhoneX、Safariでは、テクスチャが衚瀺される堎合ず衚瀺されない堎合がありたす。
iPhone 6、Safariでは、衚瀺されたせん。
他のすべおはうたく芋えたす。
どうなり埗るか

[線集] Mac OSのSafariでも同じ問題が発生したしたが、断続的です

@iggheraこれはバグのように

BasisTextureLoader 2D配列テクスチャのサポヌトを远加するにはどうすればよいでしょうか。 これを少し調べたしたが、どうすればいいのかよくわかりたせん。

transcode関数を倉曎しお、 basisFile.getNumImages()によっお返されたカりントから画像をルヌプするように倉曎するのは簡単に思えたすが、それに続いお察凊する3぀のこずがあるようです。

  1. compressedTexImage3DはTHREE.WebGLState存圚しないため、 WebGLRenderingContext.compressedTexImage3Dごずにgl.TEXTURE_2D_ARRAYオプションを枡す必芁がありたす。
  2. BasisのAPIは、画像むンデックスごずに個別のミップマップを返したすが、 sampler2DArrayにバむンドするには、単䞀の倧きなテクスチャブロブが必芁ですか
  3. CompressedTextureは、画像むンデックスごずにミップマップを関連付ける方法が必芁です。 200深い配列の画像ず6ミップマップレベルでは、それはそうだろう、1200のミップマップ゚ントリになるだろうmipmapsでCompressedTextureストラむドの配列になりたす。 たたは、WebGLがその詳现を抜象化する方法はありたすか

次に、ビデオテクスチャの堎合、おそらく別の実装が必芁になりたす。 䞀床にバッチでトランスコヌドするのではなく、基本ファむルハンドルを開いたたたにしお、次のフレヌムを芁求する方法がありたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡