From 5c6c26db881a1937ac0188fe88c28fad3cfa534f Mon Sep 17 00:00:00 2001 From: GlennFolker Date: Fri, 22 Mar 2024 13:34:32 +0700 Subject: [PATCH] Reflect the sun light --- assets/scenes/confictura/spires.bin | Bin 2856 -> 2832 bytes assets/scenes/confictura/spires.gltf | 14 +++++++------- assets/shaders/confictura/model-prop.vert | 10 +++++++++- src/confictura/content/CBlocks.java | 4 ++-- .../graphics/g3d/ModelPropDrawer.java | 3 ++- .../graphics/shaders/ModelPropShader.java | 4 ++++ .../world/blocks/environment/ModelProp.java | 15 +++------------ 7 files changed, 27 insertions(+), 23 deletions(-) diff --git a/assets/scenes/confictura/spires.bin b/assets/scenes/confictura/spires.bin index 3d4a9e72a381712bbcf60b381c4008875d2d3b7a..2e8c9ddb89c215e339c9a2820cb22bfedc343460 100644 GIT binary patch delta 185 zcmXwwI}*WA7==HQxHl5d#Etj6(yODwlTb+A*?nYx3~lyZ`c+DUexx z^NXy)gd!D&X4GOUUh2-{AEA@&|OYA^lDSl!qxjE+~ z=Y031&-xN6*(p~d70O+$WuNwCnwiPczKU{I9vl`Jn?LG{pJFrmc2da8(Xz3sL2R%O z`HvqhUvAEGn~cBw(s{}#stidpph625hbBG+8d$XP2no>UI_5(gh1g`MQ({bxEF-$4 K=uxE4gc@(NcPEAb diff --git a/assets/scenes/confictura/spires.gltf b/assets/scenes/confictura/spires.gltf index 55ba519..8b481a7 100644 --- a/assets/scenes/confictura/spires.gltf +++ b/assets/scenes/confictura/spires.gltf @@ -87,7 +87,7 @@ { "bufferView":3, "componentType":5126, - "count":38, + "count":37, "max":[ 1, 2, @@ -103,7 +103,7 @@ { "bufferView":4, "componentType":5126, - "count":38, + "count":37, "type":"VEC3" }, { @@ -134,26 +134,26 @@ }, { "buffer":0, - "byteLength":456, + "byteLength":444, "byteOffset":1860, "target":34962 }, { "buffer":0, - "byteLength":456, - "byteOffset":2316, + "byteLength":444, + "byteOffset":2304, "target":34962 }, { "buffer":0, "byteLength":84, - "byteOffset":2772, + "byteOffset":2748, "target":34963 } ], "buffers":[ { - "byteLength":2856, + "byteLength":2832, "uri":"spires.bin" } ] diff --git a/assets/shaders/confictura/model-prop.vert b/assets/shaders/confictura/model-prop.vert index c8d9ba6..1ab0de3 100644 --- a/assets/shaders/confictura/model-prop.vert +++ b/assets/shaders/confictura/model-prop.vert @@ -3,13 +3,21 @@ attribute vec3 a_normal; attribute vec4 a_color; uniform mat4 u_proj; +uniform vec3 u_camPos; uniform vec3 u_lightDir; +uniform vec4 u_reflectColor; varying vec4 color; void main(){ gl_Position = u_proj * vec4(a_position, 1.0); - vec3 diffuse = a_color.rgb * (dot(a_normal, -u_lightDir) * 0.5 + 0.5); + vec3 ref = reflect(normalize(u_lightDir), normalize(a_normal)); + vec3 eye = normalize(u_camPos - a_position); + + float factor = (dot(eye, ref) + 1.0) * 0.5; + float specular = pow(factor, 4.0) * (1.0 - a_color.a); + + vec3 diffuse = u_reflectColor.rgb * u_reflectColor.a * specular + a_color.rgb * (0.15 + smoothstep(-1.0, 1.0, dot(a_normal, -u_lightDir)) * 0.85); color = vec4(diffuse, 1.0); } diff --git a/src/confictura/content/CBlocks.java b/src/confictura/content/CBlocks.java index b777276..4623a76 100644 --- a/src/confictura/content/CBlocks.java +++ b/src/confictura/content/CBlocks.java @@ -106,7 +106,7 @@ public static void load(){ lightRadius = 48f; }}; - erodedSpire = new ModelProp("eroded-spire", erodedSlateWall, new Color(0x454858ff), () -> CModels.spireSmall1, () -> CModels.spireSmall2); - sharpSpire = new ModelProp("sharp-spire", sharpSlateWall, new Color(0x6e7080ff), () -> CModels.spireSmall1, () -> CModels.spireSmall2); + erodedSpire = new ModelProp("eroded-spire", erodedSlateWall, new Color(0x454858dd), () -> CModels.spireSmall1, () -> CModels.spireSmall2); + sharpSpire = new ModelProp("sharp-spire", sharpSlateWall, new Color(0x6e7080dd), () -> CModels.spireSmall1, () -> CModels.spireSmall2); } } diff --git a/src/confictura/graphics/g3d/ModelPropDrawer.java b/src/confictura/graphics/g3d/ModelPropDrawer.java index 57e8a23..e460433 100644 --- a/src/confictura/graphics/g3d/ModelPropDrawer.java +++ b/src/confictura/graphics/g3d/ModelPropDrawer.java @@ -153,7 +153,8 @@ protected void flush(){ shader.bind(); shader.camera = cam; - shader.lightDir.set(-1f, -1f, 1f).nor(); + shader.lightDir.set(-1.2f, -0.8f, 0.9f).nor(); + shader.reflectColor.set(!state.rules.lighting ? Color.white : state.rules.ambientLight); shader.apply(); batch.setVertices(vertices, 0, vertexOffset * batch.vertexSize / Float.BYTES); diff --git a/src/confictura/graphics/shaders/ModelPropShader.java b/src/confictura/graphics/shaders/ModelPropShader.java index 8529e7d..2133af0 100644 --- a/src/confictura/graphics/shaders/ModelPropShader.java +++ b/src/confictura/graphics/shaders/ModelPropShader.java @@ -1,5 +1,6 @@ package confictura.graphics.shaders; +import arc.graphics.*; import arc.graphics.g3d.*; import arc.graphics.gl.*; import arc.math.geom.*; @@ -9,6 +10,7 @@ public class ModelPropShader extends Shader{ public Camera3D camera; public Vec3 lightDir = new Vec3(); + public Color reflectColor = new Color(); public ModelPropShader(){ super(file("model-prop.vert"), file("model-prop.frag")); @@ -17,6 +19,8 @@ public ModelPropShader(){ @Override public void apply(){ setUniformMatrix4("u_proj", camera.combined.val); + setUniformf("u_camPos", camera.position); setUniformf("u_lightDir", lightDir); + setUniformf("u_reflectColor", reflectColor); } } diff --git a/src/confictura/world/blocks/environment/ModelProp.java b/src/confictura/world/blocks/environment/ModelProp.java index 3227b1b..783871b 100644 --- a/src/confictura/world/blocks/environment/ModelProp.java +++ b/src/confictura/world/blocks/environment/ModelProp.java @@ -8,7 +8,6 @@ import confictura.world.blocks.*; import mindustry.world.*; -import static arc.Core.*; import static confictura.ConficturaMod.*; public class ModelProp extends Block implements DelegateMapColor{ @@ -22,7 +21,8 @@ public ModelProp(String name, Block parent, Color color, Prov... meshes){ this.parent = parent; this.color = color; this.meshes = meshes; - destructible = breakable = false; + alwaysReplace = breakable = false; + solid = instantBuild = allowRectanglePlacement = true; } @Override @@ -33,18 +33,9 @@ public Block substitute(){ @Override public void drawBase(Tile tile){ parent.drawBase(tile); - float z = Draw.z(); - Draw.z(ModelPropDrawer.accumLayer); - - var reg = atlas.find("square-shadow"); - float size = Math.max(reg.width, reg.height) * 1.75f * reg.scl(); - - Draw.color(0f, 0f, 0f, 0.65f); - Draw.rect(reg, tile.worldx(), tile.worldy(), size * Draw.xscl, size * Draw.yscl); - Draw.reset(); - Draw.draw(Draw.z(), () -> modelPropDrawer.draw( + Draw.draw(ModelPropDrawer.accumLayer, () -> modelPropDrawer.draw( meshes[Mathf.randomSeed(tile.pos(), 0, meshes.length - 1)].get(), tile.worldx(), tile.worldy(), Mathf.randomSeed(tile.pos() + 1, 0, 4) * 90f, color ));