The shader panics (see below) because `half_dir` is missing so I added it.
```
❯ cargo run
Compiling graphic_rust v0.1.0 (/home/rokonio/dev/rust/graphic_rust)
Finished dev [unoptimized + debuginfo] target(s) in 5.39s
Running `target/debug/graphic_rust`
[2022-02-20T10:27:50Z ERROR wgpu::backend::direct] Handling wgpu errors as fatal by default
thread 'main' panicked at 'wgpu error: Validation Error
Caused by:
In Device::create_shader_module
note: label = `Shader`
Shader 'Shader' parsing error: no definition in scope for identifier: 'half_dir'
┌─ wgsl:93:57
│
93 │ let specular_strength = pow(max(dot(tangent_normal, half_dir), 0.0), 32.0);
│ ^^^^^^^^ unknown identifier
no definition in scope for identifier: 'half_dir'
', /home/rokonio/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-0.12.0/src/backend/direct.rs:2273:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
009: impl Vertex for ModelVertex was using the vertex_attr_array! macro.
009: RenderPipelineDescriptor has a `vertex` member not `vertex_state`.
009: to_rgba() should be to_rgba8(), to_rgba is set to be deprecated.
010: BindGroupDescriptor has a `entries` member not `bindings`.
010: Remove re-declaration of mat4 model_matrix;
010: Prefer hard-coded [#.#; #] instead of `Foo::fn().into()`.
010: Clarify which shader frag/vert file changes are in.
011: Change Model::load return type to Result<Self>.
011: TextureDescriptor does not have a array_layer_count member.
012: Add .into() to calls in Uniforms::update_view_proj().
012: Dereference delta variable in State::input().
013: Add more changed lines to Model::load to avoid compiler yelling.