correctly apply smooth shading multipliers for AO data
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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) =
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user