{"action":"created","issue":{"url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/8","repository_url":"https://api.github.com/repos/greggman/threejsfundamentals","labels_url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/8/labels{/name}","comments_url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/8/comments","events_url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/8/events","html_url":"https://github.com/greggman/threejsfundamentals/issues/8","id":352784224,"node_id":"MDU6SXNzdWUzNTI3ODQyMjQ=","number":8,"title":"Suggestions, Thoughts, Feedback","user":{"login":"greggman","id":234804,"node_id":"MDQ6VXNlcjIzNDgwNA==","avatar_url":"https://avatars2.githubusercontent.com/u/234804?v=4","gravatar_id":"","url":"https://api.github.com/users/greggman","html_url":"https://github.com/greggman","followers_url":"https://api.github.com/users/greggman/followers","following_url":"https://api.github.com/users/greggman/following{/other_user}","gists_url":"https://api.github.com/users/greggman/gists{/gist_id}","starred_url":"https://api.github.com/users/greggman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greggman/subscriptions","organizations_url":"https://api.github.com/users/greggman/orgs","repos_url":"https://api.github.com/users/greggman/repos","events_url":"https://api.github.com/users/greggman/events{/privacy}","received_events_url":"https://api.github.com/users/greggman/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2018-08-22T02:58:08Z","updated_at":"2018-08-23T01:11:35Z","closed_at":null,"author_association":"OWNER","body":"I'm working on this series of articles for three.js and if you have time I'd love to get your feedback\r\n\r\nSorry this is a long post.\r\n\r\nI have a tentative list of articles but I'm as I've been writing the first few it's started to feel a little off. \r\n\r\nFor example I'm in the middle of writing about textures. I feel like I'm explaining it in terms of WebGL (things like power-of-2 textures, filtering, texture repeating/offset/rotation, etc) but I'm not sure the person reading these articles would really care about that kind of stuff. Rather they just want to get stuff on the screen and mostly don't need to be bogged down with dealing with those details.  I get at some point it might be important to know it's better to use a power of 2 texture rather than have three.js resize it for you but still.... \r\n\r\nSimilarly I don't think I've ever used a texture matrix and the features it provides in production ever in my entire history of making 3D apps and games. Being able to set a repeat is useful or walls/terrain but it's probably better set by changing the UV coordinates of some geometry and not by applying a texture matrix. In other words was explaining `texture.repeat`, `texture.offset`, `texture.rotation`, and `texture.center` is/was a complete waste of time? Most users will never use these features? Hmm, a quick grep of the examples shows lots of usage and I guess it matches some 3d apps so maybe it wasn't a waste of time.\r\n\r\nIn any case textures in particular has been an overly large article. I was going to split it into 2. The first one deals with \r\n\r\n* loading a texture\r\n* loading multiple textures on a cube\r\n* waiting for a texture to load\r\n* waiting for multiple textures to load\r\n* Memory usage (that it's resolution of image, not file size that matters)\r\n* what mips are (seems not important)\r\n* filtering (seems mostly not important except sometimes might want 'nearest' for retro look)\r\n* offset/repeat/rotation (useful for a terrain but mostly not important for most users)\r\n\r\nAnd the second was going to deal with all the maps. (alpha, ao, normal, bump, env, specular, roughness, etc) but I think that's still the wrong approach\r\n\r\nI started with primitives and [the article](https://threejsfundamentals.org/threejs/lessons/threejs-primitives.html) to me feels almost like just a repeat of the docs. Now maybe that's still important as lots of people seem to never read docs but still... could I do something better? It was also not clear how many options to cover given there are so many primitives. That article ends up just being a demo and links to docs.\r\n\r\nSimilarly [the material article](http://localhost:8080/threejs/lessons/threejs-materials.html) doesn't feel all that useful to me and it's not even remotely covering all the topics that are part of `THREE.Material` like alpha maps and transparency, ambient occlusion, environment maps, light maps, specular maps, bumpmaps, normalmaps, metralness maps, roughness maps. Those weren't on the material article partly because they needed the texture article to explain textures before you can apply maps but thinking about it many of those need their own articles.\r\n\r\nActually originally I had a \"light and materials\" article and a \"textures\" article listed but it turns out those probably need to be split into\r\n\r\n* material basics?\r\n* lights\r\n* shadows\r\n* texture basics\r\n* environment maps\r\n* normal maps\r\n* transparency (covering issues like alpha maps, alpha threshhold, sorting, etc)\r\n* PBR (and maps related to PBR)\r\n* ???\r\n\r\nAway, here's a list of the rest of the planned articles. Any comments or feedback are greatly welcome. Maybe ideas of the most asked questions for example.\r\n\r\n* Camera\r\n\r\n  cover fov, aspect, near, far, targeting, and Orbit? zfighting?\r\n\r\n* Render Targets\r\n\r\n  What a render target is. Render scene into texture, use on primitive\r\n\r\n* Post Processing\r\n\r\n  What post processing is. Then how to use it. It’s not clear how many articles this should be. If it’s just “here’s how to use the post processing system and 3-4 examples of bloom, dof, scanline, etc”.\r\n\r\n* Custom Geometry\r\n\r\n  How to make custom geometry, provide your own positions, texcoords, etc... This is probably the place to explain texture coordinates\r\n\r\n* Dynamic Geometry\r\n\r\n  How to update geometry every frame.\r\n\r\n* Dynamic Textures\r\n\r\n  How to update textures (video)\r\n\r\n* Canvas Textures\r\n\r\n  How to provide texture from canvas.\r\n\r\n* Billboards\r\n\r\n  This is just `THREE.Sprite`? Is there a solution in THREE for billboards like a tree/grass/bush facade? `THREE.Sprite` won't handle that case. A tree/bush/grass rotates around its up vector to point toward the camera.\r\n\r\n* Particles\r\n\r\n  Three.js standard particles. Examples: explosions, smoke trails, fireworks. I guess I thought three.js had a particle system but it looks like I was wrong. I can at least go over points here\r\n\r\n* loading models: obj\r\n\r\n  Load an obj, apply materials and textures\r\n\r\n* Loading models: glTF\r\n\r\n  Load a gtTF model, including the hierarchy, apply materials, texture etc. \r\n\r\n* Exporting from Blender \r\n\r\n* Exporting from Unity?\r\n\r\n  I’ve seen some people use Unity to generate glTF scenes. Useful because it’s free\r\n\r\n* Simple physics and collisions\r\n\r\n  Make a few physics demos like throwing a ball at a tower of bricks. Not 100% sure if there “official” three physics library is. Looks like it's ammo.js?\r\n\r\n* Loading skinned models\r\n\r\n  Show how to load a skinned model. Not even sure if this requires a separate article\r\n\r\n* Using animations\r\n\r\n  This feels like it could be huge or small. Ideally it would make 2-3 animations in blender or unity and export then load them up in three.js and play them back and/or blend them. Would also show both skinned and morph targets. That feels like a huge topic and very tool specific.\r\n\r\n* Picking\r\n\r\n  How to use three’s picking\r\n\r\n* Camera movement: fps\r\n\r\n  Show how to implement FPS style camera\r\n\r\n* Camera movement: 3d editor style\r\n\r\n  How to move a camera using Maya/Unity style controls. Pan/Zoom/Dolly/Frame Selection, etc.... This sounds like it might be too much as well. I guess by keys / math it's easy to explain pan/zoom/dolly/frame/orbit. It's only long if it actually explains how to make 3d UI widgets\r\n\r\n* Custom shaders: Basic\r\n\r\n  How to implement a custom shader that effectively modifies existing three.js shaders. Not sure what a good example would be. It seems like this really wants to be using `onBeforeCompile` but I guess I can try to explain both.\r\n\r\n* Custom shaders: Extra Attributes\r\n\r\n  How to add extra attributes to three’s shader system. Maybe for particles would be easiest.\r\n\r\n* Custom shaders: Full\r\n\r\n   How to do everything custom (not using three’s shader framework)\r\n\r\n* Shadertoy\r\n\r\n   How to implement and use shadertoy shaders\r\n\r\n* Optimizing: Merging Geometry\r\n\r\n   How to merge geometry to increase speed\r\n\r\n* Using one large canvas to simulate multiple canvases \r\n\r\n   This is a common use case especially for e-commerce\r\n\r\n* Debugging: JS\r\n\r\n   How to use the JavaScript console, etc… Lots of three devs don't know this and need it pointed out\r\n \r\n* Debugging: GLSL\r\n\r\n  Techniques to track down errors with GLSL like using a solid color in the fragment shader, rendering normals, rendering texture coords, etc...\r\n\r\n* WebVR: Display\r\n\r\n  How to display things in WebVR\r\n\r\n* WebVR: UX Simple\r\n\r\n  How to use a GearVR level of UX (one button)\r\n\r\n* WebVR: Daydream\r\n\r\n  How to use the Daydream remote\r\n\r\n* WebVR: Oculus / Vive\r\n\r\n  How to use the controllers of Oculus / Vive / Windows MR\r\n\r\n* Offscreen usage?\r\n\r\n   I don’t think three has Offscreen support yet but if it’s supported anytime soon it would be nice to cover how to structure the code.\r\n"},"comment":{"url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/comments/415239215","html_url":"https://github.com/greggman/threejsfundamentals/issues/8#issuecomment-415239215","issue_url":"https://api.github.com/repos/greggman/threejsfundamentals/issues/8","id":415239215,"node_id":"MDEyOklzc3VlQ29tbWVudDQxNTIzOTIxNQ==","user":{"login":"greggman","id":234804,"node_id":"MDQ6VXNlcjIzNDgwNA==","avatar_url":"https://avatars2.githubusercontent.com/u/234804?v=4","gravatar_id":"","url":"https://api.github.com/users/greggman","html_url":"https://github.com/greggman","followers_url":"https://api.github.com/users/greggman/followers","following_url":"https://api.github.com/users/greggman/following{/other_user}","gists_url":"https://api.github.com/users/greggman/gists{/gist_id}","starred_url":"https://api.github.com/users/greggman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greggman/subscriptions","organizations_url":"https://api.github.com/users/greggman/orgs","repos_url":"https://api.github.com/users/greggman/repos","events_url":"https://api.github.com/users/greggman/events{/privacy}","received_events_url":"https://api.github.com/users/greggman/received_events","type":"User","site_admin":false},"created_at":"2018-08-23T01:11:35Z","updated_at":"2018-08-23T01:11:35Z","author_association":"OWNER","body":"@Mugen87 , most of the sample do have an edit function. As it is the edit function doesn't show up on phones but otherwise most pages have several editable examples. Were you suggesting something else? "}}
{"actor":{"display_login":"greggman"}}