johnnycash Posted March 13, 2019 Share Posted March 13, 2019 I want to generate multiple textures from one base texture. The multiple textures would have different color of a specific attribute (skin, shirt, pants, hair..). I looked at one example (https://www.goodboydigital.com/pixijs/bunnymark/), but the bunnies it uses are extracted from the image and not dynamically generated with Pixi... So, how do I generate multiple textures with different color specific attributes with Pixi? Example code would be greatly appreciated. Quote Link to comment Share on other sites More sharing options...
ivan.popelyshev Posted March 13, 2019 Share Posted March 13, 2019 renderTexture + color swap filters. Look for renderTexture demos. Look for special filters in pixi-filters. Combine it, maybe make an atlas with different Texture's regions inside. If everything goes wrong i'll help you to fix your demo, but first try it on your own. johnnycash 1 Quote Link to comment Share on other sites More sharing options...
johnnycash Posted March 14, 2019 Author Share Posted March 14, 2019 I've made some progress: https://jsfiddle.net/5zxgctnm/5/ I used MultiColorReplaceFilter and added it to container.filters. However, I haven't found a way to apply a filter to a RenderTexture. Quote Link to comment Share on other sites More sharing options...
johnnycash Posted March 16, 2019 Author Share Posted March 16, 2019 Success! I've written a function for my use case. function multiColorReplaceSpriteCopy(renderer, sprite, replacements, epsilon) { let container = new PIXI.Container(); let filter = new PIXI.filters.MultiColorReplaceFilter(replacements, epsilon); container.addChild(sprite); container.filters = [filter]; let brt = new PIXI.BaseRenderTexture(sprite.width, sprite.height, PIXI.SCALE_MODES.LINEAR, 1); let rt = new PIXI.RenderTexture(brt); var sprite_copy = new PIXI.Sprite(rt); renderer.render(container, rt); return sprite_copy; } And here's the final result: https://jsfiddle.net/msovjknx/7/ @ivan.popelyshev would appreciate Your input ? ivan.popelyshev 1 Quote Link to comment Share on other sites More sharing options...
ivan.popelyshev Posted March 16, 2019 Share Posted March 16, 2019 Good, it works! Also, there's shortcut "PIXI.RenderTexture.create" that can combine two lines into one. johnnycash 1 Quote Link to comment Share on other sites More sharing options...
johnnycash Posted March 16, 2019 Author Share Posted March 16, 2019 Optimized function (removed new before PIXI.RenderTexture.create) : function multiColorReplaceSpriteCopy(renderer, sprite, replacements, epsilon) { let container = new PIXI.Container(); let filter = new PIXI.filters.MultiColorReplaceFilter(replacements, epsilon); container.addChild(sprite); container.filters = [filter]; let rt = PIXI.RenderTexture.create(sprite.width, sprite.height, PIXI.SCALE_MODES.LINEAR, 1); var sprite_copy = new PIXI.Sprite(rt); renderer.render(container, rt); return sprite_copy; } Quote Link to comment Share on other sites More sharing options...
ivan.popelyshev Posted March 16, 2019 Share Posted March 16, 2019 no need for "new" there, "create" is not a constructor Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.