Vielleicht hilft das hier, ein ähnlicher Effekt den ich vor ein paar Tagen für mein Spiel gemacht habe:
shaderRemoveEffect("CaveLight_01")
shader_effects["CaveLight_01"] = {shader=basic_fsh..[[
const vec2 ar = vec2(1.6, 0.9); //ASPECT RATIO
uniform float ErlPosX;
uniform float ErlPosY;
uniform float ErlSize;
void main()
{
vec2 pos = vec2( ErlPosX , (1-ErlPosY) + (ErlSize*0.67) );
float Flicker = sin(1.0+iGlobalTime*21.5397)*0.0051235 + cos(7.0+iGlobalTime*33.31579)*0.0123;
float Size = (2.0 * ErlSize) + Flicker;
float w = (pos.x - texcoord.x) *ar.x;
float h = (pos.y - texcoord.y) *ar.y;
float Circle = pow( 1.0 - clamp( (sqrt(pow(w,2)+pow(h,2))/(Size)), 0.0,1.0) , 3);
float CircleB = pow( 1.0 - clamp( (sqrt(pow(w,2)+pow(h,2))/(Size)), 0.0,1.0) , 5);
vec3 color = vec3(1.0, 0.67, 0.33);
vec3 Schatten = color * (1.0-CircleB);
vec3 Schein = color * Circle;
vec3 render = texture2D(iChannel0, texcoord.xy).rgb;
render.rgb = render.rgb - Schatten.rgb; //SUBTRACT
vec3 result = vec3( vec3(1.0) - ((vec3(1.0) - (Schein.rgb)) * (vec3(1.0) - render.rgb)) ); //SCREEN
gl_FragColor = vec4(result.rgb , 1.0);
}
]]}
shaderAddEffect("CaveLight_01");
bind("CaveLight_01", "ErlPosX", field("Erlene.Position.x"));
bind("CaveLight_01", "ErlPosY", field("Erlene.Position.y"));
bind("CaveLight_01", "ErlSize", field("Erlene.Size"));
function updateErlPos()
shader_effects["CaveLight_01"].num.ErlPosX = Erlene.Position.x /1920;
shader_effects["CaveLight_01"].num.ErlPosY = Erlene.Position.y /1080;
shader_effects["CaveLight_01"].num.ErlSize = Erlene.Size *0.01;
end
registerEventHandler("mainLoop", "updateErlPos")
[EDIT: Zeilen 37 und 38 dividieren durch 1920 & 1080 -- das ist offenkundig die Auflösung meines Projektes. Diese beiden Werte müsstest du deinem Projekt anpassen.]Wobei "Erlene" (der Name meiner Spielfigur) zuvor in einem anderen Definitions-Script für gobale Variablen definiert worden ist als:
Erlene = getObject("Characters[Erlene]")
Das sollte dann so aussehen:
https://youtu.be/6h5q_p5deHE(Der äußere Kreis für Dunkelheit benutzt Blendmode "Subtraktion", der helle Lichtschein selbst benutzt "Screen", aber das kann man natürlich auch umschreiben.)Oh, und anbei:Das neue GUI gefällt mir auch nicht so sehr. Aber wahrscheinlich ist das auch einfach nur eine Gewohnheitssache.Keine Sorge, geht nicht nur dir so, und ehrlich gesagt, die neue Benutzeroberfläche ist für einen regulären Laptop-Nutzer wie mich immer noch objektiv schlechter weil weniger kompakt als das alte Design. ;)