2017-07-17 6 views
0

私はMeshLambertMaterialとVertexColorsを使用するBufferGeometryを取得しました。下のgifのようにライトを適用すると、BufferGeometryが同じサイズの異なるサイズのフェイスで構成されていると、ライトが歪んで表示されます。小さな顔(1x1)で顔ごとに異なる色を使用すると、ライトがよく見えます。私はfaceNormalsを計算しようとしましたが、それは問題を解決しません。Lights on BufferGeometryが正しくありません

私が見逃しているものは何ですか?

Here is a gif showing the issue

答えて

1

あなたはおそらくピクセルライティングごとたい代わりに、頂点ライティングを使用しています。

https://en.wikipedia.org/wiki/Per-pixel_lighting

http://www.learnopengles.com/tag/per-vertex-lighting/

それはPBR照明/シェーダに焦点を当ててほぼ全面的にthree.js私の理解です。この考え方で、私はlambertが何のために使用されるべきであるかさえ分かりません。いずれにしても、Lambertはピクセル単位ではなく、頂点単位の照明しかサポートしないため、これらのアーティファクトを常に異なるトポロジから補間することになります。これが異なる作業をしないようにする制限はありません。設計通りです。

MeshPhongMaterialは、ピクセル単位の照明を行いますが、すべての物理的な正確性のために、鏡面的な用語を削除するのは難しいかもしれません。

私は欠場何:あなたはこのために選択した場合

、あなた自身がこの

var myBlackTexture = obtainTextureThatIsBlack() 
var myMaterial = new THREE.MeshPhongMaterial({... specularMap: myBlackTexture}) 

https://github.com/mrdoob/three.js/issues/10808

概要ような何かを持つかもしれませんか?

あなたはこの3つの設計上の注意点を忘れていました。なぜこの材料がそのまま存在しているのか、なぜ頂点/フラグメント照明の間にフリップするフラグがないのでしょうか。

+0

これは、PhongMaterialを使ってうまく機能しました。私はBufferGeometryを使用している間に何かを見逃していたと思っていました。実際の使用材料についても考えていませんでした。良い答えをありがとう! – nergal

関連する問題