优化准星渲染

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;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.data.GunData;
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.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import org.joml.Matrix4f;
import software.bernie.geckolib.animation.AnimationProcessor;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.util.RenderUtil;
@ -110,7 +112,7 @@ public class AnimationHelper {
RenderUtil.scaleMatrixForBone(stack, bone);
RenderUtil.translateAwayFromPivotPoint(stack, bone);
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, 1.0F, 0, 1, 1);
vertex(vertexConsumer, pose, packedLightIn, 1.0F, 1, 1, 0);
@ -175,4 +177,34 @@ public class AnimationHelper {
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;
import com.atsuishio.superbwarfare.Mod;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.Util;
@ -34,34 +33,21 @@ public class ModRenderTypes extends RenderType {
//DickSheep的恩情还不完
public static final RenderType MUZZLE_FLASH_TYPE =
RenderType.create(
"muzzle_flash",
DefaultVertexFormat.POSITION_TEX_COLOR, // 注意格式名改为 POSITION_COLOR_TEX不是 TEX
VertexFormat.Mode.QUADS,
256,
false,
true,
// 使用新的 CompositeState 构造方式
RenderType.CompositeState.builder()
public static final Function<ResourceLocation, RenderType> MUZZLE_FLASH_TYPE = Util.memoize((location) -> {
TextureStateShard shard = new RenderStateShard.TextureStateShard(location, false, false);
RenderType.CompositeState state = RenderType.CompositeState.builder()
// 关键修复使用内置的 POSITION_COLOR_TEX_SHADER直接调用 ShaderStateShard
.setShaderState(RENDERTYPE_EYES_SHADER)
// 启用半透明确保正确排序
.setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
// 绑定贴图替换为你的路径
.setTextureState(new RenderStateShard.TextureStateShard(
Mod.loc("textures/particle/flare.png"),
false, // 不模糊
false // 不生成Mipmap
))
// 绑定贴图
.setTextureState(shard)
// 禁用光照和覆盖颜色
.setLightmapState(RenderStateShard.NO_LIGHTMAP)
.setOverlayState(RenderStateShard.NO_OVERLAY)
// 深度测试和写入设置
// .setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
.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 scope2 = getAnimationProcessor().getBone("Scope2");
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");
Player player = Minecraft.getInstance().player;
@ -79,14 +76,14 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
case 0 -> 0.2f;
case 1 -> 0.4f;
case 2 -> 0.8f;
case 3 -> 0.78f;
case 3 -> 0.9f;
default -> 0f;
};
float posZ = switch (type) {
case 0 -> 3f;
case 1 -> 3.5f;
case 2 -> 7.4f;
case 3 -> 6.8f;
case 3 -> 7.5f;
default -> 0f;
};
@ -99,8 +96,6 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
scope2.setScaleZ(1f - (0.8f * (float) zp));
scope3.setScaleZ(1f - (0.5f * (float) zp));
var data = GunData.from(stack);
GeoBone shen;
if (zt < 0.5) {
shen = getAnimationProcessor().getBone("fireRootNormal");
@ -133,17 +128,13 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
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 r = getAnimationProcessor().getBone("r");
rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0);
l.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);

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.value.AttachmentType;
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.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.BakedGeoModel;
@ -24,11 +26,10 @@ import java.util.HashSet;
import java.util.Set;
public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> {
public static double zoomFactor;
public Hk416ItemRenderer() {
super(new Hk416ItemModel());
// TODO layer
// this.addRenderLayer(new Hk416Layer(this));
}
@Override
@ -82,18 +83,6 @@ public class Hk416ItemRenderer extends GeoItemRenderer<Hk416Item> {
if (!(itemStack.getItem() instanceof GunItem)) return;
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
&& (name.equals("hidden"))) {
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);
}
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);
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",
"parent": "0",
@ -20117,11 +19634,6 @@
}
]
},
{
"name": "flare",
"parent": "0",
"pivot": [0.05, 1.75, -23.05]
},
{
"name": "Righthand",
"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",
"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