@@ -179,8 +179,18 @@ private static object CreateAsset(JObject @params)
179179 }
180180 else if ( lowerAssetType == "material" )
181181 {
182- Material mat = new Material ( Shader . Find ( "Standard" ) ) ; // Default shader
183- // TODO: Apply properties from JObject (e.g., shader name, color, texture assignments)
182+ // Prefer provided shader; fall back to common pipelines
183+ var requested = properties ? [ "shader" ] ? . ToString ( ) ;
184+ Shader shader =
185+ ( ! string . IsNullOrEmpty ( requested ) ? Shader . Find ( requested ) : null )
186+ ?? Shader . Find ( "Universal Render Pipeline/Lit" )
187+ ?? Shader . Find ( "HDRP/Lit" )
188+ ?? Shader . Find ( "Standard" )
189+ ?? Shader . Find ( "Unlit/Color" ) ;
190+ if ( shader == null )
191+ return Response . Error ( $ "Could not find a suitable shader (requested: '{ requested ?? "none" } ').") ;
192+
193+ var mat = new Material ( shader ) ;
184194 if ( properties != null )
185195 ApplyMaterialProperties ( mat , properties ) ;
186196 AssetDatabase . CreateAsset ( mat , fullPath ) ;
@@ -1261,24 +1271,29 @@ private static object GetAssetData(string path, bool generatePreview = false)
12611271 {
12621272 // Ensure texture is readable for EncodeToPNG
12631273 // Creating a temporary readable copy is safer
1264- RenderTexture rt = RenderTexture . GetTemporary (
1265- preview . width ,
1266- preview . height
1267- ) ;
1268- Graphics . Blit ( preview , rt ) ;
1274+ RenderTexture rt = null ;
1275+ Texture2D readablePreview = null ;
12691276 RenderTexture previous = RenderTexture . active ;
1270- RenderTexture . active = rt ;
1271- Texture2D readablePreview = new Texture2D ( preview . width , preview . height ) ;
1272- readablePreview . ReadPixels ( new Rect ( 0 , 0 , rt . width , rt . height ) , 0 , 0 ) ;
1273- readablePreview . Apply ( ) ;
1274- RenderTexture . active = previous ;
1275- RenderTexture . ReleaseTemporary ( rt ) ;
1276-
1277- byte [ ] pngData = readablePreview . EncodeToPNG ( ) ;
1277+ try
1278+ {
1279+ rt = RenderTexture . GetTemporary ( preview . width , preview . height ) ;
1280+ Graphics . Blit ( preview , rt ) ;
1281+ RenderTexture . active = rt ;
1282+ readablePreview = new Texture2D ( preview . width , preview . height ) ;
1283+ readablePreview . ReadPixels ( new Rect ( 0 , 0 , rt . width , rt . height ) , 0 , 0 ) ;
1284+ readablePreview . Apply ( ) ;
1285+ }
1286+ finally
1287+ {
1288+ RenderTexture . active = previous ;
1289+ if ( rt != null ) RenderTexture . ReleaseTemporary ( rt ) ;
1290+ }
1291+
1292+ var pngData = readablePreview . EncodeToPNG ( ) ;
12781293 previewBase64 = Convert . ToBase64String ( pngData ) ;
12791294 previewWidth = readablePreview . width ;
12801295 previewHeight = readablePreview . height ;
1281- UnityEngine . Object . DestroyImmediate ( readablePreview ) ; // Clean up temp texture
1296+ UnityEngine . Object . DestroyImmediate ( readablePreview ) ;
12821297 }
12831298 catch ( Exception ex )
12841299 {
0 commit comments