Closed46

Threejsに入門してみる@udemy

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

シーン

いろいろな物を配置するようの空間を「シーン」と呼ぶ

カメラ

どこを映すかを決める
現実のカメラと同じ
仮想空間にあるので、視野角や映す距離などを数値で決めれて面白い

レンダラー

出力方式の設定。
カメラで映したものをどう言う形式で画面に描画するかを決める

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

光源

どんな光をどこに置くのかを決められる。スゴイ。
光源はオブジェクトと違ってどこにあるのかがわかりにくいので、
場所を表示してくれるヘルパーが用意されている。
これを使うことでどこに配置されているかが視覚的にわかる。

モノ系

ジオメトリ

骨、枠組みの決め。
丸にしたり、三角にしたり、四角にしたり、形を決める。

マテリアル

材質。
色をつけたり、画像を貼ったりすることで、表現できる。

メッシュ

「ジオメトリ」+「マテリアル」で作られるオブジェクト。
枠組みに色付けなどのイメージ。

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

頂点(XYZ)を配列に詰める
区切りを指定する
描画
の流れで生成

Arrayバッファなので、効率やスピード重視の持ち方になってる感じかな

パーティクルとか、宇宙空間の塵とか、使えそう

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

ああ、やっぱりすげぇ便利そうだ
gui.add()でコントロールに簡単に追加できる
例ではx座標をバーで動かしている

配置決めとか、オブジェクトの形の確認とか
工夫次第でいろいろ役立ちそう

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

MeshPhongMaterialは光源が必要、反射率を決定可能
shininess(反射率)やspecular(鏡面反射の色)などが設定できる
→光の色じゃなくて、物質の方に色を設けるの違和感あるなー。

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

AmbientLight(周囲光)
全体に均一に、globalに照らす

threejsでは光のバウンシング(床面等での反射)がない
→これを薄いAmbientLightで疑似表現するときに使える

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

DirectionalLight(平行光源)
太陽のような、直線的な光源
真上から降り注ぐなど

さっきの説明の通り

threejsでは光のバウンシング(床面等での反射)がない

ので、薄いAmbientLightはつけておくべき(グレーなどで薄く)

原点(0,0,0)に向かって降り注ぐ
距離と強さに関係ないので、距離を離しても意味がない

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

RectAreaLight(長方形ライト)
引数は、(色、強さ、幅、高さ)
MeshStandartMaterialかMeshPhisycalMaterialのみで使える

ドキツイ感じで扱い難しそう
くっきり特色がでるから、目立たせたいときに使えそう

.lookAt()で照らす方向をしていできる

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

Spotlight(懐中電灯)
まさにスポットライト
設定できる引数が多い

これも目立たせたいときに使えそう
引数からぼやかし具合も調整可能

回転を加えるのは難しい
spotLight.targetで調べてみると、(0,0,0)のpositionにいる
.target.position.x = 1;にしてみるが、シーンにないので反映されない
シーンに.targetを加えると反映される
ここらへん反映されない理由がわからずハマりそうポイントだな。。

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

カメラの種類

6つある

ArrayCamera

複数のカメラ
マリカーの多人数プレイみたいなことができる

PerspectiveCamera

現実と同じく、遠いものは小さく映る

OrthographicCamera

距離に応じて形が変わらない
普通使わない

CubeCamera

環境マッピング生成用のカメラ

StereoCamera

VR的なやつ

Camera

抽象的基本クラス

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

パーティクルを作ってみよう

  • ジオメトリ
    • いっぱいgeometryつかう場合はbufferGeometryでパフォーマンスを向上
  • マテリアル
    • パーティかる用のPointsMateriall
  • メッシュ
    • パーティクル用のPoints
Hidden comment
Hidden comment
toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

エッジが見えてしまう

  • 深度のテストを自動的にやっている、コレをOFFにする
    • depthTest: false,
    • 別のケースではバグってしまう
    • 深度がなくなるので奥のパーティクルが見えてしまう
  • depthWrite: false,
    • これで解決
Hidden comment
このスクラップは2022/09/19にクローズされました