我应该使用多少着色器?

时间:2016-11-17 19:02:58

标签: java opengl 3d shader

我已经用Java编写了自己的3D游戏引擎,但我想重写它以进行优化。

我的引擎看起来像这样:

有一个名为RenderSystem的抽象超类。 代码:

public abstract class RenderSystem<T> {
    public abstract void addElement(T element);
    public abstract void enableSystem();
    public abstract void disableSystem();
    protected abstract void cleanUp();
}

每个RenderSystem扩展&#34; RenderSystem&#34;。 对于每种不同的材质,都有一个渲染系统,因此有一个着色器。 我创建了一个枚举,用于存储我的素材的哪些部分已启用(bump_map,displacement_map等)。

看起来像这样:(我错过了所有吸气剂和二传手的东西) 代码:

public enum MaterialType{

COLOR_MAT (1,false,false,false,false,MasterRenderer.entity_system,null);

private MaterialType(int index, boolean use_bump_map, boolean use_displacement_map, boolean use_normal_map,
        boolean use_specular_map, RenderSystem<?> default_system, RenderSystem<?> instanced_system) {
    this.index = index;
    this.use_bump_map = use_bump_map;
    this.use_displacement_map = use_displacement_map;
    this.use_normal_map = use_normal_map;
    this.use_specular_map = use_specular_map;
    this.default_system = default_system;
    this.instanced_system = instanced_system;
}

private final int index;
private final boolean use_bump_map;
private final boolean use_displacement_map;
private final boolean use_normal_map;
private final boolean use_specular_map;

private final RenderSystem<?> default_system;
private final RenderSystem<?> instanced_system;
   //...................

在这个例子中,我只存储了一个Material,除了color_map(总是启用)之外,它不使用任何这些map。 此外,它存储处理使用该材料的那些实体的系统。 代码: MasterRenderer.entity_system

这将用其他所有东西完成,我将添加一个天幕材料,粒子材料等。这一切都很直接,但我现在的问题是,我需要哪些着色器?

我应该为每个实体写一个着色器,(实体是通过使用obj。文件创建的,不包括粒子等) 或者一个着色器用于正常渲染而没有bump_maps和所有这些东西,还有一个着色器用于我的材质和normal_map? 这意味着我使用那个着色器渲染每个实体,即使它没有任何这些地图来计算那些东西。

此外,我想为我的角色添加一个BoneSystem。我想这应该有自己的着色器? 下面我将列出我将创建的着色器:

  • EntityShader(仅限色彩图)
  • EntityShader(colormap和normalmap)
  • EntityShader(colormap和specularmap)
  • EntityShader(colormap,normalmap和specularmap)
  • EntityShader(colormap,bumpmap,displacementmap,normalmap, specularmap)
  • CharacterShader(只有带骨骼的色彩映射)
  • SkydomeShader(只有色彩映射),呈现天空
  • ParticleShader(可能只有色彩图但是没有安装!!)
  • TerrainShader(可能会得到自己的材料来做像 共混)
  • ShadowShader(获取实体而不使用其他地图,仅渲染深度 到帧缓冲区)
  • WaterShader(如果我真的很无聊,别无其他事可做)
  • 最后:InstancedEntityShader(仅限colormap但是已实例化)

我可能会添加一些postProcessing效果,但这还不安全。

我只是想知道这种结构是否合适有效还是我应该改变什么?

此外,游戏中通常使用多少个着色器?

0 个答案:

没有答案