mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-28 07:27:14 +00:00
feat(ugc): glitter flecks (LEGO-AnimUV) and milky satin in made models
Glitter colors (Materials.xml type glitter, glitter_colors 114,117) go into S21_Glitter_Model and, transparent, S21_GlitterAlpha_Model (shader_glitter, default 21, LEGO-AnimUV). Their shapes get box-projected UVs, an NiTexturingProperty with a stored 128 px mipmapped fleck texture (NiSourceTexture + NiPersistentSrcTextureRendererData, as the client's own env_ag_ocean-maelstrom.nif) and two NiTextureTransformControllers looping the base map's translation (glitter_size, glitter_density, glitter_speed). The shader lays the texture over the vertex color by its alpha and outputs the vertex alpha, so transparent glitter blends as S01_Alpha does. Satin colors (satin_colors, LEGO's opal colors) stay in S01_Alpha but get satin_opacity and are whitened by satin_whiten. NifFile reads the base map's scroll speed (uvScroll) from the controllers; the icon draws still flecks, the UGC 3D view and the LXFML viewers moving ones. stats.json counts the glitter groups. With shader_glitter 0 and no satin colors the files are the same bytes as before (tested). Also keeps glow_emissive for the icon (it was reset by the icon settings). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#include "UgcGlitter.h"
|
||||
#include "UgcModel.h"
|
||||
#include "UgcRender.h"
|
||||
|
||||
@@ -43,13 +44,19 @@ namespace UgcFormats {
|
||||
// NiMaterialProperty's emissive color (grey) of the group's shapes; 0 the shared white material with none.
|
||||
// The client's emissive shader (S46) lerps from the lit color to the vertex color by vertex alpha times its red.
|
||||
float emissive{};
|
||||
// The glitter of the UGC server's glitter groups (docs/UgcServer.md, "Metal and glow"): the shapes get UVs
|
||||
// (UgcGlitter::Uv) and an NiTexturingProperty whose base map is the fleck texture stored in the file
|
||||
// (NiSourceTexture, NiPersistentSrcTextureRendererData), its texture transform's translation looped by an
|
||||
// NiTextureTransformController for U and one for V. Null: none.
|
||||
const UgcGlitter::Params* glitter{};
|
||||
};
|
||||
|
||||
/**
|
||||
* The layout LU Toolbox exports (setup_lod_data) and the game's own brick models (res/BrickModels/ndmade) have:
|
||||
* the root node, an NiLODNode per group with NiRangeLODData holding each level's distances, a node per level and
|
||||
* the level's shapes under it, named like the group. Properties as WriteNif; a group with
|
||||
* an emissive color gets a material of its own.
|
||||
* an emissive color gets a material of its own, a glitter group the glitter texture's NiTexturingProperty (one
|
||||
* for every glitter group of the file).
|
||||
*/
|
||||
std::string WriteLodNif(const std::string& rootName, const std::vector<NifLodGroup>& groups);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user