Skip to content

Add support for unshaded displacements #1560

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Content.Client/DisplacementMap/DisplacementMapSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,14 @@ public sealed class DisplacementMapSystem : EntitySystem
public bool TryAddDisplacement(DisplacementData data, SpriteComponent sprite, int index, string key, HashSet<string> revealedLayers)
{
if (data.ShaderOverride != null)
sprite.LayerSetShader(index, data.ShaderOverride);
{
//imp edit start - replaced the simple shader replacement w/ a ternary that checks if the layer is unshaded before setting the shader
sprite.LayerSetShader(index,
sprite[index] is SpriteComponent.Layer { ShaderPrototype: "unshaded" }
? data.ShaderOverrideUnshaded
: data.ShaderOverride);
//imp edit end
}

var displacementKey = $"{key}-displacement";
if (!revealedLayers.Add(displacementKey))
Expand Down
3 changes: 3 additions & 0 deletions Content.Shared/DisplacementMap/DisplacementData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,7 @@ public sealed partial class DisplacementData

[DataField]
public string? ShaderOverride = "DisplacedStencilDraw";

[DataField]
public string ShaderOverrideUnshaded = "DisplacedStencilDrawUnshaded";
}
11 changes: 11 additions & 0 deletions Resources/Prototypes/_Impstation/Shaders/shaders.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,14 @@
id: AccessibleFullStealth
kind: source
path: "/Textures/_Impstation/Shaders/accessible_full_stealth.swsl"

- type: shader
id: DisplacedStencilDrawUnshaded
kind: source
path: "/Textures/_Impstation/Shaders/displacement_unshaded.swsl"
stencil:
ref: 1
op: Keep
func: NotEqual
params:
displacementSize: 127
20 changes: 20 additions & 0 deletions Resources/Textures/_Impstation/Shaders/displacement_unshaded.swsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
light_mode unshaded;

uniform sampler2D displacementMap;
uniform highp float displacementSize;
uniform highp vec4 displacementUV;

varying highp vec2 displacementUVOut;

void vertex() {
displacementUVOut = mix(displacementUV.xy, displacementUV.zw, tCoord2);
}

void fragment() {
highp vec4 displacementSample = texture2D(displacementMap, displacementUVOut);
highp vec2 displacementValue = (displacementSample.xy - vec2(128.0 / 255.0)) / (1.0 - 128.0 / 255.0);
COLOR = zTexture(UV + displacementValue * TEXTURE_PIXEL_SIZE * displacementSize * vec2(1.0, -1.0));
COLOR.a *= displacementSample.a;
}


Loading