add specular lighting (#6)

* add specular lighting

* Update gx_shader.cpp

* Update gx_shader.cpp

* Update gx_shader.cpp
This commit is contained in:
CreateSource 2025-04-23 21:53:11 -04:00 committed by GitHub
parent 23522538e1
commit dfa555263c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -888,8 +888,15 @@ wgpu::ShaderModule build_shader(const ShaderConfig& config, const ShaderInfo& in
var dist_attn = dot(light.dist_att, vec3f(1.0, dist, dist2));
attn = max(0.0, cos_attn / dist_attn);)""");
} else if (cc.attnFn == GX_AF_SPEC) {
diffFn = GX_DF_NONE;
FATAL("AF_SPEC unimplemented");
std::string normal = UsePerPixelLighting ? "in.mv_nrm" : "mv_nrm";
std::string dist_attn = diffFn != GX_DF_NONE
? "max(0.0, dot(normalize(light.dist_att), vec3f(1.0, attn, attn * attn)));"
: "max(0.0, dot(light.dist_att, vec3f(1.0, attn, attn * attn)));";
lightAttnFn = fmt::format(R"""(
attn = select(0.0, max(0.0, dot({0}, light.dir)), dot({0}, ldir) >= 0.0);
var cos_attn = dot(light.cos_att, vec3f(1.0, attn, attn * attn));
var dist_attn = {1};
attn = max(0.0, cos_attn / dist_attn);)""", normal, dist_attn);
}
if (diffFn == GX_DF_NONE) {
lightDiffFn = "1.0";