Blend file: Use alpha blending flag, add alpha in principled & teximage nodes.
This commit is contained in:
parent
11ef0fbd41
commit
fc39a93a94
3 changed files with 12 additions and 6 deletions
|
@ -306,7 +306,7 @@ proc loadObjectImpl(self: BlendLoader, scene: Scene, obn: FNode): (GameObject, s
|
||||||
ob.passes.setLen mat_count
|
ob.passes.setLen mat_count
|
||||||
var tangents: seq[string]
|
var tangents: seq[string]
|
||||||
for i in 0 ..< mat_count:
|
for i in 0 ..< mat_count:
|
||||||
assert i < 16, "More than 16 materials not supported yet"
|
assert i < 16, "More than 16 materials not supported yet" # TODO
|
||||||
let is_oblink = matbits[i].testBit(0)
|
let is_oblink = matbits[i].testBit(0)
|
||||||
let mat = if is_oblink:
|
let mat = if is_oblink:
|
||||||
obn.mat[i]
|
obn.mat[i]
|
||||||
|
@ -318,6 +318,10 @@ proc loadObjectImpl(self: BlendLoader, scene: Scene, obn: FNode): (GameObject, s
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var backface_culling = (mat.blend_flag.i8[0] and 4'i8) != 0
|
var backface_culling = (mat.blend_flag.i8[0] and 4'i8) != 0
|
||||||
|
let blend_method = mat.blend_method.i8[0]
|
||||||
|
let alpha_blend = blend_method == 5
|
||||||
|
if alpha_blend:
|
||||||
|
ob.passes[i] = 1
|
||||||
|
|
||||||
# this gives the "sons" error
|
# this gives the "sons" error
|
||||||
# dump (mat.id.name.cstr.strip2, backface_culling)
|
# dump (mat.id.name.cstr.strip2, backface_culling)
|
||||||
|
|
|
@ -642,7 +642,7 @@ node_functions = {
|
||||||
let s = texture_uniform(img.name.str.strip2)
|
let s = texture_uniform(img.name.str.strip2)
|
||||||
var v = ins["Vector"].uv_socket
|
var v = ins["Vector"].uv_socket
|
||||||
# TODO: output float directly from single channel textures
|
# TODO: output float directly from single channel textures
|
||||||
return mkOutput(&"$0 = texture({s}, {vec2(v)});", vec4tmp())
|
return mkOutput(&"$0 = texture({s}, {vec2(v)});$1 = $0.a;", vec4tmp(), flttmp())
|
||||||
,
|
,
|
||||||
"ShaderNodeTexEnvironment": proc(ins: InputMapper): seq[Expr] {.closure.} =
|
"ShaderNodeTexEnvironment": proc(ins: InputMapper): seq[Expr] {.closure.} =
|
||||||
let img = ins.node.id
|
let img = ins.node.id
|
||||||
|
@ -1015,7 +1015,7 @@ node_functions = {
|
||||||
let metallic = ins["Metallic"].flt
|
let metallic = ins["Metallic"].flt
|
||||||
let roughness = ins["Roughness"].flt
|
let roughness = ins["Roughness"].flt
|
||||||
let ior = ins["IOR"].flt
|
let ior = ins["IOR"].flt
|
||||||
# let alpha = ins["Alpha"].flt
|
let alpha = ins["Alpha"].flt
|
||||||
let normal = ins["Normal"].normal_socket_to_world
|
let normal = ins["Normal"].normal_socket_to_world
|
||||||
# let weight1 = ins["Weight"].flt
|
# let weight1 = ins["Weight"].flt
|
||||||
# let subsurface_weight = ins["Subsurface Weight"].flt
|
# let subsurface_weight = ins["Subsurface Weight"].flt
|
||||||
|
@ -1047,7 +1047,8 @@ node_functions = {
|
||||||
&"{world_position()}, " &
|
&"{world_position()}, " &
|
||||||
&"{metallic}, " &
|
&"{metallic}, " &
|
||||||
&"{roughness}, " &
|
&"{roughness}, " &
|
||||||
&"{ior} " &
|
&"{ior}, " &
|
||||||
|
&"{alpha} " &
|
||||||
&") + vec4({emission_color} * {emission_strength}, 0.0);", vec4tmp())
|
&") + vec4({emission_color} * {emission_strength}, 0.0);", vec4tmp())
|
||||||
,
|
,
|
||||||
"ShaderNodeRGBCurve": proc(ins: InputMapper): seq[Expr] {.closure.} =
|
"ShaderNodeRGBCurve": proc(ins: InputMapper): seq[Expr] {.closure.} =
|
||||||
|
|
|
@ -205,7 +205,8 @@ vec4 diffuse_node(vec3 base, vec3 I, vec3 normal, vec3 pos){
|
||||||
return vec4(color, 1.0);
|
return vec4(color, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 principled_node(vec3 base, vec3 I, vec3 normal, vec3 pos, float metallic, float roughness, float ior){
|
vec4 principled_node(vec3 base, vec3 I, vec3 normal, vec3 pos, float metallic,
|
||||||
|
float roughness, float ior, float alpha){
|
||||||
vec3 N = normal;
|
vec3 N = normal;
|
||||||
#if FIX_BORDERS
|
#if FIX_BORDERS
|
||||||
float dotNI = dot(N, I);
|
float dotNI = dot(N, I);
|
||||||
|
@ -293,7 +294,7 @@ vec4 principled_node(vec3 base, vec3 I, vec3 normal, vec3 pos, float metallic, f
|
||||||
// color += mix(env_diffuse, env_specular, F);
|
// color += mix(env_diffuse, env_specular, F);
|
||||||
// adding instead of mixing because F is already in diffuse
|
// adding instead of mixing because F is already in diffuse
|
||||||
color += diffuse * env_diffuse + F * env_specular;
|
color += diffuse * env_diffuse + F * env_specular;
|
||||||
return vec4(color, 1.0);
|
return vec4(color, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 refraction_dominant_dir(vec3 N, vec3 V, float roughness, float ior)
|
vec3 refraction_dominant_dir(vec3 N, vec3 V, float roughness, float ior)
|
||||||
|
|
Loading…
Reference in a new issue