UVăŞăăťăăă¨ăŞăăźăďźăăăłăăăăäťăŽăăŻăšăăŁăăăăăŁăŽăăă¤ăďźăŻăăăŻăšăăŁăăăăăŞă˘ăŤăŤĺĽĺŚăŤć¸Ąăăăĺä¸ă§ăăăĺż čŚăŤĺżăăŚăăăŞă˘ăŤăă¨ăŤăăŻăšăăŁăč¤čŁ˝ăăĺż čŚăăăďźĺ¤§éăŽăĄă˘ăŞă澪貝ăăďźă¨ăăĺéĄăçşçăăžăă -ăăăŞă˘ăŤăŽăŞăăťăă/ăŞăăźăăăžăăŻçŹčŞăŽăŤăšăżă ăˇă§ăźăăźăăăźăŤăăžăă äşşă ăŤăăă埡ĺśăăăă¨ăŻé常ăŤéĺšççă§ăăćăčŻăăąăźăšăŻăéŠç¨ăăăăŞăă¸ă§ăŻăăŽăľă¤ăşăŤĺşăĽăăŚăľăźăă§ăšĺ ¨ä˝ăŤăăŻăšăăŁă丌ăšăŚčĄ¨ç¤şăăĺ ´ĺăăžăăŻăăŻăšăăŁăă˘ăăĄăźăˇă§ăłăŽăšăăŠă¤ăăˇăźăă¨ăăŚä˝żç¨ăăĺ ´ĺă§ăă ăĺ ąćăăăŻăšăăŁă§ĺ ąćUVăŞăăťăă/ăŞăăźăăĺż čŚăŤăŞăĺŻč˝ć§ăŻä˝ăăé常ăŻăăăŞă˘ăŤăĺ ąćăăćšăéŠĺă§ăăăăăçžĺ¨ăŽăˇăšăă ăŻĺŽéăŽĺŠçšăŽăŞăé厳ă¨ăăŚăăčŚăăă¨ăă§ăăžăăă ăăăăŤăăăăăŻăšăăŁăăăŚăăăŠăźă ăć´ć°ăăăă¨ăŻĺĽĺŚă§ăăăŞăăŞăăăăăŻĺŽéăŤăŻăăŻăšăăŁăŽä¸é¨ă§ăăăă¸ăăšăćăăăă¨ăłăăŚăźăśăźă桡䚹ăăăăă¨ăŤăŞăăžăă ăă¨ăă°ăăăăŞă˘ăŤăŤč¤ć°ăŽăăăăéŠç¨ăăăŚăăĺ ´ĺăŤăŞăăťăă/ăŞăăźăăĺ¤ć´ăăă¨ăăă¨ăă°ădiffuse + normalmapăŻăăăŁăăĽăźăşăăăăŽăŞăăťăă/ăŞăăźăăŽăżă使ç¨ăăăăăćłçˇăăăăŽăŞăăťăă/ăŞăăźăăŽĺ¤ăŻăăăŽăłăłăăăšăă§ăŻăžăŁăă彚ăŤçŤăĄăžăăă ăăăăćłçˇăăăăŽăŞăăťăă/ăŞăăźăăŤĺ˝ąéżăä¸ăăăŻăă ă¨ćŹĺ˝ăŤç¤şĺăăŚăăĺ ´ĺă ăăăŻăăšăŚćˇˇäšąăăŚăăžăă
ărefreshUniformsCommonăé˘ć°ă§ĺ¤ć´ăĺż čŚă§ăăă¨ç˘şäżĄăăŚăăžăăăăăăăăă䝼ä¸ăŽăăŽăăăăžăă ăšăăŠă¤ăăăŠă°ă¤ăłăŤăăăă¤ăăŽĺ¤ć´ăĺż čŚă§ăă ăăăŻăăăăĺ¤ăăŽäşşă ăŽăăă¸ă§ăŻăăĺŁăă§ăăăăăăăăŻăăŻăšăăŁ/ăăăŞă˘ăŤAPIăŽăăŞă大ăăŞççžă§ăă ăăăŞă˘ăŤă§ăŻé常ăŻnullă§ăăăŞăźăăźăŠă¤ăăä˝ćăăăă¨ăăĺ§ăăăžăăč¨ĺŽăăă¨ăăăŻăšăăŁăŽĺ¤ăçĄčŚăăăăăăăăšăŚăŽäşşăĺŁăăăă¨ăŻăăăžăăă
é˘éŁč¨äşďź https ďź
ăăăŞă˘ăŤăă¨ăŤăăŻăšăăŁăč¤čŁ˝ăăĺż čŚăăăăžăďźĺ¤§éăŽăĄă˘ăŞă澪貝ăăžăďź
大éăŽăĄă˘ăŞăçĄé§ăŤăŞăŁăŚăăăŽăŻăŠăŽăăăŞćĺłă§ăăďź
ăĺ ąćăăăŻăšăăŁă§ĺ ąćUVăŞăăťăă/ăŞăăźăăĺż čŚăŤăŞăĺŻč˝ć§ăŻä˝ăă§ă
ăăăŻăŠăăăćĺłă§ăăďź
çžĺ¨ăŽă˘ăăăźăăçśćăăĺ ´ĺăĺ¤ć´ăĺż čŚăŞăă¨ăŽ1ă¤ăŻăăăŻăšăăŁăŽăŻăăźăłăä˝ćăăă¨ăăŤăĺ ąćă¤ăĄăźă¸ăGPUăŤ1ĺă ă渥ăĺż čŚăăăăă¨ă§ăă
ăăŹăźă /ăˇăźăăŽć°ăĺ¤ăăŞăă¸ă§ăŻăăăăĺ ´ĺăä˝ćăăă彚ăŤçŤăăŞăăŞăă¸ă§ăŻăăăăăăăăăăăŞăăčż°ăšăăăăŤăçťĺăŻé常ăŤçĄé§ăŞGPUăŤč¤ć°ĺăłăăźăăăžăă ăăăŤçĄé§ăŞăă¨ăŤăç°ăŞăă˘ăăĄăźăˇă§ăłăŽç°ăŞăăă¤ăłăăŤé 罎ăăĺż čŚăŽăăč¤ć°ăŽăŞăă¸ă§ăŻăăăăĺ ´ĺăĺşćăŽăăăŞă˘ăŤ/ăŞăă¸ă§ăŻăăă¨ăŤĺşćăŽăăŻăšăăŁăťăăăä˝ćăăĺż čŚăăăăăăăăăŞă˘ăŤăŽăŚăăăŠăźă ăçşçăăĺŻč˝ć§ăăăĺ ´ćă§ăŽĺŚçăăăăŤé˘ĺăŤăŞăăžăăăăăăŽä˝ĺăŞăăŻăšăăŁăŞăăťăă/ăŞăăźăăăźăżć§é ă使ç¨ăăăŤăăŻăăăŤç°ĄĺăŤćä˝ă§ăăžăăăăăŻăAPIăćŠč˝ăăăăăă ăăŤăăăčăăăăŚăăŞăAPIăä¸ĺżăŤć§çŻăăăŚăăžăă ă˘ăăŞăąăźăˇă§ăłăŽçšĺŽăŽăŚăźăšăąăźăšă§ăŻăăăăăŽä¸ćăŽăăŻăšăăŁă°ăŤăźăăăŠăăŤă§ăä˝ćăăĺż čŚăăăăăăŽĺä¸ăŽĺéĄăĺéżăăăăăŤä˝żç¨ăăăăšăŚăŽăšăăăŻăăăŞă˘ăŤăăˇă§ăźăăźăăăŞă˘ăŤăŤç˝Žăćăăăă¨ăĺŻä¸ăŽč§Łćąşçă§ăăă¨ćăăŚăăžăăăžăăŻăTHREE.jsăăźă¸ă§ăłăăăŠăźăŻăăŚăĺż čŚăŞĺ¤ć´ăĺ ăăžăă
2çŞçŽăŽăšăăźăăĄăłăăŤé˘ăăŚďź
çžĺ¨ăŽăăŠăă¤ă ăŻăĺăUVăŞăăťăă/ăŞăăźăă§ĺăăăŻăšăăŁăéŠç¨ăăăĺ ´ĺăŤăŽăżä˝ćĽă厚ćăŤăăăă¨ăćĺłăăžăăăăăăăäťăŽăăăŤĺŽçžŠăăăĺŻč˝ć§ăăŻăăăŤéŤăăăăä¸čŹçăŤăŻăžăăŞăąăźăšă§ăăŚăăăŠăźă ăăăăŞă˘ăŤăă¨ăăăŻăšăăŁă ăă§ăŞăăăăŞă˘ăŤăĺ ąćăăžăă
çžĺ¨ăŽăˇăšăă ăŤé˘ăă丝ăŞćł¨ćçšă ăŞăăťăă/ăŞăăźăăŻăăˇă§ăźăăźĺ ăŽăăšăŚăŽăăŻăšăăŁăŤĺ˝ąéżăä¸ăăĺä¸ăŽăŚăăăŠăźă ă¨ăăŚăŽăżĺŽéăŤĺĺ¨ăăžăăă3ă¤ăŤă˘ăżăăăăăŚăăă¨ăăäşĺŽă§ăăăăŻăšăăŁăŻăăŚăăăŠăźă ă¨ăăŚéŠĺăŤä˝żç¨ă§ăăŞăăă¨ăćĺłăăăŞăăťăă/ăŞăăźăăčăăăăăŤäşşă ăé¨ăăžăăăšăăăŻăăăŞă˘ăŤăŤéŠç¨ă§ăăăăžăăžăŞăăŻăšăăŁăŤĺŻžăăŚç°ăŞăćšćłă§é¸ćă§ăăžăďźă¤ăžăăç°ăŞăćĄćŁăŞăăťăăă¨ćłçˇăăăăŞăăťăăăĺŽçžŠă§ăăžăăăç°ăŞăăăŻăšăăŁăŤä¸ćăŤč¨ĺŽă§ăăŚăăĺŽéăŤăŻä¸ĺŻč˝ă§ăďźă ăăŁăłăăšăŹăłăăŠăźăŽćŽé޸ă§ăăĺŻč˝ć§ăăăăžăăăăăă大ăăŤĺŠç¨ăăŚăăwebGLrender / GLSLăăăŞă˘ăŤăˇăšăă ă§ăŻćĺłăăăăžăăă
mrdoobăŻăććăă¨ăŤăăă使ç¨ăăăă¨ăŤĺ寞ăăççąă¨ăăŚă揥ăŽĺ˝˘ĺźă§ăăĺż čŚăăăă¨čż°ăšăžăăă
material.map
material.mapOffset
material.mapRepeat
material.env
material.envOffset
material.envRepeat
... NSă
ăăăăçš°ăčżăăŤăŞăăžăăăăŞăăťăă/ăŞăăźăăŻçžĺ¨ă§ăăăăăżă¤ăăă¨ăŤćŠč˝ăăŞăăăăăăăŻĺŽéăŤăŻćĺšăŞĺźć°ă§ăŻăăăžăăă ă¨ăŤăăĺ¤ăăŽăŚăăăŠăźă ăçĄé§ăŤăăŚăăăăżă¤ăăă¨ăŤé 罎ăăăă¨ăŻă§ăăžăăďźč¨ăăžă§ăăŞăăé常ăŻ1ăťăăăŽUVăŽăżă使ç¨ăăăăăćłçˇăăă/ăăłăăăă/ăăŁăăĽăźăşăăă/ăšăăăĽăŠăźăăăăŤč¤ć°ăŽăŞăăťăăăŻăăăžăăďźă ăăšăŚăŽăŞăăˇă§ăłă匼ĺ˝ăŞăăŽă¨ăăŚć¤č¨ăăĺ ´ĺăăăăŻĺŽéăŤăŻăăŻăšăăŁăăăăăŁă§ăŻăŞăăăăŞă˘ăŤăăăăăŁă§ăăĺż čŚăăăă¨ćăăžăă çžĺ¨ăŽăˇăšăă ăŤăŻä˝ăŽăĄăŞăăăăŞăă¨ćăăžăă UVăŞăăťăăăäťăăŚăăăŞă˘ăŤăă˘ăăĄăźăăăăă¨ăăăăăăăŁăăžăŁăăćăăŞă丝ăŞççąă§ăăăăăŽăăăŤéŠĺăŤä˝żç¨ăăăă¨ăăă§ăăŞăă¨ćăăŚăăžăă č¨ăăžă§ăăŞăăăăăăŽăŚăăăŠăźă ăĺż čŚăŞăĺ ´ĺăŻăăˇă§ăźăăźăŽăłăłăă¤ăŤăăççĽă§ăăžăăăăăăăĺĺ¨ăăéăăăŚăăăŠăźă ăŻĺĺ¨ăăžăă
@QuaziKbćŹćăćăŁăŚăăăă§ććĄăăăăăŞăŠă¤ăăŠăŞă¸ăŽć šćŹçăŞĺ¤ć´ăććĄăăĺ ´ĺăŻăăăŽĺ¤ć´ăŤă¤ăăŚć確ă§čŞŹĺžĺăŽăăč°čŤăćäžăăĺż čŚăăăăžăă ăăŞăăŽçšĺŽăŽă˘ăăŞăąăźăˇă§ăłăŽĺç §ăŽăăŹăźă ăăč°čŤăăăă¨ăŻăăăăŤăăăăă¤ăăăŻăăăžăăă
ăăăŻč¨ăŁăŚăăç§ăăŞăăťăă/ăŞăăźăăTexture
ăăăăăŞă˘ăŤăŤç§ťĺăăăă¨ăćăă§ăăžăă
揥ăŽăăăăĺăăŞăăťăă/ăŞăăźăĺ¤ăćăŁăŚăăă¨äťŽĺŽăăăŽăŻĺççă ă¨ćăăžăă
specularMap
normalMap
bumpMap
alphaMap
aoMap (future)
glossMap (future)
displacementMap (future)
ĺŻä¸ăŽäžĺ¤ăŻ
ăăăçžĺ¨ăŽĺŽčŁ ćšćłă§ăă ĺăăăăŤăŻçŹčŞăŽăŞăăťăă/ăŞăăźăĺ¤ăăăăžăăăăăăăŻĺ°éăăăžăăă
ăăăăŁăŚă MeshPhongMaterial
ă MeshLambertMaterial
ă MeshBasicMaterial
ăăăăłSpriteMaterial
ăŤčż˝ĺ ă§ăăžăă
mapOffset // or mapTranslate
mapRepeat // or mapScale
Texture
ăăoffset
ă¨repeat
ăĺé¤ăăžăă
ăăŽăăăŤăăšăăŠă¤ăăˇăźăăŽĺŽčŁ ăŻç°Ąĺă§ăă ĺăšăăŠă¤ăăŤăŻăăăŞă˘ăŤăăăăăăăăŽăăăŞă˘ăŤăŻĺä¸ăŽăăŻăšăăŁăĺ ąćăăžăă ăăŻăšăăŁăŤăŻă¤ăĄăźă¸ăăăăžăă ăăŻăšăăŁăč¤čŁ˝ăăĺż čŚăăŞăăŞăăžăăă GPUĺ´ă§ăŻăăăăŞă˘ăŤăŻĺä¸ăŽăˇă§ăźăăźăăă°ăŠă ăĺ ąćăăžăă
ç§čŚăăăăŻăăčŞçśăŞAPIă§ăă
APIă䝼ĺăŽăăăŤĺŽčŁ ăăăççąăćăĺşăăă¨ăăŚăăžăă ćŁĺ˝ăŞççąăăăŁăă¨ćăăžăă
çłă訳ăăăžăăăăăăăç§ăŽäžăŤçšćă§ăăăă¨ă示ĺăăă¤ăăăŻăăăžăăă§ăăăĺăŤăçžĺ¨ăŽAPIă使ç¨ăăă¨ăăšăăŠă¤ăăˇăźă/ä¸ćăŽăŞăă¸ă§ăŻă/ăăăŞă˘ăŤăă¨ăŽăŞăăťăăăă˘ăăĄăźăˇă§ăłĺăăă¨ăăŤĺ¤§ĺš ăŞčĽĺ¤§ĺăçşçăăĺŽéăŽč§ŁćąşçăŻăăăžăăă ĺ˝çśăăŞăăťăă/ăŞăăźăăă˘ăăŤăŽé çšUVăŤĺç´ăŤăă¤ăŻăăăŽă§ăŻăŞăăăăăăŚăăăŠăźă ă¨ăăŚä˝żç¨ăă丝ăŞçŽçăŻăăŞăăťăăăă˘ăăĄăźăˇă§ăłĺăăăă¨ă§ăăăăăŻăAPIăĺéżăăŚăŚăăăŠăźă ăä˝ćăăŞăă¨ĺŽčĄă§ăăŞăăă¨ă示ĺăăŚăăžăăăăăŻăšăăŁăŤă˘ăżăăăăăă¨ăŻăăăăŞă˘ăŤăŤă˘ăżăăăăĺ ´ĺăăăăŻăăăŤćç¨ă§ăŻăăăžăăă
揥ăŽăăăăĺăăŞăăťăă/ăŞăăźăĺ¤ăćăŁăŚăăă¨äťŽĺŽăăăŽăŻĺççă ă¨ćăăžăă
ĺ°ĺł
..ă
alphaMap
FWIWăăăŽĺä˝ďźçžĺ¨ăŽĺŽčŁ ďźăŻăçžćçšă§ç§ăŤé大ăŞăăŠăšăăŹăźăˇă§ăłăĺźă辡ăăăŚăăžăă ăĄăăˇăĽăăăŞă˘ăŤăŽalphaMapăŞăăťăăăăăăŽćĄćŁăăăďźĺşĺŽăăăăžăžďźă¨ăŻçŹçŤăăŚăăĽă¤ăźăłăăăă¨ăŤăăăăĄăăˇăĽăŽăŞăăźăŤăă˘ăăĄăźăăăăă¨ăăŚăăžăă ăăă¤ăăŽćŹ˛ćąä¸ćşăŽĺžăç§ăŻhttps://github.com/mrdoob/three.js/pull/4987ăäťăăŚçşčŚăăăăŽăă°ăŻăăăä¸ĺŻč˝ă§ăăăă¨ăçşčŚăăžăăă
@jcarpenterăăŞăăč¨ĺăăŚăăăăă°ăă¨ăŻä˝ă§ăăďź ćšĺăŽăăăŽăăŞăăŽććĄăŻä˝ă§ăăďź
č¨ćŁďźăăă°ăă¨ăŻăăăŽĺéĄăćĺłăăŚăăžăăă BugzillaăŤăŤăăŁăźă§ăŽé庌ăŽćéăŤăă桡䚹ă ďźpăăăŻăă°ă§ăŻăŞăăćĺłăăĺä˝ă§ăăăă¨ăç解ăăŚăăžăă
Cinema 4DăŽăăăŞĺžćĽăŽ3Dăłăłăăłăä˝ćă˘ăăŞă§ăŽç§ăŽçľé¨ăŤĺşăĽăăŚăćšĺăŽăăăŽWRTăŻăăŚăźăśăźă揥ăŽä¸ĄćšăĺŽčĄă§ăăă¨ćłĺăăŚăăžăă
ăăăăŻăç§ăĺăçľăă§ăăăŚăźăšăąăźăšďźăăĄăăˇăĽăŽčĄ¨ç¤şăă˘ăăĄăźăˇă§ăłĺăăăă¨ăăŚăăăďźăŽĺ ´ĺăăžăŁăăăŠăăăăŞăwrapSă¨wrapTăŽăŞăăˇă§ăłăăăă¨äžżĺŠă§ăă Cinema4Dăă桝äťăăăGIFăă¨ăŤăUVWăăăăłă°ăŽăżă¤ăŞăłă°ăĺŽĺ ¨ăŤçĄĺšăŤăăăŞăăˇă§ăłăăăăžăă ć˘ĺăŽwrapSăăăłwrapTăĄă˝ăăă使ç¨ăăăăŞăĺşçŻăŞăăšăăŤĺşăĽăă¨ăăăŽăăăŞăă¨ăŻä¸ĺŻč˝ă§ăă three.jsăŽă˘ă¤ăă ăŽčĄ¨ç¤şăă˘ăăĄăźăˇă§ăłĺăăăăăŽç§ăŽăŞăăˇă§ăłăŻăăĄăăˇăĽĺ ¨ä˝ăŽăăĽă¤ăźăłä˝ç˝Žă¨ä¸éć庌ăŤĺśéăăăŚăăăăă§ă...ä˝ăăčśłăăŞăĺ ´ĺăé¤ăăžăă
ĺćăăžăăă č¨çťăŻăăăăăăšăŚăĺç´ĺăďźăˇă§ăźăăźă§ĺä¸ăŽmatrix3ă使ç¨ďźăăăŻăšăăŁăă¨ăŤăŞăăťăă/ăŞăăźăďźăžăăŻĺ¤ć/ăšăąăźăŤďźăčĄăăă¨ă§ăă
ăăăćäźăăăäşşăŻčŞ°ă§ă大ćčżă§ăďź
@jcarpenter
ćŽĺżľăŞăăăçžćçšă§ăăăčĄăĺŻä¸ăŽćšćłăŻăç°ăŞăăăăŞă˘ăŤă使ç¨ăăč¤ć°ăŽăĄăăˇăĽăăžăăŻăŤăšăżă ăˇă§ăźăăźăăăŞă˘ăŤă使ç¨ăăăă¨ă§ăă ăŠăĄăăăthree.jsăŻăźăŻăăăźăŤéŁăłčžźăă ă°ăăăŽăŚăźăśăźăŤă¨ăŁăŚăŻä¸ç¨ŽăŽé˘ä¸ă§ăă
使ăăăăăăăăŠăźăăłăšăćĄĺźľć§ăŽéăŤăŻĺ¸¸ăŤăăŹăźăăŞăăăăăžăă ç§ăŽććĄăŻăăăŻăšăăŁă¨ăăăŞă˘ăŤăçžĺ¨APIă§ćŠč˝ăăćšćłăć¸ăç´ăăŚăăăŻăšăăŁăĺłĺŻăŤăăŠă°ă¤ăłăăăăŠăĄăźăżă§ăăăăŞăăťăă/ăŞăăźă/ăŠăăă˘ăźăăŽăăăŞăˇă§ăźăăźă§ĺŽéăŤĺä¸ă§ăăĺ¤ăçšăŤăŤăŞăłăŻăăăăăăŤăăăă¨ă§ăăććă ĺ ´ĺăŤăăŁăŚăŻăĺ¤ć´ăăĺż čŚăŽăŞăăăŻăšăăŁăŽUVăŽĺśĺžĄăŤăŚăăăŠăźă ăçĄé§ăŤăăăăŞăĺ ´ĺăăăăžăďźćĄćŁăŤăŽăżĺż čŚăŞĺ ´ĺăŻăăăŠăłăăăŞă˘ăŤăŤ4 * 5ăŽä˝ĺăŞăŚăăăŠăźă ăĺŤăăăŽăŻé常ăŤçĄé§ă§ăďźăăăăăŁăŚăçšĺŽăŽUVăĺż čŚăăŠăăăć¤ĺşăăăăăăŽčŚćąăćşăăăăăŤăăŻăšăăŁăĺć§çŻăăăăăŠăăăć¤ĺşăăéćłăčĺ°čŁăŤăăĺ ´ĺăăžăăŻĺż čŚăŞčŞżć´ĺŻč˝ăŞUVăŽć°ă¨ĺ 厚ăćĺŽăăăăăŤăŞăăˇă§ăłă§ăăŠăĄăźăżă渥ăăă¨ăă§ăăĺ ´ĺăŻăŻăźăŤă§ăăăăăăăŞăăťăăăăăăăă¨ăăŽćšćłă§ăăă解湺ăăăŽăŻéŁăăĺéĄă§ăă
č¨çťăŻăăăăăăšăŚăĺç´ĺăďźăˇă§ăźăăźă§ĺä¸ăŽmatrix3ă使ç¨ďźăăăŻăšăăŁăă¨ăŤăŞăăťăă/ăŞăăźăďźăžăăŻĺ¤ć/ăšăąăźăŤďźăčĄăăă¨ă§ăă
@mrdoob
ăăăŻé常ăŤăăăăăĺ¤ć´ă§ăă ăăŻăšăăŁăä¸ćăŽçš°ăčżăĺ¤ăŤăăăăă ăăŤăăŻăšăăŁăŽăŻăăźăłăä˝ćăăĺż čŚăăăăŽăŻăé常ăŤé˘ĺă§ăă ăăăŻäťăŽĺłć¸é¤¨ăăăăčĄăćšćłă§ăăďź
- _per material.map_ăćĺłăăăŽă§ăăăŻăšăăŁĺ¤ćăŻăăăŞă˘ăŤăŤĺŤăžăăžăăďź ćŽĺżľăŞăăăăăăŞă˘ăŤăăăăŻăăăăăăăžăă ăŠă¤ăăăăăé¤ăăŚăăăšăŚăŽăăŻăšăăŁĺ¤ćăĺăă§ăăă¨ĺźăçśăćłĺŽă§ăăžăă
ăăăăă¨ăŤmat3
ĺż
čŚă§ăăă Texture
ăăăăăŁăăć§ćăăăŚăăĺż
čŚăăăă¨ćăăžăă
- ăăźăăźăˇă§ăłăăľăăźăăăžăăďź ăăŽĺ ´ĺăŻăĺ蝢ä¸ĺżăčż˝ĺ ăăĺż čŚăăăăžăăăă ăăĺ蝢ä¸ĺżăăăŻăšăăŁăŽä¸ĺżăŤé çˇăăĺż čŚăăăĺ ´ĺăé¤ăăžăă
ĺ蝢ăŻăă ä¸ĺ¤ŽăŤăăăăŠăă...ăăăăžăăăăç§ăç解ăăŚăăéăăăăăŻăăšăŚăăˇă§ăźăăźç¨ăŽĺä¸ăŽmat3
ăŤă¨ăłăłăźăă§ăăžăďźăăăăă¨ďźă
ăăăŻă Matrix3
ăăˇă§ăźăăźăŤć¸Ąăă offsetX
ă offsetY
ă repeatX
ă repeatY
ĺŽçžŠăăăĺ¤ćă襨ăćšćłă示ăăăăăżă¤ăă§ăă rotation
ă rotationCenterX
ăăăăłrotationCenterY
ă
center
ăăŞăăˇă§ăłă¨ăăŚč¨ąĺŻăăăŚăăŞăĺ ´ĺăŻă ( 0.5, 0.5 )
ăăźăăŻă¤ă¤ăźăăăĺż
čŚăăăăžăă
ăłăĄăłăăćčżăăžăă
硨éďźăă˘ăć´ć°
ăăăŻç´ ć´ăăăďź ďź+1 ďźďź + 1ďź
ăă ăăďź offset
ă¨repeat
䝣ăăăŤďź translation
ă¨scale
ă使ç¨ăăă¨ćăăžăă
ćŁç˘şăŤăŻăć°ăăććçšć§ăŻăŠăăăăšăă§ăăďź ăăăŞă˘ăŤăăăăŻăăăăăăăžăă
ăăŻăšăăŁăăăăăŁăăä˝ăĺé¤ăăĺż čŚăăăăžăăďź
wrapS/T
ăŻăăŻăšăăŁăŤćŽăŁăŚăăăŻăă ă¨ćăăžăă
texture.offset
ă¨texture.repeat
ăĺé¤ăăĺż
čŚăăăă¨ćăăžăă
ć°ăăăăăăăŁăŻ... texture.translation
ă texture.rotation
ă texture.scale
ă texture.center
ă texture.matrix
ĺż
čŚăăăă¨ćăăžăă ăăăăăăŹăłăăŞăłă°ćăŤĺźăłĺşăăătexture.updateMatrix()
ăĄă˝ăăăĺż
čŚăŤăŞăăžăă ăăĄăăăăăăŤăŻăăăŻăšăăŁăĺĺŠç¨ăăăŚăăĺ ´ĺă§ăăä¸ĺşŚă ăĺŽčĄăăăăăŤăăă¨ăă課éĄăăăăžăă
ăăŽć稿ăŽăżă¤ăăŤă¨https://github.com/mrdoob/three.js/issues/5876#issuecomment-69483293ăŽč°čŤăĺç §ăăŚăăă¤ăłăăŻăăăăŽăăăăăŁăăăăŞă˘ăŤăŤç§ťĺăăăă¨ă ă¨ćăăžăăă
ăłăĄăłăăŻ/ ping @ bhouston ă
ç§ăŽčăă§ăŻăăăŻăšăăŁăŽăŞăăťăă/ăŞăăźăăŻĺŻč˝ăŞéăUVăŤăă¤ăŻăăĺż čŚăăăăžăă ăăăŻĺŽšćă§ăă ăăăŻăUE4 / Unity5ăăťă¨ăăŠăŽĺ ´ĺăăăčĄăćšćłă§ăă
äžĺ¤ăŻăUnity 5ăŤăŻăăăšăŚăŽăăŻăšăăŁă§ĺ ąćăăăăăăŞă˘ăŤăă¨ăŤ1ă¤ăŽă°ăăźăăŤăŞăăťăă/ăŞăăźăăćĺŽăăćŠč˝ăăăăă¨ă§ăăăă ăăăŠă¤ăăăăăă˘ăłăă¨ăłăăŞăŻăŤăźă¸ă§ăłăăăăŞăŠăŽăă¤ăŻĺŚçăăăăăăă¨čŚăŞăăăăăŽăŤăŻĺ˝ąéżăăžăăă調ć´ăăŚăćĺłăăăăžăăăďź
ăăă§ĺ¤ăăŽćčťć§ă丝埾ăăŞăççąăŻăăăăä˝ćăăă˘ăăŤăŤăŻéŠĺăŞUVăăăăăăăăăŻéĺ¸¸ĺż čŚăăăžăăăăłăłăăłăä˝ćăăźăŤăŤăŻăăăăă¤ăŻĺŚçăăćšćłăăăăžăă ăă1ă¤ăŽĺéĄăŻăWebGLăŽăăŠă°ăĄăłăăŚăăăŠăźă ăŽä¸éăéćšăăŞăä˝ăăă¨ă§ăďź16 Vec4ďźă ăăăăă¨ăŤçš°ăčżă/ăŞăăťăăăĺż čŚă§ăăăăŤĺ¤ăăŽăăăăĺĺžăăĺ ´ĺăŻăăăŠă°ăĄăłăăŚăăăŠăźă ăăťă¨ăăŠäžĄĺ¤ăŽăŞăăăŽă¨ăăŚçĄé§ăŤăăŚăăžăă
ćčżăClara.ioăŤăŞăăźă/ăŞăăťăăăčż˝ĺ ăăŚăăăăăŻăšăăŁăă¨ăŤćăă/ă˛ă¤ăłăłăłăăăźăŤăčż˝ĺ ăăžăăăăăăŻăăăšăŚăŽApple iOSăăă¤ăšăŞăŠăŽăăźă¨ăłăăăă¤ăšă§ăăŠă°ăĄăłăăŚăăăŠăźă ăăŞăźăăźăăăźăăĺĺ ă¨ăŞăăăăăăăăŽĺ¤ć´ăĺ ăŤćťăăžăă ăŞăăźă/ăŞăăťăăă¨ćăă/ă˛ă¤ăłăćă¤ăă¨ăŻNVIDIA980săćčźăăăăšăŻăăăă§ăăžăćŠč˝ăăžăăăăă¤ă¨ăłăăăˇăłă§ăŻăŞăăăăšăŚăŽäşşăŽăăăŤč¨č¨ăăĺż čŚăăăăžăă ;ďź
ăăŠă°ăĄăłăăŚăăăŠăźă ăŻćŹćăćăŁăŚćąăăĺż čŚăŞĺ ´ĺăŤăŽăżä˝żç¨ăăĺż čŚăăăăžăă ăăăŻăăŽăăăŞăąăźăšăŽ1ă¤ă§ăŻăŞăă¨ç§ăŻäżĄăăŚăăžăă
äžĺ¤ăŻăUnity5ăŤăŻăăăŞă˘ăŤăă¨ăŤ1ă¤ăŽă°ăăźăăŤăŞăăťăă/ăŞăăźăăćĺŽăăćŠč˝ăăăăă¨ă§ăă
ăăăŻĺşćŹçăŤthree.jsăçžĺ¨čĄăŁăŚăăăă¨ă§ăăăăăŁăăĽăźăşăăăăăăŞăăťăă/ăŞăăźăăĺĺžăăäťăŽăăšăŚăŽăăăŞă˘ăŤăăŻăšăăŁăŻăăŽăăăăŽč¨ĺŽă使ç¨ăăžăă
ććĄăŻăăăŻăšăăŁăăăŞăăťăă/ăŞăăźăăĺé¤ăă䝣ăăăŤăăăăăăŞă˘ăŤăŤčż˝ĺ ăăăă¨ă§ă-ăăăăĺĺăĺ¤ć´ăăžăă çš°ăčżăăŤăŞăăžăăăăăšăŚăŽăăăŞă˘ăŤăăŻăšăăŁăŻĺăč¨ĺŽăĺ ąćăăžăďźä¸é¨ăŽăŚăźăśăźăŻăăăŤćşčśłăăŚăăžăăăďźă ăăăŤăăăĺä¸ăŞä˝żç¨éăä˝ăćăăăă¨ăă§ăăžăă
ćŽĺżľăŞăăăăăăŤă¤ăăŚăŻăăžăăłăłăťăłăľăšăĺžăăăŚăăžăăă
Unity5ăčĄăŁăŚăăăă¨ăčĄăăă¨ăŻčŻăčăă§ăă ăăŻăšăăŁăŽäťŁăăăŤç´ ćăŤă貟ăŁăŚăăžăă ăăŞăăŻç§ăŽăľăăźăăăăăžăă
ăăăăă¨ăŻĺŽéăŤăŻçćłçă§ăŻăăăžăăăăĺż čŚăŤĺżăăŚăăăăŞă˘ăŤăŽä˝ććăŤăăŠă°/ăăźă§ćĺŽăăăă¨ă§č§Łćąşă§ăăžăă
ä¸čŹăŤăăˇă§ăźăăźă§UVăĺ¤ć´ăăĺŻä¸ăŽççąăŻăUVăă˘ăăĄăźăăăăăă§ăă UVăéçăŤĺ¤ćăăăă ăăŽĺ ´ĺăŻăăăŽćŠč˝ăčż˝ĺ ăăăăăŤăˇă§ăźăăźăĺ¤ć´ăăăšăă§ăŻăăăžăăă
ăˇă§ăźăăźăŤććĄăăăŚăăĺŻä¸ăŽĺ¤ć´ăŻă罎ăćăăăă¨ă§ă
vUv = uv * offsetRepeat.zw + offsetRepeat.xy;
ă¨
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
Okă ăăăŻăŠăă§ăă... texture.dynamic
ďźăăăŠăŤăă§ăŻfalse
ďźăčż˝ĺ ăăă¨ă揥ăŽăăăŤăŞăăžăă
vUV = uv;
ăŚăźăśăźătexture.dynamic
ătrue
texture.matrix
ăăă¨ă texture.translation
ă texture.rotation
ă texture.scale
ăăăăłtexture.center
texture.matrix
č¨çŽăăăžăă texture.center
ăăăăăăă°ăŠă ăŤć¸Ąăă䝼ä¸ăçćăăžăă
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
ăăĄăăă texture.dynamic
ăĺ¤ć´ăăăĺ ´ĺăŻăăăă°ăŠă ăĺăłăłăă¤ăŤăăĺż
čŚăăăăžăă
ăăăăă°ă严ćšăŽéˇćăć´ťăăăă¨ăă§ăăžăăďź
@mrdoob
scale
ăŻăăŻăšăăŁăŽăăăăăŁă§ăăăăăă¨ătexture.scale
ăŻăăăŞă˘ăŤăŽăăăăăŁă§ăăďź ăăăăăŽăšăŹăăăŽăăšăŚă§ăăăăăĺžč
ă§ăăăă¨ăéĄăŁăŚăăžăă.matrix
ăăăăăŁăŻĺż
čŚăăăžăăă ć°ăăMatrix3
ăŻăăăăŞă˘ăŤăŚăăăŠăźă offsetRepeat
ă罎ăćăăăŚăăăŠăźă ă§ăă ăŹăłăăŠăźăŽäťăŽăăŠăĄăźăżăźăăč¨çŽăăăäťăŽăŚăăăŠăźă ă¨ĺăăăăŤGPUăŤć¸Ąăăăžăă
- ăăŞăăŽčŚč§Łă§ăŻă
scale
ăŻăăŻăšăăŁăŽăăăăăŁă§ăăăăăă¨ătexture.scale
ăŻăăăŞă˘ăŤăŽăăăăăŁă§ăăďź ăăăăăŽăšăŹăăăŽăăšăŚă§ăăăăăĺžč ă§ăăăă¨ăéĄăŁăŚăăžăă
ç§ăŻăăŽăšăŹăăăŤĺćăăžăăă mapMatrix
ă envMapMatrix
ă...ăžăăŻmapTranslation
ă mapRotation
ă mapScale
ććăćąćăăăšăă§ăŻăŞăă¨ćăăžăă THREE.Texture
ăŤtranslation
ă rotation
ă scale
ăăăăŚăăăăcenter
ăăă°ăăăŁă¨ăăăă ă¨ćăăžăă
.matrix
ăăăăăŁăŻĺż čŚăăăžăăă ć°ăăMatrix3
ăŻăăăăŞă˘ăŤăŚăăăŠăźăoffsetRepeat
ă罎ăćăăăŚăăăŠăźă ă§ăă ăŹăłăăŠăźăŽäťăŽăăŠăĄăźăżăźăăč¨çŽăăăäťăŽăŚăăăŠăźă ă¨ĺăăăăŤGPUăŤć¸Ąăăăžăă
ăăŽăăăŞăăŽăĺż
čŚă§ăă ç°ăŞăăăăă§ĺăăăŻăšăăŁăĺĺŠç¨ăăă¨ăăžăă ăăšăŚăŽă¤ăłăšăżăłăšăŤă¤ăăŚMatrix3
ăč¨çŽăăĺż
čŚăŻăăăžăăă
ç§ăŻăăŽăšăŹăăăŤĺćăăžăăă mapMatrixăenvMapMatrixă...ăžăăŻmapTranslationămapRotationămapScaleă§ăăăŞă˘ăŤăćąćăăăšăă§ăŻăŞăă¨ćăăžăă THREE.TextureăŤĺšłčĄç§ťĺăĺ蝢ăăšăąăźăŤăăăăŚăăăăä¸ĺ¤Žăăăă¨ăăăăŻăŞăźăłăŤăŞăă¨ćăăžăă
ç°ăŞăçš°ăčżăăăăăăŁăćă¤ăăăŤăăăŻăšăăŁăč¤čŁ˝ăăĺż čŚăăăăžăăďź ĺ°ăăŞăˇăźăłă§ăŻăăăăŻăăăă大ăăăă¨ă§ăŻăăăžăăăăăă§ăŤ40䝼ä¸ăŽăăŻăšăăŁăĺĺ¨ăă大ăăŞăˇăźăłă§ăŻăăăăŻč¨ćśăŽćŞĺ¤˘ă§ăă
@titansoftime image
ăŻTHREE.Texture
ăăĺăé˘ăĺż
čŚăăăăžăă çćłçăŤăŻă1ă¤ăŽTHREE.Image
ăăăăăç°ăŞătranslation
ă rotation
ă...ć§ćăŽç°ăŞăTHREE.Texture
使ç¨ă§ăăžăă
@titansoftimeçťĺăŻ
ăăăŻçăŤăăŞăŁăŚăăă texture.cloneďźďźăŻăă§ăŤăăŽăăăŤćŠč˝ăăžăăăăăă¨ăćĺă§č¨ĺŽăăĺż čŚăăăăžăăďź
texture.clone()
ăŻăăŽăăăŤćŠč˝ăăžăăă WebGLRenderer
ăŻçťĺăĺăă§ăăăă¨ăčŞčă§ăăŞăăăăăăŻăšăăŁăŽă˘ăăăăźăăŻä¸čŚă§ă...
ç§ăŻăăŽăšăŹăăăŤĺćăăžăăă mapMatrixăenvMapMatrixă...ăžăăŻmapTranslationămapRotationămapScaleă§ăăăŞă˘ăŤăćąćăăăšăă§ăŻăŞăă¨ćăăžăă THREE.TextureăŤĺšłčĄç§ťĺăĺ蝢ăăšăąăźăŤăăăăŚăăăăä¸ĺ¤Žăăăă¨ăăăăŻăŞăźăłăŤăŞăă¨ćăăžăă
ăăăŻĺşćŹçăŤç§ăăĄăäťăăŚăăăă¨ă§ăă ĺăăŻăšăăŁăŤăŻçŹčŞăŽoffset
ăăăăăŁăăăăĺă
ăŽăŞăăťăăăŻĺ°éăăăžăăăăŹăłăăŠăźăŻăăăăŞă˘ăŤăŽĺăăăăŤĺăăŞăăťăăă使ç¨ăăžăă
FWIWă httpsďź //github.com/mrdoob/three.js/issues/5876#issuecomment-69483293ă§č¨ăŁăăă¨ăĺŽčĄăăĺż čŚăăăă¨ćăăžăă
APIă@jcarpenterăăăăăăă¨ăĺŽčĄă§ăăŞăççąăalphaMap
ăŽăŞăăťăăăă˘ăăĄăźăˇă§ăłĺăăä¸ćšă§ă map
ăŻĺăăžăžă§ăďźă ăăŁăłăăšă§ăăăčĄăăă¨ăă§ăăžăăăăăăŻäťŁăăăŤGPUăŽăżăšăŻă ă¨ćăăžăă
ăăžăăžăŞăăăăŽăŞăăťăăă§éăśăă¨ă§ă§ăăăă¨ăŻăăăăăăăžă... alphaMap
ăŽăżăăŞăăťăăăăă normalMap
ăšăąăźăŞăłă°ăăăŞăŠ
ăăăŞă˘ăŤăă¨ăŤuvTransform
1ă¤ăăăŞăăă¨ăŻăé常ăŤĺśéăăăŚăăăăă§ăă
ăăăĄăăŁă¨ĺž ăŁăŚă ăŞăçăăăç´ ćăă¨ăŤĺĽ˝ăăŽăç解ă§ăăă¨ćăăžăă ăăŽăăăŤăăŚăăăŠă°ăĄăłăăˇă§ăźăăźă§ăăŻăťăŤăă¨ăŽUVăč¨çŽăă䝣ăăăŤăé çšăˇă§ăźăăźă§ĺä¸ăŽvUvăč¨çŽăăăžăă ĺłďź
ăŞăăťăăăŻĺŽéăŤăŻăăăŞă˘ăŤăŽăŚăăăŠăźă ă使ç¨ăăŚĺŽčŁ ăăăăăŻăšăăŁă¨ăŻé˘äżăăŞăăăăăăăŞă˘ăŤăă¨ăçćłçă§ăăăăăăŁăŚăä˝ćăăĺż čŚăŽăăăăăŞă˘ăŤăă¨ăŽăŚăăăŠăźă ăĺ¤ć´ăăĺż čŚăăăĺ ´ĺăŻăçĄćĺłăŞĺéżçăŤăŞăăžăă大éăŽć°ăăăŞăă¸ă§ăŻă/ăăŻăšăăŁďźJSă§ăŻăăŞăćŞă/ WebGLă§ăŻă˛ăŠăďźăŻăăŚăźăśăźăăé ăăăŚăăăăăŞă˘ăŤăŚăăăŠăźă ăŽĺăŞăćŠč˝ă§ăăä˝ăăĺśĺžĄăăăăă ăăŽăăŽă§ăă ăăŻăšăăŁăŽä¸é¨ăćĺŠăĺšççăăžăăŻăăăŤć確ăŤăăăă¨ăŻćąşăăŚăăăžăăăăăăŻăĺŽčĄćăŤĺ¤ĺăăUVăćĺŽăă1ă¤ăŽĺŽéăŽă˘ăăŞăąăźăˇă§ăłă§ăăă˘ăăĄăźăˇă§ăłăăAPIăŽăăăŤé ăéĺšççăŤăŹăłăăŞăłă°ăăăăă¨ăćĺłăăžăă
ăăŻăšăăŁăŻăçťĺăăăăłăăŽçťĺăŤé˘éŁăăăăšăŚăŽăăŽăćĺŽăăĺż čŚăăăăžăă UVăŞăăťăăăŻăçťĺ/çťĺăŽăăăăăŁă¨ăŻé˘äżăăŞăăăăŻăšăăŁă襨示ăăăăăŞă˘ăŤă¨é˘äżăăăăžăăăăăŞă˘ăŤăŽä¸é¨ă§ăŞăĺ ´ĺă§ăăăăŽćŠč˝ă使ç¨ăăăŽăŻćĺłăăăăžăăăă¤ăłăšăżăłăšăăăăłĺ¤ăăŽĺ ´ĺăĺŽéăŤćŠč˝ă使ç¨ăăăĺ ´ĺăŻăĺćăŤĺ¤ăăŽăăŻăšăăŁăć´ć°ăăžăă
ă˘ăăĄăźăˇă§ăłăżă¤ăŤăŽăăŹăźă ăă¨ăŤç°ăŞăçťĺăăăăăăŽăżă¤ăŤăŽăŞăăťăă/ăŞăăźăăĺśĺžĄăăăă¨ăăžăă 彟ăăŻăăšăŚăŽç俥ăăŹăźă ăăŞăăťăăă§ć´ć°ăăĺż čŚăăăăăăŽăżă¤ăŤă使ç¨ăăăăăŞă˘ăŤăŽä¸ćăŽă¤ăłăšăżăłăšăă¨ăŤăăšăŚăŽăăŹăźă ăŽăłăăźăćăŁăŚăăĺż čŚăăăăžăăĺŽéăŤăŻĺśĺžĄăăŚăăă ăăŽä˝ăăŽăăăŤăć°çžăŽć°ăăăŞăă¸ă§ăŻăă¨čż˝ĺ ăŽĺ˛ăĺ˝ăŚăŤăă°ăăéŞă ăăžĺźăŤăŞăăžăăćŁĺ˝ăŞççąăăŞăăăăăăăšăŚăŽăŞăă¸ă§ăŻăă使ç¨ăăŚăčĺ°čŁă§ăăăŞă˘ăŤăă¨ăŤăăă¤ăăŽăăăźăăăăăžăă
ăăăăă¨ăŽĺ¤ćăŤă¤ăăŚăŻăăăăŻčŻăăă¨ă§ăăăĺ¤ćăä¸ćăŤăăăăĺ ąćăăăăĺçăŤăăăăĺśĺžĄăăč¤éăŞAPIăăăĺ ´ĺăé¤ăăŚăăťă¨ăăŠăŽĺ ´ĺăĺä¸ăŞăłăšăăŻççąăăŞăéŤăăăžăăIMOăăŽĺśĺžĄăčĄăăă¨ăŻčŻăăă¨ă§ăăăć éăŤć¤č¨ăăĺż čŚăăăăžăă
ăăăĄăăŁă¨ĺž ăŁăŚă ăŞăçăăăç´ ćăă¨ăŤĺĽ˝ăăŽăç解ă§ăăă¨ćăăžăă ăăŽăăăŤăăŚăăăŠă°ăĄăłăăˇă§ăźăăźă§ăăŻăťăŤăă¨ăŽUVăč¨çŽăă䝣ăăăŤăé çšăˇă§ăźăăźă§ĺä¸ăŽvUvăč¨çŽăăăžăă ĺłďź
ăăăăUVăŻăă¤ăăŽăăăŤé çšăˇă§ăźăăźă§č¨çŽăăăžăă
ăšăăŠă¤ăăˇăźăă¨20ĺăŽăšăăŠă¤ăăćłĺăăŚăżăŚăă ăăă çžĺ¨ă httpďź//threejs.org/examples/misc_ubiquity_test2.htmlăŽăăăŤă20ĺăŽăŻăăźăłăăăŞă˘ăŤă¨20ĺăŽăŻăăźăłăăŻăšăăŁăĺż
čŚSpriteMaterial.rotation
ăăăăă¨ăŤćł¨ćăăŚăă ăăăďź
ăŞăăťăăăăăăŞă˘ăŤăŤç§ťĺăăă¨ă20ĺăŽăŻăăźăłăăăŞă˘ăŤă¨1ĺăŽăăŻăšăăŁăĺż čŚăŤăŞăăžăă
ĺŽéăăŞăăťăăăăšăăŠă¤ăăŤç§ťĺăăăŤăŻă1ă¤ăŽăăăŞă˘ăŤă¨1ă¤ăŽăăŻăšăăŁăĺż čŚăŤăŞăăžăă
ăšăăŠă¤ăăˇăźăă¨20ĺăŽăšăăŠă¤ăăćłĺăăŚăżăŚăă ăăă çžĺ¨ă20ĺăŽăŻăăźăłăăăŞă˘ăŤă¨20ĺăŽăŻăăźăłăăŻăšăăŁăĺż čŚă§ăă
ăăăç§ăŻăăŽăŚăźăšăąăźăšăčć ŽăăŚăăžăăă§ăăă ăăăă¨ăďź
ăăăŤă¤ăăŚčăăžă...
ç§ăŻăăŻăšăăŁăŽUVĺ¤ćă§ăŻăŞăăă¨ăćĺąăăŚăăžăă
2ă¤ăŽççąďźďź1ďźćˇˇäšąăăŚăăăďź2ďźäźćăăă¤ăăłăăĺ¤ăăďź2ďźçĄé§ă§ăăă
桡䚹ďźççąăŻăăĄă¤ăłăăăăŤUVĺ¤ć°ă1ă¤ăăăŞăăăă§ăăăăăŻăšăăŁăŽ1ă¤ăŤUVĺ¤ćăăăĺ ´ĺăăăŽUVĺ¤ćăćĺăŽUVă使ç¨ăăăăšăŚăŽăăăăŤéŠç¨ăăăĺŻč˝ć§ăăăăă¨ăŻćˇˇäšąăćăăžăăäťăŽăăŻăšăăŁăŤĺ¤ćăăăăăŠăăăŤé˘äżăŞăăăăŁăăŤă ĺăăăăăăăŞă˘ăŤăŤçŹčŞăŽUVĺ¤ćăćă¤ăă¨ă訹ĺŻăăĺ ´ĺăăăŻăšăăŁăŤé˘éŁäťăăăăUVĺ¤ćă§ăăĺéĄăăăžăăăăăăŠă°ăĄăłăăĺä¸ăŤä˝żç¨ăăăăăăăăăčĄăăŽăŻĺ°éŁă§ăă
ăăŽäťăŽă¤ăăłăäźćďźClara.ioă§ééăăăă1ă¤ăŽĺéĄăŻăăăŻăšăăŁăăŠăĄăźăżăă˘ăăĄăźăˇă§ăłĺăăăă¨ăăă¨ăăŽă¤ăăłăäźćă§ăă ĺăăŻăšăăŁă使ç¨ăăŚăăĺăăăŞă˘ăŤă追补ăăăăăăŽăăăŞă˘ăŤăŤćąăăŚăăăăĺč¨çŽăăĺż čŚăăăăă¨ăäźăăăăăŤăĺăăŻăšăăŁăĺż čŚă§ăă ăăăčĄăăă¨ăŻä¸ĺŻč˝ă§ăŻăăăžăăăăă ăăĺ¤ăăŽäťäşă
çĄé§ďźăă1ă¤ăŽĺéĄăŻă3Dă˘ăăŤăžăăŻăšăă¤ăăŽă¤ăłăšăżăłăšăč¤ć°ăăăăăăăăăšăŚĺăă˘ăăĄăźăˇă§ăłăăŻăšăăŁăćăŁăŚăăĺ ´ĺă§ăă ăăŽĺ ´ĺăăăŻăšăăŁăăźăżčŞä˝ăĺăă§ăăŁăŚăăç°ăŞăă˘ăăĄăźăˇă§ăłăä˝ćăăăăăŤăăĄă˘ăŞĺ ăŤăăŻăšăăŁăŽĺĺĽăŽăłăăźăç¨ćăăĺż čŚăăăăžăă ăăŽćĺłă§ăUVĺ¤ćăăźăżăăăăŞă˘ăŤăŤé 罎ăăăŽăŤćŻăšăŚĺ°ăçĄé§ă§ăă
ăăăăŁăŚăăăăŞă˘ăŤăă¨ăŤč¨ąĺŻăăăUVĺ¤ćă1ă¤ăăăŞăĺ ´ĺăŻăăăăăăăŞă˘ăŤčŞä˝ăŤé 罎ăăžăă Unity 5ă˘ăăŤăŤĺžăăUVăŞăăťăăăăăăŞă˘ăŤăŽĺ蝢ăăăăžăă ă˛ăźă éçşč ăŻăă§ăŤăăŽă˘ăăăźăăŤç˛žéăăŚăăžăă
ăšăăŠă¤ăăŻăăăăŞă˘ăŤăŽUVĺ¤ćăŤăăŁăŚăéŠĺăŤĺŚçăăăă¨ćăăžăăăăăŻăä¸č¨ăŽ3Dă˘ăăŤăŽĺ ´ĺă¨é常ăŤăăäźźăŚăăžăă
Having only one uvTransform per material seems very very limiting.
ăăă§ĺŽĺ ¨ăŤĺćăăžăă ăăŽćŠč˝ăăŞăăă¨ăŻé常ăŤĺśéăăăžăă ăăă§ćäžă§ăăç´ ć´ăăăĺšćăăăăžăăăăăšăŚăŽăŞăăťăăăä¸çˇăŤăăăŻăăăŚăăăăă§ăŻăăăžăăă
ăăăăăŻăăźăłăçŞćŻăăăăă¨ăŞăăăăŽćŠč˝ăăŠăŽăăăŤĺŠç¨ă§ăăăăăŤăăăă¨ăă§ăăžăăďź
ăăŻăšăăŁă§ăŻăŞăăăăŞă˘ăŤăŤĺ¤ăč¨ĺŽăăăă¨ăŻăăăšăŚăŽăăŻăšăăŁăä¸č´ăăä¸čŹçăŞăŚăźăšăąăźăšăŤă¨ăŁăŚćĺłăăăă¨ćăăžăă
ăăă§ĺŽĺ ¨ăŤĺćăăžăă ăăŽćŠč˝ăăŞăăă¨ăŻé常ăŤĺśéăăăžăă ăăă§ćäžă§ăăç´ ć´ăăăĺšćăăăăžăăăăăšăŚăŽăŞăăťăăăä¸çˇăŤăăăŻăăăŚăăăăă§ăŻăăăžăăă
ăăăăăŻăăźăłăçŞćŻăăăăă¨ăŞăăăăŽćŠč˝ăăŠăŽăăăŤĺŠç¨ă§ăăăăăŤăăăă¨ăă§ăăžăăďź
THREE.ShaderMaterial
ăžăăŻTHREE.RawShaderMaterial
ăŻăăŽćŠč˝ăćäžăăžăăçžĺ¨ăé常ăŽăăăŞă˘ăŤă§ăŻćŠč˝ăăŞăăăăăăŽăŤăźăă使ç¨ăăĺż
čŚăăăăžăă
ăăŁă¨ăăĄăłăăźăŞăă¨ăăăŚăăăŽăŞăăăăăăŽăŞăăźăă¨ăŞăăťăăăĺĺĽăŤčŞżć´ăăăăăăăĄăłăăźă ă¨ćăăŽă§ăă¨ăŤăăăăŽăăăŤĺžăă§ăăăă
+1ăăżăăŞă
塨大ăŞăšăăŠă¤ăăˇăźăďźĺĽĺă˘ăăŠăšďźăăăăăăŽăăŻăšăăŁăč¤ć°ăŽTHREE.Sprite
ă¤ăłăšăżăłăšă§ĺĺŠç¨ăăăĺ ´ĺăŤé常ăŤäžżĺŠă§ăă
ăăăŤé˘ăăăăĽăźăšăŻăăăžăăďź ăăŽĺéĄăŻăžă APIăŽăăŞăćç˝ăŞćŹ éĽă§ăă ăťă¨ăăŠăŽăăăăżă¤ăăŤăŻćŞä˝żç¨ăŽăŞăăťăă/ăŞăăźăăăăăă¤ăăłăăŽäźćăŤăăăĺšłé˘ä¸ăŽă˘ăăĄăźăˇă§ăłăšăăŠă¤ăăŽăăăŞăăŽăĺż čŚäťĽä¸ăŤé ăăŞăăăĄă˘ăŞăéăăŞăăžăă
ă˘ăăĄăźăˇă§ăłăăăăŽćčťć§ăŻăçžĺ¨ăŽăˇăšăă ăŤăŻĺĺ¨ăăžăăă č¨ĺŽăç´ ćăŤçľăłäťăăăă¨ă§ćčťć§ăä˝ä¸ăăăă¨ăăč°čŤăçśăăŚăăžăă ăăŽćčťć§ăŻçžĺ¨ăŽăˇăšăă ăŤăŻĺĺ¨ăăŞăăăăăăŽč°čŤăŻč°čŤăŽä˝ĺ°ăăăăžăă ăăăŞă˘ăŤăŽăŞăăťăă/ăŞăăźăăŻă°ăăźăăŤăŤăŽăżč¨ĺŽă§ăăćĄćŁăăăďźďźďźăăĺĺžăăăžăă ăăăŤăăă使ç¨ä¸ăŽăťă¨ăăŠăŽăăăăŤĺéˇăŞăăŞăăťăăă/ăăŞăăźăăč¨ĺŽăăăăă˘ăăĄăźăˇă§ăłăŽăăŻăšăăŁăĺ ąćă§ăăŞăĺ ´ĺăŻĺ¸¸ăŤăŻăăźăłăä˝ćăăĺż čŚăăăăăăćčťć§ăĺ¤§ĺš ăŤĺä¸ăăă¨ăăăăăŤćŞăĺéĄăçşçăăžăăĺć¸ă ĺăăŻăšăăŁ/ăăăăŤä¸ćăŽăŞăăťăăăăăăă¨ăćĺž ăăžăăăçžçśă§ăŻăăăŻä¸ĺŻč˝ă§ăăăťă¨ăăŠăŽĺ ´ĺăćłçˇ/ăšăăăŻă§ăŞăăťăăăĺăăăŽăŤč¨ĺŽăăăŽăŻé˘ĺăŞăŽă§ăĺŽéăŤăŻ1ăťăăăŽUVăŞăăťăăăĺż čŚă§ăă / diffuseďźĺşĺŽăăăćĄćŁăăăä¸ă§ćłçˇăăăăăšăŻăăźăŤăăăă¨ăŻăăˇă§ăźăăźăăăŞă˘ăŤă使ç¨ă§ăăăăăăŞç¨éă§ăďźă
ć§çŻăăăŚăăĺŽéăŽăˇă§ăźăăźăčŚăă¨ăăăŻăšăăŁăŞăăťăă/ăŞăăźăăŻăăăŞă˘ăŤăŤé˘éŁäťăăăăŚăăžăăă1ă¤ăŽăăăăăĺĽĺŚăŤăłăăźăăăŚăăăćąşăăŚĺśĺžĄăăăă¨ăŻă§ăăžăăă ććăŻăĺéˇć§ăŞăăŤéŤéă§ă¨ăŹăŹăłăă§ăăăăăŤăăăăĺśĺžĄăăĺż čŚăăăăžăă
严ćšăŽéˇćăŻăăăăăăŽčż˝ĺ ăŽăăŠă°ă§ĺŻč˝ă§ăăăăăăăŽç¨ŽéĄăŽçšĺŽăŽă¨ăă¸ăąăźăšăŽäťŁăăăŤăˇă§ăźăăźăăăŞă˘ăŤă使ç¨ăăăăăŤăŚăźăśăźăŤć示ăăăăăăăăăĺŞăăă˝ăŞăĽăźăˇă§ăłă ă¨ăŻćăăžăăă
ăăăŤĺŻžăă解湺çăŻă @ sunagăŽNodeMaterială¨ăăă§ă§ăă
ăžăăăăăŤç§ăŽ+1ăčż˝ĺ ăăžăďź ăšăăŠă¤ăăˇăźăă§ăŽä˝ćĽăăŻăăăŤčŻăăŞăăžăă
ďź+1ďźăăăŻéŠăăšăăă¨ă ă¨ćăăžăăă çš°ăčżăăăăăšăŚăŽăšăăŠă¤ăăäşăăŤă˘ăăĄăźăˇă§ăłĺăăăŚăăăăăă˛ăźă ĺ ăŽĺăšăăŠă¤ăăŽăăŻăšăăŁăŽč¤čŁ˝ăéĺ§ăăĺż čŚăăăăžăăă ăăŽăăăŤčăăăžăăăĺéˇăŞăšăăŠă¤ăăăźăżăGPUăŤăăźăăăŚăăžăăďź
ăăŽĺéĄăŽĺéżçăŻăăăžăăďź ăăŻăšăăŁă¤ăłăżăźăă§ă¤ăšăăă¤ăăšăăŚăăˇă§ăźăăźăŤăŚăăăŠăźă ăç´ćĽč¨ĺŽăăăă¨ă§ăUVăŞăăťăăăćä˝ăăăă¨ăŻĺŻč˝ă§ăăăăďź
ăăăŤĺŻžăă解湺çăŻă @ sunagăŽNodeMaterială¨ăăă§ă§ăă
@bhouston ăăŞăłăŻă@sunagăŽă˘ăŤăŚăłăăŽä¸ăŤĺ ŹéăŞăă¸ăăŞăŻăăăžăăă
@ rhys-vdwăăăŻdevăăŠăłăăŤăŽăżăăăžăďź
https://github.com/mrdoob/three.js/tree/dev/examples/js/nodes
ăăăŻć°ăăăăăăšăăŠă¤ăă§ä˝żç¨ăăćşĺăă§ăăŚăăăăŠăăăŻăăăăžăăăăĺŽĺ ¨ăŤă°ăŠăăăźăšăŽăˇă§ăźăăźăˇăšăă ă§ăăăăăăăŻăšăăŁă˘ăŻăťăšăäťťćăŤĺ¤ć´ă§ăăćčťć§ăĺžăăăžăă
ăăăŻć°ăăăăăăšăăŠă¤ăă§ä˝żç¨ăăćşĺăă§ăăŚăăăăŠăăăŻăăăăžăăăăĺŽĺ ¨ăŤă°ăŠăăăźăšăŽăˇă§ăźăăźăˇăšăă ă§ăăăăăăăŻăšăăŁă˘ăŻăťăšăäťťćăŤĺ¤ć´ă§ăăćčťć§ăĺžăăăžăă
@bhouston Nodeă使ç¨ăăŚäžăä˝ćă§ăăžăăăăăăŻčŻăăăă§ăă
THREE.SpriteMaterial
ăŤă¤ăăŚăŻăăŞăăťăă/ăšăąăźăŤăŤă˘ăŻăťăšăăŚspritesheet
ăä˝ćă§ăăžăăăă¨ăă°ă揥ăŽăăăŤăŞăăžăă
var offsetX = frameX / mapWidth;
var scaleX = mapWidth / frameWidth;
sprite.material.map.offset.x = offsetX;
sprite.material.map.repeat.x = scaleX;
https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/plugins/SpritePlugin.js#L53
ăăźăăăźăšăŽăˇăšăă ăŻäżŽćŁăăăŚăăžăă...ăăă§ăAPIăŽĺéĄăŤĺŻžĺŚăăŚăăžăăă ăăăŞă˘ăŤăăăăżă¤ăăŤăŞăăťăă/ăŞăăźăăčż˝ĺ ăăăŹăłăăŠăźăŤăăŻăšăăŁăŽäťŁăăăŤăăăčŞăżĺăăăăŤăŻ2ç§ăăăăžăă ç§ăŻčŞĺăŽăăă¸ă§ăŻăă§ăă§ăŤăăăčĄăŁăŚăăžăăăAPIăŤćăăăŞćŹ éĽăćŽăŁăŚăăăăăä¸čŹçăŞăă¨ăăăăă¨ăăĺ ´ĺăŤăăŽĺéĄăçşçăăć°ăăăŚăźăśăźăŽé çăŽç¨Žăé˛ăăăăŤăćŁĺźăŤĺ¤ć´ăăĺż čŚăăăăžăă
...ăăăăŁăŚăăăŻăšăăŁă˘ăŻăťăšăäťťćăŤĺ¤ć´ă§ăăćčťć§ăĺžăăăžăă
tbhăăăä˝ăćĺłăăăŽăăăăăžăăă ăăăŞă˘ăŤăă¨ăŤăăŞăăťăăăă¨ăăŞăăźăăăŽĺă ăŽăťăăăˇă§ăźăăźăŚăăăŠăźă ăă˘ăăĄăźăăăžăă
THREE.SpriteMaterialăŤă¤ăăŚăŻăăŞăăťăă/ăšăąăźăŤăŤă˘ăŻăťăšăăŚăăă¨ăă°ăăă使ç¨ăăŚăšăăŠă¤ăăˇăźăăä˝ćă§ăăžă...
@sunag ăăăăăĺéĄăŻć確ă§ăŻăăăžăăă ĺ ąćăăăłăźăăŻăăăŽăăăŞă˘ăŤăŽăăšăŚăŽă¤ăłăšăżăłăšă§ĺ ąćăăăăăŻăšăăŁăĺ¤ć´ăăžăă ă¤ăžăă2ă¤ăŽăăăŞă˘ăŤă§ăăŻăšăăŁăĺ ąćăăăă¨ăŻä¸ĺŻč˝ă§ăăăä¸ćăŽăŞăăťăăăăăăžăăăă¨ăă°ă2ă¤ăŽćľăŽăšăăŠă¤ăăç°ăŞăă˘ăăĄăźăˇă§ăłăăŹăźă ă襨示ăăžăă
ç§ăŻčŞĺăŽăăă¸ă§ăŻăă§ăă§ăŤăăăčĄăŁăŚăăžăăăAPIăŤćăăăŞćŹ éĽăćŽăŁăŚăăăăăä¸čŹçăŞăă¨ăăăăă¨ăăĺ ´ĺăŤăăŽĺéĄăçşçăăć°ăăăŚăźăśăźăŽé çăŽç¨Žăé˛ăăăăŤăćŁĺźăŤĺ¤ć´ăăĺż čŚăăăăžăă
@QuaziKbăăă¸ă§ăŻăăŽăżăźă˛ăăăŤă§ăăPRăŻăăăžăăďź
@WestLangleyăč¨ăŁăăăăŤă揥ăŽăă¨ăĺ˝ăŚăŻăžăĺ ´ĺăăăŽăăšăŚăĺéĄăŤăŞăăă¨ăŻăăăžăăă
çžĺ¨ăŽă˘ăăăźăăçśćăăĺ ´ĺăĺ¤ć´ăĺż čŚăŞăă¨ăŽ1ă¤ăŻăăăŻăšăăŁăŽăŻăăźăłăä˝ćăăă¨ăăŤăĺ ąćă¤ăĄăźă¸ăGPUăŤ1ĺă ă渥ăĺż čŚăăăăă¨ă§ăă
ăăăŻćŁăăă§ăăďź
@sunag ăăăăăĺéĄăŻć確ă§ăŻăăăžăăă ĺ ąćăăăłăźăăŻăăăŽăăăŞă˘ăŤăŽăăšăŚăŽă¤ăłăšăżăłăšă§ĺ ąćăăăăăŻăšăăŁăĺ¤ć´ăăžăă ă¤ăžăă2ă¤ăŽăăăŞă˘ăŤă§ăăŻăšăăŁăĺ ąćăăăă¨ăŻä¸ĺŻč˝ă§ăăăä¸ćăŽăŞăăťăăăăăăžăăăă¨ăă°ă2ă¤ăŽćľăŽăšăăŠă¤ăăç°ăŞăă˘ăăĄăźăˇă§ăłăăŹăźă ă襨示ăăžăă
ăăźăăăăŽNodeMaterial
確ăăŤč§ŁćąşăăăŽă§ăĺăăăŻăšăăŁăç°ăŞăăăăŞă˘ăŤă¨çŹçŤăăuvăŞăăťăăăăăăłăŤăšăżăă¤ăşăăăăăŁăŤăżăăăźăăăźăšăŽăăăŞă˘ăŤăćäžă§ăăăăŽäťăŽăăŽăŞăŠăŽĺŠçšă¨ĺ
ąćă§ăăžăă
https://github.com/mrdoob/three.js/issues/7522
ăăăăçžćçšă§ăŻă誰ăă揥ăŽăăăŤuuidăă¤ăłăšăżăłăšĺăăăă¨ăăžăăă
THREE.Texture.prototype.createInstance = function() {
var inst = this.clone();
inst.uuid = this.uuid;
inst.version = this.version;
return inst;
}
needsUpdate
ă使ç¨ăăĺ ´ĺăŻăăăšăŚăŽă¤ăłăšăżăłăšversion
ăć´ć°ăăžăă
äžďź
var uniqueTextureOffset = map.createInstance();
var material = new THREE.SpriteMaterial( { map: uniqueTextureOffset } );
ĺăuuid
ăçśćăăă¨ă version
ăŻGPUă§texture
ăĺ
ąćăăžăă
https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L2832
https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/WebGLProperties.js#L11
ç§ăŤă¨ăŁăŚăŻćŤĺŽçăŞč§Łćąşçă§ăăă ç§ăŻĺ°ćĽăŽăăăŤNodeMaterial
ă俥ăăŚăăžăă
UVĺ¤ćăăăăŞă˘ăŤăŤç§ťĺă§ăăžăăďź
严ćšăŽéˇćăŻăŠăă§ăăă ăăăŞă˘ăŤăŤăăŠă°overrideOffsetRepeat
ăčż˝ĺ ăăăăăŞă˘ăŤăŤć°ăăuvOffset
ă¨uvRepeat
ăčż˝ĺ ăăžăă ăăŽăăăŤăăăŠă°ăfalseăŽĺ ´ĺăä¸ä˝äşćć§ăăăăăăăăăăŠăŤăă§ăă ăăăŚăăăćŹĺ˝ăŞăăăăăŻććăŽăŞăăťăă/ăŞăăźăă使ç¨ăăžăă ăăźăşă埡ăăĺşçŻĺ˛ăŤĺăă§ăăăăăŤćăăăăŽă§ăç§ăŻăăăćŻćăăžăă @WestLangleyďź @mrdoobďź
ďźç§ăŻäťĺžăăšăŚăŤNodeMaterialăŽä˝żç¨ăćŹĺ˝ăŤăľăăźăăăžăăăăăăŤĺăćżăăăŽăŻé˘ĺă§ăăďź
ç§ăŻăžă ăăăŤĺŻžăă解湺çăŻTHREE.Image
ăä˝ćăăăă¨ă ă¨ćăăžăă https://github.com/mrdoob/three.js/issues/5876#issuecomment -81189892
THREE.Image
@mrdoob ăă¤ăžăăĺ˛ăĺ˝ăŚăăăĺTexture
ăMaterial
ă¨ä¸çˇăŤč¤čŁ˝ăăăă¨ăăăă¨ă§ăăďź
@mrdoobăŻć¸ăăďź
ç§ăŻăžă ăăăŤĺŻžăă解湺çăŻTHREE.Imageăä˝ćăăăă¨ă ă¨ćăăžă
ăŻăăăăăŻćŠč˝ăăžăăăä¸ä˝äşćć§ăŻĺ°ăä˝ăăŞăăžăăďźăăŻăšăăŁăä˝ćăăĺăŤĺ ¨ĺĄăŤçťĺăä˝ćăăĺż čŚăăăĺ ´ĺďźăĺ ¨ä˝çăŞăăśă¤ăłăŻăăăŻăŞăźăłăŤăŞăăžăă ĺĺĽăŤćĺŽăăŞăăŁăĺ ´ĺăăăŻăšăăŁăă¨ăŤçťĺăčŞĺçăŤä˝ćăăăă¨ăŻĺŻč˝ăăăăăžăăăăăăăă°ăä¸ä˝äşćć§ăĺŽçžăăžăăďź ăžăăăăŞăăăźăŞăă¨ăăăăĺ ´ĺăŤăŽăżăçťĺăç´ćĽćä˝ăăĺż čŚăăăăžăă
ăăŽă˝ăŞăĽăźăˇă§ăłă§ăŻăăšăăŠă¤ăăŽăťăăăŤ2ĺăŽć°ăăăŞăă¸ă§ăŻăăĺż čŚăŤăŞăă¨ćăăžăăăšăăŠă¤ăăă¨ăŤ1ă¤ăŽăăŻăšăăŁă1ă¤ăŽăăăŞă˘ăŤă§ăăă ăšăăŠă¤ăăă¨ăŤć°ăăăăăŞă˘ăŤăĺż čŚăŤăŞăäťăŽă˘ăăăźăăŻăŠăăŤăăăžăăďź
UnityăăăăŞă˘ăŤăă¨ăŽăŞăăźă/ăŞăăťăăăăľăăźăăăŚăăăă¨ăŻçĽăŁăŚăăžăăă3DS MaxăMayaăSoftimageăŞăŠăŽăă¤ă¨ăłăVFXăăźăŤăŻăľăăźăăăŚăăžăăăăăăăăăăăźăă¨ăăŻăšăăŁăăźăďźăăăăăăăăźăă¨UVăăăăłă°ăŽä¸ĄćšăĺŤăďźă ăăăăăžăă nodďźăăăăŻ@mrdoobăŽč¨č¨ăŤäźźăŚăăžăă
UE4ă@mrdoobăććĄăăŚăăăăŽă¨äźźăŚăăăăăăăăăăăźăăźă§ăăăăăŻăšăăŁăăăźăăăăăăăžăăžăŞăżă¤ăăŽUVăăăăłă°ăčĄăăăăŽä¸éŁăŽUVăăăăłă°ăăźăăăăăžăă
éŤĺşŚăŞăăźăŤăŻăăăŻăšăăŁăăă¤ăĄăźă¸/ăăăăăăăĺĺ˛ăă揥ăŽĺ˝˘ĺźă§ĺĺĽăŽUVăăăăłă°ăăźăăĺĺ˛ăăžăă
-> Bitmap
-> UVMapping
çžĺ¨ăăĄă¤ăłăŽStandardMaterială§ăŻĺ¤ăăŽUVMappingăŞăăˇă§ăłă訹ĺŻăăŚăăžăăă ăă ăăUE4ăMayaăSoftimageă3DS Maxă§ä˝żç¨ăăăăăžăăžăŞăżă¤ăăŽUVMappingăŻă使ç¨ăăăăŁăăŤăăăăŤéŠç¨ăăĺ¤ćăă˝ăźăšă¨ăăŚä¸ç座ć¨ă使ç¨ăăăăç形ăçŤćšä˝ăĺšłé˘ć役ăčĄăĺż čŚăăăăăŠăăă§ăăăăăăŽăăă¸ă§ăŻăˇă§ăłăŤĺż čŚăŞăăŠăĄăźăżăŤĺşăĽăăŚăăžăă
UE4ăŤăŻăăăăŞă˘ăŤĺ ă§ăŽçš°ăčżă/ăŞăăťăăăĺŻč˝ăŤăăăšăăŠă¤ăăăŻăšăăŁăăăăžăă
https://docs.unrealengine.com/latest/INT/Engine/Paper2D/Sprites/index.html
MayaăSoftimageă3DS MaxăăăăłUE4ăŻă @ mrdoobă示ĺăăŚăăăăăŤăăăăăăă/ă¤ăĄăźă¸ăăăŻăšăăŁďźăăăłUVçćďźăăĺé˘ăăŚăăžăăăăăăăŻăăšăŚăˇă§ăźăăźă°ăŠăă使ç¨ăăŚăăăĺŽçžăăŚăăžăă ăˇă§ăźăăźă°ăŠăăćăăŞăUnity3DăŻăăŞăăťăă/ăŞăăźăăăăăŞă˘ăŤčŞä˝ăŤçľăżčžźăăăźăŤă§ăăăăăăăăˇă§ăźăăźă°ăŠăăăźăăŤéŠĺăŤĺé˘ă§ăăŞăăăă§ăă
ĺĺĽăŤćĺŽăăŞăăŁăĺ ´ĺăăăŻăšăăŁăă¨ăŤçťĺăčŞĺçăŤä˝ćăăăă¨ăŻĺŻč˝ăăăăăžăăăăăăăă°ăä¸ä˝äşćć§ăĺŽçžăăžăăďź ăžăăăăŞăăăźăŞăă¨ăăăăĺ ´ĺăŤăŽăżăçťĺăç´ćĽćä˝ăăĺż čŚăăăăžăă
ăžăăŤđ
ăăăăĺ°ăăăăăŞčŠąă§ăăăă§ăăă ăćŠăPTEXăçľăżčžźăăă¨ăăĺ§ăăăžăă
http://ptex.us/PtexFile.html
ĺ
¸ĺçăŞăăă¸ă§ăŻăˇă§ăłăŞăŠăNodeTextureďźďźďźăŤăăŁăšă/ĺ¤ćăăćšćłăăăĺ ´ĺăăžăăŻć°ăăăă埡ĺă§ĺ
ćŹçăŞăăźăšăŹăăŤăăŻăšăăŁăăăăłă°ăˇăšăă ă§ăăăŞăăˇă§ăłăăăăžăăďź ...ăăăŞăăăăăŻĺăăŁăŚčć
Žăăšăăă¨ăăăăăžăăă
[ăăăŤĺăçšďź]
ptexăŽćŚĺżľăŻăĺŽéăŤăŻ2Dçťĺă§ăŻăŞăăUVé˘äżă§ăăăăă2Dă3DăŤĺ¤ćăăćšćłăŽćŚĺżľ/課éĄăŞăăŤăč¤éăŞčĄ¨é˘ăŽĺ¨ăăŤăă¤ăłă/ăšăżăłă/ć役ă§ăăžăăăăăŻăć°ĺŚçăŤăŻăćŻčźăăă¨ăăăăăăăŻă§ăďźĺ¸¸ăŤćčĄçăŤç ´ĺŁă¨ćŚăŁăŚăăžăďźă
20嚴䝼ä¸ĺăŻăptexăŽćšăçăŤăăŞăŁăŚăăăĺŞĺ
äşé
ă§ăăăćĄĺźľćŠč˝ă2çŞçŽăŽăŻăŠăšăŽăăăŠăźăăźă¨čŚăŞăăăăšăă§ăŻăŞăăă¨ăććăăžăăăăĺŽéăŤăŻăăŽéă§ăă ăăăŻă2DçťĺăptexăŽ1ă¤ăŽçăŽĺ¸¸ăŤćŠč˝ăăĺşćŹăŹăăŤăˇăšăă ăŤăŠăŽăăăŤć役/ăšăżăłăăăăăă厣č¨çăŤč¨ăĺ¤ăçŹčŞăŽćšćłă§ăăĺż
čŚăăăăžăă ă¨ăŤăăăăăä¸ĺżçăŞĺ˝šĺ˛ăć
ăăŽăćĺă§ăŻăŞăăŤăăŚăăăăăçľąĺăăĺż
čŚăăăă¨ăăčăă埡ĺśăăă ăă§ăă
éŤĺ°ăŞććĄăăăćŠäźăăăăă¨ăă ptexăäťć§ăŤĺăăăŚä˝ăăăăŽăŻă¨ăŚăĺŹăăăŁăă§ăă 10嚴䝼ä¸ĺăŤčŞĺă§čăăžăăăăĺäžăŽé ăŻć°ăăăšăăăŻăŞăŠăĺŽçžŠăăĺăăăăžăăă§ăăăĺžăăčăăă¨ăäťă§ăçśćăăŚăăăŞăăśăźăăźăŽĺ˝šĺ˛ă§ăŻăŞăăéăăçăăă¨ăă§ăăăŽă§ăŻăŞăăă¨ćăăžăăă ă ăăăăăŤéˇĺš´ăŽééăăĺ
ăŤćťă芌ăżăăăăžăă
Fluxă§ć˝ĺ¨çăŤçžĺ¨ăŽăĄă˝ăăăăă桹ăç解ăăŚăăäşşăăTHREEjsă§ăŠăŽăăăŤćŠč˝ăăăăŤă¤ăăŚăăéŠĺăŞććĄăčĄăăă¨ăă§ăăă°ă誰ăăć°ăăăšăŹăăăéĺ§ă§ăăăăăăăžăăă
ăăä¸ĺşŚčăćŠäźăăăăă¨ăă
@MasterJamesăŽăăăŞăŞăăăăăŻ...ć°ăăăšăŹăăăä˝ćăăŚăă ăăďź
ăăăŻăšăăŁăă使ç¨ă§ăăăăăŤçťĺăä˝ćăăă¨ăăŚăăĺŽéăŤăŻč¤ć°ăŽuvăŞăăťăă/ăŞăăźăăăľăăźăăăŚăăŞăăăăăăšăŚăŽăăăŞă˘ăŤăć¸ăç´ăĺż čŚăăăăžăă ćăăăŤăăăŻĺ¤ăăĺŻč˝ć§ăăăăžăăăĺéˇăŞăŚăăăŠăźă ăĺż čŚăŤăŞăăăăăăăăč¤éăăĺ˘ăăă¨ăŤăŞăăžăďźăă¨ăă°ăćłçˇăăăăăăŁăăĽăźăşăăăŞăăťăăăăăăăăŤăč¤ć°ăŽăŞăăťăă/ăŞăăźăăŽăťăăăĺż čŚăŤăŞăé ťĺşŚďźăăăŠăźăăłăšăăăŹăă˘ă ă§ăăWebăŽĺ ´ĺăćăä¸čŹçăŞä˝żç¨äžăŻăăăšăŚăŽăăăăŤĺ˝ąéżăăă°ăăźăăŤăŞăăťăă/ăŞăăźăă1ă¤ăăĺ ´ĺă§ăăăăăŻăćçľçăŤăăăŞă˘ăŤă˘ăźăăăŻăăŁăŽä¸é¨ăŤăŞăăăăăăăŞă˘ăŤä¸ăŤăăăă¨ăŻçăŤăăŞăŁăŚăăžăă ăŤăšăżă ăˇă§ăźăăźăăăŞă˘ăŤăŻăă¨ăă¸ăąăźăšăĺéĄăŞăĺŚçă§ăăžăă
@QuaziKbăăă ăăăNodeMaterial
ĺăçľăăă¨ă§ăă
Texture
ăĺ.clone()
ăŤĺăOpenGLăăŻăšăăŁă¤ăłăšăżăłăšă使ç¨ăăŚăăăŽă§ăŻăŞăă§ăăăăăăăă¨ăä˝ăăčśłăăŞăăŽă§ăăăăă ĺŽéăŤăŻăăźăłăă¨ăŤĺă˘ăăăăźăăăŚăăžăăďź ăăŽĺ ´ĺăăăăŻ_é常ăŤ_桹ĺťăŞĺéĄă§ăă
@evrimoztamur ăćŻĺăăŻăšăăŁăăłăăźăăă¨ćăăžăă WebGLInspectoră使ç¨ăăŚä˝ă辡ăăŁăŚăăăă確čŞă§ăăžăă
@sunagăŽĺéżçăĺŤăăčăăăăăăšăŚăŽă˘ăăăźăă芌ăăžăăăăä˝ăćŠč˝ăăžăăă§ăăă çľćăĺžăăăŞăăŁăç§ăŽĺŽé¨ă¨ä¸č¨ăŽč°čŤăŤĺşăĽăăŚăäťăŽăŠă¤ăăŠăŞăăšăăŠă¤ăă˘ăăĄăźăˇă§ăłăăŠăŽăăăŤĺŚçăăăă調ăšăžăăă Babylon.jsăŽSpriteăăăłSpriteManagerAPIăŻăç§ăŽçšĺŽăŽăăźăşăŤĺżăăă˝ăŞăĽăźăˇă§ăłă§ăăăă¨ăăăăăžăăă ăšăăŠă¤ăăˇăźăăăŞăăťăăă¨ăŞăăźăăăăăłă˘ăăĄăźăˇă§ăłăĺŚçăăžăă ăăśăăăăăŻTHREE.jsăćäžăăăă¨ăçŽçă¨ăăăăăéŤăăŹăăŤăŽć˝čąĄĺă§ăăăĺç §ă¨ăăŚä¸čŚăŽäžĄĺ¤ăăăăăăăăžăăă
@ rhys-vdwďźçžĺ¨ăŽăăă¸ă§ăŻăă§ăŻăMeshBasicMaterialăŽăăă§ăŞăăăźă¸ă§ăłăŤăŞăăžăăă
https://gist.github.com/karimbeyrouti/790d2e1a8c0137b16bae
ăăăăč¨ĺŽăăă¨ăăŞăăťăă/ăŞăăźăăŚăăăŠăźă ďźé ăăăăăŞă˘ăŤăŤăăďźăčŞĺçăŤĺ˛ăĺ˝ăŚăăăžăă ăăăăĺĺĽăŤç°ĄĺăŤč¨ĺŽă§ăăžăăăăăŤăăăäťăŽă¨ăăăăŻăšăăŁăŽăŻăăźăłăä˝ćăăĺż čŚăăŞăăŞăăžăă ďźr73ă§ăŽä˝ćĽďź
ăăŽĺéĄăŤĺŻžĺŚăăĺż čŚăŽăăPRăPRďź8278ăćĺşăăžăă
@WestLangleyăŻć¸ăăďź
揥ăŽăăăăĺăăŞăăťăă/ăŞăăźăĺ¤ăćăŁăŚăăă¨äťŽĺŽăăăŽăŻĺççă ă¨ćăăžăă
ĺ°ĺł
specularMap
normalMap
ăăłăăăă
alphaMap
aoMapďźĺ°ćĽďź
ĺ 沢ăăăďźĺ°ćĽďź
ĺ¤ä˝ăăăďźĺ°ćĽďź
常ăŤă§ăŻăŞăă ç§ăŻçžĺ¨ăĺăăăăŞă˘ăŤďźă˘ăšăăĄăŤăďźä¸ăŽăăăă¨ăăłăăăăăŤç°ăŞăçš°ăčżăĺ¤ă使ç¨ăăŚă严ćšăăăŞăĺ°ăăăżă¤ăŤă§ăżă¤ăŤăăăŚăăă¨ăăäşĺŽăé ăăŚăăžăă ăăăăă°ă大ăăŞăăŻăšăăŁăçć/ćă¤ĺż čŚăăăăžăăă ă¨ăŚăäžżĺŠă§ăă :-)
硨éďźăžăăăăăŻĺ°ăŞăă¨ăç§ăăăŁăă¨ćăŁăăă¨ă§ăă ăăŞăăŻăŻăăăăçĄčŚăăăžăăă ăăăŚăăˇă§ăźăăźăŞăŠăŤăă¤ăşăčż˝ĺ ăăăă¨ă§ăĺć§ăŽçľćăĺžăăă¨ăă§ăăžăă WestLangleyăŽMatrix3ăă˘ăŻăăŁăăăă§ăă
ăăăŤăăăăšăăŠă¤ăăŽUVăç°ăŞăă¤ăłăšăżăłăšăŽĺéĄă解湺ăăăă¨ćăăžăă ĺăăăŻăšăăŁăçśćăăŞăăă vertex
ă¨pixel shader
ăĺ¤ć´ăăăă¨ăă§ăăžăă
https://threejs.org/examples/#webgl_sprites_nodes
SpriteNodeMaterial
ă¨Mesh
ăĺ
ąćPlaneBufferGeometry
ăžăă ă¤ăłăżăźăă§ă¤ăšăŻSprite
ăŻéŠăăŚăăžăăăăćŠč˝ăăžăă ăăśăăăăŻSpriteMesh
ăŤé˛ĺăăŚăă¤ăłăżăźăă§ăźăšăăă茪ăăżăăăăăăă¨ăă§ăăžă
ăăŽăšăŹăăăŻç§ăŤă¨ăŁăŚTL; DRă§ăă ăăăăç§ăŻăĄăăăŠäťăr68ă§ăăŽăłăźăăçşčŚăăžăăďźĺ¤ăăăă¸ă§ăŻăăăăďźďź
// uv repeat and offset setting priorities
// 1. color map
// 2. specular map
// 3. normal map
// 4. bump map
// 5. alpha map
var uvScaleMap;
if ( material.map ) {
uvScaleMap = material.map;
} else if ( material.specularMap ) {
uvScaleMap = material.specularMap;
} else if ( material.normalMap ) {
uvScaleMap = material.normalMap;
} else if ( material.bumpMap ) {
uvScaleMap = material.bumpMap;
} else if ( material.alphaMap ) {
uvScaleMap = material.alphaMap;
}
if ( uvScaleMap !== undefined ) {
var offset = uvScaleMap.offset;
var repeat = uvScaleMap.repeat;
uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );
}
ă ăăăăă...
ăăă§ććĄăăăăăŞć šćŹçăŞĺ¤ć´ăăŠă¤ăăŠăŞăŤććĄăăĺ ´ĺăŻăăăŽĺ¤ć´ăŤă¤ăăŚć確ă§čŞŹĺžĺăŽăăč°čŤăćäžăăĺż čŚăăăăžăă
ćĄćŁĺĺ°ĺ ăăăă¨ćłçˇăăăă§ç°ăŞăăŞăăźăăč¨ĺŽăăăă¨ăăŚăăŚăćŠč˝ăăŞăăŁăăăăŤéŤŞăćăăŚăżăžăăă APIăŻăăŽč¨ĺŽăăăŻăšăăŁăŤé 罎ăăăŽă§ăç§ăŻăăăă§ăăă¨ćăăžăăă ăăă§ăă誏ĺžĺăŽăăč°čŤăŽăăăŤç§ăŽéŤŞăäżĺăăăŽăŻăŠăă§ăăďź ăăŽăăąăăăŻăžă éăăŚăăă3jsăŻăžă ăăŻăšăăŁăŤăăŽč¨ĺŽăćăŁăŚăăăăăŻăšăăŁăŽ1ă¤ăŤĺŻžăăŚăŽăżĺ°éăăăžă=ăăăŻäşĺŽä¸ăăă§ăŤăăăŞă˘ăŤăă¨ăŽč¨ĺŽă§ăă
ăăăćĺąăăĺ ´ćăŤç§ťĺăăŞăĺ ´ĺăŻăĺ°ăŞăă¨ăăăăĽăĄăłăă§ăŻĺšćăăŞăă¨č¨ăăžăăďź
@sunag PRăŽĺ ´ĺďź
https://github.com/mrdoob/three.js/pull/11531
ç§ăééăă1ă¤ăŽĺéĄďź
https://jsfiddle.net/f0j2v3s8/
SpriteNodeMaterial
éć庌ă夹ăăăŚăăăăă§ăăăăŽäžăćŠč˝ăăăăăăŤä˝żç¨ă§ăăăăăŹăłăăŽçľăżĺăăăŻăăăžăăă
ä˝ăćĄăŻďź
@karimbeyroutiăŻć¸ăăďź
ăăăăč¨ĺŽăăă¨ăăŞăăťăă/ăŞăăźăăŚăăăŠăźă ďźé ăăăăăŞă˘ăŤăŤăăďźăčŞĺçăŤĺ˛ăĺ˝ăŚăăăžăă ăăăăĺĺĽăŤç°ĄĺăŤč¨ĺŽă§ăăžăăăăăŤăăăäťăŽă¨ăăăăŻăšăăŁăŽăŻăăźăłăä˝ćăăĺż čŚăăŞăăŞăăžăă ďźr73ă§ăŽä˝ćĽďź
uniforms.offsetRepeat
ăuniforms.uvTransform
ďźr88ďźăŤĺ¤ć´ăăăăăăăăăŻĺťć˘ăăăă¨ćăăžăă
ăč¤ć°ăŽObject3Dă¤ăłăšăżăłăšă§ăăŻăšăăŁă˘ăăŠăšăĺĺŠç¨ăăăăŚăźăšăąăźăšăŤé˘ăăŚăŻăç°ĄĺăŞăŚăŠăźăŻă˘ăŠăŚăłăăăĺ§ăăăžăă
onBeforeRender\onAfterRender
é˘ć°ăă˘ăăăăŻăăžăăçľćăŻćŹĄăŽăăăŤăŞăăžăă
ćăĺčăŤăŞăăłăĄăłă
ăăŽăšăŹăăăŻç§ăŤă¨ăŁăŚTL; DRă§ăă ăăăăç§ăŻăĄăăăŠäťăr68ă§ăăŽăłăźăăçşčŚăăžăăďźĺ¤ăăăă¸ă§ăŻăăăăďźďź
ă ăăăăă...
ćĄćŁĺĺ°ĺ ăăăă¨ćłçˇăăăă§ç°ăŞăăŞăăźăăč¨ĺŽăăăă¨ăăŚăăŚăćŠč˝ăăŞăăŁăăăăŤéŤŞăćăăŚăżăžăăă APIăŻăăŽč¨ĺŽăăăŻăšăăŁăŤé 罎ăăăŽă§ăç§ăŻăăăă§ăăă¨ćăăžăăă ăăă§ăă誏ĺžĺăŽăăč°čŤăŽăăăŤç§ăŽéŤŞăäżĺăăăŽăŻăŠăă§ăăďź ăăŽăăąăăăŻăžă éăăŚăăă3jsăŻăžă ăăŻăšăăŁăŤăăŽč¨ĺŽăćăŁăŚăăăăăŻăšăăŁăŽ1ă¤ăŤĺŻžăăŚăŽăżĺ°éăăăžă=ăăăŻäşĺŽä¸ăăă§ăŤăăăŞă˘ăŤăă¨ăŽč¨ĺŽă§ăă
ăăăćĺąăăĺ ´ćăŤç§ťĺăăŞăĺ ´ĺăŻăĺ°ăŞăă¨ăăăăĽăĄăłăă§ăŻĺšćăăŞăă¨č¨ăăžăăďź