Fully fix GuiGameElements

- Replace all GUI y-flip scalings to not scale normals
- Rotate CustomLightingSettings along XN instead of XP
- Apply custom lighting to all fluids in JEI scenes
- Fix fluid rendering: fix normals, normal scaling, and color
This commit is contained in:
PepperBell 2021-11-07 10:31:19 -08:00
parent 4909546457
commit ad9a6272c2
10 changed files with 35 additions and 21 deletions

View file

@ -2,6 +2,7 @@ package com.simibubi.create.compat.jei.category;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.GuiGameElement;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
@ -26,6 +27,7 @@ public class FanBlastingCategory extends ProcessingViaFanCategory<AbstractCookin
GuiGameElement.of(Fluids.LAVA) GuiGameElement.of(Fluids.LAVA)
.scale(24) .scale(24)
.atLocal(0, 0, 2) .atLocal(0, 0, 2)
.lighting(AnimatedKinetics.DEFAULT_LIGHTING)
.render(matrixStack); .render(matrixStack);
matrixStack.popPose(); matrixStack.popPose();

View file

@ -5,6 +5,7 @@ import java.util.List;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.AllItems; import com.simibubi.create.AllItems;
import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics;
import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe; import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe;
import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingOutput;
import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllGuiTextures;
@ -91,6 +92,7 @@ public class FanWashingCategory extends ProcessingViaFanCategory<SplashingRecipe
GuiGameElement.of(Fluids.WATER) GuiGameElement.of(Fluids.WATER)
.scale(24) .scale(24)
.atLocal(0, 0, 2) .atLocal(0, 0, 2)
.lighting(AnimatedKinetics.DEFAULT_LIGHTING)
.render(matrixStack); .render(matrixStack);
matrixStack.popPose(); matrixStack.popPose();

View file

@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
@ -35,7 +36,8 @@ public class AnimatedItemDrain extends AnimatedKinetics {
BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance() BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance()
.getBuilder()); .getBuilder());
PoseStack ms = new PoseStack(); PoseStack ms = new PoseStack();
ms.scale(scale, -scale, scale); UIRenderHelper.flipForGuiRender(ms);
ms.scale(scale, scale, scale);
float from = 2/16f; float from = 2/16f;
float to = 1f - from; float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, LightTexture.FULL_BRIGHT, false); FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, LightTexture.FULL_BRIGHT, false);

View file

@ -2,12 +2,14 @@ package com.simibubi.create.compat.jei.category.animations;
import java.util.List; import java.util.List;
import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Vector3f; import com.mojang.math.Vector3f;
import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlockPartials;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.fluid.FluidRenderer;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.AnimationTickHolder;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
@ -63,10 +65,12 @@ public class AnimatedSpout extends AnimatedKinetics {
.scale(scale) .scale(scale)
.render(matrixStack); .render(matrixStack);
AnimatedKinetics.DEFAULT_LIGHTING.applyLighting();
BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance() BufferSource buffer = MultiBufferSource.immediate(Tesselator.getInstance()
.getBuilder()); .getBuilder());
matrixStack.pushPose(); matrixStack.pushPose();
matrixStack.scale(16, -16, 16); UIRenderHelper.flipForGuiRender(matrixStack);
matrixStack.scale(16, 16, 16);
float from = 2/16f; float from = 2/16f;
float to = 1f - from; float to = 1f - from;
FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, LightTexture.FULL_BRIGHT, false); FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, LightTexture.FULL_BRIGHT, false);
@ -74,11 +78,13 @@ public class AnimatedSpout extends AnimatedKinetics {
float width = 1 / 128f * squeeze; float width = 1 / 128f * squeeze;
matrixStack.translate(scale / 2f, scale * 1.5f, scale / 2f); matrixStack.translate(scale / 2f, scale * 1.5f, scale / 2f);
matrixStack.scale(16, -16, 16); UIRenderHelper.flipForGuiRender(matrixStack);
matrixStack.scale(16, 16, 16);
matrixStack.translate(-width / 2, 0, -width / 2); matrixStack.translate(-width / 2, 0, -width / 2);
FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, LightTexture.FULL_BRIGHT, FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, LightTexture.FULL_BRIGHT,
false); false);
buffer.endBatch(); buffer.endBatch();
Lighting.setupFor3DItems();
matrixStack.popPose(); matrixStack.popPose();
} }

View file

@ -8,7 +8,6 @@ import com.mojang.blaze3d.vertex.PoseStack.Pose;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.foundation.render.RenderTypes; import com.simibubi.create.foundation.render.RenderTypes;
import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AngleHelper;
import com.simibubi.create.foundation.utility.Color;
import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -125,15 +124,16 @@ public class FluidRenderer {
.isHorizontal()) { .isHorizontal()) {
ms.pushPose(); ms.pushPose();
if (side.getAxisDirection() == AxisDirection.NEGATIVE) if (side.getAxisDirection() == AxisDirection.NEGATIVE) {
msr.translate(center) msr.translate(center)
.rotateY(180) .rotateY(180)
.translateBack(center); .translateBack(center);
side = Direction.get(AxisDirection.POSITIVE, side.getAxis());
}
boolean X = side.getAxis() == Axis.X; boolean X = side.getAxis() == Axis.X;
int darkColor = Color.mixColors(color, 0xff000011, 1 / 4f);
renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder, renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder,
ms, light, darkColor, fluidTexture); ms, light, color, fluidTexture);
ms.popPose(); ms.popPose();
continue; continue;
@ -222,7 +222,7 @@ public class FluidRenderer {
.uv(u, v) .uv(u, v)
.overlayCoords(OverlayTexture.NO_OVERLAY) .overlayCoords(OverlayTexture.NO_OVERLAY)
.uv2(light) .uv2(light)
.normal(n.getX(), n.getY(), n.getZ()) .normal(peek.normal(), n.getX(), n.getY(), n.getZ())
.endVertex(); .endVertex();
} }

View file

@ -22,12 +22,12 @@ public class CustomLightingSettings implements ILightingSettings {
protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) { protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) {
light1 = Vector3f.ZP.copy(); light1 = Vector3f.ZP.copy();
light1.transform(Vector3f.YP.rotationDegrees(yRot1)); light1.transform(Vector3f.YP.rotationDegrees(yRot1));
light1.transform(Vector3f.XP.rotationDegrees(xRot1)); light1.transform(Vector3f.XN.rotationDegrees(xRot1));
if (doubleLight) { if (doubleLight) {
light2 = Vector3f.ZP.copy(); light2 = Vector3f.ZP.copy();
light2.transform(Vector3f.YP.rotationDegrees(yRot2)); light2.transform(Vector3f.YP.rotationDegrees(yRot2));
light2.transform(Vector3f.XP.rotationDegrees(xRot2)); light2.transform(Vector3f.XN.rotationDegrees(xRot2));
} else { } else {
light2 = VecHelper.ZERO_3F; light2 = VecHelper.ZERO_3F;
} }

View file

@ -124,7 +124,7 @@ public class GuiGameElement {
matrixStack.translate(x, y, z); matrixStack.translate(x, y, z);
matrixStack.scale((float) scale, (float) scale, (float) scale); matrixStack.scale((float) scale, (float) scale, (float) scale);
matrixStack.translate(xLocal, yLocal, zLocal); matrixStack.translate(xLocal, yLocal, zLocal);
matrixStack.scale(1, -1, 1); UIRenderHelper.flipForGuiRender(matrixStack);
matrixStack.translate(rotationOffset.x, rotationOffset.y, rotationOffset.z); matrixStack.translate(rotationOffset.x, rotationOffset.y, rotationOffset.z);
matrixStack.mulPose(Vector3f.ZP.rotationDegrees((float) zRot)); matrixStack.mulPose(Vector3f.ZP.rotationDegrees((float) zRot));
matrixStack.mulPose(Vector3f.XP.rotationDegrees((float) xRot)); matrixStack.mulPose(Vector3f.XP.rotationDegrees((float) xRot));
@ -271,19 +271,15 @@ public class GuiGameElement {
matrixStack.scale(16.0F, 16.0F, 16.0F); matrixStack.scale(16.0F, 16.0F, 16.0F);
MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource(); MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource();
boolean flatLighting = !bakedModel.usesBlockLight(); boolean flatLighting = !bakedModel.usesBlockLight();
if (useDefaultLighting) { if (useDefaultLighting && flatLighting) {
if (flatLighting) { Lighting.setupForFlatItems();
Lighting.setupForFlatItems();
}
} }
renderer.render(stack, ItemTransforms.TransformType.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel); renderer.render(stack, ItemTransforms.TransformType.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel);
buffer.endBatch(); buffer.endBatch();
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
if (useDefaultLighting) { if (useDefaultLighting && flatLighting) {
if (flatLighting) { Lighting.setupFor3DItems();
Lighting.setupFor3DItems();
}
} }
matrixStack.popPose(); matrixStack.popPose();

View file

@ -249,6 +249,10 @@ public class UIRenderHelper {
RenderSystem.disableBlend(); RenderSystem.disableBlend();
} }
public static void flipForGuiRender(PoseStack poseStack) {
poseStack.mulPoseMatrix(Matrix4f.createScaleMatrix(1, -1, 1));
}
public static class CustomRenderTarget extends RenderTarget { public static class CustomRenderTarget extends RenderTarget {
public CustomRenderTarget(boolean pUseDepth) { public CustomRenderTarget(boolean pUseDepth) {

View file

@ -22,6 +22,7 @@ import com.jozufozu.flywheel.util.transform.MatrixTransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f; import com.mojang.math.Matrix4f;
import com.mojang.math.Vector4f; import com.mojang.math.Vector4f;
import com.simibubi.create.foundation.gui.UIRenderHelper;
import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.content.PonderIndex;
import com.simibubi.create.foundation.ponder.content.PonderTag; import com.simibubi.create.foundation.ponder.content.PonderTag;
import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement; import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement;
@ -468,7 +469,8 @@ public class PonderScene {
float f = 30 * scaleFactor; float f = 30 * scaleFactor;
if (!overlayCompatible) { if (!overlayCompatible) {
ms.scale(f, -f, f); UIRenderHelper.flipForGuiRender(ms);
ms.scale(f, f, f);
ms.translate((basePlateSize + basePlateOffsetX) / -2f, -1f + yOffset, ms.translate((basePlateSize + basePlateOffsetX) / -2f, -1f + yOffset,
(basePlateSize + basePlateOffsetZ) / -2f); (basePlateSize + basePlateOffsetZ) / -2f);
} else { } else {

View file

@ -450,7 +450,7 @@ public class PonderUI extends NavigatableSimiScreen {
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
ms.pushPose(); ms.pushPose();
ms.translate(story.basePlateOffsetX, 0, story.basePlateOffsetZ); ms.translate(story.basePlateOffsetX, 0, story.basePlateOffsetZ);
ms.scale(1, -1, 1); UIRenderHelper.flipForGuiRender(ms);
float flash = finishingFlash.getValue(partialTicks) * .9f; float flash = finishingFlash.getValue(partialTicks) * .9f;
float alpha = flash; float alpha = flash;