优化准星渲染

This commit is contained in:
Atsuishio 2025-04-24 16:05:37 +08:00 committed by Light_Quanta
parent a78bfaf004
commit 551f31bf59
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
11 changed files with 78 additions and 572 deletions

View file

@ -1,5 +1,6 @@
package com.atsuishio.superbwarfare.client; package com.atsuishio.superbwarfare.client;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType; import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
@ -18,6 +19,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import org.joml.Matrix4f;
import software.bernie.geckolib.animation.AnimationProcessor; import software.bernie.geckolib.animation.AnimationProcessor;
import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.util.RenderUtil; import software.bernie.geckolib.util.RenderUtil;
@ -110,7 +112,7 @@ public class AnimationHelper {
RenderUtil.scaleMatrixForBone(stack, bone); RenderUtil.scaleMatrixForBone(stack, bone);
RenderUtil.translateAwayFromPivotPoint(stack, bone); RenderUtil.translateAwayFromPivotPoint(stack, bone);
PoseStack.Pose pose = stack.last(); PoseStack.Pose pose = stack.last();
VertexConsumer vertexConsumer = buffer.getBuffer(ModRenderTypes.MUZZLE_FLASH_TYPE); VertexConsumer vertexConsumer = buffer.getBuffer(ModRenderTypes.MUZZLE_FLASH_TYPE.apply(Mod.loc("textures/particle/flare.png")));
vertex(vertexConsumer, pose, packedLightIn, 0.0F, 0, 0, 1); vertex(vertexConsumer, pose, packedLightIn, 0.0F, 0, 0, 1);
vertex(vertexConsumer, pose, packedLightIn, 1.0F, 0, 1, 1); vertex(vertexConsumer, pose, packedLightIn, 1.0F, 0, 1, 1);
vertex(vertexConsumer, pose, packedLightIn, 1.0F, 1, 1, 0); vertex(vertexConsumer, pose, packedLightIn, 1.0F, 1, 1, 0);
@ -175,4 +177,34 @@ public class AnimationHelper {
stack.popPose(); stack.popPose();
} }
} }
public static void handleZoomCrossHair(MultiBufferSource currentBuffer, RenderType renderType, String boneName, PoseStack stack, GeoBone bone, MultiBufferSource buffer, int packedLightIn, double x, double y, double z, int r, int g, int b, int a, String name) {
if (boneName.equals("cross") && ClientEventHandler.zoomPos > 0.8) {
stack.pushPose();
stack.translate(x, y, -z);
RenderUtil.translateMatrixToBone(stack, bone);
RenderUtil.translateToPivotPoint(stack, bone);
RenderUtil.rotateMatrixAroundBone(stack, bone);
RenderUtil.scaleMatrixForBone(stack, bone);
RenderUtil.translateAwayFromPivotPoint(stack, bone);
PoseStack.Pose pose = stack.last();
Matrix4f $$7 = pose.pose();
VertexConsumer $$9 = buffer.getBuffer(ModRenderTypes.MUZZLE_FLASH_TYPE.apply(Mod.loc("textures/crosshair/" + name + ".png")));
vertexRGB($$9, $$7, pose, packedLightIn, 0.0F, 0, 0, 1, r, g, b, a);
vertexRGB($$9, $$7, pose, packedLightIn, 1.0F, 0, 1, 1, r, g, b, a);
vertexRGB($$9, $$7, pose, packedLightIn, 1.0F, 1, 1, 0, r, g, b, a);
vertexRGB($$9, $$7, pose, packedLightIn, 0.0F, 1, 0, 0, r, g, b, a);
stack.popPose();
}
currentBuffer.getBuffer(renderType);
}
private static void vertexRGB(VertexConsumer pConsumer, Matrix4f pPose, PoseStack.Pose pNormal, int pLightmapUV, float pX, float pY, int pU, int pV, int r, int g, int b, int a) {
pConsumer.addVertex(pPose, pX - 0.5F, pY - 0.5F, 0.0F)
.setColor(r, g, b, a)
.setUv((float) pU, (float) pV)
.setOverlay(OverlayTexture.NO_OVERLAY)
.setLight(pLightmapUV)
.setNormal(pNormal, 0.0F, 1.0F, 0.0F);
}
} }

View file

@ -1,6 +1,5 @@
package com.atsuishio.superbwarfare.client; package com.atsuishio.superbwarfare.client;
import com.atsuishio.superbwarfare.Mod;
import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.Util; import net.minecraft.Util;
@ -34,34 +33,21 @@ public class ModRenderTypes extends RenderType {
//DickSheep的恩情还不完 //DickSheep的恩情还不完
public static final RenderType MUZZLE_FLASH_TYPE = public static final Function<ResourceLocation, RenderType> MUZZLE_FLASH_TYPE = Util.memoize((location) -> {
RenderType.create( TextureStateShard shard = new RenderStateShard.TextureStateShard(location, false, false);
"muzzle_flash", RenderType.CompositeState state = RenderType.CompositeState.builder()
DefaultVertexFormat.POSITION_TEX_COLOR, // 注意格式名改为 POSITION_COLOR_TEX不是 TEX
VertexFormat.Mode.QUADS,
256,
false,
true,
// 使用新的 CompositeState 构造方式
RenderType.CompositeState.builder()
// 关键修复使用内置的 POSITION_COLOR_TEX_SHADER直接调用 ShaderStateShard // 关键修复使用内置的 POSITION_COLOR_TEX_SHADER直接调用 ShaderStateShard
.setShaderState(RENDERTYPE_EYES_SHADER) .setShaderState(RENDERTYPE_EYES_SHADER)
// 启用半透明确保正确排序 // 启用半透明确保正确排序
.setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY) .setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
// 绑定贴图替换为你的路径 // 绑定贴图
.setTextureState(new RenderStateShard.TextureStateShard( .setTextureState(shard)
Mod.loc("textures/particle/flare.png"),
false, // 不模糊
false // 不生成Mipmap
))
// 禁用光照和覆盖颜色 // 禁用光照和覆盖颜色
.setLightmapState(RenderStateShard.NO_LIGHTMAP) .setLightmapState(RenderStateShard.NO_LIGHTMAP)
.setOverlayState(RenderStateShard.NO_OVERLAY) .setOverlayState(RenderStateShard.NO_OVERLAY)
// 深度测试和写入设置
// .setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
.setWriteMaskState(RenderStateShard.COLOR_WRITE) .setWriteMaskState(RenderStateShard.COLOR_WRITE)
.createCompositeState(false) .createCompositeState(false);
);
return RenderType.create("muzzle_flash", DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.QUADS, 256, false, true, state);
});
} }

View file

@ -1,27 +0,0 @@
package com.atsuishio.superbwarfare.client.layer.gun;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoRenderer;
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
public class Hk416Layer extends GeoRenderLayer<Hk416Item> {
private static final ResourceLocation LAYER = Mod.loc("textures/item/hk416_e.png");
public Hk416Layer(GeoRenderer<Hk416Item> entityRenderer) {
super(entityRenderer);
}
@Override
public void render(PoseStack poseStack, Hk416Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
RenderType glowRenderType = RenderType.eyes(LAYER);
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 0xFFFFFFFF);
}
}

View file

@ -46,9 +46,6 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
GeoBone scope = getAnimationProcessor().getBone("Scope1"); GeoBone scope = getAnimationProcessor().getBone("Scope1");
GeoBone scope2 = getAnimationProcessor().getBone("Scope2"); GeoBone scope2 = getAnimationProcessor().getBone("Scope2");
GeoBone scope3 = getAnimationProcessor().getBone("Scope3"); GeoBone scope3 = getAnimationProcessor().getBone("Scope3");
GeoBone cross1 = getAnimationProcessor().getBone("Cross1");
GeoBone cross2 = getAnimationProcessor().getBone("Cross2");
GeoBone cross3 = getAnimationProcessor().getBone("Cross3");
GeoBone kuaimanji = getAnimationProcessor().getBone("kuaimanji"); GeoBone kuaimanji = getAnimationProcessor().getBone("kuaimanji");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
@ -79,14 +76,14 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
case 0 -> 0.2f; case 0 -> 0.2f;
case 1 -> 0.4f; case 1 -> 0.4f;
case 2 -> 0.8f; case 2 -> 0.8f;
case 3 -> 0.78f; case 3 -> 0.9f;
default -> 0f; default -> 0f;
}; };
float posZ = switch (type) { float posZ = switch (type) {
case 0 -> 3f; case 0 -> 3f;
case 1 -> 3.5f; case 1 -> 3.5f;
case 2 -> 7.4f; case 2 -> 7.4f;
case 3 -> 6.8f; case 3 -> 7.5f;
default -> 0f; default -> 0f;
}; };
@ -99,8 +96,6 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
scope2.setScaleZ(1f - (0.8f * (float) zp)); scope2.setScaleZ(1f - (0.8f * (float) zp));
scope3.setScaleZ(1f - (0.5f * (float) zp)); scope3.setScaleZ(1f - (0.5f * (float) zp));
var data = GunData.from(stack);
GeoBone shen; GeoBone shen;
if (zt < 0.5) { if (zt < 0.5) {
shen = getAnimationProcessor().getBone("fireRootNormal"); shen = getAnimationProcessor().getBone("fireRootNormal");
@ -133,17 +128,13 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
CrossHairOverlay.gunRot = shen.getRotZ(); CrossHairOverlay.gunRot = shen.getRotZ();
cross1.setPosY(-0.75f * (float) fpz);
cross2.setPosY(-0.7f * (float) fpz);
cross3.setPosY(-0.2f * (float) fpz);
GeoBone l = getAnimationProcessor().getBone("l"); GeoBone l = getAnimationProcessor().getBone("l");
GeoBone r = getAnimationProcessor().getBone("r"); GeoBone r = getAnimationProcessor().getBone("r");
rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0); rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0);
l.setRotX(rotXBipod * Mth.DEG_TO_RAD); l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
r.setRotX(rotXBipod * Mth.DEG_TO_RAD); r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
int mode = data.fireMode.get(); int mode = GunData.from(stack).fireMode.get();
kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0); kuaimanji.setRotX(mode == 2 ? 90 * Mth.DEG_TO_RAD : 0);

View file

@ -8,12 +8,14 @@ import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType; import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item; import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
@ -24,11 +26,10 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> { public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> {
public static double zoomFactor;
public Hk416ItemRenderer() { public Hk416ItemRenderer() {
super(new Hk416ItemModel()); super(new Hk416ItemModel());
// TODO layer
// this.addRenderLayer(new Hk416Layer(this));
} }
@Override @Override
@ -82,18 +83,6 @@ public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> {
if (!(itemStack.getItem() instanceof GunItem)) return; if (!(itemStack.getItem() instanceof GunItem)) return;
var data = GunData.from(itemStack); var data = GunData.from(itemStack);
if (name.equals("Cross1")) {
bone.setHidden(ClientEventHandler.zoomPos < 0.7 || data.attachment.get(AttachmentType.SCOPE) != 1);
}
if (name.equals("Cross2")) {
bone.setHidden(ClientEventHandler.zoomPos < 0.7 || data.attachment.get(AttachmentType.SCOPE) != 2);
}
if (name.equals("Cross3")) {
bone.setHidden(ClientEventHandler.zoomPos < 0.7 || data.attachment.get(AttachmentType.SCOPE) != 3);
}
if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2 if (GunData.from(itemStack).attachment.get(AttachmentType.SCOPE) == 2
&& (name.equals("hidden"))) { && (name.equals("hidden"))) {
bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom);
@ -104,6 +93,19 @@ public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> {
bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom); bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom);
} }
int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE);
zoomFactor = Mth.lerp(0.01 * partialTick, zoomFactor, GunsTool.getGunDoubleTag(GunData.from(itemStack).tag, "CustomZoom"));
switch (scopeType) {
case 1 ->
AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, packedLightIn, 0, 0.25, 30, 0, 255, 0, 255, "eotech");
case 2 ->
AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, packedLightIn, 0, 0.313, 9, 255, 0, 0, 255, "acog");
case 3 ->
AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, packedLightIn, 0, 0.29, Math.max(38 - 5.2 * zoomFactor, 3), 255, 0, 0, 255, "lpvo");
}
;
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.440625, 0.3); AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.440625, 0.3);
ItemModelHelper.handleGunAttachments(bone, itemStack, name); ItemModelHelper.handleGunAttachments(bone, itemStack, name);

View file

@ -9839,489 +9839,6 @@
} }
] ]
}, },
{
"name": "Cross1",
"parent": "0",
"pivot": [0, 4.81172, -497.5],
"cubes": [
{
"origin": [-1, 9.33906, -497.5],
"size": [2, 0.5, 0],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-2.4319, 8.74595, -497.5],
"size": [2, 0.5, 0],
"pivot": [-2.20684, 8.1145, -497.5],
"rotation": [0, 0, -22.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-3.98178, 8.74595, -497.5],
"size": [2, 0.5, 0],
"pivot": [-2.20684, 8.1145, -497.5],
"rotation": [0, 0, -45],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-5.41369, 9.33906, -497.5],
"size": [2, 0.5, 0],
"pivot": [-2.20684, 8.1145, -497.5],
"rotation": [0, 0, -67.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-5.07771, 3.23633, -497.5],
"size": [2, 0.5, 0],
"pivot": [-3.30277, 2.60488, -497.5],
"rotation": [0, 0, -135],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-6.50962, 3.82945, -497.5],
"size": [2, 0.5, 0],
"pivot": [-3.30277, 2.60488, -497.5],
"rotation": [0, 0, -157.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-3.52783, 3.23633, -497.5],
"size": [2, 0.5, 0],
"pivot": [-3.30277, 2.60488, -497.5],
"rotation": [0, 0, -112.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-5.77734, 4.56172, -497.5],
"size": [2, 0.5, 0],
"pivot": [-4.77734, 4.81172, -497.5],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.25, 9.83906, -497.5],
"size": [0.5, 2, 0],
"pivot": [0, 4.81172, -497.5],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.25, 9.83906, -497.5],
"size": [0.5, 2, 0],
"pivot": [0, 4.81172, -497.5],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [78.25, 56], "uv_size": [-0.25, 0.25]}
}
},
{
"origin": [-0.25, 9.83906, -497.5],
"size": [0.5, 2, 0],
"uv": {
"south": {"uv": [78.25, 56], "uv_size": [-0.25, 0.25]}
}
},
{
"origin": [-0.25, 9.83906, -497.5],
"size": [0.5, 2, 0],
"pivot": [0, 4.81172, -497.5],
"rotation": [0, 0, -180],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.5, 4.31172, -497.5],
"size": [1, 1, 0],
"pivot": [0, 4.81172, -497.5],
"rotation": [0, 0, -135],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [3.52593, 8.07515, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 157.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [2.13479, 6.88081, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 112.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [2.94914, 7.33962, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 135],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [1.20684, 6.76857, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [0.30658, 7.01997, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 67.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.88776, 8.41112, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 22.5],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.42895, 7.59676, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, 45],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [3.77734, 8.97541, -497.5],
"size": [2, 0.5, 0],
"pivot": [2.38867, 4.6299, -497.5],
"rotation": [0, 0, -180],
"uv": {
"south": {"uv": [78, 56], "uv_size": [0.25, 0.25]}
}
}
]
},
{
"name": "Cross2",
"parent": "0",
"pivot": [0, -1.88125, -329.05],
"cubes": [
{
"origin": [-3.675, -11.08125, -329.05],
"size": [7.35, 18.4, 0],
"uv": {
"south": {"uv": [219.25, 164], "uv_size": [36.75, 92]}
}
}
]
},
{
"name": "Cross3",
"parent": "0",
"pivot": [0, 4.79044, -115.99707],
"cubes": [
{
"origin": [-0.03795, -5.41758, -115.99707],
"size": [0.07591, 20.41603, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [29, 111], "uv_size": [0.25, 19.75]}
}
},
{
"origin": [-0.03795, -5.41758, -115.99707],
"size": [0.07591, 20.41603, 0],
"uv": {
"south": {"uv": [30, 111], "uv_size": [0.25, 19.75]}
}
},
{
"origin": [-0.07167, -5.41758, -115.99707],
"size": [0.14334, 4.16, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [35, 128], "uv_size": [0.25, 4]}
}
},
{
"origin": [-0.07167, -5.41758, -115.99707],
"size": [0.14334, 4.16, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [36, 128], "uv_size": [0.25, 4]}
}
},
{
"origin": [-0.07167, -5.41758, -115.99707],
"size": [0.13928, 4.16, 0],
"uv": {
"south": {"uv": [46, 127], "uv_size": [0.25, 4]}
}
},
{
"origin": [-0.07167, -5.41758, -115.99707],
"size": [0.13928, 4.16, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -180],
"uv": {
"south": {"uv": [47, 111], "uv_size": [0.25, 4]}
}
}
]
},
{
"name": "bone97",
"parent": "Cross3",
"pivot": [0, 4.70349, -96.3082],
"cubes": [
{
"origin": [0.03797, 4.38338, -96.3082],
"size": [0.07053, 0.3688, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [236.375, 176.5], "uv_size": [0.875, 1]}
}
},
{
"origin": [-0.10851, 4.38338, -96.3082],
"size": [0.07053, 0.3688, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [237.25, 176.5], "uv_size": [-0.875, 1]}
}
},
{
"origin": [-0.10818, 4.89835, -96.3082],
"size": [0.07053, 0.30111, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, 180],
"uv": {
"south": {"uv": [236.375, 177.5], "uv_size": [0.875, -1]}
}
},
{
"origin": [0.03797, 4.82749, -96.3082],
"size": [0.07053, 0.3688, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [236.375, 177.5], "uv_size": [0.875, -1]}
}
},
{
"origin": [0.03765, 4.89835, -96.3082],
"size": [0.07053, 0.30111, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, -180],
"uv": {
"south": {"uv": [237.25, 177.5], "uv_size": [-0.875, -1]}
}
},
{
"origin": [-0.10851, 4.82749, -96.3082],
"size": [0.07053, 0.3688, 0],
"pivot": [0, 4.78984, -96.3082],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [237.25, 177.5], "uv_size": [-0.875, -1]}
}
}
]
},
{
"name": "bone173",
"parent": "Cross3",
"pivot": [0, 4.79044, -115.99707],
"cubes": [
{
"origin": [-0.05542, 3.6028, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [44, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 2.5628, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [59, 126], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 1.5228, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [45, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 0.4828, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [59, 127], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 0.4828, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [46, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 3.6028, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [59, 128], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 2.5628, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [47, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 1.5228, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [59, 129], "uv_size": [0.25, 0.25]}
}
}
]
},
{
"name": "bone174",
"parent": "Cross3",
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"cubes": [
{
"origin": [-0.05542, 3.6028, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [48, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 2.5628, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [59, 130], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 1.5228, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [49, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 0.4828, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, -90],
"uv": {
"south": {"uv": [59, 131], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 0.4828, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [50, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 3.6028, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [59, 132], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 2.5628, -115.99707],
"size": [0.11084, 0.07962, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [51, 141], "uv_size": [0.25, 0.25]}
}
},
{
"origin": [-0.05542, 1.5228, -115.99707],
"size": [0.11084, 0.07963, 0],
"pivot": [0, 4.79044, -115.99707],
"rotation": [0, 0, 90],
"uv": {
"south": {"uv": [59, 133], "uv_size": [0.25, 0.25]}
}
}
]
},
{ {
"name": "magazine", "name": "magazine",
"parent": "0", "parent": "0",
@ -20117,11 +19634,6 @@
} }
] ]
}, },
{
"name": "flare",
"parent": "0",
"pivot": [0.05, 1.75, -23.05]
},
{ {
"name": "Righthand", "name": "Righthand",
"parent": "0", "parent": "0",
@ -20142,6 +19654,16 @@
} }
] ]
}, },
{
"name": "flare",
"parent": "0",
"pivot": [0.05, 1.75, -23.05]
},
{
"name": "cross",
"parent": "0",
"pivot": [0, 4, -1000]
},
{ {
"name": "camera", "name": "camera",
"pivot": [3.17141, 5.16276, 9.77702] "pivot": [3.17141, 5.16276, 9.77702]

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB