Making a Vivify Beat Saber level
2025/07/07
I will be writing my steps to create a Beat Saber vivify level
Note this is not a tutorial and the way things are done can very possibly be NOT the best or easiest way to do them.
I start with selecting a song which I have imagined a scenery for.
Then I put that song into ArrowVortex and get the BPM for it.

For this song I only wanted to map the first part of it so I have a extra step of going into a audio editor and cutting that part out, I also deleted 0.2s of silence from the beginning of the music for it to match up with the beats in Chromapper (i could have used the built in offset aswell I think).
I’ll create the level in Chromapper, add the song and details and start mapping the Ex+ difficulty which on it’s own will take a while and what I map now will probably be a draft at best 🙂
A good starting point on learning Chromapper and basics of what we’ll be doing with noodle/chroma later : https://www.youtube.com/watch?v=FXcnebgOLpA
Now that the mapping is done (for now) I gotta setup remapper and vivify, which thanks to Swifter’s amazing work is as easy as it gets.
Navigate to the level folder in Visual Studio Code, run rm_setup in a terminal, then wait a little while and voila! All the files are set up.

https://github.com/Swifter1243/ReMapper-Setup
Now we start the vivify parts
I start with opening Unity and adding the project to the Unity hub (if it wasn’t auto added by the setup)

Now inside unity I’ll add some packages that I will need, first one is the Vivify Template by Swifter, which is the main thing that builds the .vivify packages
https://github.com/Swifter1243/VivifyTemplate

The next thing I import is Poiyomi, which helps me create
materials without too much headache.
https://github.com/poiyomi/PoiyomiToonShader
Beat Saber in its rendering has the alpha channel also set to glow/emission, and since everything by default is opaque, which means a alpha of 1, everything glows when loaded in beatsaber, Poiyomi helps with this.
After importing these, I set up the vivify project with this button:

I then open the build configuration window from the same drop down and just leave it open for myself
Now, I want to get myself a rough ‘sketch’ of the level. For that I need to get the level timings.
In my workflow I work with two different timings (and haven’t found a better way… yet)
-BPM (Beat Saber and Chromapper)
-Frames (Unity animation timeline)
I’m not gonna go write myself a program to playback music and give me the time in frames, so instead I import the song into my project

Then I open the Timeline window in Unity and add this to a random object which I will not be bundling into Beat Saber, usually Main Camera
(If this is on a prefab which gets bundled, it will be in the game and the music will echo)

And this is my reference for animation timing.
(16/9/2025 Future edit, this is not a good way of doing things, there’s a better animation timeline available that shows and plays the audio inside the animation window alongside the keyframes, use that https://github.com/Swifter1243/UnityAnimationWindow)
I want to get an exact idea of the “scenes” in this level, so listening to the song I wrote down the frames in which I feel can be a scene change. I look at the music visualization to get the exact timing, if the sounds weren’t visible here I would probably run this song through Ultimate Vocal Remover to separate the instruments, import them here to be able to see the exact timing.


I made a terrain mesh in World Machine and imported it, the files are giant (20mb+4mb) but I’ll worry about optimizing it later

For the material I select poiymoi toon

then add my texture

put receive casted shadow to 1


set shading to realistic
and not sure if this is needed, but I set color mask to RGB

And with that I have a texture which looks good here, and most importantly renders the same in Beat Saber

I want to create or get each layer’s assets. I want the map to go down (so the player is moving up) so next up, clouds
I found this
https://www.clicktorelease.com/blog/vertex-displacement-noise-3d-webgl-glsl-three-js/
I don’t have any hlsl knowledge so I’m gonna try getting this to work in Unity, afterwards i think I’m gonna combine it with the Depth shader example provided in the Vivify Template to make it fluffy.
Ey getting somewhere

been combining the Scaling and Voronoi3D example shaders.
Nope using the depth thing doesn’t seem to be the right call.

I won’t be having anything behind the clouds, soooooooooooo
Poiyomi to the rescue! I wasn’t getting anywhere with writing my own, thought I had seen something like it before, checked and voila!
So a poiyomi material again, set this to transparent


and this for the slow movement of the clouds

I’ll be playing be playing around with the values but it looks good for now

I probably would have stumbled my way into finding a Fresnel opacity code to put into my own shader, but since this works I’ll use it. If later it doesn’t look as good as I want it to, I’ll look into doing it in my own shader (specifically is Tornado doesn’t move the way I would like)
Made a mesh for the clouds

No it no worky with fresnel, trying other stuff now, hoping to find someone’s raymarching cloud code available for use
I don’t know why I don’t just spend a few hours and LEARN hlsl, it’d be better in every way
Anyway found a fur shader and looks good-ish https://github.com/Sorumi/UnityFurShader

But still not what I had in mind.
Okay forget the clouds for now, I’ll get some pngs and put them on planes to get the base of what I have in mind down
I’ll also import the same fog I used in Lost In Data, Which is a modified vivify depth example shader, I added a cutoff to it
The fog is a cube around the player

I’ll also add the skybox I’m gonna use in BS, which is the vivify template one with one small change

This took me a long time to figure out, the BS bloom made the skybox light up everything, but only in some angles, and just multiplying the opacity by zero is a complete monkey wrench solution, but it works for me.
I added a sphere with 2000 scale and applied the material to it.
I randomly drew 5 blobs of clouds in photoshop (I got multiple cloud brushes in there) .
Aaaand they don’t look good. Welp I’m ready to give up on this thing, will take a break and come back later, maybe stylized clouds are the way to go https://github.com/AlexStrook/UnlitClouds/
Literally has ‘Unlit’ in the name darn it, nope
Particles? Maybe? https://www.youtube.com/watch?v=BQcjsW8ldkw
Going with particles for now.
I started working on the planet underneath us, I tried having it as a sphere but it was waaaaaaay too big, so I’m thinking of having a cylinder starting bent upwards and bending down over time to make the curvature of earth, and so I can have a section of earth texture on it instead of importing a 43k*21k texture 😛
Need to bend the cylinder using shaders, using a radial gradient and vivify translation example .
Oh come on how do I make it smooth? I’m using distance(i.uv, (0.5,0.5,0.5,0)) but it starts of sharply aaaaaaaaaaa.
YAAAA a simple power of two!


Clouds are particles, I don’t know how heavy this will be or if it’ll need optimizing later (which I can’t think of any way as of yet) but it looks good.

I put the mountain and clouds in a empty object (which later I’ll turn into a prefab) and tested out if the positioning of my clouds are good, and yup, this looks like what I want.


Inside the clouds and above the clouds
For far away clouds meshes and all of the shaders i have downloaded don’t look good up here soooooooooo more particles!

Oh I need a sun.

6 sided skybox with sun? https://discussions.unity.com/t/6-sided-skybox-and-sun/662194/4
Yeah why not, I’ll try to add the code for the sun to the vivify skybox aswell.
Did it with a few simple copy & pastes luckily.

Now… I probably should work on the balloon that the player’s gonna be on, with that in place I should more easily be able to tell how much cloud clipping through earth and detail on earth I can get away with.
Before I do tho I’m gonna get the earth texture and cloud textures, imma use Everest as the mid point of it, and I’ll make the vivify example skybox transparent with a opacity slider so I can animate it later..
I got two skyboxes, one is the vivify one, one is a 6 sided star scape, the vivify one will fade as we go up.


Aw yeah!

I definitely need a atmosphere shader.
I’m feeling more confident with shaders, i’m thinking for atmosphere I can have it additive, Fresnel opacity, using sun direction and size for opacity and stuff of that sort, I’ll try making it.
Oh yeah random thing, this is how you get not-pitch-black shadows.

This oddly works, now to soften the edge…

Close enough for now 🙂


Might be time to start the animations.
Hmm first I need to get the above cloud parts and the far away scene good looking too
Hmm the far away scene is hard. Imma just leave it for now.
So, animations, first off I want to have EVERYTHING in one prefab this time, I won’t force it but I will start with it and change it up if it gets hard
Oop I’m putting things inside empty objects for categorization, and I remembered I want to change a little thing in the balloon, I want to separate the door so I can animate it swinging 🙂
Oh great it’s still a separate element! I really should’ve done this before the UV unwrapping

Ok here’s my categorization of things, all inside a empty object which I dragged into the file explorer to turn into a prefab which I added into the ‘bundle’ bundle, cause that’s the bundle I bundle into the vivify bundle.



Before I start animating I’ll export this and put it in beatsaber to get the correct orientation of things
So let’s build using the build configuration tab, set the export place to the custom map folder place where script.ts is, and press zhe button!
Now opening script.ts in VSCode I copy and paste these lines from my previous project and change the prefab to Scene
rm.environmentRemoval(map, ['Environment', 'GameCore'])
map.difficultyInfo.requirements = [
'Chroma',
'Noodle Extensions',
'Vivify',
]
map.difficultyInfo.settingsSetter = {
graphics: {
maxShockwaveParticles: 0,
screenDisplacementEffectsEnabled: true,
},
chroma: {
disableEnvironmentEnhancements: false,
},
playerOptions: {
leftHanded: rm.BOOLEAN.False,
noteJumpDurationTypeSettings: 'Dynamic',
},
colors: {},
environments: {},
}
rm.setRenderingSettings(map, {
qualitySettings: {
realtimeReflectionProbes: rm.BOOLEAN.False,
shadows: rm.SHADOWS.HardOnly,
shadowDistance: 64,
shadowResolution: rm.SHADOW_RESOLUTION.VeryHigh,
},
renderSettings: {
fog: rm.BOOLEAN.True,
fogEndDistance: 64,
},
})
const sky = prefabs.sky.instantiate(map, 0)
I enable Deno aaaand I haven’t opened the workspace. Oh I don’t have a workspace yet. I make a workspace. I enable deno and build!
deno run –no-check –allow-all script.ts
I’m in the wrong folder in this workspace. I cd to my custom map folder. I build. It builds!
Now we open beatsaber and check it out
There’s the wrong rotation I was talking about

And wow I made the balloon too big
I rotated everything inside the prefab, build the bundle, ran the remapper script and tested again

🙂
Why is the shadow at full strength.
oh and with 800 cloud particles it’s still smooth on my igpu laptop! I should be able to go higher with no problems
This is my animationing thingy

I got times for the main things, I keyframed the prefab to those times, then I’m changing the fog just looking at where it should change and stuff, then I’m gonna do skybox opacity, planet opacity, planet bending and all those good stuff, all keyframed, playing back and looking at it to see if it fits or not.
I made Balloon a separate prefab
Ok got those stuff keyframed, now to test in beatsaber
Oop got an error

Forgot to add the balloon prefab to the bundle
Huh wonder what I did wrong

it’s something’s bloom, gotta figure out what (tested by turning off bloom in BS settings)
Aw the earth doesn’t look good here

Ok so what’s rendering in unity is completely different than what’s rendering in BS, the clouds don’t work 🙁
Testing to see why the planet is all blue, disabling atmosphere first

No, clouds? Is the cloud material not transparent?
Metallic-ness?

yeah metallic, but now I lost the shadowwwwwww
0.8 metallic works

Still a lot of stuff to be done, but lemme test this in vr
HOLY 100mb bundle size
eeeeeeh I’ll worry about it later… looks come first
So, problems, clouds as I feared rotate with the player, clouds don’t have sunlight on them, the mountains are missing something to make them look good which I’m currently thinking bloom on the snow, earth looks flat and lacks depth, front far away mountain visibly clips through the earth, the atmosphere’s edges are too sharp and need to be smooth, mapping needs a small revision for block positions maaaybe.
Lets get to it
Aha the clouds use a script, which doesn’t work in BS, need
to rewrite the shaders for it to not use this 3:
Made a normal map for the ground using CrazyBump.
Fixed the clipping mountain.
Disabled Allow Roll in cloud particles.
Lets build and check in BS
More shader work needed in general *sigh*
But I remembered I still need to make snow, which means watching a YT tutorial on it
earth needs to be dark further away from sun, which is sadly shader work because I’m using a cylinder and not a sphere
I gotta get a lens flare for the sun
the texture for the earth underneath us is too big for how high we actually go, must crop it more.
Setting up the second scene I feel inadequate to create what I have in mind. Here’s what I got with some basic setup


I don’t feel like working on making things look good at all today, I’ll try to put as many basic things that need to be there down while I’m here tho.
Took a break and now back feeling better.
I added the snow and animated it’s velocity and position 🙂
Ok I am happy with the far away space scene, imma make it a prefab and animate it.
so the way I animate the scene changes is not In remapper and instantiating them at different times, the animation timeline goes out of sync like that. I instantiate them all at 0 but enable and disable them at the correct times in the animation timeline.
Over here I’ve made a mistake, I should’ve have one more empty object and nested everything in that so I can enable and disable things with one object, but alas I haven’t and am too lazy to copy paste every keyframe, so I disable them one by one in the timeline
also fixed my not working 6 sided skybox thanks to this page https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html
and modified the default panaromic skybox https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/DefaultResourcesExtra/Skybox-Panoramic.shader with the sun code
which is this line + the defining variables and stuff

I’m gonna test what’s causing the egregious bloom at the same time as testing the second scene
Hah forgot to have the second scene be disabled at first

This is weird, things aren’t disabling

Ahaa I never applied the animator! I was animating them outside of the prefab and in my level, so I had to come and press apply over here

Okay played in VR and it looks goood! I noticed that the sphere is low poly and the atmosphere around the planet needs to be more reactive to the sun, so lets fix those 😀

Simple and easy, I had to copy paste the keyframes from the old cloud sphere to the new one.
Now for the first scene, the snow wasn’t following the player, and the mountains still didn’t look good. The clouds also still rotate around with the player, I’ll try setting their Render Alignment to Facing and see what happens the next time I go ingame.
I’m trying to make the mountains all snow, I can use the glitter effect in poiyomi that way too
World machine’s bugging out and outputting like this

Sooo I’ll just use a white color in poiyomi, should work just as well.
Let’s do the door swinging with the players health now aswell shall we?
First I need to write a shader for it to rotate with a specified pivot, it needs to be a shader cause in remapper we can assign the player health to a material value.
Wait how am I gonna combine the poiyomi material and a rotation material? Uhhh maybe having it in a child?
Actually I’m planning on disabling bloom for this level anyway, and I was using poiyomi to not have issues with the bloom ingame, so maybe I can write the shader all in one without problems?
hmm need to understand how the vivify math.cginc rotatePoint works
changing pivot using shaders isn’t working, I’m just gonna have the door as a completely separate object and fix the pivot in another program
ok using this line I manually found that I need a rotation of 0, 0, 0 as dead and 0, 1.5, 0 as full health

Now to code a float that ranges from 0 to 1 and have it apply these values to here
It’s quite simple really


Now to be able to set this in any way in remapper, we have to add the material to the bundle.
Add this line of code somewhere in our script.ts

How’d I originally figure this out? Well I had to look within the End Times EXSII map’s level data

In there are these strings that reference something in the game, baseEnergy, baseSongTime, baseSongLength, baseRelativeScore,
how else was I supposed to know these strings exist for me to reference? Docs. Documentation is there for a reason.
https://heck.aeroluna.dev/animation/tracks-and-points/#bases
And it had never originally crossed my mind to look in the docs.
The rest of it is the change material stuff, start on beat 0, continue for 7000 beats which is forever in my short level.
Oh got an error, oh right remember to build the actual bundle! The DoorRot material doesn’t exist yet so I got an error in remapper.
Hm still got the same error
Aha did console.log(materials) and this is the output

its lowercase
Tried in game and it works, but it’s choppy, lemme try and see
how End Times did it smooth
Can’t see anything 🙁
I had misremembered, it’s not smoothened in there either, oh well
Ah the snow does follow the player, but it’s being drawn behind the clouds
xD

Oki gotta test in VR…. tomorrow
After this looks good I’m gonna try to get some song reactive things in, give note animation paths, and maybe re-texture the notes
Tested in VR and it looks good, I’m kinda out of ideas on how to sync stuff with music so I’ll just clean things up and get it ready to playtest by others.
I slowed the rotation of the clouds. Added a bit of emission to the snow flakes so they’re not affected by viewing angle. Rotated the earth under us so the sun shines closer to the center of the screen.
Now to learn how Swifter changed the note materials in his
You level https://github.com/Swifter1243/you_map
hm he’s got a prefab for each type of note, and has a base and arrow part for
the notes with his own custom shader on them. How does the game change their
color ingame for left and right notes?
Looking at his code I don’t really understand why some things are done, I don’t want to completely copy paste his things before trying to understand them atleast
Oh some of those things are provided in the vivify example,
nice
So if I add a reflective thingamabob to the example notes I should be set?
Spending a lot of time on the shader and somehow the code is the exact same on the output but the color’s gone :/

A few hours later and a little nap I got it

but now the normal of the cube aren’t well suited to reflect things really.
Wait does the reflection probe even work in BS? I should add this ingame and test
So I gave the vivify note prefabs my material, built it, in remapper found the prefab names with
console.log(prefabs)
And then

And they’re black…

lets test if this is from the reflection or something I did wrong with assigning them
disabled the reflection probe

aw man 🙁
Holup, I have realtimeReflectionProbes: rm.BOOLEAN.False, why do I have it false?
They’re now reflecting but the reflection probe is small. Performance be damned I’m scaling it by 100
..i see zero reflections in them
Oki they reflect, but having full reflections isn’t looking good, things are very dark in here, how about I give them sparkle as if it’s stars? xD
Nah sticking with this now, I gave it some lighting with the same Dot Product World Light Pos code I have for the planet and, Is Good.



Oki now… oh right I want to add a fire to the hot air balloon! Sooo more particles yay!
Oki fire is there.
Now the part which I’ve been putting off, figuring out what is causing the
blinding bloom ingame, I gotta turn everything off and enable them one by one,
let’s go.
Aw darn I’m enabling things in the animation timeline, I have to turn them off over there aaaaa
Fascinating, things are still bloomy with none of the scene things in place

Nope never mind missed one.
SKYBOX, YOU CAUSE ME THE SAME TROUBLE AS YOU HAD BEFORE? HAVE YOU NO FEAR?!
Oof ouch the cloud particle materials cause bloom aswell.
Somehow the panaroma skybox causes it aswellllllllll.
Let’s fix these, can’t check the rest with these blinding me.
Wait I’m actually using
opacity for the vivify skybox, hmmm
Oooh this works!
Blend SrcAlpha Zero
Tried to the same to the panaroma skybox.

…Where Skybox?
The other skybox is causing this to not render????
Yeaaaaaaaaah no, nope, blending to zero is blending to black, I have the other skybox behind this, this wont work.
Ok got the panaroma skybox to work by setting it to Opaque.
Wait What?? I set it the main skybox to opaque, it doesn’t work in unity but it works in game????
Yeah it does! Alright now onto the clouds.
No wait, the panaroma
skybox is broken in the second scene.
Was a small issue, disabled the main skybox even tho it was 0 opacity.
Haven’t figured out the clouds yet, but the mountains are glowy, why are the mountains glowy.
No they aren’t, I have to enable things one by one to see what’s making them glowy.
YOU, SKYBOX! ITS YOUUUUU!
I give up on this skybox, this god damn skybox, I’m just gonna animate the opacity to be low enough to not cause bloom ingame but not low enough to show the skybox behind it.
Somehow the panaroma skybox isn’t rendering in unity anymore but I don’t care!
OK WHAT WHY HOW?
This
Luminance(skyColor)*_Opacity
Works without causing bloom, while having empty _Opacity doesn’t!
….i’ll just go onto the clouds.
Luminance! Don’t know why you work but ya do!

Aw the clouds aren’t fully opaque in the middle now.
Multiplied by 1.75 and it good.
Now, the door and the second scene are still completely white.
Door, opacity of 1? I don’t think so buddy, 0 for you.
Aha I wasn’t using

In their materials.
Now the atmosphere shader and clouds aren’t working right.

Huh what? The skybox is rendering over the atmosphere or something?
Oh yeah it is, I had made it Opaque and put it on Geometry and the atmosphere was on layer Geometry-1
Just glowy clouds left and the bloom issue is done!
Animating their color to near black, why does black with 255 opacity still glow in-game? What is their bloom code 😐
Fixed by having 120 opacity. 🙂
Will try to do some lens flare thingy, but other than that I only got note angles and maybe colors left, and those are in remapper and chromapper so I’m done for now.
Spent quite a few hours trying to get a lens flare working, but alas I lack the knowledge to make one.
I also read the documentation again, and made the door not choppy by using [“baseEnergy.s5”]
I really should read the docs more.
Anyway onto animating the notes!
In Chromapper I select a few notes and press Shift+N to open this menu and then enable animation and position.

I then close that menu and press N to open this one, and I animate them in here.

And after a bit of playing around I think this may be good.

But I don’t have enough experience to know how it will play out in game, is the JD good? Is it clear when to hit the blocks? Only testing will tell!
To apply this to all the notes I copy this code to remapper and remove it from the notes in chromapper.
In remapper we create a animation track, and then apply it to the notes we want.

And test.
Why am I even changing their JD?
After a bit of playing around I think this looks good.

For the second scene I want them to come from behind-ish, lemme try to do it in chromapper.
This looks good, let’s put it in remapper.

I’ll be having a separate track for left notes and right notes.
And I’ll assign them like this.

Hm ingame it’s obvious they’re coming from front and going back, maybe I can have them dissolved at first 😛
Heh this works.

Now I wanna try having the left notes as green (earthy!), I sadly don’t know the “proper” way to do it, so I manually change the info.dat

These are the lines I added.
Before I test this, I saw one more thing, since I changed the clouds’s opacity, the mountain that shrink is now clearly visible and ain’t lookin good, either I’ll increase the number of clouds or I’ll shrink it faster.
Made more clouds and Thicker ones have been added.
Tested, mountain needs to disappear faster.
And also there’s compression the milky way skybox now 🙁
Also some tiny animation changes are needed.
Hm Fog is causing a lot of bloom far away, I need to make its color darker.
And the clouds man, they blindin’.
I’m now just decreasing cloud colors, bundling, building, testing, repeat. Just to find the alpha or darkness that will have the back mountains not visible and not be blinding with the bloom.
Tested in BS and it’s ready!
tiny issues now, like how it’s 100mb for no reason, low fps at the start of the first scene, and the milky way not being sharp now.
For compression I open my .vivify file using AssetStudio, asset list, sort by size.

These thingamabobs are the big ones..
For textures I disabled mipmaps and enable compression.


For the meshes (only the mountains in this case) I’m going to use 3ds Max’s ProOptimizer modifier.

Oh the poiyomi glitter needs to tile to work with this smaller mesh now.
No nvm the UV’s broken after optimizing.
Enabled this and it’s good now.

And then in unity I put mesh compression to medium (high deforms things too much here).

Now I build the bundle again and open it in AssetStudio to see what’s still big.
Down to 18mb now.

Aw man…
I decreased everythings quality again…. All for 4mb to be emptied up?
Something’s not right, I got around 6mb of assets being shown in AssetStudio, not 14mb.
Oh wait I never pressed the compress button!.

YEAH! 6.4mb.
needs to be down to 5mb but still WOOO!
The balloon will now look worse, but it’s the only thing I can change, lower quality textures, lower quality model.
5.3mb, One tiny thing needs to get a little bit tinier.
4.9mb! got it, satellite now looks a bit worse.
Now to try and figure
out the cause of low fps at the start of the level.
It’s not slowing down at all in Unity.
It just doesn’t slow down as much as before, I played in VR and ITS GOOD! :3
I only need to get a higher res milkyway texture and ready for playtest!
Got the texture and now building for both 2019 and 2021 🙂
The milkyway skybox is still not acceptable to me, I’m gonna find something to slash down so I can have this be less compressed.
I never explained why 5mb,
5mb is the file size limit for vivify bundles in beatsaver, and 15mb for the whole map.
I’m gonna try use Zbrush’s decimation master to compress the terrain, hopefully it turns out better than ProOptimizer.
No, gonna use ProOptimzer and go smaller…
Terrain went from 950kb to 180kb, but still not enough, what else must I slash down in my persuit of a good galaxy?
….we’ve lost a lot of good pixels and vertices but ladies and gentlemen, we’ve reached our goal with the help of our noble clouds who are watching over us all around our planet.
One more thing, adding my picture and name in Chromapper 😀
Aaaand now we upload for playtesting. I’m hoping to get sync ideas (THAT DON’T NEED ANY MORE TEXTURES) and mapping help, most likely will only get mapping help.
Uploaded to BSMG discord and waited a day and got a playtest and an idea from Yluemm which I’m gonna do.
One is a little bit of help with mapping from Najoko, and the idea is having a cabin on the mountain.
I’m thinking “slabs’s Hot Air Balloons” 🙂
After modeling it and putting it in I realize it need snow on top, so I’m doing it with cubes now 😛

Birds! Using the same bendy shader as the planet!

The birds are rendering white in-game no matter what I try.
I wonder… if I put a black texture on them what’ll happen?
Nope, still white.
Rewriting the shader to be a fragment shader *sigh*
Ok done.
Ofcourse you need this and wont accept a simple 0

Welp, i think fully done!
Weird issue reported by Najoko is that in the 2021 bundle the Fog shader is broky, let’s see.
Not sure why, but I’m gonna delete these lines and replace it with a simple v2f o;

Well I’ll be! It did work

These lines weren’t there before (looking at the shader in AssetStudio).
I’ve made a few mapping changes as well, I think I’m gonna upload it to beatsaver :]
2025/07/20
Thank you for reading and I hope something in here was useful to you.
Music is made by Makkon : https://www.youtube.com/watch?v=cPqdIEsMpgU&t=1135
Gameplay video : https://www.youtube.com/watch?v=qHUIxecySLA
The project files are available for download, learn from them : https://github.com/slabs37/Winter-Wrap-Up-Late-Again-map
