1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Svelte で3D表示を行うライブラリ Threlte #2: エクストラパッケージを使用する

Last updated at Posted at 2024-01-19

シリーズ

エクストラパッケージの概要

エクストラパッケージには以下の様な機能が内包されている。

  • トランスフォームコントロール (オブジェクト操作を可能にする。)
  • オービットコントロール(カメラ操作を可能にする機能)
  • 背景 (Environment) の追加
  • オーディオ再生
  • グリッド表示
  • ギズモ表示
  • GLTF の使用
  • スカイオブジェクトの使用
  • HTML オブジェクト (3D シーンの中で HTML を扱うもの)

以上のように、3D で描画しているんだったらこれをは入れたいよねって基本的な拡張パッケージとなっている。
個人的には最初っから入れる選択をしていいものだと思うので、@threlte/core のインストールと一緒にこちらもインストールしておきたい。

エクストラパッケージの利用

ここでは上記からいくつかの利用用途を記載しておく。

エクストラパッケージをインストールする

Threlte のエクストラパッケージは @threlte/extra というパッケージでまとめられている。

npm install -D @threlte/extra

オービットコントロール

ビューポート上で

以下の例では、autoRotateautoRotateSpeed={} 属性が設定されているため、ターンテーブルの様にオブジェクトの周りを周回するような動きを設定しています。

Scene.svelte
<script>
  import { T, Canvas } from '@threlte/core'
+  import { OrbitControls } from '@threlte/extras'
</script>

<!-- 各種シーン設定は省略 -->

<T.PerspectiveCamera
  makeDefault
  position={[-10, 10, 10]}
  fov={15}
>
  <!-- カメラのオービットコントロールを設定 -->
  <!-- autoRotate と autoRotateSpeed を追加、enableZoom を false に設定 -->
+  <OrbitControls
+    autoRotate
+    enableDamping
+    autoRotateSpeed={0.5}
+    target.y={1.5}
+  />
</T.PerspectiveCamera>

output1.gif

グリッドの表示

ビューポート上にグリッド表示を追加します。
cellColor 属性でグリッドの色を設定したり、fadeDistance 属性でカメラの距離に応じてフェイドを書ける処理を設定できます

Scene.svelte
<script>
  import { T, Canvas } from '@threlte/core'
+  import { Grid } from '@threlte/extras'
</script>

<!-- 各種シーン設定は省略 -->

+<Grid
+	position.y={-0.001}
+	cellColor="#ffffff"
+	sectionColor="#ffffff"
+	sectionThickness={0}
+	fadeDistance={25}
+	cellSize={2}
+/>
グリッド無し グリッド有り フェード在り
cFcOe0F2n2.png image.png image.png

ギズモを追加する

ギズモを追加するには <Gizmo> コンポーネントを使用する。

Scene.svelte
<script lang="ts">
	import { T } from '@threlte/core';
+	import { Grid, OrbitControls, ContactShadows, Gizmo } from '@threlte/extras';
</script>

<!-- 各種シーン設定は省略 -->

+<Gizmo horizontalPlacement="lef" />

2024-01-29 23.06.27 localhost 71079ccc17ae.png

エッジ表示を行う

エッジの描画色を変更するコンポーネント。
<Edges> コンポーネントを使用する。

この際、エッジの色が対象オブジェクトの色で隠れてしまうため、場合によって対処が必要。

Scene.svelte
<script lang="ts">
	import { T } from '@threlte/core';
+	import { Edges } from '@threlte/extras';
</script>

<T.Mesh position={[0, 2, 0]}>
	<T.SphereGeometry />
	<T.MeshStandardMaterial />
+	<Edges color="white" />
</T.Mesh>

2024-01-29 23.13.02 localhost e4749d6a5033.png

スカイオブジェクトの追加

スカイ (Sky) オブジェクトは、ライティング及び背景に対して影響を及ぼすオブジェクト。
もともと、Three.js の Sky 実装をもとにしているとのこと。
これの配置には <Sky> を使用する。

Scene.svelte
<script lang="ts">
	import { T } from '@threlte/core';
	import { OrbitControls, Sky } from '@threlte/extras';
</script>

<T.PerspectiveCamera makeDefault position={[-15, 0, 15]} fov={15} far={10000}>
	<OrbitControls enableZoom={true} enableDamping target.y={1.5} />
</T.PerspectiveCamera>

<Sky />

<T.Mesh position.y={1.2}>
	<T.SphereGeometry />
	<T.MeshStandardMaterial roughness={0.0} metalness={1.0} />
</T.Mesh>

2024-01-28 19.14.26 localhost bf5dc4b2a802.png

パラメーターを変えることで、日中から真夜中まで表現できる。

Scene.svelte
<Sky
	setEnvironment={true}
	elevation={0.15}
	turbidity={10.0}
	rayleigh={3.0}
	azimuth={180.0}
	mieCoefficient={0.005}
	mieDirectionalG={0.7}
/>

2024-01-28 19.21.35 localhost 38be7d41b21f.png

背景 (Environment) の追加

背景 (Environment) は、シーンに対して球面状に背景を設定します。
また、対応画像からのライティングにも対応するので、HDRI を使用したライティングにも対応します。

以下では、

Scene.svelte
<script>
  import { T, Canvas } from '@threlte/core'
+  import { Environment } from '@threlte/extras'
</script>

<!-- 各種シーン設定は省略 -->

<!-- files に対象ファイルのパスを指定。今回は Three.js のサンプルから直接ロード -->
<Environment
	files={'https://raw.githubusercontent.com/mrdoob/three.js/dev/examples/textures/equirectangular/venice_sunset_1k.hdr'}
	isBackground={true}
/>

<!-- 分かりやすいように反射率高め設定 (roughness={0}) の球体を配置 -->
<T.Mesh position.y={1.2}>
	<T.SphereGeometry />
    <T.MeshStandardMaterial color="grey" roughness={0.0} />

</T.Mesh>

image.png


:point_right:次のシリーズを読む
Svelte で 3D 表示を行うライブラリ Threlte #3: glTF シーンを扱う

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?