Mountsins and shaders
This commit is contained in:
parent
eb71045d34
commit
7af3f5f981
48 changed files with 578 additions and 5 deletions
|
@ -1,17 +1,23 @@
|
|||
package ru.betterend.mixin.common;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ChunkRegion;
|
||||
import net.minecraft.world.gen.StructureAccessor;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import ru.betterend.registry.DefaultBiomeFeatures;
|
||||
|
||||
@Mixin(ChunkGenerator.class)
|
||||
public class ChunkGeneratorMixin {
|
||||
/*@Inject(method = "generateFeatures", at = @At("RETURN"))
|
||||
/*@Inject(method = "generateFeatures", at = @At("HEAD"))
|
||||
private void fixerPass(ChunkRegion region, StructureAccessor accessor, CallbackInfo info) {
|
||||
int chunkX = region.getCenterChunkX();
|
||||
int chunkZ = region.getCenterChunkZ();
|
||||
BlockPos start = new BlockPos(chunkX << 4, 16, chunkZ << 4);
|
||||
BlockPos end = start.add(15, 64, 15);
|
||||
BlocksHelper.fixBlocks(region, start, end);
|
||||
DefaultBiomeFeatures.MOUNTAINS.getFeature()
|
||||
}*/
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package ru.betterend.mixin.common;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.DefaultBiomeCreator;
|
||||
import net.minecraft.world.biome.GenerationSettings;
|
||||
import net.minecraft.world.gen.GenerationStep;
|
||||
import net.minecraft.world.gen.feature.ConfiguredFeatures;
|
||||
import net.minecraft.world.gen.feature.ConfiguredStructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders;
|
||||
import ru.betterend.registry.DefaultBiomeFeatures;
|
||||
|
||||
@Mixin(DefaultBiomeCreator.class)
|
||||
public class DefaultBiomeCreatorMixin {
|
||||
@Shadow
|
||||
private static Biome composeEndSpawnSettings(GenerationSettings.Builder builder) {
|
||||
return null;
|
||||
};
|
||||
|
||||
@Overwrite
|
||||
public static Biome createEndHighlands() {
|
||||
GenerationSettings.Builder builder = (new GenerationSettings.Builder())
|
||||
.surfaceBuilder(ConfiguredSurfaceBuilders.END).structureFeature(ConfiguredStructureFeatures.END_CITY)
|
||||
.feature(GenerationStep.Feature.SURFACE_STRUCTURES, ConfiguredFeatures.END_GATEWAY)
|
||||
.feature(GenerationStep.Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT)
|
||||
.feature(DefaultBiomeFeatures.MOUNTAINS.getFeatureStep(), DefaultBiomeFeatures.MOUNTAINS.getFeatureConfigured());
|
||||
return composeEndSpawnSettings(builder);
|
||||
}
|
||||
}
|
|
@ -26,7 +26,7 @@ public class BiomeRegistry {
|
|||
|
||||
public static final EndBiome END = registerBiome(BiomeKeys.THE_END, BiomeType.LAND, true);
|
||||
public static final EndBiome END_BARRENS = registerBiome(BiomeKeys.END_BARRENS, BiomeType.VOID, true);
|
||||
public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND, false);
|
||||
public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND, true);
|
||||
public static final EndBiome END_MIDLANDS = registerBiome(BiomeKeys.END_MIDLANDS, BiomeType.LAND, false);
|
||||
public static final EndBiome SMALL_END_ISLANDS = registerBiome(BiomeKeys.SMALL_END_ISLANDS, BiomeType.VOID, true);
|
||||
public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new BiomeFoggyMushroomland(), BiomeType.LAND);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package ru.betterend.registry;
|
||||
|
||||
import ru.betterend.world.features.EndFeature;
|
||||
import ru.betterend.world.features.MountainFeature;
|
||||
|
||||
public class DefaultBiomeFeatures {
|
||||
public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature());
|
||||
}
|
|
@ -5,6 +5,7 @@ import ru.betterend.world.features.DoublePlantFeature;
|
|||
import ru.betterend.world.features.EndFeature;
|
||||
import ru.betterend.world.features.EndLakeFeature;
|
||||
import ru.betterend.world.features.MossyGlowshroomFeature;
|
||||
import ru.betterend.world.features.MountainFeature;
|
||||
import ru.betterend.world.features.SinglePlantFeature;
|
||||
import ru.betterend.world.features.VineFeature;
|
||||
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package ru.betterend.world.features;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockPos.Mutable;
|
||||
import net.minecraft.world.StructureWorldAccess;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
||||
import ru.betterend.registry.BiomeRegistry;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
public class MountainFeature extends DefaultFeature {
|
||||
private static final Mutable POS = new Mutable();
|
||||
|
||||
@Override
|
||||
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, DefaultFeatureConfig featureConfig) {
|
||||
int px = (blockPos.getX() >> 4) << 4;
|
||||
int pz = (blockPos.getZ() >> 4) << 4;
|
||||
for (int x = 0; x < 16; x++) {
|
||||
POS.setX(px | x);
|
||||
for (int z = 0; z < 16; z++) {
|
||||
POS.setZ(pz | z);
|
||||
int min = this.getPosOnSurfaceWG(world, POS).getY();
|
||||
if (min > 50) {
|
||||
double max = getHeightSmooth(world, 7) * 10 + min;
|
||||
for (int y = min; y < max; y++) {
|
||||
POS.setY(y);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private int getHeight(StructureWorldAccess world) {
|
||||
if (BiomeRegistry.getFromBiome(world.getBiome(POS)) != BiomeRegistry.END_HIGHLANDS) {
|
||||
return -4;
|
||||
}
|
||||
int h = this.getPosOnSurfaceWG(world, POS).getY();
|
||||
if (h < 57) {
|
||||
return 0;
|
||||
}
|
||||
return h - 57;
|
||||
}
|
||||
|
||||
private double getHeightSmooth(StructureWorldAccess world, int radius) {
|
||||
int sx = POS.getX();
|
||||
int sz = POS.getZ();
|
||||
int r2 = radius * radius;
|
||||
double height = 0;
|
||||
double max = 0;
|
||||
for (int x = -radius; x <= radius; x++) {
|
||||
POS.setX(sx + x);
|
||||
int x2 = x * x;
|
||||
for (int z = -radius; z <= radius; z++) {
|
||||
POS.setZ(sz + z);
|
||||
int z2 = z * z;
|
||||
if (x2 + z2 < r2) {
|
||||
double mult = 1 - Math.sqrt(x2 + z2) / radius;
|
||||
max += mult;
|
||||
height += getHeight(world) * mult;
|
||||
}
|
||||
}
|
||||
}
|
||||
POS.setX(sx);
|
||||
POS.setZ(sz);
|
||||
return height / max;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"defaultMaterial": "betterend:wave_glow_all"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"defaultMaterial": "betterend:glow_all"
|
||||
}
|
10
src/main/resources/assets/betterend/materials/glow_10.json
Normal file
10
src/main/resources/assets/betterend/materials/glow_10.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_10.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/glow_33.json
Normal file
10
src/main/resources/assets/betterend/materials/glow_33.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_33.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/glow_50.json
Normal file
10
src/main/resources/assets/betterend/materials/glow_50.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_50.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/glow_all.json
Normal file
10
src/main/resources/assets/betterend/materials/glow_all.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_all.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_all_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/glow_inc.json
Normal file
10
src/main/resources/assets/betterend/materials/glow_inc.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_transparent.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave_large.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave_large.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/noshade.json
Normal file
10
src/main/resources/assets/betterend/materials/noshade.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "canvas:shaders/material/default.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/offset_floor.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/small_wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_33.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_33_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_all.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
10
src/main/resources/assets/betterend/materials/waving.json
Normal file
10
src/main/resources/assets/betterend/materials/waving.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave_floor.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wave_large.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/small_wave.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wall_wave.vert",
|
||||
"fragmentSource": "canvas:shaders/material/default.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"layers": [
|
||||
{
|
||||
"vertexSource": "betterend:shaders/material/wall_wave.vert",
|
||||
"fragmentSource": "canvas:shaders/material/glow_all.frag",
|
||||
"disableAo": true,
|
||||
"disableDiffuse": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.1 ? 1 : 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.33 ? 1 : 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.33 ? 0.5 : 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.5 ? 1 : 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.5 ? 0.5 : 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = 1;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = 0.5;
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
float light = frx_luminance(fragData.spriteColor.rgb) * 2 - 0.3;
|
||||
fragData.emissivity = clamp(light, 0, 1);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#include frex:shaders/api/fragment.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
|
||||
void frx_startFragment(inout frx_FragmentData fragData) {
|
||||
fragData.emissivity = 1;
|
||||
fragData.ao = false;
|
||||
fragData.diffuse = false;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
#define NOISE_SCALE 0.125
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
data.vertex.xz += data.normal.xz * data.spriteUV.y * 0.02;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
#ifdef ANIMATED_FOLIAGE
|
||||
float t = frx_renderSeconds() * 0.05;
|
||||
|
||||
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.5;
|
||||
float wind = snoise(vec4(pos, t)) * 0.02;
|
||||
|
||||
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
|
||||
data.vertex.z += sin(t * 19) * wind;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
#ifdef ANIMATED_FOLIAGE
|
||||
float t = frx_renderSeconds() * 0.05;
|
||||
|
||||
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.5;
|
||||
float wind = snoise(vec4(pos, t)) * 0.1;
|
||||
|
||||
//vec3 center = frx_modelOriginWorldPos() + vec3(0.5);
|
||||
//vec3 absDist = abs(pos - center) * 2;
|
||||
//wind *= clamp(1 - absDist.x + absDist.y + absDist.z, 0, 1);
|
||||
wind *= 1 - data.spriteUV.y;
|
||||
|
||||
data.vertex.y += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
|
||||
data.vertex.x += cos(t * 14) * wind;
|
||||
data.vertex.z += sin(t * 19) * wind;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
#define NOISE_SCALE 0.125
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
#ifdef ANIMATED_FOLIAGE
|
||||
float t = frx_renderSeconds() * 0.05;
|
||||
|
||||
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * NOISE_SCALE;
|
||||
float wind = snoise(vec4(pos, t)) * 0.1;
|
||||
|
||||
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
|
||||
data.vertex.z += sin(t * 19) * wind;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
#define NOISE_SCALE 0.125
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
#ifdef ANIMATED_FOLIAGE
|
||||
float t = frx_renderSeconds() * 0.05;
|
||||
|
||||
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * NOISE_SCALE;
|
||||
float wind = snoise(vec4(pos, t)) * 0.2;
|
||||
wind *= 1 - data.spriteUV.y;
|
||||
|
||||
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
|
||||
data.vertex.z += sin(t * 19) * wind;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
#include frex:shaders/api/vertex.glsl
|
||||
#include frex:shaders/api/world.glsl
|
||||
#include frex:shaders/lib/math.glsl
|
||||
#include frex:shaders/lib/noise/noise4d.glsl
|
||||
|
||||
/******************************************************
|
||||
Based on "GPU-Generated Procedural Wind Animations for Trees"
|
||||
by Renaldas Zioma in GPU Gems 3, 2007
|
||||
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
|
||||
|
||||
Remake of canvas default shader for the Nether
|
||||
******************************************************/
|
||||
|
||||
void frx_startVertex(inout frx_VertexData data) {
|
||||
#ifdef ANIMATED_FOLIAGE
|
||||
float t = frx_renderSeconds() * 0.05;
|
||||
|
||||
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.0625;
|
||||
float wind = snoise(vec4(pos, t)) * 0.25;
|
||||
|
||||
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
|
||||
data.vertex.z += sin(t * 19) * wind;
|
||||
#endif
|
||||
}
|
|
@ -15,7 +15,8 @@
|
|||
"LivingEntityMixin",
|
||||
"BiomeMixin",
|
||||
"SlimeEntityMixin",
|
||||
"LocateCommandMixin"
|
||||
"LocateCommandMixin",
|
||||
"DefaultBiomeCreatorMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue