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();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|