锈湖站 Rusty Lake Station

“裂车马上就要进站了 本次裂车终点站 菇岛 请乘客们在屏蔽门完全打开后 先下后上 依次登车 带小孩的乘客 请照看好您的小孩 以免发生危险”

上海 Minecraft 地铁
大图 16MB
大图(无屏蔽门) 16MB

站台标识参考(没有狗皮膏药的)上海地铁 1 号线,列车本体涂装基本参考五号线的旧车 05C01,加上了真车上没有的车厢连接通道。本图和我服务器的锈湖站并不相同。哪天心情好了就把以前的旧坑地铁 mod 拿出来重新做成这个样子好了(笑)

本篇出图其实一开始是放在 Pixiv 的,但是经 Homan 提醒,现在的 Pixiv 以不允许游客查看作品的方式逼迫用户注册或者登陆。今后的作品将不会再投稿到 Pixiv,我会在本站提供(足够)高清的出图。

Station signages and other visual elements are heavily based on the current design in Shanghai Metro system. The trains themselves are a reference to the 05C01 trains (now demoted to servicing the branch line only). Note that the Rusty Lake in this station is entirely different from the one currently in my Minecraft server (by Homan).

This work was originally published on Pixiv a while earlier. However, Pixiv is marking my work as “sensitive” out of no particular reason. According to yahoo chiebukuro, Pixiv is forcing users to sign in before they can view the work in the name of “sensitive content”. As a result, my future works will be posted on this personal website instead of Pixiv.

Sakura island blender render

Sakura Island is the spawn point in my minecraft server. Of course it would not be possible to place sakura trees in game, so what’s actually in Minecraft is pink wool. Nevertheless they still look nice from far away.

I tried water caustics with refraction and fresnel effects, which make water more realistic at the cost of increased samples and render time. Also I attempted a manual material override on tree leaves, However that seems worth it.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Minecraft creation by me, exported with mineways on wine, rendered on blender with cuda. As usual, full resolution of 4096×4096 is available on pixiv.

Sakura Island At Night
Rendered in Blender

Goodbye, chunky. Hi, Blender! (with the Interior Of Dat Triangle)

This would be one of my last frames of Minecraft renderworks with chunky. I will be switching to blender, an open source modeling software that supports GPU ray tracing with CUDA and allows tweaks to model before performing actual (now night-long) rendering.

Chunky is still pretty straightforward to newbie CG makers, written in java that virtually runs everywhere, but it does not support GPU rendering, and java multi-threading overhead made it even worse.

Blender, on the other hand, needs a few hours to setup but provides far more precise control over elements, vertices, edges and fancy stuff. Cropping down map portions out of the camera view, customize torch light color, removing specific blocks, render entities with actual motion…

So… Goodbyeさようなら, chunky. Hi, Blender!

I might still recommend chunky for those who want to have a sip of minecraft rendering, but for more complex terrain and huge creations, use blender.

Here’s the downscaled rendered frame, but you can still find full resolution on deviant art.


Rendering Specs:


Rendering time: 1.57 days
Threads: 3
Original dimensions: 4000x4000
Downscaled dimensions for uploading: 2000x2000

 

Minecraft 1.8 Forge API IBlockState 与渲染

在 Minecraft 内部,方块也可以看作是可放置的物品,使用 Item 类的静态方法 getItemFromBlock(Block someBlock) 可以获得对应的物品。向游戏内注册该方块也是类似的使用 GameRegistry.registerBlock(Block blockToReg, String unlocalizedName)。然而在处理渲染时需要多额外的一步。

以下为 Item 渲染

String nameToReg = MOD_ID + ':' + item.getUnlocalizedName().substring(5);
Minecraft.getMinecraft()
        .getRenderItem().getItemModelMesher()
        .register(item, 0,
        new ModelResourceLocation(nameToReg, "inventory");

以下为 Block 渲染

Item item = Item.getItemFromBlock(block);
// 从 Block 得到对应的 Item
String nameToReg = MOD_ID + ':' + item.getUnlocalizedName().substring(5);
Minecraft.getMinecraft()
        .getRenderItem().getItemModelMesher()
        .register(item, 0,
        new ModelResourceLocation(nameToReg, "inventory");

区别主要在于多了一句从 Block 获得 Item。虽然是以 Item 注册了渲染,实际上这里和 Item 处理渲染的方法并不相同。

assets/<MOD_ID>/blockstates/<blockUnlocalizedName>.json

我所写的 mod 中许多方块都会根据不同的 BlockState 改变渲染模型,而 BlockState 中不同 IProperty 组合所对应状态所对应的模型在这里指定。关于 BlockState,见上一篇 Forge API 详解。我在这里以 TransitRailMod 的电缆架作为例子。

在源代码中,WirePanel 是 CustomDirectionalBlock 的子类,因此继承其 EnumFacing FACING 的属性,这个方块又根据电缆架上是否插了日光灯改变 EnumBool LAMP 属性、是否是封闭的改变 EnumBool SHUT 属性。因此罗列一下: Continue reading Minecraft 1.8 Forge API IBlockState 与渲染

Minecraft 1.8 Forge API BlockState 与红石详解

由于网上找到的 Minecraft Forge 文档实在是少的可怜,我决定自己写一份以防未来的自己忘记。具体的实践可以在我的客运铁路 mod 见到。

红石的更新本质上也是方块更新,因此当一个方块想要检测红石信号,处理的代码应当放在 Block 类的 onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) 方法。

BlockStateIBlockState

可以在方块的 Class 建立 BlockState 以允许方块拥有不同的状态 (IProperty),不同的状态可以在 assets/<MODID>/blockstates/<block_instance_name>.json 中定义不同的方块模型。

每一个 IProperty 拥有自己的 name 和可以取到的有限个值,这些值在 Java 内部以 enum 的形式实现。关于 enum 变量类型,可以在王八壳的 javadoc 上找到。

一个方块的 BlockState 可以包含一个或多个 IProperty,可以使用已经定义好的 IProperty 子类(PropertyDirection, PropertyBool)也可以自己定义 enum 建立 PropertyEnum

Class: public CustomBlock extends Block

通过以下方式建立 IProperty 及其子类的实例:

  • public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);
    建立新的方向属性,名称为 "facing" ,可以取的值为平面方向的朝向,为 EnumFacing 下的 NORTHEASTSOUTHWEST
  • public static final PropertyBool POWERED = PropertyBool.create("powered");
    建立布尔型只能为 truefalse 的方块属性。

Continue reading Minecraft 1.8 Forge API BlockState 与红石详解

Midymidy Cth 客运铁路企划 Part I

Part I 展示区,后续 Part 将会给出具体的设计规范。对我不会弃坑的

目前在 Midymidy 服务器的创造维度进行规划设计,并且在未来计划将这样的设计应用至生存维度中连接各地点和玩家聚集区的铁路。

海湾铁路桥

The Gulf Bridge for Line C1 in Midymidy R3 Creative World
The Gulf Bridge for Line C1 in Midymidy R3 Creative World

Continue reading Midymidy Cth 客运铁路企划 Part I