Getting Started with HLSL

  S E N G

  • H

  Advanced Effect 2

  A N S

  Level 14

GRAFIKA KOMPUTER DAN ANIMASI U

  N S E N

  Getting Started with HLSL

  G

  • H

   What is HLSL?

   The Programmable Pipeline

  A N

   Loading Shaders in DirectX

  S

   The Finished Program

  U N

  The Vertex Shader 

  Vertex Shader 

  The Finished Program S E N

  Simple Vertex Lighting

  G

   Math

  

Normals and Lights

  H A

  

Implementing Light

  N

   The Finished Program

  S U

  Loading Lights from DirectX

  N

   Adding Lights in DirectX

   The Finished Program Some Simple Vertex Effects

   Specular Light Shader

  

Vertex Fog Shader S E N

   Pada pembahasan minggu lalu, kita hanya

  G memperoleh siluet putih dari sebuah teapot.

  • H

   Sebenarnya, kita baru melakukan pengaturan

  A N

paling dasar dari vertex transformations.

  S

   Kita hanya mengonversi titik-titik 3D menjadi

  U N

  2D dan menggambarnya pada layar sebagai warna putih.

   Sekarang, kita akan membahas tentang pencahayaan. S E N

   Ada 2 hal penting yang perlu Anda ketahui, yakni

  G cosine dan dot product.

  • H 1.

  Cosine (atau cos)

  A

   Merupakan suatu fungsi trigonometri yang digunakan

  N dalam bangun segitiga dan lingkaran.

  S U N

  http://directxtutorial.co m/Lesson.aspx?lessonid= 9-9-3 S E N

   Merupakan hasil kali besaran 2 vektor dengan cosine

  G sudut di antara 2 vektor tersebut.

  • H A N S U N

  http://directxtutorial.com/Lesson.aspx?lessonid=9-9-3 S E N

  

Di awal, kita pernah membahas tentang teknik

  G

  pencahayaan dan bagaimana normals dapat digunakan

  • untuk membantu menghitung berapa banyak cahaya

  H yang jatuh di suatu obyek. A N

   Sekarang, kita akan membahas lebih detail, sehingga

  S kita dapat membuat cahaya di HLSL. U

  

Inti persoalan dalam menghitung vertex lighting

  N

  adalah menemukan sudut cahaya dan normal, dan menentukan dot product-nya.

   Nilai dari dot product kemudian dikalikan dengan warna dari cahaya, untuk menghasilkan warna cahaya terakhir. S E N

   Ingat bahwa suatu dot product adalah nilai cosine dari

  G

  sudut antara 2 vektor, yang selalu menghasilkan nilai

  • antara 1 dan -1 (nilai negatif dihasilkan oleh sudut antara

  H 90 dan 270 ). A N

   Jika cahaya jatuh tepat di atas suatu titik, sudut normal

  S

  dan cahaya akan tepat 0 dan kita peroleh dot product

  U bernilai 1. N

   Jika cahaya yang datang dan normal membentuk sudut 90 , diperoleh dot product bernilai 0.

   Jika cahaya datang langsung dari belakang (sudut 180 ), maka dot product bernilai -1, dan demikian seterusnya.

   Tidak peduli berapa besar sudutnya, dot product selalu S E N

   Setelah didapatkan dot product dari kedua vektor ini,

  G

  yang harus dilakukan adalah memastikan bahwa

  • nilainya 0 atau lebih, dan menggunakannya untuk

  H mengubah warna asli vertex tersebut. A N

  Contoh:

  S

   Jika warna vertex adalah merah (1, 0, 0) dan warna

  U

  cahaya adalah putih (1, 1, 1), maka kita dapat kalikan

  N keduanya untuk memperoleh warna akhir (1, 0, 0).

   Namun jika nilai dot product misal adalah 0.5, maka kita kalikan nilai ini dengan cahaya, sehingga warna cahaya menjadi abu-abu (.5, .5, .5), dan warna akhir menjadi (.5, 0, 0), yakni vertex merah muda. S E N

   Untuk menyederhanakan, kita akan membuat cahaya di

  G dalam shader, bukan di DirectX.

  • H

   Code-nya mirip seperti project pertama minggu lalu, yang

  A diubah hanya fungsi Vshader(). N

   Langkah-langkah yang perlu dilakukan:

  S U 1.

  Add a parameter for the vertex normal

  N 2.

  Create values to hold the properties of the light 3. Create and calculate two vectors for the light and for the vertex normal

  color S E N

   Jika Anda perhatikan fungsi Vshader() pada minggu

  G

  sebelumnya, Anda akan melihat bahwa hanya ada 1

  • parameter fungsi, yakni posisi dari titiknya.

  H A

   Tentunya pencahayaan memerlukan suatu normal

  N juga, yang tidak dapat kita hitung di sini.

  S

   Untuk menghitungnya, perlu diketahui lokasi dari

  U setiap titik yang saling berkaitan. N

   Karena vertex shader hanya menangani 1 titik pada satu waktu, maka hal ini tidak mungkin dilakukan.

   Oleh karenanya, normal ditangani oleh mesh, dan

DirectX akan meneruskan vertex normal dan posisinya. S E N

   Jadi parameter yang baru disebut Normal, dan

  G terlihat seperti berikut.

  • H float3 Normal : NORMAL.

  A N S U N

  S E N

   Pada langkah ini, kita akan membuat nilai-nilai yang

  G

  menyimpan semua informasi yang dibutuhkan untuk

  • menghitung cahaya, seperti warna cahaya, baik diffuse

  H dan ambient, maupun posisi cahaya. A N

  

Cahaya yang akan dibuat merupakan kombinasi

  S antara spot light dan directional light. U

   Cahaya ini akan memancar dari suatu lokasi

  N

  tertentu, namun tidak akan pernah pudar saat makin jauh.

  

Ini kelebihan dari HLSL, kita dapat mem-bypass

sistem apapun dalam DirectX dan menjalankan apa yang kita inginkan.

   3 nilai yang akan kita buat adalah LightPos, DiffuseColor, dan AmbientColor.

  • H A N S U N

   Jadi selain membuat VertexOut, kita buat 3 nilai:

   Perhatikan bahwa nilai-nilai ini memiliki tipe float3, yakni sebuah larik dengan 3 floats.

   Cahaya diposisikan pada 2x2x2. 

  2 warna yang kita miliki diatur menjadi .5x.5x.5

  S E N G

  S E N G

  • Multiply the vertex’s position by the World

  H

  Calculate the normal vector by matrix multiplying normal with world matrix

  A N S U N

  Creates a new float3 called LightVec and stores the light vector in it. To do this, we must call the normalize() intrinsic that results in a precise vector between the two points light position and vertex position. S E N

  Calculate the dot product using dot() intrinsic. This has 2 parameters,

  G

  which are the 2 vectors we wish to find the dot product of. Then, we

  • have to multiply the returned value by the diffuse color

  H A N S U N

  Find the final color by adding the modified Find out whether the DiffuseColor has diffuse color to the ambient color dropped below 0 or not. We use max() intrinsic, so that it returns DiffuseColor if it greater than 0 and returns 0 if not S E N

   Sebelumnya, kita telah mengalikan vertex dengan

  G world matrix.

  • H

  

Sisanya tinggal mengalikan view dan projection

  A matrices. N S

   Potongan kode program berikut sedikit dimodifikasi

  U

  dari sebelumnya, namun tetap menjalankan hal yang

  N sama.

  S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

   Kita telah berhasil membuat cahaya sederhana yang

  G disisipkan dalam suatu shader.

  • H

   Cara tersebut cukup mudah, namun sayangnya kita

  A

  hanya dapat membuat cahaya yang tidak berubah

  N dengan cara ini.

  S U

  

 Cara paling baik untuk mengatur cahaya adalah

  N

  dengan cara yang umum digunakan yakni dengan code DirectX, D3DLIGHT9 struct.

   Sekarang kita akan mempelajari cara membuat

cahaya dengan D3DLIGHT9 dan meneruskan nilainya ke dalam HLSL. S E N

   Dalam DirectX, kita menggunakan D3DLIGHT9 untuk

  G membuat dan memanipulasi cahaya.

  • H

   Dalam HLSL, kita dapat memanfaatkan cahaya ini, namun

  A hanya sejauh menyimpan informasi cahaya. N

   Terdapat beberapa fungsi cahaya yang tidak didukung

  S oleh HLSL. U N

   Kita tidak perlu lagi mengatur apa jenis cahaya yang digunakan, atau mengaktifkan

  • – nonaktifkan cahaya secara manual.

   HLSL menganggap semua cahaya dinyalakan, dan menangani cahaya berdasarkan algoritma yang digunakan, bukan berdasarkan jenis cahaya yang Anda atur. S E N

   Dalam effect file, hanya ada sedikit perubahan.

  G

  

Kita harus memindahkan 3 baris code ke atas, dan

  • H mengubah nama sebuah variabel.

  A

   Jika Anda perhatikan, kita hanya memindahkan float3 ke

  N

  atas (sama seperti float4x4) dan menghilangkan

  S inisialisasinya. U N

   Juga di dalam shader code, kita ganti DiffuseColor menjadi NewDiffuseColor.

   Hal ini karena globals dianggap sebagai konstanta. 

  

Oleh karena itu, kita buat sebuah float3 baru yang disebut NewDiffuseColor, dan menggunakannya untuk S E N

   Dalam source file, kita harus membuat sebuah fungsi

  G yang menghasilkan sebuah cahaya.

  • H A N S U N
S E N

   Perhatikan bahwa fungsi ini jauh lebih kecil

  G dibandingkan saat materi sebelumnya.

  • H

   Kita telah menghilangkan elemen-elemen tidak

  A penting yang tidak akan digunakan oleh HLSL. N S

   Setelah membuat cahaya, kita harus mengatur

  U nilainya di dalam HLSL shader. N

   Caranya sama seperti saat kita mengatur matriks. 

  Namun, dibanding menggunakan SetMatrix(), kita akan menggunakan fungsi SetFloatArray(). S E N

   Fungsi ini bekerja dengan cara yang serupa seperti

  G

  

SetMatrix(), kecuali bahwa fungsi ini dapat digunakan

  • H

  untuk mengisi suatu float, float2, float3, float4, dan

  A seterusnya. N

   Namun, diperlukan suatu parameter tambahan.

  S U

  A pointer to the first float to pass

  N

  

The name of the value we are passing to The number of float values which need to be passed S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

  

 Sekarang kita akan mempelajari 2 trik baru yang

  G dapat dilakukan dengan shaders.

  • H

   Yang pertama adalah specular light. Pada dasarnya, ini

  A adalah cara membuat permukaan terlihat mengilap. N S

   Yang kedua adalah efek kabut. Banyak games yang

  U

  tidak dapat me-render obyek yang berada jauh di

  N

  belakang. Untuk menanganinya, para programmer membuat kabut di dunia game untuk menyembunyikan obyek-obyek yang terlalu jauh untuk digambarkan. Kita juga akan mempelajari cara membuat fog layer di dalam shader.

  

 Kita sudah pernah membahas specular light pada

pertemuan minggu ke-5.

  • H A N S U N

  

Sekarang kita akan menyisipkan suatu specular

reflection dalam shader kita.

   Sebelumnya, kita perlu mengetahui formula berikut.

   Formula di atas dapat juga ditulis sebagai.

  S E N G

  S E N

  

Shine

  G

   Merupakan suatu konstanta float yang merepresen-

  • tasikan seberapa reflective permukaan obyek kita

  H A

  nantinya. Semakin tinggi nilainya, semakin kurang

  N reflective, dan sebaliknya.

  S

  

EyeVec

  U N

  

Merupakan variabel baru yang mirip seperti LightVec, kecuali EyeVec merupakan arah antara kamera dan titiknya. Kita harus meneruskan posisi kamera dari aplikasi DirectX. Kita dapat

menggunakan nilai ini dan posisi titik untuk menghitung camera vector. S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N

   Banyak game menggunakan efek kabut untuk

  G

  

membuat sebuah dunia yang luas dengan low

  • H rendering power.

  A

   Tujuan kabut ini adalah untuk menyembunyikan

  N

  kenyataan bahwa obyek-obyek yang jauh tidak akan

  S U digambarkan. N

   Ada beberapa cara untuk mengatur hal ini dengan menggunakan fixed-function pipeline, namun sekarang kita mempelajari programmable pipeline.

   Jadi kita akan menyisipkan efek kabut ini ke dalam shaders kita. S E N

   Untungnya, menciptakan efek kabut tidak

  G memerlukan terlalu banyak persamaan Matematika.

  • H  Teori yang perlu diketahui hanyalah konsep bahwa A

  jarak suatu obyek dari kamera menentukan

  N

  perubahan dari warna aslinya menjadi warna kabut

  S itu sendiri. U N

   Kita juga harus tahu cara mendapatkan jarak itu, yakni dengan Vert.Pos.z.

   Langkah-langkah penerapan efek kabut: 1.

  Find the difference between the fog color and the vertex color

  • H A N S U N

  divided by the fog limit 3. Add the fog color to the final color 4.

  S E N G

Ensure the final color is not brighter than the fog itself

  S E N

   Banyak yang berasumsi bahwa kabut berwarna putih,

  G

  namun sebenarnya warna kabut abu keputihan dengan

  • sedikit bayangan biru.

  H A

   Untuk menemukan selisih antara warna vertex dan warna

  N kabut, harus ditentukan warna kabut terlebih dahulu.

  S

   Untuk sekarang, digunakan warna 230, 230, 255 (.9, .9, 1),

  U N yakni warna abu-abu dengan sedikit biru.

   Untuk menemukan selisihnya, kita gunakan code berikut. S E N

   Sebenarnya, kita dapat hanya mengalikan selisih yang

  G

  diperoleh dengan vertex distance, namun kita tidak

  • H akan dapat melihat hasilnya lebih dari 1 unit.

  A

   Hal ini akan cukup mengganggu.

  N S

   Jadi kita tambahkan pembagian dengan fog limit, yang

  U

  secara signifikan mengurangi perubahan warna,

  N membuat obyek-obyek memudar dengan lebih baik.

  S E N  Yang ini juga mudah.

  G

  

Setelah memperoleh warna, kita hanya perlu

  • H menambahkan warna yang diperoleh ke vertex color.

  A N S U N

  S E N

   Titik-titik yang melewati fog limit cendrung di-render

  G

  dengan warna yang lebih terang dibandingkan warna

  • H kabut itu sendiri.

  A

  

Untuk menghindarinya, kita cukup bandingkan

  N

  FinalColor dengan FogColor, dan mengambil nilai

  S U yang terkecilnya. N

  S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  • H A N S U N
S E N G

  http://directxtutorial.com/ http://en.wikipedia.org/wiki/Dot_product

  • H A N S U N

Dokumen yang terkait

STEREOTIPE PEREMPUAN DALAM IKLAN DI TELEVISI (Analisis Semiotik Iklan Neo Hormoviton versi “makan malam”, Hand andBody Marina versi “festival film hitam dan putih” dan Sabun Mandi Lux versi“play with beauty“)

0 25 2

Docking Studies on Flavonoid Anticancer Agents with DNA Methyl Transferase Receptor

0 55 1

Faktor-Faktor yang Berhubungan dengan Produktivitas Kerja Pekerja Wanita Penyadap Karet di PDP Gunung Pasang Kabupaten Jember Factors Related with Work Productivity of Women Rubber Tapper Workers at PDP Gunung Pasang Jember Regency

0 28 6

In vitro study of parasitemia determination of alkaloids from S. tuberosa Lour by flow cytometry in comparation with optical microscopy

0 62 16

Services for adults with an autism spect

0 3 13

PENGARUH SUBSTITUSI DAGING AYAM BROILER DENGAN JAMUR SALJU (Tremella fuciformis) PADA KUALITAS NUGGET AYAM The Effect of Substitution Broiler Meat with White Jelly Mushroom (Tremella fuciformis) on Qualities Chicken Nuggets

0 0 12

Factors Related to Somatosensory Amplification of Patients with Epigas- tric Pain

0 0 15

KARAKTERISTIK FISIKOKIMIA DAN SENSORI ES KRIM TEMULAWAK (Curcuma xanthorriza) DENGAN VARIASI PENAMBAHAN BUBUR BUAH NANAS (Ananas comosus) Physicochemical and sensory characteristics of ice cream temulawak (Curcuma xanthorriza) with the addition of variati

0 0 8

Penerapan Algoritma Genetika untuk Optimasi Vehicle Routing Problem with Time Window (VRPTW) Studi Kasus Air Minum Kemasan

0 0 8

Create PDF with GO2PDF for free, if you wish to remove this line, click here to buy Virtual PDF Printer

0 4 8