{"action":"created","issue":{"url":"https://api.github.com/repos/mrdoob/three.js/issues/8165","repository_url":"https://api.github.com/repos/mrdoob/three.js","labels_url":"https://api.github.com/repos/mrdoob/three.js/issues/8165/labels{/name}","comments_url":"https://api.github.com/repos/mrdoob/three.js/issues/8165/comments","events_url":"https://api.github.com/repos/mrdoob/three.js/issues/8165/events","html_url":"https://github.com/mrdoob/three.js/pull/8165","id":134702458,"number":8165,"title":"Add a BufferGeometry based Subdivision Modifier","user":{"login":"centerionware","id":76805,"avatar_url":"https://avatars.githubusercontent.com/u/76805?v=3","gravatar_id":"","url":"https://api.github.com/users/centerionware","html_url":"https://github.com/centerionware","followers_url":"https://api.github.com/users/centerionware/followers","following_url":"https://api.github.com/users/centerionware/following{/other_user}","gists_url":"https://api.github.com/users/centerionware/gists{/gist_id}","starred_url":"https://api.github.com/users/centerionware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/centerionware/subscriptions","organizations_url":"https://api.github.com/users/centerionware/orgs","repos_url":"https://api.github.com/users/centerionware/repos","events_url":"https://api.github.com/users/centerionware/events{/privacy}","received_events_url":"https://api.github.com/users/centerionware/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":19,"created_at":"2016-02-18T21:31:14Z","updated_at":"2016-04-19T00:44:52Z","closed_at":"2016-04-18T21:27:34Z","pull_request":{"url":"https://api.github.com/repos/mrdoob/three.js/pulls/8165","html_url":"https://github.com/mrdoob/three.js/pull/8165","diff_url":"https://github.com/mrdoob/three.js/pull/8165.diff","patch_url":"https://github.com/mrdoob/three.js/pull/8165.patch"},"body":"This started from the original subdivision modifier, and works in the\r\nsame way except it has different output - and is much MUCH faster and\r\nfar easier on RAM. (From >1m and >3gb (queue crashing browsers) to <10\r\nseconds and <500mb on my tests).\r\n\r\nExpected input: Index'd Buffer Geometry or THREE.Geometry - with uv's.\r\nOutput: Unindex'd Buffer Geometry.\r\n\r\nAlso introduced is a class I call the 'TypedArrayHelper' which provides\r\nTHREE objects (Such as Face, Vec3, Vec2) as 'registers' (I was thinking\r\nlike a CPU register), and controls the typed arrays underneath. It\r\nautomatically resizes them and provides a trim() function. While\r\nresizing arrays is slow, it's still all way faster than millions of vec3\r\nobjects on a regular Geometry."},"comment":{"url":"https://api.github.com/repos/mrdoob/three.js/issues/comments/211657170","html_url":"https://github.com/mrdoob/three.js/pull/8165#issuecomment-211657170","issue_url":"https://api.github.com/repos/mrdoob/three.js/issues/8165","id":211657170,"user":{"login":"centerionware","id":76805,"avatar_url":"https://avatars.githubusercontent.com/u/76805?v=3","gravatar_id":"","url":"https://api.github.com/users/centerionware","html_url":"https://github.com/centerionware","followers_url":"https://api.github.com/users/centerionware/followers","following_url":"https://api.github.com/users/centerionware/following{/other_user}","gists_url":"https://api.github.com/users/centerionware/gists{/gist_id}","starred_url":"https://api.github.com/users/centerionware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/centerionware/subscriptions","organizations_url":"https://api.github.com/users/centerionware/orgs","repos_url":"https://api.github.com/users/centerionware/repos","events_url":"https://api.github.com/users/centerionware/events{/privacy}","received_events_url":"https://api.github.com/users/centerionware/received_events","type":"User","site_admin":false},"created_at":"2016-04-19T00:44:52Z","updated_at":"2016-04-19T00:44:52Z","body":"Yeah, the more I think about it, the more I realize even with indexed the regular way of doing it would be to still duplicate the vertex if the uv's aren't the same. This was bad thinking on my part, but allowed me to reduce the # of vertices I needed to store in memory in my own project that I created it for initially when 100% of the uv's were never the same (Thus eliminating the memory benefit of using indexed in the first place). I'll go ahead and add a boolean that can be set to use \"face uv's\" or proper vertex uv's sometime tomorrow that will default to use vertex uv's."}}