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; public override int GetNumViews() { return 2; } public override void CreateBakers() { var fov = multiBaker.GetCameraFOV(); var distance = multiBaker.GetCameraDistance(); var outputScale = multiBaker.GetOutputScale(); RJLog.Log( "outputScale", outputScale ); 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; for ( int i = 0; i < numTextures; i++ ) { var index = i; bakerCameras[ index ].viewSettings.yaw = angle + i * 180f; bakerCameras[ index ].viewSettings.pitch = 0; var uv = TextureMerger.GetUVRectangle( textureAlignment, index, true ); var q = new MeshGeometry(); q.AddQuad( bakerCameras[ index ].viewSettings.bakingRotation, outputScale, uv.min, uv.max ); mg.Add( q ); } mb.X_outputMesh.Mesh = mg.GenerateMesh(); } } }