Upgrade to PRO for Only $50/YearâLimited-Time Offer! ð¥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Simplest Vulkan Tutorial in Japanese
Search
Tengu712
May 22, 2023
Programming
0
2.5k
Simplest Vulkan Tutorial in Japanese
It describes the theory of rendering with Vulkan.
Tengu712
May 22, 2023
Tweet
Share
More Decks by Tengu712
See All by Tengu712
My frontend framework for 2D game, TECH UNIVERSITY LT Summit, July 9, 2023
tengu712
0
180
Other Decks in Programming
See All in Programming
MAP, Jigsaw, Code Golf æ¯ãè¿ãäŒ by 颿±KaggleräŒ|Jigsaw 15th Solution
hasibirok0
0
210
Why Kotlin? é»åã«ã«ãã Kotlin ã§éçºããçç± / Why Kotlin? at Henry
agatan
2
6.4k
èè ãšé²ããïŒãAIãšå人éçºããããªã£ãããŸãCursorã§èŠä»¶å®çŸ©ã ïŒã
yasunacoffee
0
120
sbt 2
xuwei_k
0
200
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
Herb to ReActionView: A New Foundation for the View Layer @ San Francisco Ruby Conference 2025
marcoroth
0
240
AIãšãŒãžã§ã³ããæŽ»ããPMè¡ AIé§åéçºã®çŸå Žãã
gyuta
0
240
ZOZOã«ãããAI掻çšã®çŸåš ~ã¢ãã€ã«ã¢ããªéçºã§ã®AI掻çšç¶æ³ãšäºäŸ~
zozotech
PRO
8
4.2k
AIã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãïŒNotebookLMïŒ
kondai24
0
130
30åã§Doctrineã®ä»çµã¿ãšäœ¿ãæ¹ãå®å šã«ãã¹ã¿ãŒãã / phpconkagawa 2025 Doctrine
ttskch
3
740
èªèšŒã»èªå¯ã®åºæ¬ãåŠãŒãåç·š
kouyuume
0
170
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
140
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Whatâs in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
A Tale of Four Properties
chriscoyier
162
23k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Why Our Code Smells
bkeepers
PRO
340
57k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How to train your dragon (web standard)
notwaldorf
97
6.4k
Bash Introduction
62gerente
615
210k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Transcript
Simplest Vulkan Tutorial 倩ç(Tengu712) 1
ã¯ããã« 2
ã³ã³ã»ãã ç¶²çŸ çã代åã«ãæ£ãããæã£ãŠãç°¡åã«éç¿ããããšã ä»ã®ãã¥ãŒããªã¢ã«ã§ã¯è»œèŠãããã¡ãªãçè«ãã®éšåã«éç¹ã眮ãã èªã¿ããããããããããã詊ããããããæèããŠããã åœã¹ã©ã€ããèŠãŠãããã°ã©ã ã¯çµããªãã åœã¹ã©ã€ããèŠãŠãããã°ã©ã ã俯ç°ã§ããããã«ããŠã»ããã 3
æ³å®ã®å¯Ÿè±¡è å±€ 次ã®çšåºŠã®ãªãã©ã·ãŒã¯æäœé欲ããïŒ è¡åã®ç©ãåãã ã³ã³ãã¥ãŒã¿ã¢ãŒããã¯ãã£ãå°ãåãã 4
ãµã³ãã«ã³ãŒã æ¬ã¹ã©ã€ãã«ã¯äžåæ²èŒããªããé©å®ä»¥äžã®ãªã³ã¯ãåç §ããŠã»ããã https://github.com/Tengu712/Vulkan-Tutorial å°ãç¬ç¹ãªã³ãŒãã£ã³ã°èŠåã«ã€ããŠã以äžã®ããïŒ åæ°ã«äžéãªã ifã®åå²åŸåœä»€ãäžã€ãªãäžæ¬åŒ§ãªã ifã®åå²åŸåœä»€ãäžã€ãã€breakãcontinueãreturnãªãæ¹è¡ æ§é äœã®å®äœã¯åæååã§åæå åæååå ã¯äœçšçããªãéãæ¹è¡ å¿ èŠä»¥äžã«é¢æ°ã»ã¢ãžã¥ãŒã«åå²ããªã
5
åèæç® ã©ã®ãããåèãããã¯ãšãããããŒããVulkanãå匷ããäžã§åèã«ããå ¬åŒæç® ãé€ãæç®(æ¬ç§°ç¥)ïŒ ãããããVulkan Programming Vol.1ã Fadisã3Dã¯ãã©ãã£ã¯ã¹API Vulkanãåºæ¥ãããããããã解説ããæ¬ã ããŠããããã£ãŠããVulkanå ¥éã Alexander
OvervoordeãVulkanTutorialã vblanco20-1ãVulkanGuideã 6
RenderDoc ã°ã©ãã£ãã¯ããã°ã©ãã³ã°ãããŠãããšã ãã³ã³ãã€ã«ãšã©ãŒãã©ã³ã¿ã€ã ãšã©ãŒããªããæ ããªãã ãªããŠããšãããã£ã¡ã ãããã RenderDocã䜿ããšä»¥äžã確èªã§ããããããããå©çšãã¹ãïŒ ã«ã©ãŒãããã¡ãããã¹ãããã¡ åã¹ããŒãã®èšå® åã·ã§ãŒãã®å ¥åãšåºå ããã¹ãã¹ãã®çµæ https://renderdoc.org/
7
VulkanæŠèŠ 8
Vulkanãšã¯ ã°ã©ãã£ãã¯ã¹APIã®äžçš®ã OpenGLã®åŸç¶ãåŸæ¥ã®APIããäœæ°Žæºã§èªç±ã 9
ã°ã©ãã£ãã¯ã¹APIãšã¯ äž»ã«ã¬ã³ããªã³ã°ãç®çãšãããGPUãæ±ãããã®APIã ããªãAPIãä»ãã®ãïŒã GPUã®ã¢ãŒããã¯ãã£ã¯éå ¬éã§ããããšãå€ããã¢ã»ã³ããªãæžãã®ãçŸå®çã§ãª ãããã ããªãGPUã䜿ãã®ãïŒã çŸç¶ã®äžŠåèšç®åãæ¯èŒããŠCPUããGPUã®æ¹ãã¬ã³ããªã³ã°åŠçã«åŒ·ããã 10
ã¬ã³ããªã³ã°ãšã¯ ç»é¢ã«å³åœ¢ãæç»ããããšãææ³ã¯è²ã èããããã äž»èŠã°ã©ãã£ãã¯ã¹APIã§ã¯ãäžã€ã®å¯Ÿè±¡ã«å¯ŸããŠãã€ãã©ã€ã³åŠçãè¡ãã ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ãšèšãã 11
ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ æç»å¯Ÿè±¡ãåŠçããå·¥çšãå€ãã¯å€§éæã«ä»¥äžã®ããïŒ 1. ã€ã³ãããã¢ã»ã³ãã© 2. ãŽã¡ãŒããã¯ã¹ã·ã§ãŒã 3. ãã¥ãŒããŒã倿 4. ã©ã¹ã¿ã©ã€ãŒãŒã·ã§ã³
5. ãã©ã°ã¡ã³ãã·ã§ãŒã 6. åæ 12
Input Assembler Vertex Shader Geometry Shader Tesseration Control Shader Tessellation
Primitive Generator Tessellation Evaluation Shader Draw Vertex Post-Processing Rasterization Early Per-Fragment Tests Fragment Shader Late Post-Fragment Tests Blending Index Buffer Indirect Buffer Vertex Buffer Depth/Stencil Attachments Input Attachments Color Attachments Descriptor Sets Push Constants Uniform Buffer Uniform Texel Buffers Sampled Images Storage Buffers Storage Texel Buffers Storage Images Vulkanã®ã¬ã³ ããªã³ã°ã〠ãã©ã€ã³ æŠãå³ã®éãã åèå ïŒ Khronos Group, Vulkan 1.1 Quick Reference 13
Input Assembler Vertex Shader Draw Vertex Post-Processing Rasterization Early Per-Fragment
Tests Fragment Shader Late Post-Fragment Tests Blending Index Buffer Vertex Buffer Depth/Stencil Attachments Color Attachments Descriptor Sets Push Constants Uniform Buffer Sampled Images ä»åæ±ãéšå 14
ããã°ã©ãã¯äœãããã°ããã Vulkanã«è©³çްãªèšå®ãäžããŠãVulkanãä»ããŠGPUã«èšç®ãããã é£ããã¢ã«ãŽãªãºã ãèããå¿ èŠã¯çç¡ããšã«ãã仿§ãšçšãã£ãã 15
GPUãæ±ãããã« 16
GPUã¯é éãªãœãŒã¹ æ®éGPUã¯ãCPUãšéåæã«åäœããããã€ã¹ã ãŸãGPUã¯ãPCI-Expressãä»ããŠã¡ã€ã³ã¡ã¢ãªã«ã¢ã¯ã»ã¹ã§ãããã ãã®ã¡ã¢ãªç®¡çãŠãããã¯CPUã®ãã®ãšç°ãªãã åŸã£ãŠãéåæåŠçã倧åæãšãªãã 17
ãã¥ãŒãšã³ãã³ã GPUã«èšç®ããããããã«ã¯ãGPUã®ã³ãã³ããã¥ãŒã«ã³ãã³ããæµãã Vulkanã«ãããŠã¯ãã³ãã³ããããã¡ã«ã³ãã³ããç©ãã§ãããã³ãã³ããããã¡ã ãšãã¥ãŒã«æåºããã ã³ã¬ã¯ã·ã§ã³ã® push_all ã¡ãœããã¿ãããªã æåºããããªããGPUã¯éåæã«èšç®ãå§ããã 18
åæã®åãæ¹ CPU-GPUé ãã§ã³ã¹ãçšããã ã³ãã³ããããã¡ããã¥ãŒã«æåºããéããã§ã³ã¹ãæå®ã§ããã æåºããã³ãã³ãããã¹ãŠåŠçããããŸã§ vkWaitForFences 颿°ã§CPUãäŒæ¢ã§ã ãã vkDeviceWaitIdle 颿°ãçšããã
ããã»ã¹ããæåºããããã¹ãŠã³ãã³ããåŠçããããŸã§CPUãäŒæ¢ã§ããã GPU-GPUé ã»ããã©ãçšããã GPU-GPUéã§åæãåãã¹ãåŠçåæã§æå®ããã 19
ã¡ã¢ãªã®çš®é¡ ã¡ã¢ãªã«ã¯å°ãªããšã以äžã®äºçš®é¡ãããïŒ ã¡ã€ã³ã¡ã¢ãª(RAM)ïŒCPUãæ±ãã®ã«é©ããã¡ã¢ãª ããã€ã¹ã¡ã¢ãª(VRAM)ïŒGPUãæ±ãã®ã«é©ãããCPUãæ±ããªãã¡ã¢ãª GPUããã¡ã€ã³ã¡ã¢ãªäžã®ããŒã¿ãæ±ãããã«ã¯ã PCI-Expressãä»ããããããã€ã¹ã¡ã¢ãªäžã®ããŒã¿ãæ±ãããé ãã GPUããæ±ããªãã»åæååŸã«æŽæ°ããªãããŒã¿ã¯ãããã€ã¹ã¡ã¢ãªã«æ ŒçŽããã®ã è¯ãã 20
ããã€ã¹ã¡ã¢ãª CPUã¯ããã€ã¹ã¡ã¢ãªãçŽæ¥æ±ããªãããã CPUããããã€ã¹ã¡ã¢ãªäžã«ããŒã¿ãæ ŒçŽããå Žåã¯ã以äžã®æé ãèžãïŒ 1. ããã€ã¹ã¡ã¢ãªã確ä¿ãã 2. ã¡ã€ã³ã¡ã¢ãªã«ã¹ããŒãžã³ã°ãããã¡ã確ä¿ãã 3. ã¹ããŒãžã³ã°ãããã¡ã«ããŒã¿ãæ ŒçŽãã 4.
ã³ããŒã³ãã³ããçšããŠã GPUã«ã¹ããŒãžã³ã°ãããã¡ã®ããŒã¿ãããã€ã¹ã¡ã¢ãªãžã³ããŒããŠããã 21
ç»é¢ãäžè²ã«ã¯ãªã¢ãã 22
æç»ã®ä»çµã¿ (äžç¢ºå®æ å ±) ããã¬ãŒã ãããã¡ããšã¯ãããã€ã¹ã¡ã¢ãªäžã«ååšããæç»è¡šç€ºé åã ãã£ã¹ãã¬ã€å¹ xãã£ã¹ãã¬ã€é«xãã¯ã»ã«ãµã€ãº ã®ãµã€ãºã®è²æ å ±é åã ãã£ã¹ãã¬ã€ã®ã¹ãã£ã³ã¿ã€ãã³ã°ã«åãããŠããã¬ãŒã ãããã¡ãããã£ã¹ãã¬ã€ ãžè»¢éããããšã§ããã£ã¹ãã¬ã€ã«æ åã衚瀺ãããã ãã¶ã転éã¯ãGPUã«ãã£ãŠCPUãšã¯éåæçã«è¡ãããã 23
åçŽåæ (äžç¢ºå®æ å ±) ãã£ã¹ãã¬ã€ã®èµ°æ»ç·ãå³äžããå·Šäžã«æ»ãã¿ã€ãã³ã° ããããïŒãç»é¢ã®æŽæ°ãå®äºããŠæ¬¡ã®æŽæ°ãå§ãŸããŸã§ã®ã¿ã€ãã³ã° ã«åãããããšã ã¢ããªãåçŽåæãåããã«ãã¬ãŒã³ããŒã·ã§ã³ãè¡ã ããããïŒããã£ã¹ãã¬ã€ãžè»¢éäžã®ãã¬ãŒã ãããã¡ã«æžã蟌ã¿ãè¡ã 24
ã¹ã¯ãããã§ãŒã³ (äžç¢ºå®æ å ±) VulkanãçšããŠããã¬ãŒã ãããã¡ãã«æžã蟌ãããã«ã¯ã ã¹ã¯ãããã§ãŒã³ãçšããã 1. ãŠã£ã³ããŠã®ãµãŒãã§ã¹(ã®ãµã€ãºç)ã«å¿ããã¹ã¯ãããã§ãŒã³ãäœæãã 2. ã¹ã¯ãããã§ãŒã³ã®æ±ããã€ã¡ãŒãžã®ã€ã¡ãŒãžãã¥ãŒãäœæãã 3. ã¬ã³ããŒãã¹ãäœæãã
4. ã¬ã³ããŒãã¹ãšã¹ã¯ãããã§ãŒã³ã€ã¡ãŒãžãã¥ãŒãšãé¢é£ãããã ãã¬ãŒã ãããã¡ãäœæãã 5. ãã¬ãŒã ãããã¡ãä»ããŠã¹ã¯ãããã§ãŒã³ã€ã¡ãŒãžãžã¬ã³ããªã³ã°ãè¡ã 6. ãã¬ãŒã³ããŒã·ã§ã³ãè¡ã£ãŠããã¬ãŒã ãããã¡ããžæžã蟌ã 25
ã¬ã³ããŒãã¹ æç»ã®å šäœã®åããå¶åŸ¡ãããªããžã§ã¯ãã ã©ã®ã¢ã¿ããã¡ã³ã(æç»å ã€ã¡ãŒãžãããã¹ãããã¡)ãçšããã ã©ã®é çªã§ã©ãæç»ããã ã¬ã³ããªã³ã°ãã€ãã©ã€ã³çã®å ·äœçãªæç»å·¥çšã¯ç€ºããªãã ã¬ã³ããŒãã¹ãéå§ãããšããã¢ã¿ããã¡ã³ããã¯ãªã¢ã§ããã ã«ã©ãŒã¢ã¿ããã¡ã³ããªãäžè²ã«ã¯ãªã¢ã§ããã 26
ç»é¢ãäžè²ã«ã¯ãªã¢ãã æºåïŒ 1. ãµãŒãã§ã¹äœæ 2. ãµãŒãã§ã¹ã«å¿ããã¹ã¯ãããã§ãŒã³äœæ 3. ã¹ã¯ãããã§ãŒã³ã€ã¡ãŒãžã®ã€ã¡ãŒãžãã¥ãŒäœæ 4. ã«ã©ãŒã¢ã¿ããã¡ã³ããçšããã¬ã³ããŒãã¹äœæ
5. ã¬ã³ããŒãã¹ãšã¹ã¯ãããã§ãŒã³ã€ã¡ãŒãžãã¥ãŒãé¢é£ãããã ãã¬ãŒã ãããã¡äœæ 27
ç»é¢ãäžè²ã«ã¯ãªã¢ãã æç»ïŒ 1. ã³ãã³ããããã¡éå§ 2. ã¬ã³ããŒãã¹éå§ ãã®ãšããã¢ã¿ããã¡ã³ãã®åæå€(ã¯ãªã¢è²)ãæå® 3. ã¬ã³ããŒãã¹çµäº 4.
ã³ãã³ããããã¡çµäº 5. ã³ãã³ããããã¡ããã¥ãŒã«æåº 6. ãã¬ãŒã³ããŒã·ã§ã³ã³ãã³ãããã¥ãŒã«è¿œå åçŽåæããªã³ãªãã°ãåçŽåæãåã£ãŠãããã¡ã«æžã蟌ãŸãã æžã蟌ãŸãããŸã§ã¹ã¬ãããäŒæ¢ãã 28
é ç¹å ¥å 29
0 1 2 3 4 Strip 0 1 2 3
4 5 Fan 0 1 3 5 8 List 2 4 7 6 ããªãŽã³ã®äœãæ¹ äžè§åœ¢ãç¹ãåãããŠã¢ãã«å šäœãäœãã ããããäžè§åœ¢ã¯äžã€ã®é ç¹ãé ã«çµãã§äœãã çµã³æ¹ã«çš®é¡ããããã€ã³ãããã¢ã»ã³ãã©ã«èšå®ã ããäž»ã«ä»¥äžïŒ TRIANGLE_LIST TRIANGLE_STRIP TRIANGLE_FAN 30
é ç¹ãããã¡ãšã€ã³ããã¯ã¹ãããã¡ é ç¹æ å ±ãçŸ åãããé ç¹ãããã¡ããš é ç¹ãçµã¶é çªãçŸ åãããã€ã³ããã¯ã¹ãããã¡ãã ã€ã³ãããã¢ã»ã³ãã©ã«æž¡ãã 31
é ç¹æ å ± äžã€ã®é ç¹ã¯è€æ°ã®æ å ±ãæã¡ããã ããŒã«ã«åº§æš UVåº§æš æ³ç·ãã¯ãã« é ç¹è² é ç¹ããšã®ãã©ã¡ãŒã¿ é ç¹ã·ã§ãŒããžã®å ¥åãšãªããããããŒã¿æ§é ãé ç¹ã·ã§ãŒãã«æããŠããã 32
é ç¹ã·ã§ãŒã 33
é ç¹ã·ã§ãŒã Vertex Shader Rasterization Fragment Shader ã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã®ã¹ããŒãžã®äžã€ã äž»ã«é ç¹åº§æšå€æãè¡ãã ããã°ã©ããã«ãGLSLãHLSLçã§èšè¿°ããã Vulkanã§ã¯ãããã«SPIR-Vã«ã³ã³ãã€ã«ãããã®ãçšããã
34
é ç¹åº§æšå€æ Vulkanã®æ±ã座æšç³»ãã¯ãªããã³ã°åº§æšç³»ãšããã æç»å¯Ÿè±¡ãšãªãç¯å²ã¯ã ã ã ã ã äžè¬çã«æ¬¡ã®é ã§åº§æšç³»ãå€ããŠããïŒ 1. ããŒã«ã«åº§æšç³»ïŒã¢ãã«å ã®åº§æš
(å ¥å) 2. ã¯ãŒã«ã座æšç³»ïŒ3D空éã®çµ¶å¯Ÿåº§æš 3. ãã¥ãŒåº§æšç³»ïŒã«ã¡ã©ããèŠãåº§æš 4. (èŠéå°å ã®åº§æšç³»)ïŒæ£èŠåãããåã®åº§æš (åºå) æçµçã«ãå£è¿°ãããã¥ãŒããŒã倿ã«ãã£ãŠã¯ãªããã³ã°åº§æšç³»ãžå€æãããã 35
ããŒã«ã«åº§æš ããŒã«ã«åº§æšããã³å倿åŸã®åº§æšã以äžãšããïŒ ããã«å·Šããè¡åããããããšã§å€æããŠããã ããããã¢ãã£ã³å€æã åè¡ç®ã®å€ã¯ãèšç®äžç¹ã«å¹³è¡ç§»åã§åœ¹ã«ç«ã¡ãæçµçã«ã¯çž®å°çã衚ãã 36
ã¯ãŒã«ã座æšå€æ 次ã®é ã§è¡ãã®ãè¯ã (ã€ãŸã次ã®é ã§è¡åãå³ãã䞊ã¹ã)ïŒ 1. æ¡å€§çž®å° 2. å転 3. å¹³è¡ç§»å 37
ã¯ãŒã«ã座æšå€æ (æ¡å€§çž®å°) 38
ã¯ãŒã«ã座æšå€æ (x軞åšãã®å転) å転è§ã ã©ãžã¢ã³ãšããŠïŒ 39
ã¯ãŒã«ã座æšå€æ (Y軞åšãã®å転) å転è§ã ã©ãžã¢ã³ãšããŠïŒ 40
ã¯ãŒã«ã座æšå€æ (Z軞åšãã®å転) å転è§ã ã©ãžã¢ã³ãšããŠïŒ 41
ã¯ãŒã«ã座æšå€æ (å¹³è¡ç§»å) 42
ãã¥ãŒåº§æšå€æ å¹³è¡ç§»åè¡å 軞åšãã®å転è¡å 軞åšãã®å転è¡å 軞åšãã®å転è¡å ãšããŠããã¥ãŒåº§æšå€æè¡åã¯ã 43
å°åœ±å€æ (å¹³è¡æåœ±) é è¿æãã€ããªãã ã ã«ãªãã®ã§ãå®è³ªçã«ã¯ãªããã³ã°åº§æšç³»ãžå€æããã å¹ ã ãé«ãã ãæ·±ãã ãšãããšã 44
å°åœ±å€æ (éèŠæåœ±) é è¿æãã€ããã ã¯ãã¥ãŒåº§æšç³»ã«ããã ãšãªãã èŠéè§ã®ååã ãã¢ã¹ãã¯ãæ¯ã ãåè¿é¢ã®z座æšã ãé æ¹é¢ã®z座æšã ãšãããšã
45
泚æç¹ å°ãªããšãVulkan+GLSLã§ã¯ãååªå ãªã®ã§ã転眮ããç¶æ ã§ã·ã§ãŒãã«æž¡ãã // æ®éã®åŠçç³» float mat4x4[][] = { { a11,
a12, a13, a14 }, { a21, a22, a23, a24 }, { a31, a32, a33, a34 }, { a41, a42, a43, a44 }, }; // ã·ã§ãŒãã«æž¡ãããšã { a11, a21, a31, a41, a12, a22, a32, ... } 46
é ç¹ã·ã§ãŒã ~ ãã©ã°ã¡ã³ãã·ã§ãŒã 47
åœ¹å² Vertex Shader Rasterization Fragment Shader åé ç¹ã®èšç®ãããåãã¯ã»ã«ã®èšç®ãžã®ç§»è¡ã é ç¹ã·ã§ãŒãããã®åºåã®å ã stat ã§ãªãå€ã®è£å®ã
48
ãã¥ãŒããŒã倿 é ç¹ã·ã§ãŒãã®åºåãã¯ãªããã³ã°åº§æšç³»ã«å€æããã ããã¥ãŒããŒãäžã®åº§æšã ãæ·±åºŠå€ãšãªãã 49
0 1 2 衚 0 1 2 è£ ã«ãªã³ã° è£é¢ãåããŠããããªãŽã³ãåé€ããã
ãã©ã°ã¡ã³ãã·ã§ãŒãã®èšç®éãæããããã«è¡ã ããã 衚è£å€å®ã¯ãé ç¹ã®çµã¶åããæèšåããåæèšå ããã§è¡ãã OpenGLç³»ã§ã¯æ £ç¿çã«åæèšåãã衚ãšããã 50
ã©ã¹ã¿ã©ã€ãºãšãã«ããµã³ãã« ã» ã» ã» ã» ã» ã» ã» ã» ã»
ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» ã» åãã¯ã»ã«ã«å¯ŸããŠå³åœ¢ã®å å€å€å®ãè¡ãã ãµã³ãã«ã®æ°ãå¢ããcoverageå€ãç®åºããããšã§æ»ããã«æç»ããããšãã ãã«ããµã³ãã«ãšããã 51
ããã¹ãã¹ã 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0.2 0.2 1 1 0.2 0.2 1 1 0.2 0.2 1 1 1 1 1 1 0.2 0.2 1 0.6 0.2 0.2 0.6 0.6 0.2 0.2 0.6 0.6 0.6 0.6 0.6 ããã¹ãããã¡ãåæå è¿ãã¢ãã«ãæç» é ãã¢ãã«ãæç» ããã¹ãããã¡äžã®å€ãšæ¯èŒããŠããã¯ã»ã«ãæç»ãããåŠã決ããã 52
éèŠæåœ±å€æè¡åã®çœ åè¿é¢ã®z座æšã0ãšãããšãè¡åã¯ç°¡åã«ãªãããæ·±åºŠå€ãå¿ ã1ã«ãªãã 53
ãã©ã°ã¡ã³ãã·ã§ãŒããšåæ 54
è²ã®æ±ºå® Vertex Shader Rasterization Fragment Shader ãã©ã°ã¡ã³ãã·ã§ãŒãã®åºåããã¯ã»ã«ã®è²ãšãªãã 55
ãã¯ã¹ãã£ãããã³ã° UV座æšãããšã«ããµã³ãã©ãŒ(ç»åãã¯ã¹ãã£)ããè²ãæã£ãŠããã UV座æšãè²ããããããšã§ãç»åå å·¥ãã§ããïŒ è²ã ãšãã -> ã¹ã¯ãªãŒã³ UV座æšãäžå®åºéã§floorãªãceilãªããã -> ã¢ã¶ã€ã¯
ãã¯ã¹ãã£äžã®åšèŸºã®è²ãšæ··æãã -> ãŒãã çã 56
æåæç» æ®éãã°ã©ãã£ãã¯ã¹APIã«ã¯æåæç»ã®æ©èœããªãã æ¬¡ã®äºã€ã®æ¹æ³ãèããããèšç®éãšå®è£ ã®æ¥œãããäžè¬çã«ã¯äžãçšããïŒ ããããããããããããã¯ã¹ãã£ã«ããŠããæ¹æ³ ãã¯ã»ã«ã·ã§ãŒãå ã§åããŠã°ãªãã®å å€å€å®ãè¡ãæ¹æ³ 57
ãã¬ã³ãã£ã³ã° ã¹ã¯ãããã§ãŒã³ã€ã¡ãŒãžã«çµæãåæããã è²ãééçãæ¬¡ã®ããã«èšå®ãããšãã¢ã«ãã¡ãã¬ã³ããããïŒ æç»å ïŒ æç»å ïŒ 58
ãã£ã¹ã¯ãªãã¿ã»ãã 59
ã·ã§ãŒãå ã§æ±ã倧ããªããŒã¿ 次ã®ããã«ããŠããŒã¿ãåãæ¿ããããªãïŒ 1. ã³ãã³ããããã¡éå§ 2. ã¬ã³ããŒãã¹éå§ 3. ããŒã¿1ãã»ããããã³ãã³ããç©ã 4. ã¢ãã«1ãæç»ããã³ãã³ããç©ã
5. ããŒã¿2ãã»ããããã³ãã³ããç©ã 6. ã¢ãã«2ãæç»ããã³ãã³ããç©ã 7. ã¬ã³ããŒãã¹çµäº 8. ã³ãã³ããããã¡çµäº 9. ã³ãã³ããããã¡ããã¥ãŒã«æåº 60
ãã£ã¹ã¯ãªãã¿ã»ãã äºãããã€ã³ãã£ã³ã°(ããŒã¿ã¹ããããšæã£ãŠãã)ã®æ°ã»çš®é¡ãææ¡ããŠããã ãŸãæç»åã«äºãããã©ã®ãã€ã³ãã£ã³ã°ã«ã©ã®ããŒã¿ãåœãŠããããšããçµåãã ãå¿ èŠåãã¹ãŠã¡ã¢ãªäžã«é 眮ããŠããããã®çµåãããæããã 1. çµåãã1ãã»ããããã³ãã³ããç©ã 2. ã¢ãã«1ãæç»ããã³ãã³ããç©ã 3. çµåãã2ãã»ããããã³ãã³ããç©ã
4. ã¢ãã«2ãæç»ããã³ãã³ããç©ã ãã®çµåããããã£ã¹ã¯ãªãã¿ã»ãããšããã(ã»ããã¯éåã®æå³ã®set) 61
ãã£ã¹ã¯ãªãã¿ã»ããã®ç·æ° äŸãã°ã çš®é¡ã®ã«ã¡ã©ã çš®é¡ã®å æºã çš®é¡ã®ç»åã䜿ãå Žåã å¿ èŠãªãã£ã¹ã¯ãªãã¿ã»ããã®æ°ã¯ã å ã«ãªãã 62