rj-action-library/Runtime/Procedural/Baking/MultiBaker/Flat_Baker.cs

84 lines
2.2 KiB
C#
Raw Normal View History

2025-05-07 12:18:01 +00:00
using System.Collections;
using System.Collections.Generic;
using Godot;
using System;
using System.Threading.Tasks;
namespace Rokojori
{
[Tool][GlobalClass]
public partial class Flat_Baker:_XX_MultiBakeModeBillboardBase
{
[Export]
public float yawOffset = 0;
2025-05-14 12:31:32 +00:00
[Export]
public MeshAxisSubDivider uSubDivisions;
[Export]
public MeshAxisSubDivider vSubDivisions;
2025-05-07 12:18:01 +00:00
public override int GetNumViews()
{
2025-05-10 20:56:23 +00:00
return useDoubleSidedMaterial ? 1 : 2;
2025-05-07 12:18:01 +00:00
}
public override void CreateBakers()
{
var fov = multiBaker.GetCameraFOV();
var distance = multiBaker.GetCameraDistance();
var outputScale = multiBaker.GetOutputScale();
var bakerCameras = multiBaker.bakerCameras;
var mb = multiBaker;
bakerCameras.ForEach(
bk =>
{
var vs = bk.viewSettings;
vs.fovDistance = Manual_BakingFDSettings.Create( fov, distance );
vs.rotationMode = BakingViewSettings.RotationMode.Yaw_Pitch;
}
);
var mg = new MeshGeometry();
var numTextures = GetNumViews();
var textureAlignment = TextureMerger.ComputeTextureAlignment( numTextures );
var angle = yawOffset;
2025-05-14 12:31:32 +00:00
2025-05-07 12:18:01 +00:00
for ( int i = 0; i < numTextures; i++ )
{
var index = i;
bakerCameras[ index ].viewSettings.yaw = angle + i * 180f;
bakerCameras[ index ].viewSettings.pitch = 0;
2025-05-14 12:31:32 +00:00
var uv = TextureMerger.GetUVRectangle( textureAlignment, index, true );
2025-05-07 12:18:01 +00:00
var q = new MeshGeometry();
2025-05-14 12:31:32 +00:00
var transform3D = Math3D.TRS( Vector3.Zero, bakerCameras[ index ].viewSettings.bakingRotation, Vector3.One * outputScale );
var uDivisions = MeshAxisSubDivider.GetSubDivisionsU( uSubDivisions, transform3D );
var vDivisions = MeshAxisSubDivider.GetSubDivisionsV( vSubDivisions, transform3D );
q.AddQuadWithCustomDivisions( bakerCameras[ index ].viewSettings.bakingRotation, outputScale, uv.min, uv.max, uDivisions, vDivisions );
2025-05-07 12:18:01 +00:00
mg.Add( q );
}
2025-05-10 20:56:23 +00:00
mg.ApplyTranslation( -mb.targetPivot );
2025-05-07 12:18:01 +00:00
mb.X_outputMesh.Mesh = mg.GenerateMesh();
}
}
}