Saya butuh bantuan dengan 3d shading / pencahayaan

8

Bagaimana kalian menangani naungan dalam game 3d? Saya memiliki sumber cahaya arah yang menaungi satu sisi pohon yang terbuat dari kubus. 3 sisi yang tersisa semuanya hanya mendapatkan bayangan sekeliling. Jadi efek 3d hilang ketika melihat dua sisi ambient teduh. Apakah saya melewatkan sesuatu? Haruskah saya menaungi sisi terjauh dari sumber cahaya yang lebih gelap? Saya mencoba melihat Fallout 3 dan sepertinya ini yang mereka lakukan, tetapi Minecraft tampak membayangi gundukan rumput dengan dua sisi cahaya yang berlawanan dan dua sisi yang berlawanan gelap memberi efek bahwa ada dua lampu arah untuk dua cahaya itu. sisi teduh dan cahaya sekitar untuk sisi gelap berbayang.

Xavier
sumber

Jawaban:

5

Masalah Anda adalah bahwa cahaya sekitar Anda adalah warna yang konstan. Pada kenyataannya, cahaya sekitar cenderung terang dari atas dan gelap dari bawah, karena cahaya biasanya berasal dari atas.

Ada banyak yang dapat Anda lakukan untuk memperbaikinya. Paling tidak, Anda harus memiliki "warna ambient atas", "warna ambient bawah", dan "konstanta ambient direction" konstanta shader vertex.

Di vertex shader Anda, ambil produk titik dari "arah ambient atas" dan verteks normal, dan gunakan hasilnya untuk lerp antara "warna ambient atas" dan "warna ambient bawah:"

float value = dot( vertex_normal, top_ambient_direction ) * 0.5 + 0.5;
ambient_color = lerp( bottom_ambient_color, top_ambient_color, value );

Itu adalah salah satu cara sederhana untuk membuat tampilan ambient lebih baik, dan sering digunakan dalam game PS2 dan XBOX1. Game kontemporer melangkah lebih jauh dengan menggunakan "ambient cubemap" atau "ambient harmonic spherical coefficients."

bmcnett
sumber
3

Ini adalah topik yang kompleks, dan saya hampir tidak memenuhi syarat untuk membicarakannya, tetapi saya akan mencobanya. Banyak game menggunakan peta cahaya yang sudah dipanggang yang memperhitungkan cahaya yang memantul dari beberapa permukaan, kemudian menggabungkannya dengan pencahayaan dinamis untuk menghasilkan lingkungan yang cepat, realistis, dan berpenampilan bagus. Mungkin ada game modern yang memantulkan cahaya secara real-time.

Yang perlu diingat adalah bahwa cahaya melemahkan jarak; jika lampu Anda miring ke permukaan, tepi yang lebih dekat akan lebih terang dari tepi yang lebih jauh. Hal-hal cenderung terlihat sangat palsu jika lampu menyinari langsung dan bukannya pada sudut.

Pencahayaan Minecraft istimewa, karena menggunakan sistem aneh di mana cahaya diperlakukan hampir seperti panas yang menyebar ke seluruh dunia: http://www.minecraftwiki.net/wiki/Light Cahaya ini tidak mudah diperluas ke solusi tujuan umum.

Efek paling keren yang pernah saya lihat digunakan disebut ambient occlusion. Biayanya mahal, dan biasanya hanya digunakan dalam larutan yang sudah dipanggang, tetapi memperhitungkan bagaimana sudut-sudut ruangan lebih gelap karena dinding menghalangi cahaya sekitar; bagian tengah dinding memiliki nilai cahaya belahan bumi, sedangkan sudut tempat tiga permukaan bertemu hanya memiliki nilai cahaya hemidemis (1/8 bola). https://secure.wikimedia.org/wikipedia/en/wiki/Ambient_occlusion

Ada berton-ton tulisan di sana tentang sistem pencahayaan; mencari di sekitar mungkin akan melayani Anda dengan baik.

Gregory Avery-Weir
sumber
0

Penerangan / naungan harus lebih maju dari sekedar keputusan biner. Blok tidak menyala atau tidak sepenuhnya diterangi oleh cahaya, mereka dapat sebagian menyala. Kadang-kadang wajah harus benar-benar mengkilap, dalam hal ini ia terkena langsung oleh cahaya. Kadang-kadang Anda hanya menginginkan cahaya sekitar, jika benar-benar tidak tersentuh oleh cahaya. Namun, ketika sebagian dikaburkan, Anda harus memberikan nilai cahaya antara sepenuhnya menyala dan sepenuhnya terang.

Metode pencahayaan dasar standar bergeser dari nol cahaya ke cahaya maksimum berdasarkan perbedaan sudut antara sinar cahaya yang masuk dan permukaan normal dari wajah yang sedang Anda pencahayaan.

Jika normal permukaannya sama (atau berlawanan, tergantung bagaimana Anda melihatnya) maka Anda memiliki kecerahan maksimum. Saat sudut antara cahaya yang masuk dan permukaan normal meningkat, Anda mendapatkan lebih sedikit dan lebih sedikit cahaya pada wajah itu dari cahaya itu.

Dengan cara ini, dengan dua lampu, setiap wajah harus menerima kecerahan yang merupakan kombinasi dari seberapa banyak kecerahan setiap cahaya ditempatkan pada setiap wajah berdasarkan sudutnya.

Ini harus lebih alami daripada mencoba menentukan apakah satu wajah menyala atau tidak. Anda akan memiliki gradien alami saat permukaan menjauh dari cahaya, dan Anda akan mendapatkan keseimbangan untuk permukaan yang dipengaruhi oleh lebih dari satu cahaya.

SpacePrez
sumber