は役に立つかもしれません:
THREE.ShaderLib.phongでMeshPhongMaterialとShaderMaterialを使用しての違いは何ですか。
MeshPhongMaterialは、名前空間はあなたがライブラリのsrc /レンダラー/シェーダー/ ShaderLib.jsをチェックするのであれば内部的にはグラフィックス(DEV /デザイナーの背景) からある人のための速く、より容易な開発を行うために、ライブラリによってユーザーを終了し提供します THREE.ShaderLib ['phong']はshaderIDs行29574 three 75バージョンにマップされます。 彼らは同じです。
3つのjは内部的にすべてのマテリアルにシェーダを使用しますか?
回答:OpenGLES 2.0以上は、EGLを使用して作成されたサーフェスに描画するための固定パイプラインと比較して、シェーダベースのテクノロジです。
ShaderMaterialを使用するとパフォーマンスが向上しますか?
答え:あなたが見ているものによっては、光沢ベクトルの計算をフラグメントシェーダーにしたくない場合は、十分に成熟していますが、これは均一ではなく直接vec3を提供します。最初は、LOD、Object Poolingなどのような多くのパフォーマンスのために撮影してください。(異なる人々は同じことについて異なる意見を持っているかもしれません)
私はMeshPhongMaterialを使用するコードを持っていますが、どのようにShaderMaterial THREE.ShaderLib.phong。
回答:あなたは手動で
var phongShader = THREE.ShaderLib[ 'phong' ]
var shaderMaterial = new THREE.ShaderMaterial({
uniform: phongShader.uniform,
vertexShader: phongShader.vertexShader,
fragmentShader: phongShader.fragmentShader
});
呼び出さできますしかし、あなたはあまりにもTHREE.ShaderChunkを使用して、カスタムGLSLファイルを呼び出すことによって、シェーダーを拡張することができます。
どのように私は、反射率とShaderMaterial内の他の特性
回答、組み合わせて指定します:あなた自身の制服(すでに材料でサポートされて言及1 1)を作成し、
THREE.UniformsUtils.merge([
phongShader.uniform,
{
//to do custom uniform
}
vertexShader:vertexShader,
fragmentShader:fragmentShader
)]
var vertexShader = [
//so on add the shaderChunk Required
].join('\n')
var fragmentShader = [
THREE.ShaderChunk[ "common" ],
//so on add the shaderChunk Required
//call your custom uniform which you have supplied into the final gl_FragColor
].join('\n')
を呼び出します
あなたの問題を見るIMHOあなたはカスタムパラメータを使って直接fragmentShaderを編集することができるvertexShaderを変更する必要はありません。