84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
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;
 | 
						|
 | 
						|
    [Export]
 | 
						|
    public MeshAxisSubDivider uSubDivisions;
 | 
						|
    [Export]
 | 
						|
    public MeshAxisSubDivider vSubDivisions;
 | 
						|
 | 
						|
    public override int GetNumViews()
 | 
						|
    {
 | 
						|
      return useDoubleSidedMaterial ? 1 : 2;
 | 
						|
    }
 | 
						|
 | 
						|
    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;
 | 
						|
      
 | 
						|
 | 
						|
      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(); 
 | 
						|
        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 );         
 | 
						|
 | 
						|
        mg.Add( q );        
 | 
						|
      
 | 
						|
      }
 | 
						|
 | 
						|
      mg.ApplyTranslation( -mb.targetPivot );
 | 
						|
 | 
						|
 | 
						|
      mb.X_outputMesh.Mesh = mg.GenerateMesh();  
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
} |