🚙
[Bevy] WGSLシェーダーをインポートする方法
bevyのwgslシェーダーをインポートする際は
main_shader.wgsl
#import bevy_pbr::pbr_fragment::pbr_input_from_standard_material;
でインポートできます。
もし自分で作成したモジュールをインポートしたい場合は
- アセットとして登録して
- #define_import_pathでパスを定義して
- #import my_moduleでインポートします
1. モジュール用のプラグインを作成
utils.rs
use bevy::{
asset::{embedded_asset, load_internal_asset, weak_handle},
prelude::*,
};
pub const MY_MODULE : Handle<Shader> = weak_handle!("generated_uuid"); // get it from https://www.uuidgenerator.net/version4
pub struct MyModulePlugin;
impl Plugin for MyModulePlugin {
fn build(&self, app: &mut App) {
load_internal_asset!(app, MY_MODULE, "../assets/shaders/my_module.wgsl", Shader::from_wgsl);
}
}
このプラグインをmain.rsに追加してアセットとして使える状態にします。
main.rs
use bevy::prelude::*;
mod utils;
use utils::MyModulePlugin;
fn main(){
App::new()
.add_plugins((
DefaultPlugins,
MyModulePlugin,
)).run();
}
2. パスを定義する
my_module.wgsl
#define_import_path my_module
fn my_func -> f32 {
return 1.0;
}
3. インポートする
main_shader.wgsl
#import bevy_pbr::forward_io::{VertexOutput, Vertex};
#import my_module
@vertex
fn vertex(vertex:Vertex) - VertexOutput {
let x = my_module::my_func(); // こんな感じで使えます
...
}
ここまででディレクトリ構造は以下のようになってます。
src
|- main.rs
|- utils.rs
assets
|- shaders
|- main_shader.wgsl
|- my_module.wgsl
Discussion