• Tidak ada hasil yang ditemukan

V-Sync and Mouse Lag

N/A
N/A
Protected

Academic year: 2018

Membagikan "V-Sync and Mouse Lag"

Copied!
66
0
0

Teks penuh

(1)

Advanced Effect

Level 13 GRAFIKA KOMPUTER DAN ANIMASI

(2)

2

Simple Input

Reading the Keyboard

Reading the Mouse

The Finished Program

Raw Mouse Input

Initializing Raw Input

The WM_INPUT Message

Using the Data

The Finished Program

N G -H A N S U N

V-Sync and Mouse Lag

The Source of Mouse Lag

Disabling V-Sync

The Finished Program

Picking in Direct3D

The Picking Ray

Checking Intersection

(3)

3

Getting Started with HLSL

What is HLSL?

The Programmable Pipeline

Loading Shaders in DirectX

The Finished Program

The Vertex Shader

Vertex Shader

The Finished Program

(4)

4

HLSL = High Level Shader Language

HLSL adalah bahasa yang terpisah dari DirectX,

yang digunakan untuk memprogram efek grafis

tingkat lanjut yang tidak mampu dilakukan oleh

DirectX.

Materi ini akan dimulai dengan penjelasan

bagaimana efek-efek ini dilakukan dan

selanjutnya kita akan mencoba membangun

contoh sederhana dari HLSL

program

yang

berjalan di DirectX.

(5)

5

Sebelumnya, kita telah mengenal apa yang disebut sebagai

Fixed-Function Pipeline.

Pipeline ini merupakan kumpulan aksi yang dilakukan oleh

video hardware, yang dijalankan untuk me-render sebuah gambar 3D.

Dengan pipeline ini, kita dapat memanggil fungsi seperti SetRenderState() dan SetTransform() dalam

mempersiapkan hardware untuk rendering.

 Untuk me-render grafik, pertama kita peroleh informasi

vertex, lalu memberitahu video card, render state mana

yang kita gunakan, dan kemudian mengirimkan vertices ke

video card tersebut, dan kemudian kita peroleh gambar yang telah di-render.

(6)

6

Cara rendering seperti demikian tidak masalah di masa lalu karena tidak banyak render state yang dijalankan.  Namun seiring berjalannya waktu hingga pada masa

DirectX 7, sangatlah sulit untuk membuat efek yang indah.

Para artists tidak tahu seperti apa model mereka jadinya karena tergantung kepada para programmer yang

mendesain rendering engine-nya.

 Para programmer juga sangat dibatasi oleh apa yang diberikan Microsoft dan produsen hardware.

Hingga akhirnya, Microsoft dan produsen hardware memutuskan untuk membuat pipeline yang baru. N

(7)

7

Pada DirectX 8.0, Microsoft memperkenalkan apa yang disebut sebagai Programmable Pipeline.

 Dengan programmable pipeline, programmer memiliki akses langsung ke GPU, dan dapat me-load-nya dengan

mini-programs pada tingkat binary untuk menciptakan efek mereka sendiri yang terlihat bagus dan cepat.

Mini-programs (shaders) ini mengandung fungsi-fungsi dan proses-proses yang ditulis khusus untuk GPU untuk

mengikuti dan memroses tiap titik dari model Anda dan tiap pixel pada layar.

Dengan shader dapat dihasilkan gambar yang sangat bagus dan indah.

(8)

8

Namun, menulis

shaders

dapat jadi cukup rumit.

Tidaklah mudah untuk membuat

shader

di dalam

Assembly

, menulis, men-

debug

, dan me-

maintain

-nya.

Assembly

adalah

low-level language

, dan kita akan

menghindarinya.

Untungnya sekarang kita punya alternatif, yakni

High

Level Shader Language

.

(9)

9

Jadi, sekarang kita berurusan dengan sebuah

pipeline

baru.

Namun, kita masih akan menggunakan fitur-fitur

DirectX sebagaimana yang kita ketahui.

HLSL tidak melakukan suatu hal sendiri, namun

bergantung sepenuhnya pada DirectX.

Hanya ada beberapa perubahan kecil dalam

code

DirectX yang perlu diperhatikan.

Namun, ada beberapa hal penting yang perlu kita

ketahui tentang bahasa baru ini, yakni bagaimana

Programmable Pipeline

ini bekerja.

(10)

10

Code HLSL harus diletakkan di suatu tempat.

Untuk menyimpan code HLSL, kita akan gunakan suatu

effect file.

Effect file adalah sebuah file terpisah dari code C++ Anda, yang memiliki code HLSL sebenarnya untuk suatu shader

tunggal.

Untuk menjalankan code HLSL, kita gunakan fungsi-fungsi DirectX untuk me-load effect file tersebut dan

mengirimnya ke GPU.

 Diagram pertama di slide berikutnya menunjukkan bagaimana kita melakukan hal tersebut sebelumnya, sementara diagram kedua bagaimana effect file

(11)

11

N G -H A N S U N

(12)

12

Untuk sekarang, kita tidak akan menulis

effect file

kita sendiri, namun mempelajari cara me-

load

-nya ke

DirectX dan menggunakannya.

Catatan:

Shader

dan

effect file

adalah 2 hal berbeda.

Shader

merujuk pada

code

yang menciptakan suatu

efek.

Sementara

effect file

merujuk pada

file

yang

mengandung

code

tersebut.

(13)

13

Salah satu permasalahan yang menghantui para game

programmers sejak dulu adalah kompatibilitas hardware.  Hampir semua video card berbeda satu sama lainnya, yang

berarti gambar-gambar akan di-render secara berbeda antara card yang satu dengan card lainnya.

Apalagi dalam hal kompatibilitas.

Jika suatu card memiliki fitur yang sangat hebat yang memungkinkan Anda menciptakan efek ledakan dengan sangat cepat, sementara cards lainnya tidak bisa; maka tidak ada game yang dapat menggunakan fitur tersebut, karena game itu tidak dapat berjalan di card lainnya, yang berarti pangsa pasarnya menjadi sangat kecil.

(14)

14

Untungnya, HLSL memperhatikan hal ini.

Sekumpulan

sections

yang disebut

techniques

disimpan dalam setiap

shader

.

Suatu

technique

adalah sekumpulan instruksi yang

mengganti

render states

.

Anda dapat membuat

techniques

berbeda yang

ditargetkan untuk

lower-level hardware

.

DirectX, saat me-

load

shader

, akan mencari

techniques

Anda dan memilih salah satu yang bekerja

paling baik.

Dengan demikian, Anda dapat memanfaatkan

video

hardware

yang lebih lama.

(15)

15

Passes adalah cara membagi sebuah shader untuk mencapai efek tingkat lanjut (advanced).

Programmer membagi shader-nya dalam beberapa bagian (passes), seperti lighting, texturing, transformation, dan

sebagainya; dan video card masih akan menghasilkan efek yang baik tanpa mematikan framerate.

Meskipun menggunakan beberapa passes dapat menciptakan efek-efek yang bagus, namun sangat

mengurangi jumlah pixels yang dapat ditampilkan dalam layar pada satu waktu.

Oleh karenanya, kebanyakan programmer menggunakan 1

(16)

16

Seperti yang telah dinyatakan sebelumnya, kita tidak akan memprogram suatu HLSL saat ini, tapi mempelajari cara me-load suatu HLSL effect file ke dalam DirectX dan

menggunakannya.

 Untuk itu akan digunakan program pertama dari pertemuan minggu ke-7, tentang mesh.

1. Comment out the code we won’t need for this demo

2. Load the effect file simple.fx

3. Find the best technique

4. Send the matrices to the GPU

5. Render the teapot using the only pass

6. Release the shader when all is done N

(17)

17

Beberapa hal tidak akan kita gunakan lagi, untuk itu

kita

comment out code

tersebut.

Pertama kita akan

comment out lighting

, karena

effect

file

yang digunakan (simple.fx) menangani

lighting

secara otomatis.

Lalu, kita

comment out

seluruh fungsi

SetRenderState(), karena akan di-

override

oleh HLSL.

Selanjutnya, kita

comment out

seluruh fungsi

SetTransform().

(18)

18

Me-

load

suatu

effect file

sangatlah mudah, hanya

diperlukan 1 perintah: D3DXCreateEffectFromFile().

N G -H A N S U N

A pointer to a loaded effect file Contains any compile errors to debug your shader

(19)

19 N G -H A N S U N

Pointer to the device, d3ddev

Path and filename of the effect file

Little macro trick that helps to simplify work. Optional, set to 0

Used for sharing parameters between multiple effect files, set to 0 A pointer to the effect file class

created by calling this function

Pointer to the buffer you want to use Pointer to include

directive file

(20)

20

 Suatu technique adalah bagian dari sebuah shader yang didesain untuk level hardware tertentu.

 Jadi, untuk graphics cards yang super special akan mendapat super special treatment, dan sebaliknya.

Ingat pula bahwa biasanya terdapat lebih dari 1 technique, dan Anda harus memberitahu DirectX technique mana yang akan digunakan pada satu waktu.

 Hal ini dapat dilakukan dengan memanggil fungsi FindNextValidTechnique().

 Fungsi ini akan dimulai dari technique pertama yang ditemukannya, menentukan apakah technique itu dapat bekerja dengan hardware setting sekarang atau tidak, dan menggunakannya jika bisa atau mencari ke technique

(21)

21

N G -H A N S U N

An efficient means for referencing the techniques, passes, and other things when dealing with shaders

Get the next valid technique, prototype as below:

A handle to the technique after which we should begin looking

(22)

22

Kita akan mengganti fungsi-fungsi SetTransform() berikut:

Dengan perintah baru berikut:

Fungsi SetMatrix() sama persis seperti SetTransform(), kecuali

pada parameter pertamanya.

Parameter pertama SetTransform() merupakan suatu flag

yang mengindikasikan jenis transformasi yang ditentukan.

 Dalam SetMatrix(), parameter pertama merupakan nama dari parameter dalam shader.

(23)

23

Dalam simple.fx tidak ada

multipassing

, sehingga yang

dilakukan lebih sederhana.

N G -H A N S U N

First param is the number of passes that need to be run for a full rendering, the second param is for flags

Tells DirectX we are beginning a pass and will be rendering with it

Ends the pass

(24)

24

Terakhir, saat

program

selesai, kita harus me-

release

shader

tersebut.

Seperti biasa kita panggil fungsi Release().

(25)

25

Kita telah mempelajari dasar bagaimana DirectX

berinteraksi dengan

shaders

.

Contoh

program

selanjutnya diambil dari

mesh

tutorial minggu ke-7 dan memperlihatkan sebuah

teapot

yang berputar.

Anda memerlukan Simple.fx di dalam

project folder

Anda.

(26)

26

(27)

27

(28)

28

(29)

29

(30)

30

(31)

31

(32)

32

(33)

33

(34)

34

(35)

35

(36)

36

(37)

37

(38)

38

(39)

39

(40)

40

(41)

41

(42)

42

(43)

43

Perhatikan bahwa jika terjadi

crash

saat

program

menjalankan fungsi FindNextValidTechnique(), maka

ganti potongan

code

berikut:

(44)

44

Shader

merupakan

pipeline

dimana informasi 3D

diproses hingga menjadi sebuah gambar 3D.

Terdapat 2 langkah utama dalam me-

render

suatu 3D

model

:

1.

Menghitung posisi pasti dari tiap titik karena akan

muncul di layar

vertex shader

.

2.

Menghitung warna pasti dari tiap

pixel

yang

membangun

model

tersebut

pixel shader

.

Sekarang kita akan mempelajari cara

vertex shader

bekerja dan membangunnya dengan menggunakan

HLSL

code

sederhana.

(45)

45

Sekarang kita akan membangun sebuah

vertex shader

sederhana.

Untuk itu kita perlu menuliskan beberapa HLSL

code

.

Perhatikan contoh

vertex shader

berikut yang

disimpan dalam

file

terpisah dari

file

utama kita.

File

ini akan dinamakan

dxtshader.fx

’,

dan terbagi

atas 3 bagian utama:

1.

The Uniform Input

2.

The Shader Function

3.

The Techniques

(46)

46

(47)

47

Pada 3 baris pertama, Anda akan menemukan

code

:

Variabel-variabel ini mengandung

uniform input data

.

Tipe datanya adalah float4x4, yakni suatu larik 4x4

float

, yang merupakan tipe data khusus dalam HLSL

programs

.

Uniform input variable

bukan hanya merupakan

variabel, namun adalah suatu variabel yang

diteruskan dari

program

DirectX.

(48)

48

Pada materi sebelumnya, kita panggil fungsi SetMatrix() untuk mengirimkan matrices ke shader.

 Jika Anda membandingkan kedua potongan code pada

slide ini dan sebelumnya, Anda akan menemukan kesamaan, yakni parameter pertama dari tiap fungsi

SetMatrix() sama namanya dengan uniform input variables.  Artinya pada saat kita memanggil fungsi SetMatrix() dan

menempatkan suatu string dalam parameter pertamanya, kita juga mengisi nilai dari salah satu variabel-variabel ini. N

(49)

49

Potongan

code

berikutnya adalah suatu fungsi

sederhana (seperti fungsi C++) yang akan

melakukan pemrosesan.

Setiap titik dalam sebuah

model

dilalui, satu per satu,

melalui fungsi ini.

Fungsi ini mengembalikan sebuah

struct

sederhana,

yang berisi seluruh informasi mengenai 2D

vertex

yang baru.

Jadi, hal pertama yang dilakukan adalah

mendefinisikan

return struct

tersebut.

Lalu, kita tulis fungsi yang menghitung dan mengisi

nilai-nilai dalam

struct

tersebut.

(50)

50 N G -H A N S U N

A struct contains position and color info

of the new 2D vertex SEMANTIC, keyword which tells the GPU what this data is being used for

The main function of vertex shader that converse 3D space into screen

space

Return value of the function A 4 by 4 matrix which will process the World, View, and

Projection matrices

Multiplying the three matrices together, using mul() function Multiplying the Transform matrix with

vertex position Setting the color value (r, g, b, a),

(51)

51

Suatu

technique

adalah bagian dari

shader

yang

ditargetkan untuk

level hardware

tertentu.

N G -H A N S U N

Passes are a way of splitting up the technique into different steps. Here we use only 1 pass

It has the same effect as the SetRenderState() that disable lighting

Activates depth rendering

(52)

52

Jadi, inilah

program

HLSL pertama kita.

Untuk menjalankan

program

ini, kita gunakan

source

code project

sebelumnya.

Tidak ada yang berubah, kecuali nama

file shader

.

Selain itu,

effect file

yang digunakan juga akan diubah.

(53)

53

(54)

54

(55)

55

(56)

56

(57)

57

(58)

58

(59)

59

(60)

60

(61)

61

(62)

62

(63)

63

(64)

64

(65)

65

(66)

66

http://directxtutorial.com/

Other web resources.

Referensi

Dokumen terkait

Hasil penelitian ini diharapkan dapat berguna sebagai bahan pertimbangan dalam upaya pemecahan permasalahan yang ada di perusahaan mengenai pengaruh Citra Merek dan Harga

Dari pengertian tersebut diatas, maka dapat dikatakan bahwa seorang dokter dianggap telah melakukan praktek yang buruk manakala dia karena dengan sengaja atau akibat kelalaian

Soil surplus adalah volume air yang akan masuk ke permukaan tanah. Soil surplus = (R  –  Et) –  Soil Storage 0 jika = (R  – Et ) < Soil Storsge

Sedangkan konteks Internasional adalah posisi khusus negara tersebut dalam hubungannya dengan negara lain dalam system internasional itu, dimana merupakan suatu produk

Maka dari itulah dengan meningkatnya kunjungan wisatawan mancanegara sangat mempengaruhi industri kerajinan di Provinsi Bali terutama dalam bidang ekspor (De

Huffman mampu merancang metode kompresi yang paling efisien jenis ini: tidak ada pemetaan lain simbol sumber individu untuk string unik dari bit akan menghasilkan

Cara Penulisan css berikutnya adalah dengan cara menuliskan code css tersebut disebuah file yang terpisah kemudian memanggilnya dengan menggunakan perintah link, untuk

[r]