浏览代码
Init commit
Init commit
- Added Infinite water scene - Added InfiniteWater.hlsl to contain functions specific to the infinite water shader - Worked on better modularity in water shader/feature-infinite-sea
André McGrail
5 年前
当前提交
990e2a21
共有 19 个文件被更改,包括 2526 次插入 和 165 次删除
-
216Packages/com.verasl.water-system/Shaders/InfiniteWater.shader
-
4Packages/com.verasl.water-system/Shaders/Water.shader
-
96Packages/com.verasl.water-system/Shaders/WaterCommon.hlsl
-
8Assets/scenes/Testing/InfiniteWater.meta
-
1001Assets/scenes/Testing/InfiniteWater.unity
-
7Assets/scenes/Testing/InfiniteWater.unity.meta
-
63Assets/scenes/Testing/InfiniteWaterSettings.lighting
-
8Assets/scenes/Testing/InfiniteWaterSettings.lighting.meta
-
84Packages/com.verasl.water-system/Shaders/InfiniteWater.hlsl
-
9Packages/com.verasl.water-system/Shaders/InfiniteWater.hlsl.meta
-
7Assets/scenes/Testing/InfiniteWater/LightingData.asset
-
8Assets/scenes/Testing/InfiniteWater/LightingData.asset.meta
-
82Assets/scenes/Testing/InfiniteWater/Lightmap-0_comp_dir.png
-
84Assets/scenes/Testing/InfiniteWater/Lightmap-0_comp_dir.png.meta
-
76Assets/scenes/Testing/InfiniteWater/Lightmap-0_comp_light.exr
-
83Assets/scenes/Testing/InfiniteWater/Lightmap-0_comp_light.exr.meta
-
771Assets/scenes/Testing/InfiniteWater/ReflectionProbe-0.exr
-
84Assets/scenes/Testing/InfiniteWater/ReflectionProbe-0.exr.meta
|
|||
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' |
|||
|
|||
Shader "Unlit/InfiniteWater" |
|||
Shader "BoatAttack/InfiniteWater" |
|||
_MainTex ("Texture", 2D) = "white" {} |
|||
[Toggle(_STATIC_SHADER)] _Static ("Static", Float) = 0 |
|||
_BumpScale("Detail Wave Amount", Range(0, 2)) = 0.2//fine detail multiplier |
|||
[KeywordEnum(Off, SSS, Refraction, Reflection, Normal, Fresnel, WaterEffects, Foam, WaterDepth)] _Debug ("Debug mode", Float) = 0 |
|||
LOD 100 |
|||
ZWrite off |
|||
ZWrite On |
|||
Name "InfiniteWaterShading" |
|||
Tags{"LightMode" = "UniversalForward"} |
|||
#pragma vertex vert |
|||
#pragma fragment frag |
|||
#pragma prefer_hlslcc gles |
|||
/////////////////SHADER FEATURES////////////////// |
|||
#pragma shader_feature _REFLECTION_CUBEMAP _REFLECTION_PROBES _REFLECTION_PLANARREFLECTION |
|||
#pragma shader_feature _ _STATIC_SHADER |
|||
#pragma shader_feature _DEBUG_OFF _DEBUG_SSS _DEBUG_REFRACTION _DEBUG_REFLECTION _DEBUG_NORMAL _DEBUG_FRESNEL _DEBUG_WATEREFFECTS _DEBUG_FOAM _DEBUG_WATERDEPTH |
|||
|
|||
// ------------------------------------- |
|||
// Lightweight Pipeline keywords |
|||
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS |
|||
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE |
|||
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS |
|||
#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS |
|||
#pragma multi_compile _ _SHADOWS_SOFT |
|||
|
|||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" |
|||
#include "WaterInput.hlsl" |
|||
#include "CommonUtilities.hlsl" |
|||
#include "WaterLighting.hlsl" |
|||
|
|||
#define EPSILON 0.00001 |
|||
////////////////////INCLUDES////////////////////// |
|||
#include "WaterCommon.hlsl" |
|||
#include "InfiniteWater.hlsl" |
|||
// ray-plane intersection test |
|||
// @return side of plane hit |
|||
// 0 : no hit |
|||
// 1 : front |
|||
// 2 : back |
|||
int intersect_plane (float3 ro, float3 rd, float3 po, float3 pd, out float3 hit) |
|||
{ |
|||
float D = dot(po, pd); // re-parameterize plane to normal + distance |
|||
float tn = D - dot(ro, pd); // ray pos w.r.t. plane (frnt, back, on) |
|||
float td = dot (rd, pd); // ray ori w.r.t. plane (towards, away, parallel) |
|||
|
|||
if (td > -EPSILON && td < EPSILON) return 0; // parallel to plane |
|||
|
|||
float t = tn / td; // dist along ray to hit |
|||
if (t < 0.0) return 0; // plane lies behind ray |
|||
hit = ro + t * rd; // got a hit |
|||
return (tn > 0.0) ? 2 : 1; // which side of the plane? |
|||
} |
|||
#pragma vertex InfiniteWaterVertex |
|||
#pragma fragment InfiniteWaterFragment |
|||
struct appdata |
|||
Varyings InfiniteWaterVertex(Attributes input) |
|||
float4 vertex : POSITION; |
|||
float2 uv : TEXCOORD0; |
|||
}; |
|||
Varyings output = (Varyings)0; |
|||
struct v2f |
|||
{ |
|||
float2 uv : TEXCOORD0; |
|||
float4 screenPos : TEXCOORD2;//screen position of the verticies after wave distortion |
|||
float4 viewDir : TEXCOORD3; |
|||
float4 vertex : SV_POSITION; |
|||
}; |
|||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); |
|||
sampler2D _MainTex; |
|||
float4 _MainTex_ST; |
|||
float _Size; |
|||
float _CameraRoll; |
|||
|
|||
v2f vert (appdata v) |
|||
{ |
|||
v2f o; |
|||
float3 posWS = TransformObjectToWorld(v.vertex.xyz); |
|||
o.vertex = TransformWorldToHClip(posWS); |
|||
o.uv = TRANSFORM_TEX(v.uv, _MainTex); |
|||
o.screenPos = ComputeScreenPos(o.vertex); |
|||
o.viewDir.xyz = UNITY_MATRIX_IT_MV[2].xyz; |
|||
float3 viewPos = TransformWorldToView(posWS);// posWS - _WorldSpaceCameraPos; |
|||
o.viewDir.w = length(viewPos / viewPos.z); |
|||
return o; |
|||
output.uv.xy = input.texcoord; |
|||
|
|||
float3 cameraPosition = GetCameraPositionWS(); |
|||
cameraPosition.y = 0.0; |
|||
VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz + cameraPosition); |
|||
|
|||
output.clipPos = vertexInput.positionCS; |
|||
float3 viewPos = vertexInput.positionVS; |
|||
|
|||
output.screenPosition = ComputeScreenPos(vertexInput.positionCS); |
|||
|
|||
output.viewDir.xyz = UNITY_MATRIX_IT_MV[2].xyz; |
|||
output.viewDir.w = length(viewPos / viewPos.z); |
|||
|
|||
return output; |
|||
|
|||
void frag (v2f i, out half4 outColor:SV_Target, out float outDepth : SV_Depth) //: SV_Target |
|||
|
|||
void InfiniteWaterFragment(Varyings i, out half4 outColor:SV_Target, out float outDepth : SV_Depth) //: SV_Target |
|||
half3 screenUV = i.screenPosition.xyz / i.screenPosition.w; // screen UVs |
|||
float3 viewDir = i.viewDir.xyz; //UNITY_MATRIX_IT_MV[2].xyz; |
|||
float3 pos = _WorldSpaceCameraPos * viewDir; |
|||
i.uv = pos.xy; |
|||
half4 waterFX = SAMPLE_TEXTURE2D(_WaterFXMap, sampler_ScreenTextures_linear_clamp, screenUV.xy); |
|||
////// |
|||
float4 p = i.screenPos; |
|||
float2 uv = p.xy / p.w; // [0, 1] |
|||
half2 st = 2.0 * uv - half2(1.0, 1.0); |
|||
InfinitePlane plane = WorldPlane(i.screenPosition, i.viewDir); |
|||
float3 normal = half3(0.0, 1.0, 0.0); |
|||
float asp = _ScreenParams.x / _ScreenParams.y; |
|||
|
|||
float2 st_adj = float2(st.x * asp, st.y); |
|||
|
|||
// camera settings |
|||
//float dist = 2.0 + 0.5*sin(0.5*Time); |
|||
//float theta = 0.1230596391*_Time.y; |
|||
// float cx = dist * sin(theta); |
|||
// float cz = dist * cos(theta); |
|||
float3 cam_ori = float3(-_WorldSpaceCameraPos.x, _WorldSpaceCameraPos.y, _WorldSpaceCameraPos.z); |
|||
// vec3 cam_look = vec3(0.0, 0.50, 0.0); |
|||
float3 cam_dir = float3(viewDir.x, -viewDir.y, -viewDir.z); |
|||
|
|||
// over, up, norm basis vectors for camera |
|||
half zRot = radians(-_CameraRoll); |
|||
float3 cam_ovr = normalize(cross(cam_dir, half3(0, cos(zRot), sin(zRot)))); |
|||
float3 cam_uhp = normalize(cross(cam_ovr, cam_dir)); |
|||
|
|||
// scene |
|||
float3 po = 0; |
|||
float3 pd = half3(0.0, 1.0, 0.0); |
|||
|
|||
// ray |
|||
half3 ro = cam_ori; |
|||
// Depth |
|||
float3 depth = WaterDepth(plane.positionWS, 0.0, screenUV.xy); |
|||
float cam_dist = unity_CameraProjection._m11;//80 degrees = 1.2 |
|||
float3 rt = cam_ori + cam_dist*cam_dir; |
|||
rt += st_adj.x * cam_ovr; |
|||
rt += st_adj.y * cam_uhp; |
|||
half3 rd = normalize(rt - cam_ori); |
|||
|
|||
float3 hit; |
|||
int side = intersect_plane (ro, rd, po, pd, hit); |
|||
if(side == 0) |
|||
discard; |
|||
// Detail waves |
|||
DetailNormals(normal, DetailUVs(plane.positionWS * (1 / _Size), 1.0), waterFX, depth); |
|||
//half fog = pow(1-abs(rd.y), 20); |
|||
// plane |
|||
// - figure out UV on plane to sample texture |
|||
half3 dee = hit; |
|||
float tSize = 0.05; |
|||
float2 p_uv = float2(dot(dee, half3(1, 0, 0)) * tSize, dot(dee, half3(0, 0, 1)) * tSize); |
|||
/// |
|||
// sample the texture |
|||
half4 col = tex2D(_MainTex, p_uv); |
|||
// Lighting |
|||
Light mainLight = GetMainLight(TransformWorldToShadowCoord(plane.positionWS)); |
|||
half shadow = SoftShadows(screenUV, plane.positionWS); |
|||
half3 GI = SampleSH(normal); |
|||
|
|||
// SSS |
|||
half3 directLighting = dot(mainLight.direction, half3(0, 1, 0)) * mainLight.color; |
|||
directLighting += saturate(pow(dot(i.viewDir.xyz, -mainLight.direction) * 1, 3)) * 5 * mainLight.color; |
|||
half3 sss = directLighting * shadow + GI; |
|||
|
|||
half4 col = SAMPLE_TEXTURE2D(_SurfaceMap, sampler_SurfaceMap, plane.positionWS.xz); |
|||
|
|||
//re-construct depth |
|||
half3 camPos = _WorldSpaceCameraPos; |
|||
float a = _ProjectionParams.z / ( _ProjectionParams.z - _ProjectionParams.y ); |
|||
float b = _ProjectionParams.z * _ProjectionParams.y / ( _ProjectionParams.y - _ProjectionParams.z ); |
|||
float z = length(hit + half3(camPos.x, camPos.y + 1, -camPos.z)) / i.viewDir.w; |
|||
float d = a + b / z; |
|||
// apply fog |
|||
//UNITY_APPLY_FOG(i.fogCoord, col); |
|||
//return float4(col); |
|||
//outColor = half4(i.viewDir.xyz, 1); |
|||
outColor = half4(frac(p_uv), frac(1-d), 1); |
|||
outDepth = 1-d; |
|||
half lighting = dot(normal, mainLight.direction); |
|||
|
|||
// Fresnel |
|||
half fresnelTerm = CalculateFresnelTerm(normal, i.viewDir.xyz); |
|||
|
|||
BRDFData brdfData; |
|||
InitializeBRDFData(half3(0, 0, 0), 0, half3(1, 1, 1), 0.95, 1, brdfData); |
|||
half3 spec = DirectBDRF(brdfData, normal, mainLight.direction, i.viewDir.xyz) * shadow * mainLight.color; |
|||
|
|||
float tempdepth = 2; |
|||
sss *= Scattering(depth.x); |
|||
|
|||
// Reflections |
|||
half3 reflection = SampleReflections(normal, i.viewDir.xyz, screenUV.xy, 0.0); |
|||
|
|||
// Refraction |
|||
half3 refraction = Refraction(screenUV, depth.x); |
|||
|
|||
// Do compositing |
|||
half3 comp = lerp(refraction, reflection, fresnelTerm) + sss + spec; //lerp(refraction, color + reflection + foam, 1-saturate(1-depth.x * 25)); |
|||
|
|||
|
|||
//outColor = half4(reflection * fresnelTerm + spec, 1); |
|||
outColor = half4(comp, 1); |
|||
outDepth = 1-plane.depth; |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: b4f405d8cbbb84fb393bf315b438a2bf |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
1001
Assets/scenes/Testing/InfiniteWater.unity
文件差异内容过多而无法显示
查看文件
文件差异内容过多而无法显示
查看文件
|
|||
fileFormatVersion: 2 |
|||
guid: a4f30a5533dd641a082edd674898ac23 |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!850595691 &4890085278179872738 |
|||
LightingSettings: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_Name: InfiniteWaterSettings |
|||
serializedVersion: 2 |
|||
m_GIWorkflowMode: 1 |
|||
m_EnableBakedLightmaps: 0 |
|||
m_EnableRealtimeLightmaps: 0 |
|||
m_RealtimeEnvironmentLighting: 1 |
|||
m_BounceScale: 1 |
|||
m_AlbedoBoost: 1 |
|||
m_IndirectOutputScale: 1 |
|||
m_UsingShadowmask: 0 |
|||
m_BakeBackend: 1 |
|||
m_LightmapMaxSize: 1024 |
|||
m_BakeResolution: 2 |
|||
m_Padding: 2 |
|||
m_TextureCompression: 1 |
|||
m_AO: 0 |
|||
m_AOMaxDistance: 1 |
|||
m_CompAOExponent: 1 |
|||
m_CompAOExponentDirect: 0 |
|||
m_ExtractAO: 0 |
|||
m_MixedBakeMode: 1 |
|||
m_LightmapsBakeMode: 1 |
|||
m_FilterMode: 1 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_ExportTrainingData: 0 |
|||
m_TrainingDataDestination: TrainingData |
|||
m_RealtimeResolution: 2 |
|||
m_ForceWhiteAlbedo: 0 |
|||
m_ForceUpdates: 0 |
|||
m_FinalGather: 0 |
|||
m_FinalGatherRayCount: 256 |
|||
m_FinalGatherFiltering: 1 |
|||
m_PVRCulling: 1 |
|||
m_PVRSampling: 1 |
|||
m_PVRDirectSampleCount: 32 |
|||
m_PVRSampleCount: 500 |
|||
m_PVREnvironmentSampleCount: 500 |
|||
m_PVREnvironmentReferencePointCount: 2048 |
|||
m_LightProbeSampleCountMultiplier: 4 |
|||
m_PVRBounces: 2 |
|||
m_PVRRussianRouletteStartBounce: 2 |
|||
m_PVREnvironmentMIS: 0 |
|||
m_PVRFilteringMode: 2 |
|||
m_PVRDenoiserTypeDirect: 0 |
|||
m_PVRDenoiserTypeIndirect: 0 |
|||
m_PVRDenoiserTypeAO: 0 |
|||
m_PVRFilterTypeDirect: 0 |
|||
m_PVRFilterTypeIndirect: 0 |
|||
m_PVRFilterTypeAO: 0 |
|||
m_PVRFilteringGaussRadiusDirect: 1 |
|||
m_PVRFilteringGaussRadiusIndirect: 5 |
|||
m_PVRFilteringGaussRadiusAO: 2 |
|||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5 |
|||
m_PVRFilteringAtrousPositionSigmaIndirect: 2 |
|||
m_PVRFilteringAtrousPositionSigmaAO: 1 |
|
|||
fileFormatVersion: 2 |
|||
guid: 7f5ac48ec97c24be88bc660606a84025 |
|||
NativeFormatImporter: |
|||
externalObjects: {} |
|||
mainObjectFileID: 0 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
#ifndef INFINITE_WATER_INCLUDED |
|||
#define INFINITE_WATER_INCLUDED |
|||
|
|||
#define EPSILON 0.00001 |
|||
|
|||
float _CameraRoll; |
|||
float _Size; |
|||
|
|||
struct InfinitePlane |
|||
{ |
|||
float3 hit; |
|||
float3 positionWS; |
|||
float depth; |
|||
}; |
|||
|
|||
// ray-plane intersection test |
|||
// @return side of plane hit |
|||
// 0 : no hit |
|||
// 1 : front |
|||
// 2 : back |
|||
int intersect_plane (float3 ro, float3 rd, float3 po, float3 pd, out float3 hit) |
|||
{ |
|||
float D = dot(po, pd); // re-parameterize plane to normal + distance |
|||
float tn = D - dot(ro, pd); // ray pos w.r.t. plane (front, back, on) |
|||
float td = dot (rd, pd); // ray ori w.r.t. plane (towards, away, parallel) |
|||
|
|||
if (td > -EPSILON && td < EPSILON) return 0; // parallel to plane |
|||
|
|||
float t = tn / td; // dist along ray to hit |
|||
if (t < 0.0) return 0; // plane lies behind ray |
|||
hit = ro + t * rd; // got a hit |
|||
return (tn > 0.0) ? 2 : 1; // which side of the plane? |
|||
} |
|||
|
|||
InfinitePlane WorldPlane(float4 positionSS, float4 viewDirection) |
|||
{ |
|||
InfinitePlane output; |
|||
|
|||
float4 p = positionSS; |
|||
float2 uv = p.xy / p.w; // [0, 1] |
|||
half2 st = 2.0 * uv - half2(1.0, 1.0); |
|||
float asp = _ScreenParams.x / _ScreenParams.y; |
|||
float2 st_adj = float2(st.x * asp, st.y); |
|||
|
|||
// camera settings |
|||
float3 cameraPosition = GetCameraPositionWS(); |
|||
float3 cam_ori = float3(-cameraPosition.x, cameraPosition.y, cameraPosition.z); |
|||
float3 cam_dir = float3(viewDirection.x, -viewDirection.y, -viewDirection.z); |
|||
|
|||
// over, up, norm basis vectors for camera |
|||
half zRot = radians(-_CameraRoll); |
|||
float3 cam_ovr = normalize(cross(cam_dir, half3(0, cos(zRot), sin(zRot)))); |
|||
float3 cam_uhp = normalize(cross(cam_ovr, cam_dir)); |
|||
|
|||
// scene |
|||
float3 planeOrigin = 0; |
|||
float3 planeDirection = half3(0.0, 1.0, 0.0); |
|||
|
|||
// ray |
|||
half3 rayOrigin = cam_ori; |
|||
float cam_dist = unity_CameraProjection._m11; |
|||
float3 rayTransform = cam_ori + cam_dist*cam_dir; |
|||
rayTransform += st_adj.x * cam_ovr; |
|||
rayTransform += st_adj.y * cam_uhp; |
|||
half3 rayDirection = normalize(rayTransform - cam_ori); |
|||
|
|||
int side = intersect_plane (rayOrigin, rayDirection, planeOrigin, planeDirection, output.hit); |
|||
if(side == 0) |
|||
discard; |
|||
|
|||
// plane |
|||
output.positionWS = float3(-dot(output.hit, half3(1, 0, 0)), 0.0, dot(output.hit, half3(0, 0, 1))); |
|||
|
|||
// re-construct depth |
|||
float4 projParams = _ProjectionParams; |
|||
float a = projParams.z / ( projParams.z - projParams.y ); |
|||
float b = projParams.z * projParams.y / ( projParams.y - projParams.z ); |
|||
float z = length(output.hit + half3(cameraPosition.x, cameraPosition.y + 1, -cameraPosition.z)) / viewDirection.w; |
|||
output.depth = a + b / z; |
|||
|
|||
return output; |
|||
} |
|||
|
|||
#endif //INFINITE_WATER_INCLUDED |
|
|||
fileFormatVersion: 2 |
|||
guid: c67580370dc784f49b5c62b60d49bd01 |
|||
ShaderImporter: |
|||
externalObjects: {} |
|||
defaultTextures: [] |
|||
nonModifiableTextures: [] |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
7
Assets/scenes/Testing/InfiniteWater/LightingData.asset
文件差异内容过多而无法显示
查看文件
文件差异内容过多而无法显示
查看文件
|
|||
fileFormatVersion: 2 |
|||
guid: 0de485ef7f9c14719b84c7baa20bbadc |
|||
NativeFormatImporter: |
|||
externalObjects: {} |
|||
mainObjectFileID: 25800000 |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: ec4a32cf44ee94444ba8f62782a96742 |
|||
TextureImporter: |
|||
fileIDToRecycleName: |
|||
2186277476908879412: ImportLogs |
|||
externalObjects: {} |
|||
serializedVersion: 5 |
|||
mipmaps: |
|||
mipMapMode: 0 |
|||
enableMipMap: 1 |
|||
sRGBTexture: 0 |
|||
linearTexture: 0 |
|||
fadeOut: 0 |
|||
borderMipMap: 0 |
|||
mipMapsPreserveCoverage: 0 |
|||
alphaTestReferenceValue: 0.5 |
|||
mipMapFadeDistanceStart: 1 |
|||
mipMapFadeDistanceEnd: 3 |
|||
bumpmap: |
|||
convertToNormalMap: 0 |
|||
externalNormalMap: 0 |
|||
heightScale: 0.25 |
|||
normalMapFilter: 0 |
|||
isReadable: 0 |
|||
grayScaleToAlpha: 0 |
|||
generateCubemap: 6 |
|||
cubemapConvolution: 0 |
|||
seamlessCubemap: 0 |
|||
textureFormat: 1 |
|||
maxTextureSize: 2048 |
|||
textureSettings: |
|||
serializedVersion: 2 |
|||
filterMode: 1 |
|||
aniso: 3 |
|||
mipBias: 0 |
|||
wrapU: 1 |
|||
wrapV: 1 |
|||
wrapW: 1 |
|||
nPOTScale: 1 |
|||
lightmap: 0 |
|||
compressionQuality: 50 |
|||
spriteMode: 0 |
|||
spriteExtrude: 1 |
|||
spriteMeshType: 1 |
|||
alignment: 0 |
|||
spritePivot: {x: 0.5, y: 0.5} |
|||
spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
|||
spritePixelsToUnits: 100 |
|||
alphaUsage: 1 |
|||
alphaIsTransparency: 0 |
|||
spriteTessellationDetail: -1 |
|||
textureType: 0 |
|||
textureShape: 1 |
|||
singleChannelComponent: 0 |
|||
maxTextureSizeSet: 0 |
|||
compressionQualitySet: 0 |
|||
textureFormatSet: 0 |
|||
platformSettings: |
|||
- serializedVersion: 2 |
|||
buildTarget: DefaultTexturePlatform |
|||
maxTextureSize: 2048 |
|||
resizeAlgorithm: 0 |
|||
textureFormat: -1 |
|||
textureCompression: 1 |
|||
compressionQuality: 50 |
|||
crunchedCompression: 0 |
|||
allowsAlphaSplitting: 0 |
|||
overridden: 0 |
|||
androidETC2FallbackOverride: 0 |
|||
spriteSheet: |
|||
serializedVersion: 2 |
|||
sprites: [] |
|||
outline: [] |
|||
physicsShape: [] |
|||
bones: [] |
|||
spriteID: |
|||
vertices: [] |
|||
indices: |
|||
edges: [] |
|||
weights: [] |
|||
spritePackingTag: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
v/1 channels chlist I A B G R compression compression dataWindow box2i � � displayWindow box2i � � lineOrder lineOrder pixelAspectRatio float �?screenWindowCenter v2f screenWindowWidth float �? � C � � &
+ 0, � � � � � AA����_�����������_�����������_�����������_�������J�%G���Q����x�<u�����_�����������_�����������_�����������_������Q���Tx�<�<�<�<��_�����������_�����������_�����������_���������G���Q���Txj<5�
��_�����������_�����������_�����������_��������� � � � � � AA����_�����������_�����������_�����������_�������J�%G���Q����x�<u�����_�����������_�����������_�����������_������Q���Tx�<�<�<�<��_�����������_�����������_�����������_���������G���Q���Txj<5�
��_�����������_�����������_�����������_���������@ � � �� @ / |
|||
|