THREE.MeshPhongMaterialを改造する

自作でphongを使いたい時用。

## PhongをShaderMaterialで書くとこんな感じ。

```
var phongShader = THREE.ShaderLib.phong;
var uniforms = THREE.UniformsUtils.clone(phongShader.uniforms);

material = new THREE.ShaderMaterial({
  uniforms: uniforms,
  vertexShader: phongShader.vertexShader,
  fragmentShader: phongShader.fragmentShader,
  lights:true//ライトの影響を受けられるように
});
```

phongShader.vertexShader,
phongShader.fragmentShaderを改造すればよい。


## phongのvert / frag のソースはこれ
中身をみると#includeが並んでいるが、これはthreejsが自前でincludeする実装している。includeの行を~~コメントアウト~~し（削除しないとエラーになるかも）、代わりに自分のコードを描けばよい
https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderLib/meshphong_vert.glsl
https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderLib/meshphong_frag.glsl

##はまりポイント
* lights:trueというのを渡すとライトが有効になります。（fog: true というのもあります。）
* map:trueというのは無くて、#define USE_MAPってシェーダーの一番上に書くとmapが使えます。
* そのほかUSE_なんとか、がいっぱいありますので、適当に有効にします。

※要はmaterial共通のものか/固有のものか、で上記のような違いがあるようです。lights:trueになってると、どっかでまとめてlightの情報をuniformに渡しているようです。


## USE_なんとか 一覧（未完）

r87で確認中（phongで使われないものも含む
https://github.com/mrdoob/three.js/tree/master/src/renderers/shaders/ShaderChunk

| 名称| 該当する主なvert/frag | 備考
|:-----------|:------------|:------------
| USE_ALPHAMAP | [alphamap_fragment.glsl]( https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl ) | 
| ALPHATEST| [alphatest_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl) | 
| USE_AOMAP| [aomap_fragment.glsl]( https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl ) |  
| USE_BUMPMAP | [bumpmap_pars_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl) | 
| USE_COLOR |  [color_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/color_fragment.glsl)  | 頂点カラー
| ENVMAP_TYPE_CUBE_UV | [cube_uv_reflection_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl)  | 
| USE_DISPLACEMENTMAP |  [displacementmap_vertex.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl)|頂点を変形するマップ
| USE_EMISSIVEMAP | [emissivemap_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl) |
| USE_ENVMAP | [envmap_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl) |
| USE_FOG | [fog_fragment.glsl]( https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/fog_fragment.glsl)  |
| USE_LIGHTMAP | [lightmap_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl) |
| TOON | [gradientmap_pars_fragment.glsl](https://github.com/mrdoob/three.js/blob/master/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl)  |
| --- |  |
| --- |  |
| --- |  |
| --- |  |


## そのほかシェーダーのソース群
https://github.com/mrdoob/three.js/tree/master/src/renderers/shaders
* THREE.ShaderChunk = 共通で使われるGLSLのコード片
* THREE.UniformsUtils = uniformsの定義を操作するユーティリティ関数群
* THREE.UniformsLib = 共通で使われるuniforms定義
* THREE.ShaderLib = 各マテリアルで使用するシェーダー定義