Improve base layer handling

This commit is contained in:
luboslenco
2020-02-05 21:30:14 +01:00
parent e170f21bcc
commit bcd69a4d3a
3 changed files with 140 additions and 136 deletions
+18 -4
View File
@@ -74,7 +74,6 @@ class MakeMesh {
frag.write('float metallic;');
frag.write('float occlusion;');
frag.write('float opacity;');
frag.write('float specular;');
frag.write('float matid = 0.0;');
frag.vVec = true;
@@ -88,6 +87,12 @@ class MakeMesh {
if (Project.layers[0].isVisible()) {
var l = Project.layers[0];
if (l.objectMask > 0) {
var uid = Project.paintObjects[l.objectMask - 1].uid;
frag.add_uniform('int objectId', '_uid');
frag.write('if ($uid == objectId) {');
}
if (l.paintBase) {
frag.add_shared_sampler('sampler2D texpaint');
frag.write('vec4 texpaint_sample = textureLodShared(texpaint, texCoord, 0.0);');
@@ -100,7 +105,7 @@ class MakeMesh {
else {
frag.write('vec4 texpaint_sample = vec4(0.0, 0.0, 0.0, 1.0);');
}
frag.write('basecol = texpaint_sample.rgb;');
frag.write('basecol = texpaint_sample.rgb * texpaint_sample.a;');
if (l.paintNor || MaterialBuilder.emisUsed) {
frag.add_shared_sampler('sampler2D texpaint_nor');
@@ -184,13 +189,22 @@ class MakeMesh {
frag.write('roughness *= ${l.maskOpacity};');
frag.write('metallic *= ${l.maskOpacity};');
}
if (l.objectMask > 0) {
frag.write('}');
frag.write('else {');
frag.write('basecol = vec3(0.0, 0.0, 0.0);');
frag.write('occlusion = 1.0;');
frag.write('roughness = 0.0;');
frag.write('metallic = 0.0;');
frag.write('}');
}
}
else {
frag.write('basecol = vec3(0.0, 0.0, 0.0);');
frag.write('occlusion = 1.0;');
frag.write('roughness = 1.0;');
frag.write('roughness = 0.0;');
frag.write('metallic = 0.0;');
frag.write('specular = 1.0;');
}
if (Project.layers.length > 1) {
+3 -3
View File
@@ -314,9 +314,9 @@ class MakePaint {
}
else {
if (eraser) {
frag.write('fragColor[0] = vec4(mix(sample_undo.rgb, vec3(${Layers.defaultBase}, ${Layers.defaultBase}, ${Layers.defaultBase}), str), sample_undo.a - str);');
frag.write('fragColor[0] = vec4(mix(sample_undo.rgb, vec3(0.0, 0.0, 0.0), str), sample_undo.a - str);');
frag.write('fragColor[1] = vec4(0.5, 0.5, 1.0, 0.0);');
frag.write('fragColor[2] = vec4(1.0, ${Layers.defaultRough}, 0.0, 0.0);');
frag.write('fragColor[2] = vec4(1.0, 0.0, 0.0, 0.0);');
}
else {
frag.add_uniform('sampler2D texpaint_nor_undo', '_texpaint_nor_undo');
@@ -326,7 +326,7 @@ class MakePaint {
#if kha_direct3d12
frag.write('fragColor[0] = vec4(' + MaterialBuilder.blendMode(frag, UITrait.inst.brushBlending, 'sample_undo.rgb', 'basecol', 'str') + ', mat_opacity);');
#else
frag.write('fragColor[0] = vec4(' + MaterialBuilder.blendMode(frag, UITrait.inst.brushBlending, 'sample_undo.rgb', 'basecol', 'str') + ', 0.0);');
frag.write('fragColor[0] = vec4(' + MaterialBuilder.blendMode(frag, UITrait.inst.brushBlending, 'sample_undo.rgb', 'basecol', 'str') + ', max(str, sample_undo.a));');
#end
frag.write('fragColor[1] = vec4(mix(sample_nor_undo.rgb, nortan, str), matid);');
if (Context.material.paintHeight && MaterialBuilder.heightUsed) {