11-16-2022, 07:00 PM
(11-16-2022, 10:35 AM)_Aka_ Wrote: I think you can solve it doing the following:
listening on the OnRefresh event, in it update the UV offset then call yourGenerator.Refresh(). That way the UVs are updated before the next frame rendering
That is what I'm doing:
Code:
var bvm = gen.GetModule<BuildVolumeMesh>( "Track Vol Mesh", true );
bvm.SetMaterial( 0, material );
bvm.MaterialSetttings[ 0 ].KeepAspect = CGKeepAspectMode.ScaleV;
var cm = gen.GetModule<CreateMesh>( "Track Create Mesh", true );
cm.OnRefresh.AddListenerOnce( _ => {
var prevSeg = seg.Spline.GetPreviousControlPoint( seg );
float savedForNextSegUVOffsetY;
if (prevSeg == null) {
savedForNextSegUVOffsetY = bvm.MaterialSetttings[ 0 ].UVOffset.y + bvm.groupsByMatID[ 0 ].AspectCorrectionV;
}
else {
savedForNextSegUVOffsetY = prevSeg.EndBias + bvm.groupsByMatID[ 0 ].AspectCorrectionV; // EndBias will hold the accumulated Offset to the end of it's segment
if (prevSeg.GetMetadata<TrackMetadata>().Geo.materialName == geo.materialName
&& Math.Abs( bvm.MaterialSetttings[ 0 ].UVOffset.y - prevSeg.EndBias ) > 0.001f) {
bvm.MaterialSetttings[ 0 ].UVOffset.y = prevSeg.EndBias;
}
}
if (Math.Abs( savedForNextSegUVOffsetY - seg.EndBias ) > 0.001f) {
seg.EndBias = savedForNextSegUVOffsetY;
}
gen.AutoRefresh = true;
} );
gen.Refresh( true );