<style>
code {
max-height: 800px !important;
}
sup {
opacity: 50%;
font-size: .7em !important;
}
</style>
Shaders
===
---
## Was ist ein `Shader`?
----
Ein `Shader` ist ein sehr kurzes Programm
----
`Shader` laufen auf der Grafikkarte
also hoch parallelisiert
----

Note:
auf so einem Gerät
---
## Pipeline
DirectX (hlsl) & OpenGL (glsl)
Note:
hlsl is z.B. Unity, Monogame
glsl is z.B. OpenGl
----
<img src="https://i.imgur.com/4n4XeN5.png" style="background: white">
Note:
Compute Shader
----
### Vertex Shader
im kern
$${\rm I\!R}^3 \mapsto {\rm I\!R}^3$$
im genauen
$$\text{vertex} \mapsto \text{vtf}$$
Note:
vtf = Vertex to Fragment
----
### Fragment Shader
im kern
$$\emptyset \mapsto {\rm I\!R}^4$$
im genauen
$$\text{vtf} \mapsto \text{color}$$
----
### Warum das ganze mit dem $\text{vtf}$?
Interpolation von $\text{vtf}$
$$\text{vertex} \mapsto \text{pixel}$$
```hlsl
struct VertToFrag {
vec4 color;
vec2 uv;
float lod;
};
```
<sup>in hlsl</sup>
----
### Uniforms
Werden an die Graphikkarte weiter gerreicht
wie zusätzliche Argumente
<br>
```glsl
uniform mat4 MVP;
uniform vec3 Color;
uniform sampler2D Texture;
```
<sup>in glsl</sup>
---
## Beispiel an GLSL *(OpenGL Shading Language)*
<br>
```glsl
void main(void) {
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
```
<sup>vertex shader</sup>
```glsl
void main(void) {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
```
<sup>fragment shader</sup>
----
```glsl
uniform mat4 World;
uniform mat4 View;
uniform mat4 Projection;
uniform mat4 MVP;
in vec3 Position;
in vec2 UV;
out vec3 outPosition;
out vec2 uv;
void main() {
gl_Position = MVP * vec4(Position, 1);
outPosition = gl_Position.xyz;
uv = UV;
}
```
<sup>vertex shader</sup>
Note:
custom vertex shader
----
```glsl
in vec3 outPosition;
in vec2 uv;
out vec4 outColor;
uniform vec4 funkyColor;
uniform sampler2D funkyTex;
void main() {
vec3 c = texture(funkyTex, uv).rgb;
c = mix(c, vec3(uv, 1), .5);
outColor = vec4(funkyColor.xyz * c, 1);
}
```
<sup>fragment shader</sup>
Note:
.xyz & .rgb
vec3
1 1.0 .5
outColor is custom
----

<sup>Ergebnis</sup>
---
# Demo Time!
---
noch fragen?
github.com/janekx21
{"metaMigratedAt":"2023-06-15T08:29:26.295Z","metaMigratedFrom":"YAML","title":"Shader","breaks":false,"slideOptions":"{\"theme\":\"Moon\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"f2b228e5-d83c-4fd7-a0b4-12483e670ec0\",\"add\":2829,\"del\":355}]"}