Skip to content

Commit 67f125f

Browse files
sakumanaokiclaude
andcommitted
エディタGUI・PostProcessor・バリデーションを2nd Texture独立Map Modeに対応
- 2nd TextureセクションにMap Modeドロップダウンを追加 - テクスチャ選択・FlipBook判定を2nd独自のMap Modeで分岐 - PostProcessorに2nd TextureのMap Modeキーワード設定を追加 - 既存マテリアル向けマイグレーション処理を追加 - RendererErrorHandlerの2nd texture FlipBook判定を独立化 - OptimizedShaderGeneratorに新キーワードを追加 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 920c4a3 commit 67f125f

4 files changed

Lines changed: 75 additions & 19 deletions

File tree

Assets/Nova/Editor/Core/Scripts/Optimizer/OptimizedShaderGenerator.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,9 @@ private static string OptimizeShaderPass(string shaderCode, string passName,
317317
@"_ALPHA_TRANSITION_MAP_MODE_3D\b|" +
318318
@"_ALPHA_TRANSITION_BLEND_SECOND_TEX_AVERAGE\b|" +
319319
@"_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY\b|" +
320+
@"_ALPHA_TRANSITION_MAP_SECOND_TEXTURE_MODE_2D\b|" +
321+
@"_ALPHA_TRANSITION_MAP_SECOND_TEXTURE_MODE_2D_ARRAY\b|" +
322+
@"_ALPHA_TRANSITION_MAP_SECOND_TEXTURE_MODE_3D\b|" +
320323
@"_EMISSION_AREA_ALL\b|" +
321324
@"_EMISSION_AREA_MAP\b|" +
322325
@"_EMISSION_AREA_ALPHA\b|" +

Assets/Nova/Editor/Core/Scripts/ParticlesUberCommonGUI.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -622,20 +622,16 @@ private void InternalDrawAlphaTransitionProperties()
622622
props.AlphaTransitionMapModeProp.Value);
623623
var alphaTransitionMapMode = (AlphaTransitionMapMode)props.AlphaTransitionMapModeProp.Value.floatValue;
624624
MaterialProperty alphaTransitionMapProp;
625-
MaterialProperty alphaTransitionMapSecondTextureProp;
626625
switch (alphaTransitionMapMode)
627626
{
628627
case AlphaTransitionMapMode.SingleTexture:
629628
alphaTransitionMapProp = props.AlphaTransitionMapProp.Value;
630-
alphaTransitionMapSecondTextureProp = props.AlphaTransitionMapSecondTextureProp.Value;
631629
break;
632630
case AlphaTransitionMapMode.FlipBook:
633631
alphaTransitionMapProp = props.AlphaTransitionMap2DArrayProp.Value;
634-
alphaTransitionMapSecondTextureProp = props.AlphaTransitionMapSecondTexture2DArrayProp.Value;
635632
break;
636633
case AlphaTransitionMapMode.FlipBookBlending:
637634
alphaTransitionMapProp = props.AlphaTransitionMap3DProp.Value;
638-
alphaTransitionMapSecondTextureProp = props.AlphaTransitionMapSecondTexture3DProp.Value;
639635
break;
640636
default:
641637
throw new ArgumentOutOfRangeException();
@@ -699,17 +695,38 @@ private void InternalDrawAlphaTransitionProperties()
699695
(AlphaTransitionBlendMode)props.AlphaTransitionSecondTextureBlendModeProp.Value.floatValue;
700696
if (alphaTransitionSecondTextureBlendMode != AlphaTransitionBlendMode.None)
701697
{
698+
MaterialEditorUtility.DrawEnumProperty<AlphaTransitionMapMode>(_editor, "2nd Texture Map Mode",
699+
props.AlphaTransitionMapSecondTextureMapModeProp.Value);
700+
var alphaTransitionSecondTextureMapMode =
701+
(AlphaTransitionMapMode)props.AlphaTransitionMapSecondTextureMapModeProp.Value.floatValue;
702+
703+
MaterialProperty alphaTransitionMapSecondTexturePropLocal;
704+
switch (alphaTransitionSecondTextureMapMode)
705+
{
706+
case AlphaTransitionMapMode.SingleTexture:
707+
alphaTransitionMapSecondTexturePropLocal = props.AlphaTransitionMapSecondTextureProp.Value;
708+
break;
709+
case AlphaTransitionMapMode.FlipBook:
710+
alphaTransitionMapSecondTexturePropLocal = props.AlphaTransitionMapSecondTexture2DArrayProp.Value;
711+
break;
712+
case AlphaTransitionMapMode.FlipBookBlending:
713+
alphaTransitionMapSecondTexturePropLocal = props.AlphaTransitionMapSecondTexture3DProp.Value;
714+
break;
715+
default:
716+
throw new ArgumentOutOfRangeException();
717+
}
718+
702719
using (var changeCheckScope = new EditorGUI.ChangeCheckScope())
703720
{
704721
MaterialEditorUtility.DrawTexture<TCustomCoord>(_editor,
705-
alphaTransitionMapSecondTextureProp,
722+
alphaTransitionMapSecondTexturePropLocal,
706723
props.AlphaTransitionMapSecondTextureOffsetXCoordProp.Value,
707724
props.AlphaTransitionMapSecondTextureOffsetYCoordProp.Value,
708725
props.AlphaTransitionMapSecondTextureChannelsXProp.Value, null);
709726

710727
if (changeCheckScope.changed)
711728
{
712-
if (alphaTransitionMapMode == AlphaTransitionMapMode.FlipBook
729+
if (alphaTransitionSecondTextureMapMode == AlphaTransitionMapMode.FlipBook
713730
&& props.AlphaTransitionMapSecondTexture2DArrayProp.Value.textureValue != null)
714731
{
715732
var tex2DArray = (Texture2DArray)props.AlphaTransitionMapSecondTexture2DArrayProp
@@ -718,7 +735,7 @@ private void InternalDrawAlphaTransitionProperties()
718735
tex2DArray.depth;
719736
}
720737

721-
if (alphaTransitionMapMode == AlphaTransitionMapMode.FlipBookBlending
738+
if (alphaTransitionSecondTextureMapMode == AlphaTransitionMapMode.FlipBookBlending
722739
&& props.AlphaTransitionMapSecondTexture3DProp.Value.textureValue != null)
723740
{
724741
var tex3D = (Texture3D)props.AlphaTransitionMapSecondTexture3DProp.Value
@@ -728,14 +745,14 @@ private void InternalDrawAlphaTransitionProperties()
728745
}
729746
}
730747

731-
if (alphaTransitionMapMode == AlphaTransitionMapMode.FlipBook
732-
|| alphaTransitionMapMode == AlphaTransitionMapMode.FlipBookBlending)
748+
if (alphaTransitionSecondTextureMapMode == AlphaTransitionMapMode.FlipBook
749+
|| alphaTransitionSecondTextureMapMode == AlphaTransitionMapMode.FlipBookBlending)
733750
{
734751
MaterialEditorUtility.DrawPropertyAndCustomCoord<TCustomCoord>(_editor,
735752
"Flip-Book Progress",
736753
props.AlphaTransitionMapSecondTextureProgressProp.Value,
737754
props.AlphaTransitionMapSecondTextureProgressCoordProp.Value);
738-
755+
739756
// Random Row Selection for Second Texture
740757
MaterialEditorUtility.DrawRandomRowSelection<TCustomCoord>(
741758
_editor,

Assets/Nova/Editor/Core/Scripts/ParticlesUberUnlitMaterialPostProcessor.cs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public static class ParticlesUberUnlitMaterialPostProcessor
9696
private static readonly int AlphaTransitionSecondTextureBlendMode =
9797
Shader.PropertyToID(MaterialPropertyNames.AlphaTransitionSecondTextureBlendMode);
9898

99+
private static readonly int AlphaTransitionMapSecondTextureMapModeId =
100+
Shader.PropertyToID(MaterialPropertyNames.AlphaTransitionMapSecondTextureMapMode);
101+
99102
private static readonly int EmissionAreaTypeId = Shader.PropertyToID(MaterialPropertyNames.EmissionAreaType);
100103
private static readonly int EmissionColorTypeId = Shader.PropertyToID(MaterialPropertyNames.EmissionColorType);
101104
private static readonly int EmissionMapModeId = Shader.PropertyToID(MaterialPropertyNames.EmissionMapMode);
@@ -349,23 +352,54 @@ private static void SetupAlphaTransitionMaterialKeywords(Material material)
349352
MaterialEditorUtility.SetKeyword(material, ShaderKeywords.AlphaTransitionMapRandomRowSelectionEnabled,
350353
alphaTransitionMapRandomRowSelectionEnabled);
351354

352-
// Alpha Transition Map Second Texture Random Row Selection
353-
var alphaTransitionMapSecondTextureRandomRowSelectionEnabled =
354-
(alphaTransitionMapMode == AlphaTransitionMapMode.FlipBook || alphaTransitionMapMode == AlphaTransitionMapMode.FlipBookBlending) &&
355-
material.GetFloat(AlphaTransitionMapSecondTextureRandomRowSelectionEnabledId) > 0.5f;
356-
MaterialEditorUtility.SetKeyword(material, ShaderKeywords.AlphaTransitionMapSecondTextureRandomRowSelectionEnabled,
357-
alphaTransitionMapSecondTextureRandomRowSelectionEnabled);
358-
359355
// 2nd Texture
360356
{
357+
var blendMode = (AlphaTransitionBlendMode)material.GetFloat(AlphaTransitionSecondTextureBlendMode);
361358
var secondTexEnabled = material.GetTexture(AlphaTransitionMapSecondTextureId) != null
362359
|| material.GetTexture(AlphaTransitionMapSecondTexture2DArrayId) != null
363360
|| material.GetTexture(AlphaTransitionMapSecondTexture3DId) != null;
364-
var blendMode = (AlphaTransitionBlendMode)material.GetFloat(AlphaTransitionSecondTextureBlendMode);
361+
var secondTexActive = secondTexEnabled && blendMode != AlphaTransitionBlendMode.None;
362+
365363
MaterialEditorUtility.SetKeyword(material, ShaderKeywords.AlphaTransitionBlendSecondTexAverage,
366364
secondTexEnabled && blendMode == AlphaTransitionBlendMode.Average);
367365
MaterialEditorUtility.SetKeyword(material, ShaderKeywords.AlphaTransitionBlendSecondTexMultiply,
368366
secondTexEnabled && blendMode == AlphaTransitionBlendMode.Multiply);
367+
368+
// 2nd Texture Map Mode - migrate legacy materials
369+
// Legacy materials don't have this property, so the default is 0 (SingleTexture).
370+
// If the 1st texture uses FlipBook/FlipBookBlending and the 2nd texture has a
371+
// matching texture assigned but the new property is still at default, auto-migrate.
372+
var secondTextureMapMode = (AlphaTransitionMapMode)material.GetFloat(AlphaTransitionMapSecondTextureMapModeId);
373+
if (secondTextureMapMode == AlphaTransitionMapMode.SingleTexture)
374+
{
375+
if (alphaTransitionMapMode == AlphaTransitionMapMode.FlipBook
376+
&& material.GetTexture(AlphaTransitionMapSecondTexture2DArrayId) != null)
377+
{
378+
secondTextureMapMode = AlphaTransitionMapMode.FlipBook;
379+
material.SetFloat(AlphaTransitionMapSecondTextureMapModeId, (float)AlphaTransitionMapMode.FlipBook);
380+
}
381+
else if (alphaTransitionMapMode == AlphaTransitionMapMode.FlipBookBlending
382+
&& material.GetTexture(AlphaTransitionMapSecondTexture3DId) != null)
383+
{
384+
secondTextureMapMode = AlphaTransitionMapMode.FlipBookBlending;
385+
material.SetFloat(AlphaTransitionMapSecondTextureMapModeId, (float)AlphaTransitionMapMode.FlipBookBlending);
386+
}
387+
}
388+
389+
foreach (AlphaTransitionMapMode value in Enum.GetValues(typeof(AlphaTransitionMapMode)))
390+
{
391+
var isOn = secondTexActive && secondTextureMapMode == value;
392+
var keyword = value.GetSecondTextureShaderKeyword();
393+
MaterialEditorUtility.SetKeyword(material, keyword, isOn);
394+
}
395+
396+
// Alpha Transition Map Second Texture Random Row Selection
397+
var alphaTransitionMapSecondTextureRandomRowSelectionEnabled =
398+
secondTexActive &&
399+
(secondTextureMapMode == AlphaTransitionMapMode.FlipBook || secondTextureMapMode == AlphaTransitionMapMode.FlipBookBlending) &&
400+
material.GetFloat(AlphaTransitionMapSecondTextureRandomRowSelectionEnabledId) > 0.5f;
401+
MaterialEditorUtility.SetKeyword(material, ShaderKeywords.AlphaTransitionMapSecondTextureRandomRowSelectionEnabled,
402+
alphaTransitionMapSecondTextureRandomRowSelectionEnabled);
369403
}
370404
}
371405

Assets/Nova/Editor/Core/Scripts/RendererErrorHandler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,11 +197,13 @@ private static bool IsCustomCoordUsedInAlphaTransition(
197197
if ((AlphaTransitionBlendMode)props.AlphaTransitionSecondTextureBlendModeProp.Value.floatValue !=
198198
AlphaTransitionBlendMode.None)
199199
{
200+
var isSecondTextureFlipBook = (AlphaTransitionMapMode)props.AlphaTransitionMapSecondTextureMapModeProp.Value.floatValue !=
201+
AlphaTransitionMapMode.SingleTexture;
200202
isCustomCoordUsed |= IsCustomCoordUsed(props.AlphaTransitionProgressCoordSecondTextureProp);
201203
isCustomCoordUsed |= IsCustomCoordUsed(props.AlphaTransitionMapSecondTextureOffsetXCoordProp) ||
202204
IsCustomCoordUsed(props.AlphaTransitionMapSecondTextureOffsetYCoordProp) ||
203205
IsCustomCoordUsed(props.AlphaTransitionMapSecondTextureRotationCoordProp);
204-
isCustomCoordUsed |= isFlipBook &&
206+
isCustomCoordUsed |= isSecondTextureFlipBook &&
205207
IsCustomCoordUsed(props.AlphaTransitionMapSecondTextureProgressCoordProp);
206208
}
207209
}

0 commit comments

Comments
 (0)