Bayangan

Starter pack

Dalam grafik 3D, bayangan digunakan untuk mensimulasikan efek cahaya yang mengenai suatu objek dan menimbulkan bayangan pada objek lain.

Membuat dan menerima bayangan

React Three Fiber memudahkan untuk menambahkan bayangan ke dalam sebuah scene.

Pertama, kita perlu mengaktifkan bayangan secara global dengan menambahkan props shadows pada komponen <Canvas />:

<Canvas shadows />

Kemudian, Anda perlu mengaktifkan bayangan pada objek yang akan membuat bayangan:

<mesh castShadow />

Dan pada objek yang akan menerima bayangan:

<mesh receiveShadow />

Tentu saja, Anda dapat mengaktifkan keduanya pada objek yang sama:

<mesh castShadow receiveShadow />

Mari kita terapkan pada proyek kita:

<Canvas shadows camera={{ position: [0, 3, 3] }}>
  {/* ... */}
  <mesh rotation-y={Math.PI / 4} castShadow>
    <boxGeometry />
    <meshStandardMaterial color="white" />
  </mesh>

  <mesh rotation-x={-Math.PI / 2} position-y={-0.5} receiveShadow>
    <planeGeometry args={[5, 5]} />
    <meshStandardMaterial color="white" />
  </mesh>
</Canvas>

Shadows not working

Kita telah menambahkan shadows pada <Canvas />, castShadow pada kubus dan receiveShadow pada bidang, namun tidak ada yang terjadi.

Ini karena kita juga perlu menentukan lampu mana yang akan menghasilkan bayangan.

{
  /* ... */
}
<directionalLight position={[5, 5, 5]} intensity={0.5} castShadow />;
{
  /* ... */
}

Shadows one light

Sekarang, kita dapat melihat bayangan dari kubus pada bidang. Kita juga bisa mengatur bayangan dari beberapa lampu:

{/* ... */}
<directionalLight position={[5, 5, 5]} intensity={0.5} castShadow />
<directionalLight position={[-5, 5, 5]} intensity={0.5} color="red" castShadow />
{/* ... */}

Shadows multiple lights

Lihat bagaimana warna bayangan dipengaruhi oleh warna lampu.

Mari kita tambahkan bola ke dalam scene:

Three.js logoReact logo

React Three Fiber: The Ultimate Guide to 3D Web Development

✨ You have reached the end of the preview ✨

Go to the next level with Three.js and React Three Fiber!

Get full access to this lesson and the complete course when you enroll:

  • 🔓 Full lesson videos with no limits
  • 💻 Access to the final source code
  • 🎓 Course progress tracking & completion
  • 💬 Invite to our private Discord community
Unlock the Full Course – Just $85

One-time payment. Lifetime updates included.