Пікірлер
@alekseystepanov4108
@alekseystepanov4108 21 күн бұрын
Вовремя видосик вышел) Сейчас столкнулся с такой проблемой: пишу игру под мобилки и браузерки и нужно много различных бэкграундов к локациям (желательно с эффектами), просто загружать спрайты- не комильфо. Можешь показать варианты с примерами как сделать красивые фоны и чтобы они мало весили и не сильно ресурсов жрали?
@Tryicky
@Tryicky 24 күн бұрын
Шейдер: Properties { _MainTex ("Base Texture", 2D) = "white" {} _SecondTex ("Second Texture", 2D) = "white" {} _BlendMap ("Blend Map", 2D) = "white" {} _NormalTex ("Normal Map", 2D) = "bump" {} _NormalIntensity ("Normal Map Intensity", Range(0, 15)) = 1.0 _RoughnessMap ("Roughness Map", 2D) = "white" {} _RoughnessFactor ("Roughness Factor", Range(0, 1)) = 1.0 _MainTint ("Diffuse Tint", Color) = (1, 1, 1, 1) _Metallic ("Metallic", Range(0, 1)) = 0.0 _SpecularColor ("Specular Color", Color) = (1, 1, 1, 1) _SpecPower ("Specular Power", Range(0.1, 120)) = 3 _BlendFactor ("Blend Factor", Range(0, 1)) = 0.5 // Переменная для управления смешиванием Copy // Параметры для управления UV-координатами _UVScale ("UV Scale", Vector) = (1, 1, 1) // Масштаб UV по осям X, Y и Z _UVOffset ("UV Offset", Vector) = (0, 0, 0) // Смещение UV по осям X, Y и Z } SubShader { Tags { "RenderType"="Opaque" } LOD 200 angelscript Copy CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 struct Input { float2 uv_MainTex; float2 uv_SecondTex; float2 uv_BlendMap; float2 uv_NormalTex; float2 uv_RoughnessMap; float3 worldPos; // Позиция в мировых координатах }; sampler2D _MainTex; sampler2D _SecondTex; sampler2D _BlendMap; sampler2D _NormalTex; sampler2D _RoughnessMap; float4 _MainTint; float _NormalIntensity; float _RoughnessFactor; float _Metallic; float4 _SpecularColor; float _SpecPower; float _BlendFactor; // Переменная для смешивания // Параметры для управления UV-координатами float4 _UVScale; // (x, y, z) float4 _UVOffset; // (x, y, z) void surf (Input IN, inout SurfaceOutputStandard o) { // Применение масштабирования и смещения UV float2 uv_MainTex = IN.uv_MainTex * _UVScale.xy + _UVOffset.xy; float2 uv_SecondTex = IN.uv_SecondTex * _UVScale.xy + _UVOffset.xy; float2 uv_BlendMap = IN.uv_BlendMap * _UVScale.xy + _UVOffset.xy; float2 uv_NormalTex = IN.uv_NormalTex * _UVScale.xy + _UVOffset.xy; float2 uv_RoughnessMap = IN.uv_RoughnessMap * _UVScale.xy + _UVOffset.xy; // Получаем текстуры основного цвета и второй текстуры float4 MainTex = tex2D(_MainTex, uv_MainTex); float4 SecondTex = tex2D(_SecondTex, uv_SecondTex); float4 BlendMap = tex2D(_BlendMap, uv_BlendMap); // Получаем карту смешивания // Смешиваем текстуры на основе карты смешивания и BlendFactor float4 blendedColor = lerp(MainTex, SecondTex, BlendMap.r * _BlendFactor); // Используем R-канал и BlendFactor // Получаем нормали из нормальной карты float3 normalMap = UnpackNormal(tex2D(_NormalTex, uv_NormalTex)); // Применяем нормали с учетом интенсивности o.Normal = normalize(o.Normal + normalMap * _NormalIntensity); o.Albedo = blendedColor.rgb * _MainTint.rgb; // Учитываем tint o.Alpha = blendedColor.a; // Учитываем альфа-канал // Получаем рафнесс из текстуры float roughness = tex2D(_RoughnessMap, uv_RoughnessMap).r * _RoughnessFactor; o.Metallic = _Metallic; // Устанавливаем значение металлика o.Smoothness = 1.0 - roughness; // Преобразуем рафнесс в гладкость // Рассчитываем блеск float3 viewDir = normalize(_WorldSpaceCameraPos - IN.worldPos); // Корректная позиция камеры float3 lightDir = normalize(_LightColor0.rgb); // Используйте нужный вектор направления света float3 reflection = reflect(-lightDir, o.Normal); float spec = pow(max(dot(reflection, viewDir), 0.0), _SpecPower); // Добавляем блеск к Albedo o.Albedo += spec * _SpecularColor.rgb; } ENDCG } FallBack "Diffuse"
@MaminGameDeveloper
@MaminGameDeveloper 25 күн бұрын
Красава дружище! Продолжай в том же духе! Полезные видосы снимаешь❤, желаю удачи коллега!