├── docs ├── back.png ├── index.html └── chota.min.css ├── pack_icon.png ├── textures ├── blocks │ ├── coal_ore.png │ ├── gold_ore.png │ ├── iron_ore.png │ ├── copper_ore.png │ ├── lapis_ore.png │ ├── quartz_ore.png │ ├── diamond_ore.png │ ├── emerald_ore.png │ ├── redstone_ore.png │ ├── amethyst_block.png │ ├── nether_gold_ore.png │ ├── amethyst_cluster.png │ └── deepslate │ │ ├── deepslate_coal_ore.png │ │ ├── deepslate_gold_ore.png │ │ ├── deepslate_iron_ore.png │ │ ├── deepslate_copper_ore.png │ │ ├── deepslate_lapis_ore.png │ │ ├── deepslate_diamond_ore.png │ │ ├── deepslate_emerald_ore.png │ │ └── deepslate_redstone_ore.png ├── environment │ ├── clouds.png │ └── overworld_cubemap │ │ ├── cubemap_0.png │ │ ├── cubemap_1.png │ │ ├── cubemap_2.png │ │ ├── cubemap_3.png │ │ ├── cubemap_4.png │ │ └── cubemap_5.png └── terrain_texture.json ├── src ├── LegacyCubemap │ └── src │ │ ├── LegacyCubemap.varying.def.sc │ │ ├── LegacyCubemap.vertex.sc │ │ └── LegacyCubemap.fragment.sc └── RenderChunk │ └── src │ ├── RenderChunk.varying.def.sc │ ├── RenderChunk.vertex.sc │ └── RenderChunk.fragment.sc ├── manifest.json ├── LICENSE └── biomes_client.json /docs/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/docs/back.png -------------------------------------------------------------------------------- /pack_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/pack_icon.png -------------------------------------------------------------------------------- /textures/blocks/coal_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/coal_ore.png -------------------------------------------------------------------------------- /textures/blocks/gold_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/gold_ore.png -------------------------------------------------------------------------------- /textures/blocks/iron_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/iron_ore.png -------------------------------------------------------------------------------- /textures/blocks/copper_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/copper_ore.png -------------------------------------------------------------------------------- /textures/blocks/lapis_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/lapis_ore.png -------------------------------------------------------------------------------- /textures/blocks/quartz_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/quartz_ore.png -------------------------------------------------------------------------------- /textures/blocks/diamond_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/diamond_ore.png -------------------------------------------------------------------------------- /textures/blocks/emerald_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/emerald_ore.png -------------------------------------------------------------------------------- /textures/blocks/redstone_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/redstone_ore.png -------------------------------------------------------------------------------- /textures/environment/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/clouds.png -------------------------------------------------------------------------------- /textures/blocks/amethyst_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/amethyst_block.png -------------------------------------------------------------------------------- /textures/blocks/nether_gold_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/nether_gold_ore.png -------------------------------------------------------------------------------- /textures/blocks/amethyst_cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/amethyst_cluster.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_coal_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_coal_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_gold_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_gold_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_iron_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_iron_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_copper_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_copper_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_lapis_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_lapis_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_diamond_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_diamond_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_emerald_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_emerald_ore.png -------------------------------------------------------------------------------- /textures/blocks/deepslate/deepslate_redstone_ore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/blocks/deepslate/deepslate_redstone_ore.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_0.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_1.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_2.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_3.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_4.png -------------------------------------------------------------------------------- /textures/environment/overworld_cubemap/cubemap_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bambosan/Bicubic-Shader-BE/HEAD/textures/environment/overworld_cubemap/cubemap_5.png -------------------------------------------------------------------------------- /src/LegacyCubemap/src/LegacyCubemap.varying.def.sc: -------------------------------------------------------------------------------- 1 | vec3 a_position : POSITION; 2 | 3 | vec4 v_fogColor : COLOR0; 4 | vec4 v_fogDistControl : COLOR1; 5 | vec4 v_position : TEXCOORD0; -------------------------------------------------------------------------------- /src/RenderChunk/src/RenderChunk.varying.def.sc: -------------------------------------------------------------------------------- 1 | vec4 a_color0 : COLOR0; 2 | vec3 a_position : POSITION; 3 | vec2 a_texcoord0 : TEXCOORD0; 4 | vec2 a_texcoord1 : TEXCOORD1; 5 | 6 | vec4 i_data0 : TEXCOORD8; 7 | vec4 i_data1 : TEXCOORD7; 8 | vec4 i_data2 : TEXCOORD6; 9 | vec4 i_data3 : TEXCOORD5; 10 | 11 | vec4 v_color0 : COLOR0; 12 | vec4 v_position : TEXCOORD2; 13 | vec3 v_worldPos : TEXCOORD3; 14 | centroid vec2 v_texcoord0 : TEXCOORD0; 15 | vec2 v_lightmapUV : TEXCOORD1; -------------------------------------------------------------------------------- /src/LegacyCubemap/src/LegacyCubemap.vertex.sc: -------------------------------------------------------------------------------- 1 | $input a_position 2 | $output v_position, v_fogColor, v_fogDistControl 3 | 4 | #include 5 | 6 | uniform vec4 FogAndDistanceControl; 7 | uniform vec4 ViewPositionAndTime; 8 | uniform vec4 FogColor; 9 | uniform mat4 CubemapRotation; 10 | 11 | void main() { 12 | gl_Position = mul(u_modelViewProj, vec4(a_position.x, a_position.y + 0.205, a_position.z, 1.0)); 13 | v_position.xyz = a_position.xyz; 14 | v_position.w = ViewPositionAndTime.w; 15 | v_fogColor = FogColor; 16 | v_fogDistControl = FogAndDistanceControl; 17 | } 18 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": 2, 3 | "header": { 4 | "name": "Bicubic Shaders BE 3.4", 5 | "description": "A shader for Minecraft: Bedrock Edition\nBy: @bamb0san", 6 | "uuid": "567ee84c-6f11-458b-ab17-5905602b601d", 7 | "version": [0, 3, 4], 8 | "min_engine_version": [1, 20, 15] 9 | }, 10 | "modules": [ 11 | { 12 | "description": "A shader for Minecraft: Bedrock Edition\nBy: @bamb0san", 13 | "type": "resources", 14 | "uuid": "acc9a536-32d6-4f6b-b8c3-9e5928d0b3cc", 15 | "version": [0, 3, 4] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Bicubic Shaders BE 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | Redirecting... 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 bambosan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/RenderChunk/src/RenderChunk.vertex.sc: -------------------------------------------------------------------------------- 1 | $input a_color0, a_position, a_texcoord0, a_texcoord1 2 | #ifdef INSTANCING 3 | $input i_data0, i_data1, i_data2, i_data3 4 | #endif 5 | $output v_color0, v_position, v_worldPos, v_texcoord0, v_lightmapUV 6 | 7 | #include 8 | 9 | uniform vec4 RenderChunkFogAlpha; 10 | uniform vec4 FogAndDistanceControl; 11 | uniform vec4 ViewPositionAndTime; 12 | uniform vec4 FogColor; 13 | 14 | void main() { 15 | mat4 model; 16 | #ifdef INSTANCING 17 | model = mtxFromCols(i_data0, i_data1, i_data2, i_data3); 18 | #else 19 | model = u_model[0]; 20 | #endif 21 | 22 | vec3 worldPos = mul(model, vec4(a_position, 1.0)).xyz; 23 | vec4 color; 24 | #ifdef RENDER_AS_BILLBOARDS 25 | worldPos += vec3(0.5, 0.5, 0.5); 26 | vec3 viewDir = normalize(worldPos - ViewPositionAndTime.xyz); 27 | vec3 boardPlane = normalize(vec3(viewDir.z, 0.0, -viewDir.x)); 28 | worldPos = (worldPos - 29 | ((((viewDir.yzx * boardPlane.zxy) - (viewDir.zxy * boardPlane.yzx)) * 30 | (a_color0.z - 0.5)) + 31 | (boardPlane * (a_color0.x - 0.5)))); 32 | color = vec4(1.0, 1.0, 1.0, 1.0); 33 | #else 34 | color = a_color0; 35 | #endif 36 | 37 | v_worldPos = worldPos; 38 | v_position.xyz = a_position.xyz; 39 | v_position.w = saturate((((length(worldPos.xyz) / FogAndDistanceControl.z) - FogAndDistanceControl.x) / (FogAndDistanceControl.y - FogAndDistanceControl.x))); 40 | v_texcoord0 = a_texcoord0; 41 | v_lightmapUV = a_texcoord1; 42 | v_color0 = color; 43 | 44 | gl_Position = mul(u_viewProj, vec4(worldPos, 1.0)); 45 | } 46 | -------------------------------------------------------------------------------- /textures/terrain_texture.json: -------------------------------------------------------------------------------- 1 | { 2 | "num_mip_levels" : 4, 3 | "padding" : 8, 4 | "resource_pack_name" : "vanilla", 5 | "texture_data" : { 6 | "coal_ore" : { 7 | "textures" : "textures/blocks/coal_ore" 8 | }, 9 | "copper_ore" : { 10 | "textures" : "textures/blocks/copper_ore" 11 | }, 12 | "deepslate_coal_ore" : { 13 | "textures" : "textures/blocks/deepslate/deepslate_coal_ore" 14 | }, 15 | "deepslate_copper_ore" : { 16 | "textures" : "textures/blocks/deepslate/deepslate_copper_ore" 17 | }, 18 | "deepslate_diamond_ore" : { 19 | "textures" : "textures/blocks/deepslate/deepslate_diamond_ore" 20 | }, 21 | "deepslate_emerald_ore" : { 22 | "textures" : "textures/blocks/deepslate/deepslate_emerald_ore" 23 | }, 24 | "deepslate_gold_ore" : { 25 | "textures" : "textures/blocks/deepslate/deepslate_gold_ore" 26 | }, 27 | "deepslate_iron_ore" : { 28 | "textures" : "textures/blocks/deepslate/deepslate_iron_ore" 29 | }, 30 | "deepslate_lapis_ore" : { 31 | "textures" : "textures/blocks/deepslate/deepslate_lapis_ore" 32 | }, 33 | "deepslate_redstone_ore" : { 34 | "textures" : "textures/blocks/deepslate/deepslate_redstone_ore" 35 | }, 36 | "diamond_ore" : { 37 | "textures" : "textures/blocks/diamond_ore" 38 | }, 39 | "emerald_ore" : { 40 | "textures" : "textures/blocks/emerald_ore" 41 | }, 42 | "gold_ore" : { 43 | "textures" : "textures/blocks/gold_ore" 44 | }, 45 | "iron_ore" : { 46 | "textures" : "textures/blocks/iron_ore" 47 | }, 48 | "lapis_ore" : { 49 | "textures" : "textures/blocks/lapis_ore" 50 | }, 51 | "nether_gold_ore" : { 52 | "textures" : "textures/blocks/nether_gold_ore" 53 | }, 54 | "quartz_ore" : { 55 | "textures" : "textures/blocks/quartz_ore" 56 | }, 57 | "redstone_ore" : { 58 | "textures" : "textures/blocks/redstone_ore" 59 | } 60 | }, 61 | "texture_name" : "atlas.terrain" 62 | } 63 | -------------------------------------------------------------------------------- /src/LegacyCubemap/src/LegacyCubemap.fragment.sc: -------------------------------------------------------------------------------- 1 | $input v_position, v_fogColor, v_fogDistControl 2 | #include 3 | 4 | SAMPLER2D(s_MatTexture, 0); 5 | 6 | // random, noise, fbm 7 | // https://github.com/patriciogonzalezvivo/lygia/tree/main/generative 8 | float hash(float h){ 9 | return fract(sin(h) * 43758.5453); 10 | } 11 | 12 | float voronoi2d(vec2 pos){ 13 | vec2 p = floor(pos); 14 | vec2 f = fract(pos); 15 | float dist = 1.0; 16 | for(float y = -1.0; y <= 1.0; y++){ 17 | for(float x = -1.0; x <= 1.0; x++){ 18 | vec2 ne = vec2(x, y); 19 | vec2 pn = p + ne; 20 | float n = pn.x + pn.y * 57.0; 21 | dist = min(dist, length(ne + hash(n) - f)); 22 | } 23 | } 24 | return dist; 25 | } 26 | 27 | float fbm(vec2 pos, float pDens, float fTime){ 28 | float sum = 0.0; 29 | float sDens = 1.0; 30 | pos += fTime * 0.001; 31 | for(int i = 0; i < 4; i++){ 32 | sum += voronoi2d(pos) * sDens * pDens; 33 | sDens *= 0.5; 34 | pos *= 2.5; 35 | pos += fTime * 0.05; 36 | } 37 | return saturate(1.0 - sum); 38 | } 39 | // random, noise, fbm 40 | 41 | float dStars(vec3 pos){ 42 | pos = floor(pos * 265.0); 43 | return smoothstep(0.9975, 1.0, hash(pos.x + pos.y * 157.0 + pos.z * 113.0)); 44 | } 45 | 46 | float getLL(vec3 color){ 47 | return dot(color, vec3(0.2125, 0.7154, 0.0721)); 48 | } 49 | 50 | vec3 cSatur(vec3 color, float sat){ 51 | float lum = getLL(color); 52 | return mix(vec3_splat(lum), color, sat); 53 | } 54 | 55 | // tonemap 56 | // https://github.com/dmnsgn/glsl-tone-map/blob/main/filmic.glsl 57 | vec3 filmic(vec3 x){ 58 | return (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06); 59 | } 60 | // tonemap 61 | 62 | vec3 getSunC(float sunH){ 63 | sunH = saturate(sunH + 0.1); 64 | return vec3((1.0 - sunH) + sunH, sunH, sunH * sunH) * pow(sunH, 0.6); 65 | } 66 | 67 | vec3 getMoonC(float sunH){ 68 | sunH = saturate(-sunH); 69 | return vec3((1.0 - sunH) * 0.2 + sunH, sunH, sunH) * pow(sunH, 0.6); 70 | } 71 | 72 | vec3 getZenC(float sunH){ 73 | sunH = pow(saturate(sunH + 0.1), 0.6); 74 | return vec3(0.0, sunH * 0.12 + 0.0001, sunH * 0.5 + 0.0005); 75 | } 76 | 77 | float getMie(vec3 lightPos, vec3 pos){ 78 | return exp(-distance(pos, lightPos) * 2.0) * exp(-saturate(pos.y) * 4.0); 79 | } 80 | 81 | void main(){ 82 | // sun angle 83 | // https://github.com/bWFuanVzYWth/OriginShader 84 | float sunA = clamp(((349.305545 * v_fogColor.g - 159.858192) * v_fogColor.g + 30.557216) * v_fogColor.g - 1.628452, -1.0, 1.0); 85 | // sun angle 86 | 87 | vec3 sunP = normalize(vec3(cos(sunA), sin(sunA), 0.0)); 88 | vec3 nPos = normalize(vec3(v_position.x, -v_position.y, -v_position.z)); 89 | 90 | vec3 sunC = getSunC(sunP.y); 91 | vec3 moonC = getMoonC(sunP.y); 92 | vec3 zenC = getZenC(sunP.y); 93 | vec3 horC = moonC * vec3(0.0, 0.1, 0.2) + sunC; 94 | horC = cSatur(horC, 0.5); 95 | 96 | vec3 color = mix(zenC, horC, exp(-saturate(nPos.y) * 4.0) * 0.25); 97 | color += dStars(nPos + v_position.w * 0.0001) * saturate(1.0 - getLL(sunC)); 98 | color += sunC * getMie(sunP, nPos) * 4.0; 99 | color += moonC * getMie(-sunP, nPos) * vec3(0.15, 0.2, 0.25); 100 | color += sunC * smoothstep(0.9975, 1.0, dot(nPos, sunP)) * 100.0 * pow(saturate(nPos.y), 0.7); 101 | color += moonC * smoothstep(0.999, 1.0, dot(nPos, -sunP)) * 100.0 * pow(saturate(nPos.y), 0.7); 102 | 103 | vec2 cloudP = (nPos.xz / nPos.y) * 0.7; 104 | cloudP -= cloudP * texture2D(s_MatTexture, fract(gl_FragCoord.xy / 256.0)).r * 0.05; 105 | float sDens = 1.8; 106 | vec3 cloDirC = horC * 1.5; 107 | vec3 cloAmbC = cSatur(zenC, 0.7); 108 | 109 | for(int i = 0; i < 10; i++){ 110 | float cloudM = fbm(cloudP, sDens, v_position.w); 111 | cloDirC = mix(cloDirC, cloAmbC, 0.2); 112 | color = mix(color, cloDirC, cloudM * smoothstep(0.0, 0.5, nPos.y)); 113 | sDens += (i <= 6) ? -0.1 : 0.1; 114 | cloudP -= cloudP * 0.045; 115 | } 116 | color = mix(color, v_fogColor.rgb * v_fogColor.rgb, max(step(v_fogDistControl.x, 0.0), smoothstep(0.6, 0.3, v_fogDistControl.x))); 117 | 118 | color *= vec3(1.5, 1.4, 1.3); 119 | color = cSatur(color, 1.1); 120 | color = filmic(color); 121 | 122 | gl_FragColor = vec4(color, 1.0); 123 | } 124 | -------------------------------------------------------------------------------- /src/RenderChunk/src/RenderChunk.fragment.sc: -------------------------------------------------------------------------------- 1 | $input v_color0, v_position, v_worldPos, v_texcoord0, v_lightmapUV 2 | #include 3 | 4 | uniform vec4 FogAndDistanceControl; 5 | uniform vec4 ViewPositionAndTime; 6 | uniform vec4 FogColor; 7 | 8 | SAMPLER2D(s_MatTexture, 0); 9 | SAMPLER2D(s_SeasonsTexture, 1); 10 | SAMPLER2D(s_LightMapTexture, 2); 11 | 12 | // random, noise, fbm 13 | // https://github.com/patriciogonzalezvivo/lygia/tree/main/generative 14 | float hash(float h){ 15 | return fract(sin(h) * 43758.5453); 16 | } 17 | 18 | float noise2d(vec2 pos){ 19 | vec2 p = floor(pos); 20 | vec2 f = fract(pos); 21 | f = f * f * (3.0 - 2.0 * f); 22 | float n = p.x + p.y * 57.0; 23 | return mix(mix(hash(n), hash(n + 1.0), f.x), mix(hash(n + 57.0), hash(n + 58.0), f.x), f.y); 24 | } 25 | 26 | float voronoi2d(vec2 pos){ 27 | vec2 p = floor(pos); 28 | vec2 f = fract(pos); 29 | float dist = 1.0; 30 | for(float y = -1.0; y <= 1.0; y++){ 31 | for(float x = -1.0; x <= 1.0; x++){ 32 | vec2 ne = vec2(x, y); 33 | vec2 pn = p + ne; 34 | float n = pn.x + pn.y * 57.0; 35 | dist = min(dist, length(ne + hash(n) - f)); 36 | } 37 | } 38 | return dist; 39 | } 40 | 41 | float fbm(vec2 pos, float pDens){ 42 | float sum = 0.0; 43 | float sDens = 1.0; 44 | pos += ViewPositionAndTime.w * 0.001; 45 | for(int i = 0; i < 4; i++){ 46 | sum += voronoi2d(pos) * sDens * pDens; 47 | sDens *= 0.5; 48 | pos *= 2.5; 49 | pos += ViewPositionAndTime.w * 0.05; 50 | } 51 | return saturate(1.0 - sum); 52 | } 53 | // random, noise, fbm 54 | 55 | float dStars(vec3 pos){ 56 | pos = floor(pos * 265.0); 57 | return smoothstep(0.9975, 1.0, hash(pos.x + pos.y * 157.0 + pos.z * 113.0)); 58 | } 59 | 60 | float getLL(vec3 color){ 61 | return dot(color, vec3(0.2125, 0.7154, 0.0721)); 62 | } 63 | 64 | vec3 cSatur(vec3 color, float sat){ 65 | float lum = getLL(color); 66 | return mix(vec3_splat(lum), color, sat); 67 | } 68 | 69 | // tonemap 70 | // https://github.com/dmnsgn/glsl-tone-map/blob/main/filmic.glsl 71 | vec3 filmic(vec3 x){ 72 | return (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06); 73 | } 74 | // tonemap 75 | 76 | vec3 getSunC(float sunH){ 77 | sunH = saturate(sunH + 0.1); 78 | return vec3((1.0 - sunH) + sunH, sunH, sunH * sunH) * pow(sunH, 0.6); 79 | } 80 | 81 | vec3 getMoonC(float sunH){ 82 | sunH = saturate(-sunH); 83 | return vec3((1.0 - sunH) * 0.2 + sunH, sunH, sunH) * pow(sunH, 0.6); 84 | } 85 | 86 | vec3 getZenC(float sunH){ 87 | sunH = pow(saturate(sunH + 0.1), 0.6); 88 | return vec3(0.0, sunH * 0.12 + 0.0001, sunH * 0.5 + 0.0005); 89 | } 90 | 91 | float getMie(vec3 lPos, vec3 pos){ 92 | return exp(-distance(pos, lPos) * 2.0) * exp(-saturate(pos.y) * 4.0); 93 | } 94 | 95 | float getMie1(vec3 lPos, vec3 pos){ 96 | return exp(-distance(pos, lPos) * 2.0); 97 | } 98 | 99 | #define rot2d(x) mat2(cos(x), -sin(x), sin(x), cos(x)) 100 | float getWH(vec2 pos){ 101 | pos *= vec2(1.3, 0.5); 102 | pos.x += ViewPositionAndTime.w; 103 | 104 | vec2 wind = vec2(ViewPositionAndTime.w, 0.0); 105 | float hMap = noise2d(mul(pos, rot2d(0.5)) + wind) * 0.45; 106 | hMap += noise2d(mul(pos, rot2d(-0.5)) + wind) * 0.45; 107 | 108 | pos *= 3.5; 109 | hMap += noise2d(mul(pos, rot2d(0.5)) - wind) * 0.05; 110 | hMap += noise2d(mul(pos, rot2d(-0.5)) - wind) * 0.05; 111 | return saturate(hMap); 112 | } 113 | #undef rot2d 114 | 115 | float fSchlick(float f0, float nd){ 116 | return f0 + (1.0 - f0) * pow(1.0 - nd, 5.0); 117 | } 118 | 119 | // specular 120 | // http://filmicworlds.com/blog/optimizing-ggx-shaders-with-dotlh/ 121 | float G1V(float dotNV, float k){ 122 | return rcp(dotNV * (1.0 - k) + k); 123 | } 124 | 125 | float ggx(vec3 N, vec3 V, vec3 L, float roughness, float f0){ 126 | float alpha = roughness * roughness; 127 | vec3 H = normalize(V + L); 128 | 129 | float dotNL = saturate(dot(N, L)); 130 | float dotNV = saturate(dot(N, V)); 131 | float dotNH = saturate(dot(N, H)); 132 | float dotLH = saturate(dot(L, H)); 133 | 134 | float alphaSqr = alpha * alpha; 135 | float denom = dotNH * dotNH * (alphaSqr - 1.0) + 1.0; 136 | float D = alphaSqr / (3.1415926 * denom * denom); 137 | float F = fSchlick(f0, dotLH); 138 | 139 | float k = alpha / 2.0; 140 | float vis = G1V(dotNL, k) * G1V(dotNV, k); 141 | return dotNL * D * F * vis; 142 | } 143 | // specular 144 | 145 | void main(){ 146 | #if defined(DEPTH_ONLY_OPAQUE) || defined(DEPTH_ONLY) 147 | gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 148 | #else 149 | vec4 diffuse = texture2D(s_MatTexture, v_texcoord0); 150 | #if defined(ALPHA_TEST) 151 | if(diffuse.a < 0.5) discard; 152 | #endif 153 | #if defined(SEASONS) && (defined(OPAQUE) || defined(ALPHA_TEST)) 154 | diffuse.rgb *= mix(vec3_splat(1.0), texture2D(s_SeasonsTexture, v_color0.rg).rgb * 2.0, v_color0.b); 155 | diffuse.rgb *= v_color0.aaa; 156 | #else 157 | diffuse *= v_color0; 158 | #endif 159 | #ifndef TRANSPARENT 160 | diffuse.a = 1.0; 161 | #endif 162 | 163 | diffuse.rgb *= diffuse.rgb; 164 | 165 | vec3 N = normalize(cross(dFdx(v_position.xyz), dFdy(v_position.xyz))); 166 | mat3 TBN = mat3(abs(N).y + N.z, 0.0, -N.x, 0.0, -abs(N).x - abs(N).z, abs(N).y, N); 167 | 168 | // sun angle 169 | // https://github.com/bWFuanVzYWth/OriginShader 170 | float sunA = clamp(((349.305545 * FogColor.g - 159.858192) * FogColor.g + 30.557216) * FogColor.g - 1.628452, -1.0, 1.0); 171 | // sun angle 172 | 173 | vec3 sunP = normalize(vec3(cos(sunA), sin(sunA), 0.0)); 174 | vec3 tLP = sunP.y > 0.0 ? sunP : -sunP; 175 | 176 | vec3 sunC = getSunC(sunP.y); 177 | vec3 moonC = getMoonC(sunP.y); 178 | vec3 zenC = getZenC(sunP.y); 179 | vec3 horC = moonC * vec3(0.0, 0.1, 0.2) + sunC; 180 | horC = cSatur(horC, 0.5); 181 | 182 | float rain = smoothstep(0.6, 0.3, FogAndDistanceControl.x); 183 | float shMap = mix(saturate(dot(tLP, N)) * (2.0 - saturate(tLP.y)), 0.0, max(smoothstep(0.94, 0.92, v_lightmapUV.y), rain)); 184 | 185 | float bLight = max(v_lightmapUV.x * (1.0 - saturate(sunP.y) * v_lightmapUV.y), v_lightmapUV.x * rain * v_lightmapUV.y); 186 | 187 | float glowT = float(texture2DLod(s_MatTexture, v_texcoord0, 0.0).a > 0.91 && texture2DLod(s_MatTexture, v_texcoord0, 0.0).a < 0.93) * mix(2.0, 0.0, v_position.w); 188 | 189 | bool isNeth = texture2D(s_LightMapTexture, vec2(0, 0)).r > 0.5 && texture2D(s_LightMapTexture, vec2(0, 0)).r < 0.52; 190 | bool isEndw = texture2D(s_LightMapTexture, vec2(0, 0)).r > 0.42 && texture2D(s_LightMapTexture, vec2(0, 0)).r < 0.44; 191 | 192 | vec3 ambVL = texture2D(s_LightMapTexture, vec2(0.0, v_lightmapUV.y)).rgb; 193 | vec3 ambL = mix(cSatur(zenC, 0.3) * 2.0 * ambVL, ambVL * 0.25, max(float(isNeth), float(isEndw))); 194 | ambL += glowT; 195 | ambL += mix(horC, FogColor.rgb * FogColor.rgb, rain) * shMap; 196 | ambL += mix(vec3(1.0, 0.7, 0.4), vec3(1.0, 0.5, 0.6), float(isEndw)) * ((bLight * bLight) * 0.25 + pow(bLight, 16.0) * 5.0); 197 | 198 | diffuse.rgb = cSatur(diffuse.rgb, 1.0 - (pow(saturate(-sunP.y), 0.7) * v_lightmapUV.y) * 0.5); 199 | diffuse.rgb *= ambL; 200 | 201 | vec3 nWP = normalize(v_worldPos.xyz); 202 | 203 | vec3 parP = normalize(mul(v_worldPos, TBN)); 204 | parP.xy = (parP.xy / parP.z) * 0.1; 205 | vec2 waPos = v_position.xz; 206 | for(int i = 0; i < 4; i++) waPos += parP.xy * saturate(1.0 - getWH(waPos)); 207 | 208 | vec3 wN = vec3(0.0, 0.0, 1.0); 209 | wN.x += getWH(waPos + vec2(0.02, 0.0)); 210 | wN.x -= getWH(waPos - vec2(0.02, 0.0)); 211 | wN.y += getWH(waPos + vec2(0.0, 0.02)); 212 | wN.y -= getWH(waPos - vec2(0.0, 0.02)); 213 | wN = normalize(mul(normalize(wN), TBN)); 214 | 215 | bool isWat = false; 216 | #if !defined(SEASONS) && !defined(ALPHA_TEST) 217 | if(v_color0.a > 0.4 && v_color0.a < 0.6){ 218 | isWat = true; 219 | diffuse.rgb *= 0.0; 220 | 221 | vec3 rPos = reflect(nWP, wN); 222 | vec3 refl = mix(zenC, horC, exp(-saturate(rPos.y) * 4.0) * 0.25); 223 | refl += dStars(rPos + ViewPositionAndTime.w * 0.0001) * saturate(1.0 - getLL(sunC)); 224 | refl += sunC * getMie(sunP, rPos) * 4.0; 225 | refl += moonC * getMie(-sunP, rPos) * vec3(0.15, 0.2, 0.25); 226 | 227 | vec2 cloudP = (rPos.xz / rPos.y) * 0.7; 228 | float sDens = 1.8; 229 | vec3 cloDirC = horC * 1.5; 230 | vec3 cloAmbC = cSatur(zenC, 0.7); 231 | 232 | for(int i = 0; i < 10; i++){ 233 | float cloudM = fbm(cloudP, sDens); 234 | cloDirC = mix(cloDirC, cloAmbC, 0.2); 235 | refl = mix(refl, cloDirC, cloudM * smoothstep(0.0, 0.5, rPos.y)); 236 | sDens += (i <= 6) ? -0.1 : 0.1; 237 | cloudP -= cloudP * 0.045; 238 | } 239 | refl = mix(refl, FogColor.rgb * FogColor.rgb, max(step(FogAndDistanceControl.x, 0.0), rain)); 240 | 241 | vec3 vDir = normalize(-v_worldPos.xyz); 242 | float fresnel = fSchlick(0.2, saturate(dot(wN, vDir))) * v_lightmapUV.y; 243 | diffuse.rgb = mix(diffuse.rgb, refl, fresnel); 244 | diffuse.a = mix(diffuse.a, 1.0, saturate(fresnel * 2.0)); 245 | 246 | diffuse += vec4(horC, 1.0) * ggx(wN, vDir, tLP, 0.1, 0.05) * smoothstep(0.92, 0.94, v_lightmapUV.y); 247 | } 248 | #endif 249 | 250 | if(FogAndDistanceControl.x <= 0.0){ 251 | if(!isWat){ 252 | vec3 causDir = normalize(mul(vec3(-1.0, -1.0, 0.1), TBN)); 253 | vec3 uwAmb = ambVL * vec3(0.0, 0.3, 0.8) + pow(v_lightmapUV.x, 3.0); 254 | uwAmb += pow(saturate(dot(causDir, wN)), 3.0) * v_lightmapUV.y * 3e3; 255 | diffuse.rgb *= uwAmb; 256 | } 257 | } else { 258 | if(!isNeth && !isEndw){ 259 | vec3 nFogC = zenC * (3.0 - saturate(sunP.y) * 0.5); 260 | nFogC += sunC * getMie1(sunP, nWP) * 4.0; 261 | nFogC += moonC * getMie1(-sunP, nWP) * vec3(0.15, 0.2, 0.25); 262 | nFogC = mix(nFogC, FogColor.rgb * FogColor.rgb, max(step(FogAndDistanceControl.x, 0.0), rain)); 263 | float nFogD = 1.0 - exp(-saturate(length(-v_worldPos.xyz) * 0.01) * (0.1 - saturate(sunP.y) * 0.09)); 264 | diffuse.rgb = mix(diffuse.rgb, nFogC, nFogD); 265 | } 266 | } 267 | 268 | vec3 bFogC = mix(zenC, horC, exp(-saturate(nWP.y) * 4.0) * 0.25); 269 | bFogC += sunC * getMie(sunP, nWP) * 4.0; 270 | bFogC += moonC * getMie(-sunP, nWP) * vec3(0.15, 0.2, 0.25); 271 | bFogC = mix(bFogC, FogColor.rgb * FogColor.rgb, max(step(FogAndDistanceControl.x, 0.0), rain)); 272 | diffuse.rgb = mix(diffuse.rgb, bFogC, v_position.w); 273 | 274 | diffuse.rgb *= vec3(1.5, 1.4, 1.3); 275 | diffuse.rgb = cSatur(diffuse.rgb, 1.1); 276 | diffuse.rgb = filmic(diffuse.rgb); 277 | 278 | gl_FragColor = diffuse; 279 | #endif 280 | } -------------------------------------------------------------------------------- /docs/chota.min.css: -------------------------------------------------------------------------------- 1 | /*! chota.css v0.7.2 | MIT License | github.com/jenil/chota */:root{--bg-color:#fff;--bg-secondary-color:#f3f3f6;--color-primary:#14854f;--color-lightGrey:#d2d6dd;--color-grey:#747681;--color-darkGrey:#3f4144;--color-error:#d43939;--color-success:#28bd14;--grid-maxWidth:120rem;--grid-gutter:2rem;--font-size:1.6rem;--font-color:#333;--font-family-sans:-apple-system,BlinkMacSystemFont,Avenir,"Avenir Next","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--font-family-mono:monaco,"Consolas","Lucida Console",monospace}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:62.5%;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{background-color:var(--bg-color);line-height:1.6;font-size:var(--font-size);color:var(--font-color);font-family:Segoe UI,Helvetica Neue,sans-serif;font-family:var(--font-family-sans);margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-weight:500;margin:.35em 0 .7em}h1{font-size:2em}h2{font-size:1.75em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1em}h6{font-size:.85em}a{color:var(--color-primary);text-decoration:none}a:hover:not(.button){opacity:.75}button{font-family:inherit}p{margin-top:0}blockquote{background-color:var(--bg-secondary-color);padding:1.5rem 2rem;border-left:3px solid var(--color-lightGrey)}dl dt{font-weight:700}hr{background-color:var(--color-lightGrey);height:1px;margin:1rem 0}hr,table{border:none}table{width:100%;border-collapse:collapse;border-spacing:0;text-align:left}table.striped tr:nth-of-type(2n){background-color:var(--bg-secondary-color)}td,th{vertical-align:middle;padding:1.2rem .4rem}thead{border-bottom:2px solid var(--color-lightGrey)}tfoot{border-top:2px solid var(--color-lightGrey)}code,kbd,pre,samp,tt{font-family:var(--font-family-mono)}code,kbd{font-size:90%;white-space:pre-wrap;border-radius:4px;padding:.2em .4em;color:var(--color-error)}code,kbd,pre{background-color:var(--bg-secondary-color)}pre{font-size:1em;padding:1rem;overflow-x:auto}pre code{background:none;padding:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}img{max-width:100%}fieldset{border:1px solid var(--color-lightGrey)}iframe{border:0}.container{max-width:var(--grid-maxWidth);margin:0 auto;width:96%;padding:0 calc(var(--grid-gutter)/2)}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-left:calc(var(--grid-gutter)/-2);margin-right:calc(var(--grid-gutter)/-2)}.row,.row.reverse{-webkit-box-orient:horizontal}.row.reverse{-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.col{-webkit-box-flex:1;-ms-flex:1;flex:1}.col,[class*=" col-"],[class^=col-]{margin:0 calc(var(--grid-gutter)/2) calc(var(--grid-gutter)/2)}.col-1{-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-1,.col-2{-webkit-box-flex:0}.col-2{-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3{-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-3,.col-4{-webkit-box-flex:0}.col-4{-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5{-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-5,.col-6{-webkit-box-flex:0}.col-6{-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7{-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-7,.col-8{-webkit-box-flex:0}.col-8{-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9{-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-9,.col-10{-webkit-box-flex:0}.col-10{-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11{-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-11,.col-12{-webkit-box-flex:0}.col-12{-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}@media screen and (max-width:599px){.container{width:100%}.col,[class*=col-],[class^=col-]{-webkit-box-flex:0;-ms-flex:0 1 100%;flex:0 1 100%;max-width:100%}}@media screen and (min-width:900px){.col-1-md{-webkit-box-flex:0;-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-2-md{-webkit-box-flex:0;-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3-md{-webkit-box-flex:0;-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-4-md{-webkit-box-flex:0;-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5-md{-webkit-box-flex:0;-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-6-md{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7-md{-webkit-box-flex:0;-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-8-md{-webkit-box-flex:0;-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9-md{-webkit-box-flex:0;-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-10-md{-webkit-box-flex:0;-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11-md{-webkit-box-flex:0;-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-12-md{-webkit-box-flex:0;-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}}@media screen and (min-width:1200px){.col-1-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(8.33333% - var(--grid-gutter));flex:0 0 calc(8.33333% - var(--grid-gutter));max-width:calc(8.33333% - var(--grid-gutter))}.col-2-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(16.66667% - var(--grid-gutter));flex:0 0 calc(16.66667% - var(--grid-gutter));max-width:calc(16.66667% - var(--grid-gutter))}.col-3-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(25% - var(--grid-gutter));flex:0 0 calc(25% - var(--grid-gutter));max-width:calc(25% - var(--grid-gutter))}.col-4-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(33.33333% - var(--grid-gutter));flex:0 0 calc(33.33333% - var(--grid-gutter));max-width:calc(33.33333% - var(--grid-gutter))}.col-5-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(41.66667% - var(--grid-gutter));flex:0 0 calc(41.66667% - var(--grid-gutter));max-width:calc(41.66667% - var(--grid-gutter))}.col-6-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(50% - var(--grid-gutter));flex:0 0 calc(50% - var(--grid-gutter));max-width:calc(50% - var(--grid-gutter))}.col-7-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(58.33333% - var(--grid-gutter));flex:0 0 calc(58.33333% - var(--grid-gutter));max-width:calc(58.33333% - var(--grid-gutter))}.col-8-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(66.66667% - var(--grid-gutter));flex:0 0 calc(66.66667% - var(--grid-gutter));max-width:calc(66.66667% - var(--grid-gutter))}.col-9-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(75% - var(--grid-gutter));flex:0 0 calc(75% - var(--grid-gutter));max-width:calc(75% - var(--grid-gutter))}.col-10-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(83.33333% - var(--grid-gutter));flex:0 0 calc(83.33333% - var(--grid-gutter));max-width:calc(83.33333% - var(--grid-gutter))}.col-11-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(91.66667% - var(--grid-gutter));flex:0 0 calc(91.66667% - var(--grid-gutter));max-width:calc(91.66667% - var(--grid-gutter))}.col-12-lg{-webkit-box-flex:0;-ms-flex:0 0 calc(100% - var(--grid-gutter));flex:0 0 calc(100% - var(--grid-gutter));max-width:calc(100% - var(--grid-gutter))}}fieldset{padding:.5rem 2rem}legend{text-transform:uppercase;font-size:.8em;letter-spacing:.1rem}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),select,textarea,textarea[type=text]{font-family:inherit;padding:.8rem 1rem;border-radius:4px;border:1px solid var(--color-lightGrey);font-size:1em;-webkit-transition:all .2s ease;transition:all .2s ease;display:block;width:100%}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]):not(:disabled):hover,select:hover,textarea:hover,textarea[type=text]:hover{border-color:var(--color-grey)}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]):focus,select:focus,textarea:focus,textarea[type=text]:focus{outline:none;border-color:var(--color-primary);-webkit-box-shadow:0 0 1px var(--color-primary);box-shadow:0 0 1px var(--color-primary)}input.error:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),textarea.error{border-color:var(--color-error)}input.success:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=color]):not([type=button]):not([type=reset]),textarea.success{border-color:var(--color-success)}select{-webkit-appearance:none;background:#f3f3f6 no-repeat 100%;background-size:1ex;background-origin:content-box;background-image:url("data:image/svg+xml;utf8,")}[type=checkbox],[type=radio]{width:1.6rem;height:1.6rem}.button,[type=button],[type=reset],[type=submit],button{padding:1rem 2.5rem;color:var(--color-darkGrey);background:var(--color-lightGrey);border-radius:4px;border:1px solid transparent;font-size:var(--font-size);line-height:1;text-align:center;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;text-decoration:none;-webkit-transform:scale(1);transform:scale(1);display:inline-block;cursor:pointer}.grouped{display:-webkit-box;display:-ms-flexbox;display:flex}.grouped>:not(:last-child){margin-right:16px}.grouped.gapless>*{margin:0 0 0 -1px!important;border-radius:0!important}.grouped.gapless>:first-child{margin:0!important;border-radius:4px 0 0 4px!important}.grouped.gapless>:last-child{border-radius:0 4px 4px 0!important}.button+.button{margin-left:1rem}.button:hover,[type=button]:hover,[type=reset]:hover,[type=submit]:hover,button:hover{opacity:.8}.button:active,[type=button]:active,[type=reset]:active,[type=submit]:active,button:active{-webkit-transform:scale(.98);transform:scale(.98)}button:disabled,button:disabled:hover,input:disabled,input:disabled:hover{opacity:.4;cursor:not-allowed}.button.dark,.button.error,.button.primary,.button.secondary,.button.success,[type=submit]{color:#fff;z-index:1;background-color:#000;background-color:var(--color-primary)}.button.secondary{background-color:var(--color-grey)}.button.dark{background-color:var(--color-darkGrey)}.button.error{background-color:var(--color-error)}.button.success{background-color:var(--color-success)}.button.outline{background-color:transparent;border-color:var(--color-lightGrey)}.button.outline.primary{border-color:var(--color-primary);color:var(--color-primary)}.button.outline.secondary{border-color:var(--color-grey);color:var(--color-grey)}.button.outline.dark{border-color:var(--color-darkGrey);color:var(--color-darkGrey)}.button.clear{background-color:transparent;border-color:transparent;color:var(--color-primary)}.button.icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.button.icon>img{margin-left:2px}.button.icon-only{padding:1rem}::-webkit-input-placeholder{color:#bdbfc4}::-moz-placeholder{color:#bdbfc4}:-ms-input-placeholder{color:#bdbfc4}::-ms-input-placeholder{color:#bdbfc4}::placeholder{color:#bdbfc4}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:5rem;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.nav img{max-height:3rem}.nav-center,.nav-left,.nav-right,.nav>.container{display:-webkit-box;display:-ms-flexbox;display:flex}.nav-center,.nav-left,.nav-right{-webkit-box-flex:1;-ms-flex:1;flex:1}.nav-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.nav-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.nav-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@media screen and (max-width:480px){.nav,.nav>.container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.nav-center,.nav-left,.nav-right{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}}.nav .brand,.nav a{text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem 2rem;color:var(--color-darkGrey)}.nav .active:not(.button){color:#000;color:var(--color-primary)}.nav .brand{font-size:1.75em;padding-top:0;padding-bottom:0}.nav .brand img{padding-right:1rem}.nav .button{margin:auto 1rem}.card{padding:1rem 2rem;border-radius:4px;background:var(--bg-color);-webkit-box-shadow:0 1px 3px var(--color-grey);box-shadow:0 1px 3px var(--color-grey)}.card p:last-child{margin:0}.card header>*{margin-top:0;margin-bottom:1rem}.tabs{display:-webkit-box;display:-ms-flexbox;display:flex}.tabs a{text-decoration:none}.tabs>.dropdown>summary,.tabs>a{padding:1rem 2rem;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;color:var(--color-darkGrey);border-bottom:2px solid var(--color-lightGrey);text-align:center}.tabs>a.active,.tabs>a:hover{opacity:1;border-bottom:2px solid var(--color-darkGrey)}.tabs>a.active{border-color:var(--color-primary)}.tabs.is-full a{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.tag{display:inline-block;border:1px solid var(--color-lightGrey);text-transform:uppercase;color:var(--color-grey);padding:.5rem;line-height:1;letter-spacing:.5px}.tag.is-small{padding:.4rem;font-size:.75em}.tag.is-large{padding:.7rem;font-size:1.125em}.tag+.tag{margin-left:1rem}details.dropdown{position:relative;display:inline-block}details.dropdown>:last-child{position:absolute;left:0;white-space:nowrap}.bg-primary{background-color:var(--color-primary)!important}.bg-light{background-color:var(--color-lightGrey)!important}.bg-dark{background-color:var(--color-darkGrey)!important}.bg-grey{background-color:var(--color-grey)!important}.bg-error{background-color:var(--color-error)!important}.bg-success{background-color:var(--color-success)!important}.bd-primary{border:1px solid var(--color-primary)!important}.bd-light{border:1px solid var(--color-lightGrey)!important}.bd-dark{border:1px solid var(--color-darkGrey)!important}.bd-grey{border:1px solid var(--color-grey)!important}.bd-error{border:1px solid var(--color-error)!important}.bd-success{border:1px solid var(--color-success)!important}.text-primary{color:var(--color-primary)!important}.text-light{color:var(--color-lightGrey)!important}.text-dark{color:var(--color-darkGrey)!important}.text-grey{color:var(--color-grey)!important}.text-error{color:var(--color-error)!important}.text-success{color:var(--color-success)!important}.text-white{color:#fff!important}.pull-right{float:right!important}.pull-left{float:left!important}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}.is-full-screen{width:100%;min-height:100vh}.is-full-width{width:100%!important}.is-vertical-align{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-center,.is-horizontal-align{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.is-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.is-left,.is-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.is-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.is-fixed{position:fixed;width:100%}.is-paddingless{padding:0!important}.is-marginless{margin:0!important}.is-pointer{cursor:pointer!important}.is-rounded{border-radius:100%}.clearfix{content:"";display:table;clear:both}.is-hidden{display:none!important}@media screen and (max-width:599px){.hide-xs{display:none!important}}@media screen and (min-width:600px) and (max-width:899px){.hide-sm{display:none!important}}@media screen and (min-width:900px) and (max-width:1199px){.hide-md{display:none!important}}@media screen and (min-width:1200px){.hide-lg{display:none!important}}@media print{.hide-pr{display:none!important}} -------------------------------------------------------------------------------- /biomes_client.json: -------------------------------------------------------------------------------- 1 | { 2 | "biomes" : { 3 | "bamboo_jungle" : { 4 | "fog_identifier" : "minecraft:fog_bamboo_jungle", 5 | "fog_ids_to_merge" : [ "minecraft:fog_bamboo_jungle" ], 6 | "inherit_from_prior_fog" : false, 7 | "water_surface_color" : "#14A2C5" 8 | }, 9 | "bamboo_jungle_hills" : { 10 | "fog_identifier" : "minecraft:fog_bamboo_jungle_hills", 11 | "fog_ids_to_merge" : [ "minecraft:fog_bamboo_jungle_hills" ], 12 | "inherit_from_prior_fog" : false, 13 | "water_surface_color" : "#1B9ED8" 14 | }, 15 | "basalt_deltas" : { 16 | "fog_identifier" : "minecraft:fog_basalt_deltas", 17 | "fog_ids_to_merge" : [ "minecraft:fog_basalt_deltas" ], 18 | "inherit_from_prior_fog" : false, 19 | "water_surface_color" : "#3f76e4" 20 | }, 21 | "beach" : { 22 | "fog_identifier" : "minecraft:fog_beach", 23 | "fog_ids_to_merge" : [ "minecraft:fog_beach" ], 24 | "inherit_from_prior_fog" : false, 25 | "water_surface_color" : "#157cab" 26 | }, 27 | "birch_forest" : { 28 | "fog_identifier" : "minecraft:fog_birch_forest", 29 | "fog_ids_to_merge" : [ "minecraft:fog_birch_forest" ], 30 | "inherit_from_prior_fog" : false, 31 | "water_surface_color" : "#0677ce" 32 | }, 33 | "birch_forest_hills" : { 34 | "fog_identifier" : "minecraft:fog_birch_forest_hills", 35 | "fog_ids_to_merge" : [ "minecraft:fog_birch_forest_hills" ], 36 | "inherit_from_prior_fog" : false, 37 | "water_surface_color" : "#0a74c4" 38 | }, 39 | "cherry_grove" : { 40 | "fog_identifier" : "minecraft:fog_cherry_grove", 41 | "fog_ids_to_merge" : [ "minecraft:fog_cherry_grove" ], 42 | "inherit_from_prior_fog" : false, 43 | "water_surface_color" : "#5db7ef" 44 | }, 45 | "cold_beach" : { 46 | "fog_identifier" : "minecraft:fog_cold_beach", 47 | "fog_ids_to_merge" : [ "minecraft:fog_cold_beach" ], 48 | "inherit_from_prior_fog" : false, 49 | "water_surface_color" : "#1463a5" 50 | }, 51 | "cold_ocean" : { 52 | "fog_identifier" : "minecraft:fog_cold_ocean", 53 | "fog_ids_to_merge" : [ "minecraft:fog_cold_ocean" ], 54 | "inherit_from_prior_fog" : false, 55 | "water_surface_color" : "#2080C9" 56 | }, 57 | "cold_taiga" : { 58 | "fog_identifier" : "minecraft:fog_cold_taiga", 59 | "fog_ids_to_merge" : [ "minecraft:fog_cold_taiga" ], 60 | "inherit_from_prior_fog" : false, 61 | "water_surface_color" : "#205e83" 62 | }, 63 | "cold_taiga_hills" : { 64 | "fog_identifier" : "minecraft:fog_cold_taiga_hills", 65 | "fog_ids_to_merge" : [ "minecraft:fog_cold_taiga_hills" ], 66 | "inherit_from_prior_fog" : false, 67 | "water_surface_color" : "#245b78" 68 | }, 69 | "cold_taiga_mutated" : { 70 | "fog_identifier" : "minecraft:fog_cold_taiga_mutated", 71 | "fog_ids_to_merge" : [ "minecraft:fog_cold_taiga_mutated" ], 72 | "inherit_from_prior_fog" : false, 73 | "water_surface_color" : "#205e83" 74 | }, 75 | "crimson_forest" : { 76 | "fog_identifier" : "minecraft:fog_crimson_forest", 77 | "fog_ids_to_merge" : [ "minecraft:fog_crimson_forest" ], 78 | "inherit_from_prior_fog" : false, 79 | "water_surface_color" : "#905957" 80 | }, 81 | "deep_cold_ocean" : { 82 | "fog_identifier" : "minecraft:fog_deep_cold_ocean", 83 | "fog_ids_to_merge" : [ "minecraft:fog_deep_cold_ocean" ], 84 | "inherit_from_prior_fog" : false, 85 | "water_surface_color" : "#2080C9" 86 | }, 87 | "deep_frozen_ocean" : { 88 | "fog_identifier" : "minecraft:fog_deep_frozen_ocean", 89 | "fog_ids_to_merge" : [ "minecraft:fog_deep_frozen_ocean" ], 90 | "inherit_from_prior_fog" : false, 91 | "water_surface_color" : "#2570B5" 92 | }, 93 | "deep_lukewarm_ocean" : { 94 | "fog_identifier" : "minecraft:fog_deep_lukewarm_ocean", 95 | "fog_ids_to_merge" : [ "minecraft:fog_deep_lukewarm_ocean" ], 96 | "inherit_from_prior_fog" : false, 97 | "water_surface_color" : "#0D96DB" 98 | }, 99 | "deep_ocean" : { 100 | "fog_identifier" : "minecraft:fog_deep_ocean", 101 | "fog_ids_to_merge" : [ "minecraft:fog_deep_ocean" ], 102 | "inherit_from_prior_fog" : false, 103 | "water_surface_color" : "#1787D4" 104 | }, 105 | "deep_warm_ocean" : { 106 | "fog_identifier" : "minecraft:fog_deep_warm_ocean", 107 | "fog_ids_to_merge" : [ "minecraft:fog_deep_warm_ocean" ], 108 | "inherit_from_prior_fog" : false, 109 | "water_surface_color" : "#02B0E5" 110 | }, 111 | "default" : { 112 | "fog_identifier" : "minecraft:fog_default", 113 | "fog_ids_to_merge" : [ "minecraft:fog_default" ], 114 | "inherit_from_prior_fog" : false, 115 | "remove_all_prior_fog" : false, 116 | "water_surface_color" : "#44AFF5", 117 | "water_surface_transparency" : 0.5 118 | }, 119 | "desert" : { 120 | "fog_identifier" : "minecraft:fog_desert", 121 | "fog_ids_to_merge" : [ "minecraft:fog_desert" ], 122 | "inherit_from_prior_fog" : false, 123 | "water_surface_color" : "#32A598" 124 | }, 125 | "desert_hills" : { 126 | "fog_identifier" : "minecraft:fog_desert_hills", 127 | "fog_ids_to_merge" : [ "minecraft:fog_desert_hills" ], 128 | "inherit_from_prior_fog" : false, 129 | "water_surface_color" : "#1a7aa1" 130 | }, 131 | "extreme_hills" : { 132 | "fog_identifier" : "minecraft:fog_extreme_hills", 133 | "fog_ids_to_merge" : [ "minecraft:fog_extreme_hills" ], 134 | "inherit_from_prior_fog" : false, 135 | "water_surface_color" : "#007BF7" 136 | }, 137 | "extreme_hills_edge" : { 138 | "fog_identifier" : "minecraft:fog_extreme_hills_edge", 139 | "fog_ids_to_merge" : [ "minecraft:fog_extreme_hills_edge" ], 140 | "inherit_from_prior_fog" : false, 141 | "water_surface_color" : "#045cd5" 142 | }, 143 | "extreme_hills_mutated" : { 144 | "fog_identifier" : "minecraft:fog_extreme_hills_mutated", 145 | "fog_ids_to_merge" : [ "minecraft:fog_extreme_hills_mutated" ], 146 | "inherit_from_prior_fog" : false, 147 | "water_surface_color" : "#0E63AB" 148 | }, 149 | "extreme_hills_plus_trees" : { 150 | "fog_identifier" : "minecraft:fog_extreme_hills_plus_trees", 151 | "fog_ids_to_merge" : [ "minecraft:fog_extreme_hills_plus_trees" ], 152 | "inherit_from_prior_fog" : false, 153 | "water_surface_color" : "#0E63AB" 154 | }, 155 | "extreme_hills_plus_trees_mutated" : { 156 | "fog_identifier" : "minecraft:fog_extreme_hills_plus_trees_mutated", 157 | "fog_ids_to_merge" : [ "minecraft:fog_extreme_hills_plus_trees_mutated" ], 158 | "inherit_from_prior_fog" : false, 159 | "water_surface_color" : "#0E63AB" 160 | }, 161 | "flower_forest" : { 162 | "fog_identifier" : "minecraft:fog_flower_forest", 163 | "fog_ids_to_merge" : [ "minecraft:fog_flower_forest" ], 164 | "inherit_from_prior_fog" : false, 165 | "water_surface_color" : "#20A3CC" 166 | }, 167 | "forest" : { 168 | "fog_identifier" : "minecraft:fog_forest", 169 | "fog_ids_to_merge" : [ "minecraft:fog_forest" ], 170 | "inherit_from_prior_fog" : false, 171 | "water_surface_color" : "#1E97F2" 172 | }, 173 | "forest_hills" : { 174 | "fog_identifier" : "minecraft:fog_forest_hills", 175 | "fog_ids_to_merge" : [ "minecraft:fog_forest_hills" ], 176 | "inherit_from_prior_fog" : false, 177 | "water_surface_color" : "#056bd1" 178 | }, 179 | "frozen_ocean" : { 180 | "fog_identifier" : "minecraft:fog_frozen_ocean", 181 | "fog_ids_to_merge" : [ "minecraft:fog_frozen_ocean" ], 182 | "inherit_from_prior_fog" : false, 183 | "water_surface_color" : "#2570B5" 184 | }, 185 | "frozen_river" : { 186 | "fog_identifier" : "minecraft:fog_frozen_river", 187 | "fog_ids_to_merge" : [ "minecraft:fog_frozen_river" ], 188 | "inherit_from_prior_fog" : false, 189 | "water_surface_color" : "#185390" 190 | }, 191 | "hell" : { 192 | "fog_identifier" : "minecraft:fog_hell", 193 | "fog_ids_to_merge" : [ "minecraft:fog_hell" ], 194 | "inherit_from_prior_fog" : false, 195 | "water_surface_color" : "#905957" 196 | }, 197 | "ice_mountains" : { 198 | "fog_identifier" : "minecraft:fog_ice_mountains", 199 | "fog_ids_to_merge" : [ "minecraft:fog_ice_mountains" ], 200 | "inherit_from_prior_fog" : false, 201 | "water_surface_color" : "#1156a7" 202 | }, 203 | "ice_plains" : { 204 | "fog_identifier" : "minecraft:fog_ice_plains", 205 | "fog_ids_to_merge" : [ "minecraft:fog_ice_plains" ], 206 | "inherit_from_prior_fog" : false, 207 | "water_surface_color" : "#14559b" 208 | }, 209 | "ice_plains_spikes" : { 210 | "fog_identifier" : "minecraft:fog_ice_plains_spikes", 211 | "fog_ids_to_merge" : [ "minecraft:fog_ice_plains_spikes" ], 212 | "inherit_from_prior_fog" : false, 213 | "water_surface_color" : "#14559b" 214 | }, 215 | "jungle" : { 216 | "fog_identifier" : "minecraft:fog_jungle", 217 | "fog_ids_to_merge" : [ "minecraft:fog_jungle" ], 218 | "inherit_from_prior_fog" : false, 219 | "water_surface_color" : "#14A2C5" 220 | }, 221 | "jungle_edge" : { 222 | "fog_identifier" : "minecraft:fog_jungle_edge", 223 | "fog_ids_to_merge" : [ "minecraft:fog_jungle_edge" ], 224 | "inherit_from_prior_fog" : false, 225 | "water_surface_color" : "#0D8AE3" 226 | }, 227 | "jungle_hills" : { 228 | "fog_identifier" : "minecraft:fog_jungle_hills", 229 | "fog_ids_to_merge" : [ "minecraft:fog_jungle_hills" ], 230 | "inherit_from_prior_fog" : false, 231 | "water_surface_color" : "#1B9ED8" 232 | }, 233 | "jungle_mutated" : { 234 | "fog_identifier" : "minecraft:fog_jungle_mutated", 235 | "fog_ids_to_merge" : [ "minecraft:fog_jungle_mutated" ], 236 | "inherit_from_prior_fog" : false, 237 | "water_surface_color" : "#1B9ED8" 238 | }, 239 | "lukewarm_ocean" : { 240 | "fog_identifier" : "minecraft:fog_lukewarm_ocean", 241 | "fog_ids_to_merge" : [ "minecraft:fog_lukewarm_ocean" ], 242 | "inherit_from_prior_fog" : false, 243 | "water_surface_color" : "#0D96DB" 244 | }, 245 | "mangrove_swamp" : { 246 | "fog_identifier" : "minecraft:fog_mangrove_swamp", 247 | "fog_ids_to_merge" : [ "minecraft:fog_mangrove_swamp" ], 248 | "inherit_from_prior_fog" : false, 249 | "water_surface_color" : "#3a7a6a" 250 | }, 251 | "mega_spruce_taiga" : { 252 | "fog_identifier" : "minecraft:fog_mega_spruce_taiga", 253 | "fog_ids_to_merge" : [ "minecraft:fog_mega_spruce_taiga" ], 254 | "inherit_from_prior_fog" : false, 255 | "water_surface_color" : "#2d6d77" 256 | }, 257 | "mega_spruce_taiga_mutated" : { 258 | "fog_identifier" : "minecraft:fog_mega_spruce_taiga_mutated", 259 | "fog_ids_to_merge" : [ "minecraft:fog_mega_spruce_taiga_mutated" ], 260 | "inherit_from_prior_fog" : false, 261 | "water_surface_color" : "#2d6d77" 262 | }, 263 | "mega_taiga" : { 264 | "fog_identifier" : "minecraft:fog_mega_taiga", 265 | "fog_ids_to_merge" : [ "minecraft:fog_mega_taiga" ], 266 | "inherit_from_prior_fog" : false, 267 | "water_surface_color" : "#2d6d77" 268 | }, 269 | "mega_taiga_hills" : { 270 | "fog_identifier" : "minecraft:fog_mega_taiga_hills", 271 | "fog_ids_to_merge" : [ "minecraft:fog_mega_taiga_hills" ], 272 | "inherit_from_prior_fog" : false, 273 | "water_surface_color" : "#286378" 274 | }, 275 | "mega_taiga_mutated" : { 276 | "fog_identifier" : "minecraft:fog_mega_taiga_mutated", 277 | "fog_ids_to_merge" : [ "minecraft:fog_mega_taiga_mutated" ], 278 | "inherit_from_prior_fog" : false, 279 | "water_surface_color" : "#2d6d77" 280 | }, 281 | "mesa" : { 282 | "fog_identifier" : "minecraft:fog_mesa", 283 | "fog_ids_to_merge" : [ "minecraft:fog_mesa" ], 284 | "inherit_from_prior_fog" : false, 285 | "water_surface_color" : "#4E7F81" 286 | }, 287 | "mesa_bryce" : { 288 | "fog_identifier" : "minecraft:fog_mesa_bryce", 289 | "fog_ids_to_merge" : [ "minecraft:fog_mesa_bryce" ], 290 | "inherit_from_prior_fog" : false, 291 | "water_surface_color" : "#497F99" 292 | }, 293 | "mesa_mutated" : { 294 | "fog_identifier" : "minecraft:fog_mesa_mutated", 295 | "fog_ids_to_merge" : [ "minecraft:fog_mesa_mutated" ], 296 | "inherit_from_prior_fog" : false, 297 | "water_surface_color" : "#497F99" 298 | }, 299 | "mesa_plateau" : { 300 | "fog_identifier" : "minecraft:fog_mesa_plateau", 301 | "fog_ids_to_merge" : [ "minecraft:fog_mesa_plateau" ], 302 | "inherit_from_prior_fog" : false, 303 | "water_surface_color" : "#55809E" 304 | }, 305 | "mesa_plateau_stone" : { 306 | "fog_identifier" : "minecraft:fog_mesa_plateau_stone", 307 | "fog_ids_to_merge" : [ "minecraft:fog_mesa_plateau_stone" ], 308 | "inherit_from_prior_fog" : false, 309 | "water_surface_color" : "#55809E" 310 | }, 311 | "mushroom_island" : { 312 | "fog_identifier" : "minecraft:fog_mushroom_island", 313 | "fog_ids_to_merge" : [ "minecraft:fog_mushroom_island" ], 314 | "inherit_from_prior_fog" : false, 315 | "water_surface_color" : "#8a8997" 316 | }, 317 | "mushroom_island_shore" : { 318 | "fog_identifier" : "minecraft:fog_mushroom_island_shore", 319 | "fog_ids_to_merge" : [ "minecraft:fog_mushroom_island_shore" ], 320 | "inherit_from_prior_fog" : false, 321 | "water_surface_color" : "#818193" 322 | }, 323 | "ocean" : { 324 | "fog_identifier" : "minecraft:fog_ocean", 325 | "fog_ids_to_merge" : [ "minecraft:fog_ocean" ], 326 | "inherit_from_prior_fog" : false, 327 | "water_surface_color" : "#1787D4" 328 | }, 329 | "plains" : { 330 | "fog_identifier" : "minecraft:fog_plains", 331 | "fog_ids_to_merge" : [ "minecraft:fog_plains" ], 332 | "inherit_from_prior_fog" : false, 333 | "water_surface_color" : "#44AFF5" 334 | }, 335 | "river" : { 336 | "fog_identifier" : "minecraft:fog_river", 337 | "fog_ids_to_merge" : [ "minecraft:fog_river" ], 338 | "inherit_from_prior_fog" : false, 339 | "water_surface_color" : "#0084FF" 340 | }, 341 | "roofed_forest" : { 342 | "fog_identifier" : "minecraft:fog_roofed_forest", 343 | "fog_ids_to_merge" : [ "minecraft:fog_roofed_forest" ], 344 | "inherit_from_prior_fog" : false, 345 | "water_surface_color" : "#3B6CD1" 346 | }, 347 | "savanna" : { 348 | "fog_identifier" : "minecraft:fog_savanna", 349 | "fog_ids_to_merge" : [ "minecraft:fog_savanna" ], 350 | "inherit_from_prior_fog" : false, 351 | "water_surface_color" : "#2C8B9C" 352 | }, 353 | "savanna_mutated" : { 354 | "fog_identifier" : "minecraft:fog_savanna_mutated", 355 | "fog_ids_to_merge" : [ "minecraft:fog_savanna_mutated" ], 356 | "inherit_from_prior_fog" : false, 357 | "water_surface_color" : "#2590A8" 358 | }, 359 | "savanna_plateau" : { 360 | "fog_identifier" : "minecraft:fog_savanna_plateau", 361 | "fog_ids_to_merge" : [ "minecraft:fog_savanna_plateau" ], 362 | "inherit_from_prior_fog" : false, 363 | "water_surface_color" : "#2590A8" 364 | }, 365 | "soulsand_valley" : { 366 | "fog_identifier" : "minecraft:fog_soulsand_valley", 367 | "fog_ids_to_merge" : [ "minecraft:fog_soulsand_valley" ], 368 | "inherit_from_prior_fog" : false, 369 | "water_surface_color" : "#905957" 370 | }, 371 | "stone_beach" : { 372 | "fog_identifier" : "minecraft:fog_stone_beach", 373 | "fog_ids_to_merge" : [ "minecraft:fog_stone_beach" ], 374 | "inherit_from_prior_fog" : false, 375 | "water_surface_color" : "#0d67bb" 376 | }, 377 | "sunflower_plains" : { 378 | "fog_identifier" : "minecraft:fog_sunflower_plains", 379 | "fog_ids_to_merge" : [ "minecraft:fog_sunflower_plains" ], 380 | "inherit_from_prior_fog" : false, 381 | "water_surface_color" : "#44AFF5" 382 | }, 383 | "swampland" : { 384 | "fog_identifier" : "minecraft:fog_swampland", 385 | "fog_ids_to_merge" : [ "minecraft:fog_swampland" ], 386 | "inherit_from_prior_fog" : false, 387 | "water_surface_color" : "#4c6559", 388 | "water_surface_transparency" : 0.5 389 | }, 390 | "swampland_mutated" : { 391 | "fog_identifier" : "minecraft:fog_swampland_mutated", 392 | "fog_ids_to_merge" : [ "minecraft:fog_swampland_mutated" ], 393 | "inherit_from_prior_fog" : false, 394 | "water_surface_color" : "#4c6156", 395 | "water_surface_transparency" : 0.5 396 | }, 397 | "taiga" : { 398 | "fog_identifier" : "minecraft:fog_taiga", 399 | "fog_ids_to_merge" : [ "minecraft:fog_taiga" ], 400 | "inherit_from_prior_fog" : false, 401 | "water_surface_color" : "#287082" 402 | }, 403 | "taiga_hills" : { 404 | "fog_identifier" : "minecraft:fog_taiga_hills", 405 | "fog_ids_to_merge" : [ "minecraft:fog_taiga_hills" ], 406 | "inherit_from_prior_fog" : false, 407 | "water_surface_color" : "#236583" 408 | }, 409 | "taiga_mutated" : { 410 | "fog_identifier" : "minecraft:fog_taiga_mutated", 411 | "fog_ids_to_merge" : [ "minecraft:fog_taiga_mutated" ], 412 | "inherit_from_prior_fog" : false, 413 | "water_surface_color" : "#1E6B82" 414 | }, 415 | "the_end" : { 416 | "fog_identifier" : "minecraft:fog_the_end", 417 | "fog_ids_to_merge" : [ "minecraft:fog_the_end" ], 418 | "inherit_from_prior_fog" : false, 419 | "water_surface_color" : "#62529e" 420 | }, 421 | "warm_ocean" : { 422 | "fog_identifier" : "minecraft:fog_warm_ocean", 423 | "fog_ids_to_merge" : [ "minecraft:fog_warm_ocean" ], 424 | "inherit_from_prior_fog" : false, 425 | "water_surface_color" : "#02B0E5", 426 | "water_surface_transparency" : 0.5 427 | }, 428 | "warped_forest" : { 429 | "fog_identifier" : "minecraft:fog_warped_forest", 430 | "fog_ids_to_merge" : [ "minecraft:fog_warped_forest" ], 431 | "inherit_from_prior_fog" : false, 432 | "water_surface_color" : "#905957" 433 | } 434 | } 435 | } 436 | --------------------------------------------------------------------------------