From 41b080646ac5e5f1a4ad89b4456209d46c2deeee Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Wed, 17 Feb 2016 23:46:43 +0100 Subject: [PATCH] correctly apply smooth shading multipliers for AO data --- .../mods/betterfoliage/client/render/RenderLeaves.kt | 2 +- .../mods/octarinecore/client/render/ModelRenderer.kt | 9 ++++++++- .../kotlin/mods/octarinecore/client/render/Shading.kt | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt index 6fc893b..c5f6bc8 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt @@ -25,7 +25,7 @@ class RenderLeaves : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { val leavesModel = model { verticalRectangle(x1 = -0.5, z1 = 0.5, x2 = 0.5, z2 = -0.5, yBottom = -0.5 * 1.41, yTop = 0.5 * 1.41) - .setAoShader(edgeOrientedAuto(corner = cornerAo(Axis.Y))) + .setAoShader(edgeOrientedAuto(corner = cornerAoMaxGreen)) .setFlatShader(FlatOffset(Int3.zero)) .scale(Config.leaves.size) .toCross(UP).addAll() diff --git a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt index 97d785c..4bc7312 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt @@ -71,8 +71,15 @@ open class ShadingContext { var aoEnabled = Minecraft.isAmbientOcclusionEnabled() val aoFaces = Array(6) { AoFaceData(forgeDirs[it]) } + val EnumFacing.aoMultiplier: Float get() = when(this) { + UP -> 1.0f + DOWN -> 0.5f + NORTH, SOUTH -> 0.8f + EAST, WEST -> 0.6f + } + fun updateShading(offset: Int3, predicate: (EnumFacing) -> Boolean = { true }) { - forgeDirs.forEach { if (predicate(it)) aoFaces[it.ordinal].update(offset) } + forgeDirs.forEach { if (predicate(it)) aoFaces[it.ordinal].update(offset, multiplier = it.aoMultiplier) } } fun aoShading(face: EnumFacing, corner1: EnumFacing, corner2: EnumFacing) = diff --git a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt index e3e1e4b..7943aa7 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt @@ -57,14 +57,14 @@ class AoFaceData(val face: EnumFacing) { EAST -> listOf(topRight, topLeft, bottomLeft, bottomRight) } - fun update(offset: Int3, useBounds: Boolean = false) { + fun update(offset: Int3, useBounds: Boolean = false, multiplier: Float = 1.0f) { val ctx = blockContext val blockState = ctx.blockState(offset) val quadBounds: FloatArray = FloatArray(12) val flags = BitSet(3).apply { set(0) } ao.updateVertexBrightness(ctx.world, blockState.block, ctx.pos + offset, face, quadBounds, flags) - ordered.forEachIndexed { idx, aoData -> aoData.set(ao.vertexBrightness[idx], ao.vertexColorMultiplier[idx]) } + ordered.forEachIndexed { idx, aoData -> aoData.set(ao.vertexBrightness[idx], ao.vertexColorMultiplier[idx] * multiplier) } } operator fun get(dir1: EnumFacing, dir2: EnumFacing): AoData {