99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
![]() |
using Godot;
|
||
|
using System.Reflection;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace Rokojori
|
||
|
{
|
||
|
[Tool]
|
||
|
[GlobalClass]
|
||
|
public partial class ShadingModule:ShaderGenerationModule
|
||
|
{
|
||
|
[Export]
|
||
|
public BaseMaterial3D.ShadingModeEnum shadingMode = BaseMaterial3D.ShadingModeEnum.PerPixel;
|
||
|
|
||
|
[Export]
|
||
|
public BaseMaterial3D.DiffuseModeEnum diffuseMode = BaseMaterial3D.DiffuseModeEnum.Burley;
|
||
|
|
||
|
[Export]
|
||
|
public BaseMaterial3D.SpecularModeEnum specularMode = BaseMaterial3D.SpecularModeEnum.SchlickGgx;
|
||
|
|
||
|
[Export]
|
||
|
public bool disableAmbientLight = false;
|
||
|
|
||
|
[Export]
|
||
|
public bool disableFog = false;
|
||
|
|
||
|
[Export]
|
||
|
public bool disableReceivingShadows = false;
|
||
|
|
||
|
[Export]
|
||
|
public bool shadowToOpacity = false;
|
||
|
|
||
|
[Export]
|
||
|
public bool wireFrameMode = false;
|
||
|
|
||
|
public override List<ShaderCode> GetCode( ShaderGenerationContext context )
|
||
|
{
|
||
|
if ( ShaderPhase.RenderMode != context.phase )
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
var value = "";
|
||
|
|
||
|
var shadingModes = new Dictionary<BaseMaterial3D.ShadingModeEnum,string>();
|
||
|
shadingModes[ BaseMaterial3D.ShadingModeEnum.PerPixel ] = "";
|
||
|
shadingModes[ BaseMaterial3D.ShadingModeEnum.PerVertex ] = "vertex_lighting, ";
|
||
|
shadingModes[ BaseMaterial3D.ShadingModeEnum.Unshaded ] = "unshaded, ";
|
||
|
|
||
|
value += shadingModes[ shadingMode ];
|
||
|
|
||
|
|
||
|
var diffuseModes = new Dictionary<BaseMaterial3D.DiffuseModeEnum,string>();
|
||
|
diffuseModes[ BaseMaterial3D.DiffuseModeEnum.Burley ] = "diffuse_burley";
|
||
|
diffuseModes[ BaseMaterial3D.DiffuseModeEnum.Lambert] = "diffuse_lambert";
|
||
|
diffuseModes[ BaseMaterial3D.DiffuseModeEnum.LambertWrap] = "diffuse_lambert_wrap";
|
||
|
diffuseModes[ BaseMaterial3D.DiffuseModeEnum.Toon ] = "diffuse_toon";
|
||
|
|
||
|
value += diffuseModes[ diffuseMode ] + ", ";
|
||
|
|
||
|
var specularModes = new Dictionary<BaseMaterial3D.SpecularModeEnum,string>();
|
||
|
specularModes[ BaseMaterial3D.SpecularModeEnum.SchlickGgx ] = "specular_schlick_ggx";
|
||
|
specularModes[ BaseMaterial3D.SpecularModeEnum.Toon ] = "specular_toon";
|
||
|
specularModes[ BaseMaterial3D.SpecularModeEnum.Disabled ] = "specular_disabled";
|
||
|
|
||
|
value += specularModes[ specularMode ] + ", ";
|
||
|
|
||
|
if ( disableAmbientLight )
|
||
|
{
|
||
|
value += "ambient_light_disabled, ";
|
||
|
}
|
||
|
|
||
|
if ( disableFog )
|
||
|
{
|
||
|
value += "fog_disabled, ";
|
||
|
}
|
||
|
|
||
|
if ( disableReceivingShadows )
|
||
|
{
|
||
|
value += "shadows_disabled, ";
|
||
|
}
|
||
|
|
||
|
if ( disableReceivingShadows )
|
||
|
{
|
||
|
value += "shadow_to_opacity, ";
|
||
|
}
|
||
|
|
||
|
if ( wireFrameMode )
|
||
|
{
|
||
|
value += "wireframe";
|
||
|
}
|
||
|
|
||
|
value = RegexUtility.Replace( value, @"\,\s*$", "" );
|
||
|
|
||
|
return Lists.From( (ShaderCode) new StringShaderCode( value ) );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|