threeal-archive / research

A personal research repository, but open for public
4 stars 0 forks source link

Bahasan Grafik #16

Closed threeal closed 3 years ago

threeal commented 3 years ago

Task

threeal commented 3 years ago

1 - Pendahuluan

detail bahasan

## Peraturan - no cheating, no copy paste dalam mengerjakan tugas - diperbolehkan diskusi bersama ## Penilaian - 60% programming assignment (4-5 buah, laporan + source code) - 30% exam (UTS dan UAS) - 10% attendance ## Programming Assignment - menggunakan [WebGl](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial) - bahasa utamanya [javascript](https://www.w3schools.com/js/DEFAULT.asp) - pengumpulan laporan melalui [myITS Classroom](https://classroom.its.ac.id/course/view.php?id=6540) dengan menyertakan link ke alamat [GitHub](https://github.com/) dari tugas - keterlambatan pengumpulan **mengurangi nilai sebesar 5% per hari!** ## Buku Referensi (Optional) - Interactive Computer Graphics: A Top-Down Approach with WebGL (7th Edition), by Edward Angel and Dave Shreiner, 2014 - WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL (OpenGL), by Kouichi Matsuda and Rodger Lea, 2013 - Professional WebGL Programming: Developing 3D Graphics for the Web, by Andreas Anyuru, 2012 ## Jadwal Topik - Intro to WebGL - Basic Computer Graphic Algorithms - Transformation - Normal Vector - Projection and Camera - Texture - Etc. - Using these capabilities in WebGL (ex: [GLSL](https://www.khronos.org/opengl/wiki/OpenGL_Shading_Language)) - Modelling and viewing transformations - Geometric modeling - Animation

threeal commented 3 years ago

2 - Overview WebGL

detail bahasan

## Computer Graphics is Used by - Video game industry - revenue of $100B globally in 2017 - studio ex. EA, Bethesda, Valve, etc. - implementasi computer graphics melalui game engine ex. Unreal, Unity, Crytek, etc. - Medical imaging and scientific visualization - imaging one of the biggest advances in medicine (ex. x-ray, ct scan, etc.) - scientific visualization allows people to see previously hidden phenomena (ex. simulasi angin / aerodynamic) - Computer aided design (CAD) - engineering, architecture, the maker movement - example: AutoCAD - Movie industry - sudah sejak sekitar 1990-an (LucasArt, Pixar) - production computer graphics, non interactive - example, avatar, guardian of galaxy, tintin ## Although Production CG is changing ![image](https://user-images.githubusercontent.com/10202888/95722945-c71f1080-0c9e-11eb-82df-800a9fd363f2.png) - penggunaan computer graphic secara real time pada produksi cinema dikenal dengan istilah [machinima](https://en.wikipedia.org/wiki/Machinima) - sangat berguna dalam pembuatan film karena bisa mengurangi waktu ## 3D Graphics: Image Formation ![image](https://user-images.githubusercontent.com/10202888/95723286-2da42e80-0c9f-11eb-8ffe-ed6e16a1da8c.png) - tujuan utama computer graphics adalah untuk menggenerate gambar dua dimensi dari lingkungan tiga dimensi - salah satu pendekatan yang bisa digunakan dalam melakukan computer graphics adalah dengan meniru sistem kamera / mata manusia ## Color ![image](https://user-images.githubusercontent.com/10202888/95723791-bb801980-0c9f-11eb-8ca8-991b7a130eec.png) - skema bagaimana cahaya dipantulkan (tidak akan banyak dibahas di materi ini) ## Synthetic Camera Model ![image](https://user-images.githubusercontent.com/10202888/95723887-dce10580-0c9f-11eb-85ff-b32a7e3b13e3.png) - beberapa bentuk analogi di game seperti FPS, third-person view, top view, - sedangkan di camera analoginya bisa berupa orthographic dan perspective ## Polygonal Model ![image](https://user-images.githubusercontent.com/10202888/95724160-36493480-0ca0-11eb-8354-2fec500d6372.png) - representasi 3d model umumnya menggunkaan bentuk polygonal yang terdiri dari banyak triangle. - di grafik card kadang tercantum spesifikasi kecepatan raster (misal 102M triangles / s) - segitiga digunakan karena efisien, semua bentuk bisa direpresentasikan, dan mudah dalam perhitungan normal ## Pixel Discretization ![image](https://user-images.githubusercontent.com/10202888/95724720-e6b73880-0ca0-11eb-9409-15b7372fff4f.png) - segitiga yang ada akan dirender dengan melihat jarak pada plane di gambar - plane tidak terdapat tepat di mata tapi ada jarak beberapa dari mata - gambar di render untuk ketiga channel warna, red, green, dan blue ## Rendering ![image](https://user-images.githubusercontent.com/10202888/95725211-9096c500-0ca1-11eb-98db-5e9c00c2c988.png) - rendering atau image synthesis merupakan proses untuk menggenerate secara otomatis gambar photorealistic atau non-photorealistic (tidak mendekati foto, seperti kartun) dari 2d maupun 3d model - terdapat dua metode rendering, yakni rasterization, ray tracing (terkadang keduanya bisa digunakan), radiocity (mirip ray tracing, teknologi lama yang sepertinya sudah tidak digunakan). - umumnya game dan film yang baru sekarang menggunakan kedua metode rasterization dan ray tracing ## Rasterization Versus Ray Tracing ![image](https://user-images.githubusercontent.com/10202888/95725491-ed927b00-0ca1-11eb-880b-a1d4119d3e9d.png) - simply cara kerja keduanya berkebalikan, raster menarik polygon ke plane dan kemudian mengisinya, sedangkan ray tracing menarik tiap pixel di plane keluar dan mencari polygon mana yang dikenai ## Ray Tracing ![image](https://user-images.githubusercontent.com/10202888/95725871-6560a580-0ca2-11eb-8ba0-ae4cc2b585bd.png) - berbeda dengan kondisi nyata dimana cahaya dipantulkan objek dan ditangkap mata, pada ray tracing dibalik, kamera menuju ke objek lalu dia lihat pantulannya seperti apa dan disimulasikan ## Rasterization ![image](https://user-images.githubusercontent.com/10202888/95726249-e0c25700-0ca2-11eb-9deb-fc4b5d9556fe.png) - tiap polygon dirender jika ada di lingkup view plane - untuk tiap bentuk primitif - compute illumination - proyeksi ke image plane - fill in pixels (besarnya tergantung resolusi plane) ## Global Versus Local Illumination ![image](https://user-images.githubusercontent.com/10202888/95726928-b9b85500-0ca3-11eb-9b05-8cb4d19385e5.png) - global illumination merupakan campuran dari cahaya yang dipantulkan sendiri dan cahaya yang dipantulkan di sekitarnya - di global illumination, objek tidak bisa dirender secara independent, karena semisal pada kasus objek sepeda maka harus dilihat objek lain apa yang ada diatasnya sehingga sebagian dari objek sepeda itu akan terkena bayangan dan tampak lebih redup ![image](https://user-images.githubusercontent.com/10202888/95727369-3ea36e80-0ca4-11eb-8ee4-02d8272ee2ef.png) - terkadang cahaya akan terpantulkan berkali kali atau ada juga objek yang translucent, sehingga untuk kasus ini ray tracing akan lebih baik, namun rasterization juga bisa digunakan untuk mengatasi hal ini dengan menambahkan teknik-teknik tertentu ## Standard Rasterization Engines ![image](https://user-images.githubusercontent.com/10202888/95727690-b70a2f80-0ca4-11eb-8b38-fc61e87d451a.png) ## Definitions: Pixel and Raster ![image](https://user-images.githubusercontent.com/10202888/95727828-ecaf1880-0ca4-11eb-8859-bc566c0344f3.png) - pixel adalah ukuran terkecil dari gambar yang bisa dikontrol - raster adalah grid dari pixel - pada contoh tersebut terdapat 4 pixel dan 1 raster ## Rasterization ![image](https://user-images.githubusercontent.com/10202888/95727998-25e78880-0ca5-11eb-822f-a45b7c689fec.png) - primitives ada banyak, yang umumnya digunakan adalah segitiga seperti yang sudah dijelaskan sebelumnya - titik pada primitives disebut vertex (jamak vertices) - garis yang menghubungkan vertices adalah edges - aliasing adalah kondisi dimana ada yang hilang pada gambar (tidak jelas dirender atau enggak) ## 3D Graphics Pipeline ![image](https://user-images.githubusercontent.com/10202888/95728251-7d85f400-0ca5-11eb-910c-9125583f4b72.png) - vertex processing, tiap vertex akan diproses, ditransformasi seperti apa, dsb. - fragment bukan pixel tetapi pasangan dari lokasi 2 dimensi yang ada di raster dengan sebuah warna, proses dari shading. ## Rasterization is a Pipeline ![image](https://user-images.githubusercontent.com/10202888/95728519-cb026100-0ca5-11eb-9324-af65e3d57b15.png) - tiap grafik card akan diinputkan beberapa data seperti yang ada di gambar - umumnya terdapat dua shader, vertex shader dan fragment shader ## Vertex Shader ![image](https://user-images.githubusercontent.com/10202888/95728868-3ea46e00-0ca6-11eb-9176-0600adfdf7a5.png) - selain koordinat, tiap vertex juga terkadang memiliki warna ## Changing Coordinate Systems ![image](https://user-images.githubusercontent.com/10202888/95729004-698ec200-0ca6-11eb-8c8d-fc28c84eca75.png) ![image](https://user-images.githubusercontent.com/10202888/95729335-f6d21680-0ca6-11eb-8174-242e6e8b7903.png) - complex geometry (curves) seperti [b-spline](https://en.wikipedia.org/wiki/B-spline), bisa dipakai juga di animasi ![image](https://user-images.githubusercontent.com/10202888/95729637-5af4da80-0ca7-11eb-8ab0-8ee92378f254.png) - agar meringankan proses, objek yang terkena clipping tidak akan diproses (dirender) ## Rasterization ![image](https://user-images.githubusercontent.com/10202888/95729807-97283b00-0ca7-11eb-971e-3ba97f2f8fa8.png) - interpolate, sebagai contoh pada atribute warna di tiap vertex akan diinterpolasi sehingga warnanya akan tergradasi ## Pipeline Step: Fragment Processing ![image](https://user-images.githubusercontent.com/10202888/95729959-d0f94180-0ca7-11eb-85cc-19a524c167e8.png) - z-buffer merupakan peta kedalaman dari warna, jika z-buffer lebih rendah maka tidak akan ditulis kembali di fragment ## WebGL ![image](https://user-images.githubusercontent.com/10202888/95730238-2c2b3400-0ca8-11eb-98bf-337aa0e2cc46.png) ## Programming Language for This Course ![image](https://user-images.githubusercontent.com/10202888/95730538-9512ac00-0ca8-11eb-8864-6fb181aa9253.png) ## What's WebGL? ![image](https://user-images.githubusercontent.com/10202888/95730635-bbd0e280-0ca8-11eb-95e2-38ffc1e5f62e.png) - windowing merupakan proses pembentukan canvas / jendela untuk menggambar - sejak versi 3 shader baru bisa diprogram, sebelumnya pipelinenya fixed ## WebGL is not Exactly OpenGL ![image](https://user-images.githubusercontent.com/10202888/95731066-3d287500-0ca9-11eb-89d7-885f908ec0da.png) - OpenGL ES merupakan OpenGL untuk embedded system - di OpenGL 4.3 sudah ada 4 jenis shader yang bisa diprogram, sedangkan di WebGL yang kita pakai sekarang masih 2 ## WebGL Application Structure ![image](https://user-images.githubusercontent.com/10202888/95731345-9c868500-0ca9-11eb-9d07-fdfe69254e94.png) ## WebGL & GLSL ![image](https://user-images.githubusercontent.com/10202888/95731464-c0e26180-0ca9-11eb-8004-2ab94971c65b.png) - Microsoft HLSL dipakai untuk DirectX - NVIDIA CG khusus untuk hardwarenya NVIDIA ## Shader ![image](https://user-images.githubusercontent.com/10202888/95731903-45cd7b00-0caa-11eb-9a7b-166930b33643.png) ## Simple Vertex Shader ![image](https://user-images.githubusercontent.com/10202888/95731950-52ea6a00-0caa-11eb-9687-2af215d353d6.png) ## What a Vertex Shader Does? ![image](https://user-images.githubusercontent.com/10202888/95732141-9cd35000-0caa-11eb-8f40-7fa2211c0033.png) - vec3 = vektor ukuran 3 - mat4 = matrix 4x4 ## Simple Fragment Shader ![image](https://user-images.githubusercontent.com/10202888/95732229-bf656900-0caa-11eb-949c-d58a33645567.png) ## What a Vertex Fragment Does? ![image](https://user-images.githubusercontent.com/10202888/95732413-e9b72680-0caa-11eb-93fd-d0701afddb01.png) ## Processing on a GPU ![image](https://user-images.githubusercontent.com/10202888/95732457-f5a2e880-0caa-11eb-8536-95bd20d82899.png) - GPU processornya kecil kecil tapi banyak ![image](https://user-images.githubusercontent.com/10202888/95732532-11a68a00-0cab-11eb-926b-63a4aa4f2c22.png)

threeal commented 3 years ago

4 - Affine Transformation

detail bahasan

## Coordinate Transformation ![image](https://user-images.githubusercontent.com/10202888/96962121-5d212980-1530-11eb-9261-f33151a1c919.png) - Model coordinate merupakan titik 0, 0 (tengah) yang relative dengan titik titik yang memodelkan objek tersebut - Viewing coordinate = camera coordinate ![image](https://user-images.githubusercontent.com/10202888/96962543-39121800-1531-11eb-946c-7cac6528292e.png) ![image](https://user-images.githubusercontent.com/10202888/96962642-71b1f180-1531-11eb-9e04-ed581d266343.png) ## Math ![image](https://user-images.githubusercontent.com/10202888/96962760-a6be4400-1531-11eb-8d17-3c0d2eea6eaa.png) ![image](https://user-images.githubusercontent.com/10202888/96962881-dec58700-1531-11eb-8623-4716150bfcaa.png) ![image](https://user-images.githubusercontent.com/10202888/96962896-e84eef00-1531-11eb-9536-1daff5c15b37.png) ![image](https://user-images.githubusercontent.com/10202888/96962959-0a487180-1532-11eb-962c-47d073943613.png) ![image](https://user-images.githubusercontent.com/10202888/96963077-33690200-1532-11eb-9716-2f3cdcac30c4.png) ![image](https://user-images.githubusercontent.com/10202888/96963137-5398c100-1532-11eb-999d-7cfc9eac7b92.png) ## Linear Transformation ![image](https://user-images.githubusercontent.com/10202888/96963243-8773e680-1532-11eb-9baf-23405bba630b.png) ## Affine Transformation ![image](https://user-images.githubusercontent.com/10202888/96963337-b4c09480-1532-11eb-9392-4b6890105395.png) - gabungan dari linear transformation dan constant vector ## Homogenous Coordinates ![image](https://user-images.githubusercontent.com/10202888/96963565-0a953c80-1533-11eb-8857-4712cbcacebf.png) ## Order Dependence ![image](https://user-images.githubusercontent.com/10202888/96963621-213b9380-1533-11eb-9495-40922bb05514.png) - urutan transformasi berpengaruh padi hasil matrix ## Window to Viewport ![image](https://user-images.githubusercontent.com/10202888/96963680-3d3f3500-1533-11eb-8121-5941854381a6.png) ## 2D Rotation ![image](https://user-images.githubusercontent.com/10202888/96963751-6d86d380-1533-11eb-8621-d387f6465403.png) ## 3D Affine Transformation ![image](https://user-images.githubusercontent.com/10202888/96963971-d3735b00-1533-11eb-98d3-dc29825b4d74.png) ## 3D Rotation ![image](https://user-images.githubusercontent.com/10202888/96964039-edad3900-1533-11eb-9d30-60b4e8caae24.png) ## Graphics Pipeline ![image](https://user-images.githubusercontent.com/10202888/96964058-fa319180-1533-11eb-8acc-2f2b61b0d896.png) ## Transformation Order ![image](https://user-images.githubusercontent.com/10202888/96964102-0ddcf800-1534-11eb-8e69-e0a1b933f501.png) - Rotasi dulu baru translasi (M T R) agar koordinat sumbu rotasi tidak berubah dikarenakan translasi

threeal commented 3 years ago

6.1 - Basic Animation

detail bahasan

## Simple Animation With WebGL ![image](https://user-images.githubusercontent.com/10202888/98312415-4258b580-2004-11eb-9b65-b6a27c3f6be7.png) - yang jelas dalam prosesnya perlu matrix - [glMatrix](http://glmatrix.net/) salah satu tools untuk pembuatan matrix di javascript ## Transforming Geometry in the Vertex Shader ![image](https://user-images.githubusercontent.com/10202888/98312630-b6935900-2004-11eb-9107-316de9fec484.png) ## Getting the Transformation to the Shader ![image](https://user-images.githubusercontent.com/10202888/98314191-0aec0800-2008-11eb-9b46-940811271412.png) ## Requesting an Animation Frame ![image](https://user-images.githubusercontent.com/10202888/98312946-59e46e00-2005-11eb-9915-c3820d365ad4.png) - (tambahan) gl.DEPTH_TEST mengenable depth test, sehingga titik yang berada di depan akan dirender, sedangkan yang dibelakang tidak akan dirender ## Request Animation Frame ![image](https://user-images.githubusercontent.com/10202888/98314238-235c2280-2008-11eb-837a-ad8d623b4273.png) - untuk browser baru mungkin sudah bisa menggunakan requestAnimationFrame saja ## Animation ![image](https://user-images.githubusercontent.com/10202888/98313330-28b86d80-2006-11eb-827a-b7d8f0f3f9b3.png) ## Using Wall Clock Time ![image](https://user-images.githubusercontent.com/10202888/98313414-5bfafc80-2006-11eb-9e1f-8eab3039611a.png) ![image](https://user-images.githubusercontent.com/10202888/98313473-8351c980-2006-11eb-83fc-d8aaeaefcafe.png) - alasannya karena framerates bisa berbeda ## Interpolation and Key Frames ![image](https://user-images.githubusercontent.com/10202888/98313641-de83bc00-2006-11eb-9044-babd7e1ef06a.png) ## Linear Interpolation ![image](https://user-images.githubusercontent.com/10202888/98313569-b85e1c00-2006-11eb-9349-3f4905b51cf1.png) - biasa disebut juga dengan lerp ![image](https://user-images.githubusercontent.com/10202888/98313804-36babe00-2007-11eb-85e2-e5d89eaeb444.png) - untuk 3 dimensi tinggal menambah bagian out[2] ![image](https://user-images.githubusercontent.com/10202888/98313845-505c0580-2007-11eb-8631-cd2c44406824.png) - interpolasi tidak hanya linear, ada juga banyak yang lain ## Triangle Meshes are Linear Interpolants ![image](https://user-images.githubusercontent.com/10202888/98313919-7c778680-2007-11eb-9007-23b13556e221.png)

threeal commented 3 years ago

6.2 - Hierarchical Model

detail bahasan

## Hierarchical Modeling ![image](https://user-images.githubusercontent.com/10202888/98314573-d593ea00-2008-11eb-9747-f96fb0686fa8.png) - hierarchical model pasti akan digunakan karena kita tidak akan memodelkan secara utuh, terutama bagian bagian yang ingin dianimasikan perlu dipisah dengan yang statik - di sini bagian statiknya adalah tubuh berwarna merah ## Build a Robot ![image](https://user-images.githubusercontent.com/10202888/98314736-3ae7db00-2009-11eb-8637-8f846603a355.png) - (catatan) cara old style di OpenGL ## Hierarchical Modeling in WebGL ![image](https://user-images.githubusercontent.com/10202888/98315152-26581280-200a-11eb-8813-669e48493ebd.png) ![image](https://user-images.githubusercontent.com/10202888/98315217-51426680-200a-11eb-94fb-54212b9bf125.png) - (catatan) cara old style di WebGL ## Orthogonal Projection in WebGL ![image](https://user-images.githubusercontent.com/10202888/98315320-88b11300-200a-11eb-8f4d-cafd82e56e00.png)

threeal commented 3 years ago

EAS sudah berakhir, have a nice day

threeal commented 3 years ago

Masih ada tanggungan FP

threeal commented 3 years ago

FP selesai