107ãã108ã«ã¢ããã°ã¬ãŒããããšãã¢ãã«ã®äžéšãæ³ç·ãå転ããããã«èŠããããšã«æ°ä»ããŸããã ããã¯äž¡é¢çŽ æã§ã®ã¿çºçããŸãã
ãããåç
§ããŠãã ããïŒ https ïŒ
ããã¯ããã¿ãŒã³ãäž¡æ¹ã®ãã€ãŒã«ã§ã€ã³ãã³ããããŠããç¶æ
ã§ãã©ã®ããã«èŠãããã瀺ããŠããŸãã ããã107幎ã®ããšã§ãã
108ã§ã¯ããã€ãŒã«ã®1ã€ã«ãé£ã³åºããŠããããã«èŠãããã¿ãŒã³ããããŸãã
@pushmatrixãã®ã¢ãã«ãç¬èªã®æ¥ç·ãæäŸãããã©ããã確èªã§ããŸããïŒ ãããïŒ11438ã«é¢é£ããŠããã®ã§ã¯ãªãããšæããŸãã
ç§ã¯ãããããèªèº«ã®æ¥ç·ãæå®ãããšã¯æããªã
å¥ã®ãã¹ãã±ãŒã¹ã䜿çšããŠãgit bisectã¯ãã¡ãã·ã¥ãäž¡é¢ã§è² ã®ã¹ã±ãŒã«Xãæã£ãŠããå Žåã«åé¡ãéå§ããPRãšããŠïŒ17586ãæããŸãããã ããããã¯r.108ã§ã¯ãªãr.109ã«ãããŸããã
ãã®PRã®ã¢ãã«ã¯å©çšã§ããªããããããã¯ãã¹ããããŠããŸããã
ããããã¹ãGLBã§ã
Wheels.glb.zip
3幎åããïŒ https ïŒ
åºæ¬çã«ã¯... gl_FrontFaceãAdrenoGPUã®äž¡é¢ãããªã¢ã«ã§æ£ããæ©èœããŠããªãããã§ãã
ããã¯ç§ãã¡ã察å¿ããå¿ èŠãããåé¡ã§ããïŒ
//
normalmap_pars_fragment
Adrenoã®åé¿çãåé€ãããšããã®ã¢ãã«ã¯ç§ã®ãã·ã³ã§æ£ããã¬ã³ããªã³ã°ãããããã«èŠããŸãã
#ifdef DOUBLE_SIDED
// Workaround for Adreno GPUs gl_FrontFacing bug. See #15850 and #10331
bool frontFacing = dot( cross( S, T ), N ) > 0.0;
mapN.xy *= ( float( frontFacing ) * 2.0 - 1.0 );
#else
mapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );
#endif
ããŒãããã®ã³ã¡ã³ããèªãã ããšãèŠããŠããŸãã ç§ã¯ãã®ãã°ãèŠãŠãããšãã«ééãããšæããŸããããã¯æããã«r108ã§ä¿®æ£ãããŸããïŒå°ãªããšãã¢ããã°ã¬ãŒããããšä¿®æ£ãããŸããïŒïŒ https ïŒ
å€åããã¯é¢é£ããŠããŸããïŒ FWIWãç§ã¯å€ãAdreno GPUã«ã€ããŠããã€ãã®ãã£ãŒãããã¯ãåŸãã®ã§ãæããã«ãããã¯ãŸã ããªãäžè¬çã§ãã
確èªã®ããã«ãããã¯ãŸã dev
ãŸãïŒ
確èªã®ããã«ãããã¯ãŸã devã§çºçããŸãïŒ
æ£ããã ãã ããAdrenoã®ãã°åé¿çãåé€ããå Žåã¯ããã§ã¯ãããŸããã
ãã ããAdrenoã®ãã°åé¿çãåé€ããå Žåã¯ããã§ã¯ãããŸããã
ä»ã®ãšããåé¿çãåé€ããŠãããå¥ã®è§£æ±ºçãæ¢ãã®ã¯ã©ãã§ããïŒ çŸåšã®å®è£ ã§ã¯ã䜿çšããŠãããã©ââãããã©ãŒã ã«é¢ä¿ãªãã誀ã£ãããžã¥ã¢ã«ãçºçããŸãã
@ Mugen87ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ããžãªã¡ããªã¯äºãã«ãã©ãŒã§ãããšæããŸããããããã¯åãæ³ç·ããããå ±æããŠããŸãã
ä»°ããšããã§ãã ç§ã¯ããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã§æ£ããAdrenoäºæã®åé¿çãèŠã€ããããã«äœæéãè²»ãããŠããŸããã
ãã€ãŒã«ã¢ãã«ã¢ãã«ã調ã¹ããšãåãã€ãŒã«ã«ã¯ç¬èªã®UVã·ã§ã«ããããŸãã å
±æããŠããŸããã
ãããŠãé ç¹ã®é åºã¯éã§ãã
ãã ããå°ãªããšãBlenderã§ã¯ãé¡ã®åãã¯åãã§ãã
ãã®ããããããr108ã®ãã°ãªã®ãããããšãr108ãæ£åžžã«åäœããŠãããã©ããã¯ããããŸããã ¯_ïŒãïŒ_ /¯
@pushmatrixã¯UnityãBlenderãšæ¯èŒã§ããŸããïŒ
@mrdoob
@pushmatrix
å ãã«ã¡ã©ãšåãæ¹åã«ãããããUnityã¯èŠã¥ããã§ãããUnityãééã£ãŠããããã«èŠããŸããïŒ ð€
@mrdoob
ãããããã¯ç §æã«å°ãäŸåããŸãããããã¯å¹»æ³ã§ãããããã€ãã®å Žæã§ãããã¢ããããããã«èŠããŸãã ããããå転ãããšæ¶ããŸãã
ããã§ããã¯å¥ã®èŠ³ç¹ããèŠãŠãæ£ããããã«èŠããŸã
@mrdoobåé¢ã¯ãthree.jsã§åæèšåãã«å·»ãããŠããŸãã éåžžãåé¢ã®3ã€ã®é ç¹ã®UVããUVãããäžã§åæèšåãã«å·»ãããŠããŸãã
ãã®äŸã§ã¯ãç§ã®_äºæ³_ã¯å·ŠåŽã®ã¢ãã«ã«åæèšåãã®UVããããå³åŽã®ã¢ãã«ã«ã¯_æèšåãã®_UVããããŸãã doubleSide
ãtrue
å Žåãå³ã®ã¢ãã«ã¯three.jsã§æ£ããã¬ã³ããªã³ã°ãããŸããã
AFAIKãAdrenoã®åé¿çãåé€ãããšãAdreno以å€ã®GPUã®åé¡ãä¿®æ£ãããŸãã
@pushmatrix Unityã®äŸã«ã¯ã2ã€ã®æ¹åããã®æåæ§ã©ã€ããããããã«èŠããŸãã ãã®ãããäœãèµ·ãã£ãŠããã®ããèå¥ããã®ãé£ãããªããŸãã åäžã®ã©ã€ãã奜ãŸããå ŽåããããŸãã
@WestLangleyã¢ãã«ãã¥ãŒã¢ã䜿çšããŠããã®ãšåãç°å¢ãããã䜿çšããŠããŸãããåãå転ããªãå¯èœæ§ããããŸãã ã·ã³ã°ã«ã©ã€ãã§è©ŠããŠã¿ãŸãã
@WestLangleyäžæ¹åã©ã€ããå転ããŸãã ç®ã®é¯èŠãèŠãŠãããããªæ°ãããŸã
Unityã¯ãå ãã©ã®ããã«åœãããã«å¿ããŠæºãåºãå ¥ãããããã«èŠããŸãããå°ãªããšãäž¡æ¹ã§äžè²«ããŠããŸãã
Threejsãäžè²«ããŠããŸãããééããªãåžžã«é£ã³åºããŠããããã«èŠããŸãã
Unityã®ãã®ã«äœãåé¡ãããããã«æããŸã...
ã®ãããªãã®ãå¿
èŠã§ãã material.normalMapScale.x = -1
ã
@WestLangley
@mrdoobåé¢ã¯ãthree.jsã§åæèšåãã«å·»ãããŠããŸãã éåžžãåé¢ã®3ã€ã®é ç¹ã®UVããUVãããäžã§åæèšåãã«å·»ãããŠããŸãã
ãã®äŸã§ã¯ãç§ã®_äºæ³_ã¯å·ŠåŽã®ã¢ãã«ã«åæèšåãã®UVããããå³åŽã®ã¢ãã«ã«ã¯_æèšåãã®_UVããããŸãã
doubleSide
ãtrue
å Žåãå³ã®ã¢ãã«ã¯three.jsã§æ£ããã¬ã³ããªã³ã°ãããŸãããAFAIKãAdrenoã®åé¿çãåé€ãããšãAdreno以å€ã®GPUã®åé¡ãä¿®æ£ãããŸãã
ããããšããããã¯çã«ããªã£ãŠããŸãã ããããããã§ãããã«èª¿æ»ãã䟡å€ããããšæããŸãã Sketchfabããã¹ãŠã®ããã€ã¹ã§æ£ããèŠããå Žåã¯ãã·ã§ãŒããŒã確èªããå¿ èŠããããŸãã
ä»æ¥ãããããã®ã·ã§ãŒããŒã³ãŒãã確èªããŸããããããã¯ã»ã«ããšã®æ¥ç©ºéæ³ç·ãããã³ã°ãã䜿çšããŠããªãããã§ãã
ãã®æçš¿ã«ãããšãSketchfabã¯ã¢ã»ããã®æ¥ç·å®çŸ©ãæåŸ
ããŠãããããããã®ããŒã¿ã¯
UV座æšã«åºã¥ããŠçæããŸãã ããã¯ãGLSLã³ãŒãã§èŠããã®ã«å¯Ÿå¿ããŠããŸãã
BufferGeometryUtils.computeTangents()
ãä»ããŠã¢ãã«ã«æ¥ç·ãè¿œå ãã Material.vertexTangents
ãtrue
ãšãçµæã¯æ£åžžã«èŠããŸãã
ãšããã§ïŒãã®æçš¿ã§Sketchfabã®ã³ãŒãã¹ãããããå ±æããŠã倧äžå€«ã§ãã^^ïŒ çµå±ã®ãšãããããã¯ãªãŒãã³ãœãŒã¹ã§ã¯ãããŸããã
äžè²«æ§ãä¿ã€ããã«ã1ã€ã®æåæ§ã©ã€ããååŸã«ç§»åããSketchfabã次ã«ç€ºããŸãã
èŠããŠããã¹ãããšã®1ã€ã¯ãSketchfabã¯ã¢ãã«ãã¢ããããŒããããšãã«åŠçãå®è¡ãããããçæãããå€æŽãããããå¯èœæ§ãéåžžã«é«ãããšã§ãã 衚瀺ããŠããã®ã¯glTFã§ã¯ãªããç¬èªã®åœ¢åŒã«å€æãããglTFãã¡ã€ã«ã§ãã
@ pushmatrix ïŒ17958ãã¢ãã«ã§æ©èœããããšã_
three.jsã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã¿ã³ãžã§ã³ããèšç®ããŸãã ç¹å®ã®ãã°ã®ããAdrenoGPUã«å¯Ÿå¿ããããã®ããã¯ãåé€ãããã°ãæ£ããæ©èœãããšæããŸãã ïŒ17958ãåç §ããŠãã ããã
//
Sketchfabã¯ãæ¥ç·ãå¿ èŠã§ã¢ãã«ã«ãã£ãŠæäŸãããŠããªãå Žåã«ãCPUã§æ¥ç·ãèšç®ããŸãã ïŒ @donmccurdyããã¯glTFä»æ§ã«å¿ èŠãªãã®ã§ããïŒ
three.jsããããè¡ãããšãã§ããŸãããããã¯ãã¹ãŠã®çµã¿èŸŒã¿ãžãªã¡ããªã«æ£ããæ¥ç·ãè¿œå ããããšãæå³ããŸãã three.jsã¯ã ComputeTangents()
ã眮ãæããããã«MIKKTSpaceã¢ã«ãŽãªãºã ãå®è£
ããå¿
èŠããããŸãã three.jsã¯ã€ã³ããã¯ã¹ä»ããšã€ã³ããã¯ã¹ãªãã®äž¡æ¹ã®ãžãªã¡ããªããµããŒãããŠãããããããã«ã¯ããªãã®åŽåãå¿
èŠã«ãªããšæããŸãã
ãããä¿®æ£ããŸãïŒ
ããŠãããã§ã®è§£æ±ºçã¯ãAdrenoã®åé¿çïŒïŒ17958ïŒãå
ã«æ»ããã¢ãã«ã«æ¥ç·ããªããAdreno GPUã®ãµããŒããç®æããŠããå ŽåïŒïŒ15850ïŒã«BufferGeometryUtils.computeTangents()
ã䜿çšããããšãæšå¥šããããšã§ãã ã
ããã§ããïŒ
å¥ã®è§£æ±ºçã¯ãæäŸãããŠããªããšãã«ãšã³ãžã³ã§BufferGeometryUtils.computeTangents()
ãèªåçã«åŒã³åºãããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã¿ã³ãžã§ã³ããèšç®ãããã¹ãŠã®ã³ãŒããåé€ããããšã§ã...ð€
BufferGeometryUtils.computeTangents()
çŸåšã€ã³ããã¯ã¹ãå¿
èŠãšããŠãããããã³ã¢ã§äœ¿çšããããšã¯ã§ããŸããã ãã ãã three.js
ãããæç¹ã§MIKKTSpaceã«åŸã£ãŠæ¥ç·ãçæãã perturbNormal2Arb()
åé€ã§ãããšãããšæããŸãã
@WestLangleyã¯æžããïŒ
ããã¯ããã¹ãŠã®çµã¿èŸŒã¿ãžãªã¡ããªã«æ£ããæ¥ç·ãè¿œå ããããšãæå³ããŸãã
èããå€ãã...æ¥ç·ã¯å¿
ãããå¿
èŠã§ã¯ãããŸããã 代ããã«ãã¡ãœããBufferGeometry.computeTangents()
ã埩å
ãã解æçã«æ£ç¢ºãªæ¥ç·ãèšå®ã§ãããã¹ãŠã®çµã¿èŸŒã¿ãžãªã¡ããªã«å¯ŸããŠãã®ã¡ãœãããããªãŒããŒã©ã€ããããŸãã
//
å¥ã®è§£æ±ºçã¯ãæäŸãããŠããªãå Žåã«ãšã³ãžã³ã§BufferGeometryUtils.computeTangentsïŒïŒãèªåçã«åŒã³åºãããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã¿ã³ãžã§ã³ããèšç®ãããã¹ãŠã®ã³ãŒããåé€ããããšã§ã...
ããã¯ç§ã«ã¯æ£ããããã«èãããŸãã
BufferGeometryUtils.computeTangentsïŒïŒã¯çŸåšã€ã³ããã¯ã¹ãå¿ èŠãšããŠãããããã³ã¢ã§äœ¿çšããããšã¯ã§ããŸããã
ç°¡åã«çŽãããšæããŸãã ãŸãã httpsïŒ //github.com/mrdoob/three.js/issues/17804#issuecomment-557135610ããµããŒãããããã«ä¿®æ£ããå¿ èŠããã
three.jsãããæç¹ã§MIKKTSpaceã«åŸã£ãŠæ¥ç·ãçæããperturbNormal2ArbïŒïŒãåé€ã§ããã°æãŸããã§ãããã
MikkTSpaceããã©ã°ã¡ã³ãã·ã§ãŒããŒã®èšç®ãå¿ ããã眮ãæããå¿ èŠããããã©ããã¯ããããŸããã ã·ã§ãŒããŒã«ã¯ããã©ãŒãã³ã¹ã³ã¹ããã»ãšãã©ãªããã»ãšãã©ã®ã¢ãã«ã§æ£åžžã«æ©èœããŸãã æ¥ç·ã®äºåèšç®ã«ã¯ãæ¯åé ç¹ããšã®åæè²»çšããããããããã®ç¹å®ã®å Žåãé€ããŠå©ç¹ã¯ãããŸããã ðglTFä»æ§ã«èšèŒãããŠããããšã«ãããããããããã©ã«ãã§ãããè¡ãããšãæ£åœåããã®ã«èŠåŽããŠããŸãã
BufferGeometryUtils.computeTangents
ãMikkTSpaceã¢ãããŒããå®è£
ã§ããã°ãããã¯çŽ æŽãããããšã§ããããã¯ãäºåã«èšç®ããå¿
èŠãããå Žåã«æé©ãªã¢ã«ãŽãªãºã ã§ãã ãã ããæ¢åã®ãã€ãã£ãå®è£
ã䜿çšã§ããglTF-Pipelineãgltfpackãªã©ã®ããŒã«ã«MikkTSpaceãé
眮ããäºåã«ãªãã©ã€ã³ã§èšç®ãè¡ãæ¹ãããããç°¡åã§ãã
@donmccurdy
ããããããšãã°... <model-viewer>
ãŠãŒã¹ã±ãŒã¹ã§ã¯ããŠãŒã¶ãŒãAdreno GPUã䜿çšããŠãããã©ãããç¥ãããã®ä¿¡é Œã§ããæ¹æ³ã¯ãªããšæããŸãããæ£ãã調ã¹ãããšæããŸãïŒhttpsïŒ// githubã com / GoogleWebComponents / model-viewer / issues / 740ïŒã
æ¥ç·ãæäŸãããŠããªãå Žåã <model-viewer>
ïŒããã³x-gpuãµããŒããå¿
èŠãªä»ã®ãããžã§ã¯ãïŒã¯BufferGeometryUtils.computeTangents
åŒã³åºãå¿
èŠããããŸããããããšã3ã€ã§ããïŒ
@pushmatrix
ãããç§ã¯ãããã®ãã€ãŒã«ãã©ãããæ¥ãã®ãæ°ã¥ããŸããð
@ mrdoobðµ
ããã§ã¯ãä»ã®ãšããåé¿çãå ã«æ»ããŸãããã
æãåèã«ãªãã³ã¡ã³ã
ãããä¿®æ£ããŸãïŒ