浏览代码
Merge pull request #21 from Unity-Technologies/LayeredLitShader
Merge pull request #21 from Unity-Technologies/LayeredLitShader
Refactor LayeredLit.Shader/main
GitHub
8 年前
当前提交
85b19946
共有 14 个文件被更改,包括 1176 次插入 和 743 次删除
-
8Assets/ScriptableRenderLoop/HDRenderLoop/Lighting/TilePass/TilePassLoop.hlsl
-
286Assets/ScriptableRenderLoop/HDRenderLoop/Material/LayeredLit/Editor/LayeredLitUI.cs
-
216Assets/ScriptableRenderLoop/HDRenderLoop/Material/LayeredLit/LayeredLit.shader
-
272Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/Editor/LitUI.cs
-
66Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/Lit.shader
-
627Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/LitData.hlsl
-
24Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/LitSharePass.hlsl
-
5Assets/ScriptableRenderLoop/HDRenderLoop/ShaderVariables.hlsl
-
23Assets/ScriptableRenderLoop/ShaderLibrary/CommonMaterial.hlsl
-
2ProjectSettings/ProjectVersion.txt
-
232Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/LitSurfaceData.hlsl
-
9Assets/ScriptableRenderLoop/HDRenderLoop/Material/Lit/LitSurfaceData.hlsl.meta
-
141Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Chrome.mat
-
8Assets/TestScenes/HDTest/Material/HDRenderLoopMaterials/Chrome.mat.meta
|
|||
m_EditorVersion: 5.6.0a4 |
|||
m_EditorVersion: 5.6.0a5 |
|
|||
void ADD_IDX(ComputeLayerTexCoord)(FragInput input, bool isTriplanar, inout LayerTexCoord layerTexCoord) |
|||
{ |
|||
// TODO: Do we want to manage local or world triplanar/planar |
|||
//float3 position = localTriplanar ? TransformWorldToObject(input.positionWS) : input.positionWS; |
|||
float3 position = input.positionWS; |
|||
position *= ADD_IDX(_TexWorldScale); |
|||
|
|||
// Handle uv0, uv1 and plnar XZ coordinate based on _CoordWeight weight (exclusif 0..1) |
|||
ADD_IDX(layerTexCoord.base).uv = ADD_IDX(_UVMappingMask).x * input.texCoord0 + |
|||
ADD_IDX(_UVMappingMask).y * input.texCoord1 + |
|||
ADD_IDX(_UVMappingMask).z * input.texCoord3 + |
|||
ADD_IDX(_UVMappingMask).w * position.xz; |
|||
|
|||
float2 uvDetails = ADD_IDX(_UVDetailsMappingMask).x * input.texCoord0 + |
|||
ADD_IDX(_UVDetailsMappingMask).y * input.texCoord1 + |
|||
ADD_IDX(_UVDetailsMappingMask).z * input.texCoord3 + |
|||
// Note that if base is planar, detail map is planar |
|||
ADD_IDX(_UVMappingMask).w * position.xz; |
|||
|
|||
ADD_IDX(layerTexCoord.details).uv = TRANSFORM_TEX(uvDetails, ADD_IDX(_DetailMap)); |
|||
|
|||
// triplanar |
|||
ADD_IDX(layerTexCoord.base).isTriplanar = isTriplanar; |
|||
|
|||
ADD_IDX(layerTexCoord.base).uvYZ = position.yz; |
|||
ADD_IDX(layerTexCoord.base).uvZX = position.zx; |
|||
ADD_IDX(layerTexCoord.base).uvXY = position.xy; |
|||
|
|||
ADD_IDX(layerTexCoord.details).isTriplanar = isTriplanar; |
|||
|
|||
ADD_IDX(layerTexCoord.details).uvYZ = TRANSFORM_TEX(position.yz, ADD_IDX(_DetailMap)); |
|||
ADD_IDX(layerTexCoord.details).uvZX = TRANSFORM_TEX(position.zx, ADD_IDX(_DetailMap)); |
|||
ADD_IDX(layerTexCoord.details).uvXY = TRANSFORM_TEX(position.xy, ADD_IDX(_DetailMap)); |
|||
} |
|||
|
|||
void ADD_IDX(ApplyDisplacement)(inout FragInput input, inout LayerTexCoord layerTexCoord) |
|||
{ |
|||
#ifdef _HEIGHTMAP |
|||
#ifndef _HEIGHTMAP_AS_DISPLACEMENT |
|||
// Transform view vector in tangent space |
|||
// Hope the compiler can optimize this in case of multiple layer |
|||
float3 V = GetWorldSpaceNormalizeViewDir(input.positionWS); |
|||
float3 viewDirTS = TransformWorldToTangent(V, input.tangentToWorld); |
|||
float height = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_HeightMap), ADD_ZERO_IDX(sampler_HeightMap), ADD_IDX(layerTexCoord.base)).r * ADD_IDX(_HeightScale) + ADD_IDX(_HeightBias); |
|||
float2 offset = ParallaxOffset(viewDirTS, height); |
|||
|
|||
ADD_IDX(layerTexCoord.base).uv += offset; |
|||
ADD_IDX(layerTexCoord.base).uvYZ += offset; |
|||
ADD_IDX(layerTexCoord.base).uvZX += offset; |
|||
ADD_IDX(layerTexCoord.base).uvXY += offset; |
|||
|
|||
ADD_IDX(layerTexCoord.details).uv += offset; |
|||
ADD_IDX(layerTexCoord.details).uvYZ += offset; |
|||
ADD_IDX(layerTexCoord.details).uvZX += offset; |
|||
ADD_IDX(layerTexCoord.details).uvXY += offset; |
|||
|
|||
// Only modify tex coord for first layer, this will be use by for builtin data (like lightmap) |
|||
if (LAYER_INDEX == 0) |
|||
{ |
|||
input.texCoord0 += offset; |
|||
input.texCoord1 += offset; |
|||
input.texCoord2 += offset; |
|||
input.texCoord3 += offset; |
|||
} |
|||
#endif |
|||
#endif |
|||
} |
|||
|
|||
// Return opacity |
|||
float ADD_IDX(GetSurfaceData)(FragInput input, LayerTexCoord layerTexCoord, out SurfaceData surfaceData) |
|||
{ |
|||
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A |
|||
float alpha = ADD_IDX(_BaseColor).a; |
|||
#else |
|||
float alpha = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_BaseColorMap), ADD_ZERO_IDX(sampler_BaseColorMap), ADD_IDX(layerTexCoord.base)).a * ADD_IDX(_BaseColor).a; |
|||
#endif |
|||
|
|||
// Perform alha test very early to save performance (a killed pixel will not sample textures) |
|||
#ifdef _ALPHATEST_ON |
|||
clip(alpha - _AlphaCutoff); |
|||
#endif |
|||
|
|||
#ifdef _DETAIL_MAP |
|||
float detailMask = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_DetailMask), ADD_ZERO_IDX(sampler_DetailMask), ADD_IDX(layerTexCoord.base)).b; |
|||
float2 detailAlbedoAndSmoothness = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_DetailMap), ADD_ZERO_IDX(sampler_DetailMap), ADD_IDX(layerTexCoord.details)).rb; |
|||
float detailAlbedo = detailAlbedoAndSmoothness.r; |
|||
float detailSmoothness = detailAlbedoAndSmoothness.g; |
|||
#ifdef _DETAIL_MAP_WITH_NORMAL |
|||
// Resample the detail map but this time for the normal map. This call should be optimize by the compiler |
|||
// We split both call due to trilinear mapping |
|||
float3 detailNormalTS = SAMPLE_LAYER_NORMALMAP_AG(ADD_IDX(_DetailMap), ADD_ZERO_IDX(sampler_DetailMap), ADD_IDX(layerTexCoord.details)); |
|||
//float detailAO = 0.0; |
|||
#else |
|||
// TODO: Use heightmap as a derivative with Morten Mikklesen approach, how this work with our abstraction and triplanar ? |
|||
float3 detailNormalTS = float3(0.0, 0.0, 1.0); |
|||
//float detailAO = detail.b; |
|||
#endif |
|||
#endif |
|||
|
|||
surfaceData.baseColor = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_BaseColorMap), ADD_ZERO_IDX(sampler_BaseColorMap), ADD_IDX(layerTexCoord.base)).rgb * ADD_IDX(_BaseColor).rgb; |
|||
#ifdef _DETAIL_MAP |
|||
surfaceData.baseColor *= LerpWhiteTo(2.0 * saturate(detailAlbedo * ADD_IDX(_DetailAlbedoScale)), detailMask); |
|||
#endif |
|||
|
|||
#ifdef _SPECULAROCCLUSIONMAP |
|||
// TODO: Do something. For now just take alpha channel |
|||
surfaceData.specularOcclusion = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_SpecularOcclusionMap), ADD_ZERO_IDX(sampler_SpecularOcclusionMap), ADD_IDX(layerTexCoord.base)).a; |
|||
#else |
|||
// Horizon Occlusion for Normal Mapped Reflections: http://marmosetco.tumblr.com/post/81245981087 |
|||
//surfaceData.specularOcclusion = saturate(1.0 + horizonFade * dot(r, input.tangentToWorld[2].xyz); |
|||
// smooth it |
|||
//surfaceData.specularOcclusion *= surfaceData.specularOcclusion; |
|||
surfaceData.specularOcclusion = 1.0; |
|||
#endif |
|||
|
|||
// TODO: think about using BC5 |
|||
float3 vertexNormalWS = input.tangentToWorld[2].xyz; |
|||
|
|||
#ifdef _NORMALMAP |
|||
#ifdef _NORMALMAP_TANGENT_SPACE |
|||
float3 normalTS = SAMPLE_LAYER_NORMALMAP(ADD_IDX(_NormalMap), ADD_ZERO_IDX(sampler_NormalMap), ADD_IDX(layerTexCoord.base)); |
|||
#ifdef _DETAIL_MAP |
|||
normalTS = lerp(normalTS, BlendNormal(normalTS, detailNormalTS), detailMask); |
|||
#endif |
|||
surfaceData.normalWS = TransformTangentToWorld(normalTS, input.tangentToWorld); |
|||
#else // Object space |
|||
// TODO: We are suppose to do * 2 - 1 here. how to deal with triplanar... |
|||
float3 normalOS = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_NormalMap), ADD_ZERO_IDX(sampler_NormalMap), ADD_IDX(layerTexCoord.base)).rgb; |
|||
surfaceData.normalWS = TransformObjectToWorldDir(normalOS); |
|||
#ifdef _DETAIL_MAP |
|||
float3 detailNormalWS = TransformTangentToWorld(detailNormalTS, input.tangentToWorld); |
|||
surfaceData.normalWS = lerp(surfaceData.normalWS, BlendNormal(surfaceData.normalWS, detailNormalWS), detailMask); |
|||
#endif |
|||
#endif |
|||
#else |
|||
surfaceData.normalWS = vertexNormalWS; |
|||
#endif |
|||
|
|||
#if defined(_DOUBLESIDED_LIGHTING_FLIP) || defined(_DOUBLESIDED_LIGHTING_MIRROR) |
|||
#ifdef _DOUBLESIDED_LIGHTING_FLIP |
|||
float3 oppositeNormalWS = -surfaceData.normalWS; |
|||
#else |
|||
// Mirror the normal with the plane define by vertex normal |
|||
float3 oppositeNormalWS = reflect(surfaceData.normalWS, vertexNormalWS); |
|||
#endif |
|||
// TODO : Test if GetOdddNegativeScale() is necessary here in case of normal map, as GetOdddNegativeScale is take into account in CreateTangentToWorld(); |
|||
surfaceData.normalWS = input.isFrontFace ? |
|||
(GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS) : |
|||
(-GetOdddNegativeScale() >= 0.0 ? surfaceData.normalWS : oppositeNormalWS); |
|||
#endif |
|||
|
|||
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A |
|||
surfaceData.perceptualSmoothness = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_BaseColorMap), ADD_ZERO_IDX(sampler_BaseColorMap), ADD_IDX(layerTexCoord.base)).a; |
|||
#elif defined(_MASKMAP) |
|||
surfaceData.perceptualSmoothness = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_MaskMap), ADD_ZERO_IDX(sampler_MaskMap), ADD_IDX(layerTexCoord.base)).a; |
|||
#else |
|||
surfaceData.perceptualSmoothness = 1.0; |
|||
#endif |
|||
surfaceData.perceptualSmoothness *= _Smoothness; |
|||
#ifdef _DETAIL_MAP |
|||
surfaceData.perceptualSmoothness *= LerpWhiteTo(2.0 * saturate(detailSmoothness * ADD_IDX(_DetailSmoothnessScale)), detailMask); |
|||
#endif |
|||
|
|||
// MaskMap is Metallic, Ambient Occlusion, (Optional) - emissive Mask, Optional - Smoothness (in alpha) |
|||
#ifdef _MASKMAP |
|||
surfaceData.metallic = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_MaskMap), ADD_ZERO_IDX(sampler_MaskMap), ADD_IDX(layerTexCoord.base)).r; |
|||
surfaceData.ambientOcclusion = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_MaskMap), ADD_ZERO_IDX(sampler_MaskMap), ADD_IDX(layerTexCoord.base)).g; |
|||
#else |
|||
surfaceData.metallic = 1.0; |
|||
surfaceData.ambientOcclusion = 1.0; |
|||
#endif |
|||
surfaceData.metallic *= _Metallic; |
|||
|
|||
// This part of the code is not used in case of layered shader but we keep the same macro system for simplicity |
|||
#if !defined(LAYERED_LIT_SHADER) |
|||
|
|||
surfaceData.materialId = 0; // TODO |
|||
|
|||
// TODO: think about using BC5 |
|||
#ifdef _TANGENTMAP |
|||
#ifdef _NORMALMAP_TANGENT_SPACE // Normal and tangent use same space |
|||
float3 tangentTS = SAMPLE_LAYER_NORMALMAP(ADD_IDX(_TangentMap), ADD_ZERO_IDX(sampler_TangentMap), ADD_IDX(layerTexCoord.base))); |
|||
surfaceData.tangentWS = TransformTangentToWorld(tangentTS, input.tangentToWorld); |
|||
#else // Object space (TODO: We need to apply the world rotation here! - Require to pass world transform) |
|||
surfaceData.tangentWS = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_TangentMap), ADD_ZERO_IDX(sampler_TangentMap), ADD_IDX(layerTexCoord.base)).rgb; |
|||
#endif |
|||
#else |
|||
surfaceData.tangentWS = input.tangentToWorld[0].xyz; |
|||
#endif |
|||
// TODO: Is there anything todo regarding flip normal but for the tangent ? |
|||
|
|||
#ifdef _ANISOTROPYMAP |
|||
surfaceData.anisotropy = SAMPLE_LAYER_TEXTURE2D(ADD_IDX(_AnisotropyMap), ADD_ZERO_IDX(sampler_AnisotropyMap), ADD_IDX(layerTexCoord.base)).g; |
|||
#else |
|||
surfaceData.anisotropy = 1.0; |
|||
#endif |
|||
surfaceData.anisotropy *= _Anisotropy; |
|||
|
|||
surfaceData.specular = 0.04; |
|||
|
|||
surfaceData.subSurfaceRadius = 1.0; |
|||
surfaceData.thickness = 0.0; |
|||
surfaceData.subSurfaceProfile = 0; |
|||
|
|||
surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0); |
|||
surfaceData.coatPerceptualSmoothness = 1.0; |
|||
surfaceData.specularColor = float3(0.0, 0.0, 0.0); |
|||
|
|||
#else // #if !defined(LAYERED_LIT_SHADER) |
|||
|
|||
// Mandatory to setup value to keep compiler quiet |
|||
|
|||
// Layered shader only support materialId 0 |
|||
surfaceData.materialId = 0; |
|||
|
|||
surfaceData.tangentWS = input.tangentToWorld[0].xyz; |
|||
surfaceData.anisotropy = 0; |
|||
surfaceData.specular = 0.04; |
|||
|
|||
surfaceData.subSurfaceRadius = 1.0; |
|||
surfaceData.thickness = 0.0; |
|||
surfaceData.subSurfaceProfile = 0; |
|||
|
|||
surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0); |
|||
surfaceData.coatPerceptualSmoothness = 1.0; |
|||
surfaceData.specularColor = float3(0.0, 0.0, 0.0); |
|||
|
|||
#endif // #if !defined(LAYERED_LIT_SHADER) |
|||
|
|||
return alpha; |
|||
} |
|||
|
|
|||
fileFormatVersion: 2 |
|||
guid: b24a503f5b489bb4896bc43d861f7f49 |
|||
timeCreated: 1479984801 |
|||
licenseType: Pro |
|||
ShaderImporter: |
|||
defaultTextures: [] |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!21 &2100000 |
|||
Material: |
|||
serializedVersion: 6 |
|||
m_ObjectHideFlags: 0 |
|||
m_PrefabParentObject: {fileID: 0} |
|||
m_PrefabInternal: {fileID: 0} |
|||
m_Name: Chrome |
|||
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} |
|||
m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DETAIL_MAP_WITH_NORMAL _DISTORTIONDEPTHTEST_OFF |
|||
_DISTORTIONONLY_OFF _EMISSION _NORMALMAP_TANGENT_SPACE |
|||
m_LightmapFlags: 1 |
|||
m_CustomRenderQueue: -1 |
|||
stringTagMap: {} |
|||
m_SavedProperties: |
|||
serializedVersion: 3 |
|||
m_TexEnvs: |
|||
- _AnisotropyMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _BaseColorMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _BumpMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _DetailAlbedoMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _DetailMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _DetailMask: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _DetailNormalMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _EmissionMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _EmissiveColorMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _HeightMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _MainTex: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _MaskMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _MetallicGlossMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _NormalMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _OcclusionMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _ParallaxMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _SpecularOcclusionMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _SubSurfaceRadiusMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- _TangentMap: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
m_Floats: |
|||
- _AlphaCutoff: 0.5 |
|||
- _AlphaCutoffEnable: 0 |
|||
- _Anisotropy: 0 |
|||
- _BlendMode: 0 |
|||
- _BumpScale: 1 |
|||
- _CullMode: 2 |
|||
- _Cutoff: 0.5 |
|||
- _DetailAOScale: 1 |
|||
- _DetailAlbedoScale: 1 |
|||
- _DetailHeightScale: 1 |
|||
- _DetailMapMode: 0 |
|||
- _DetailNormalMapScale: 1 |
|||
- _DetailNormalScale: 1 |
|||
- _DetailSmoothnessScale: 1 |
|||
- _DistortionDepthTest: 0 |
|||
- _DistortionOnly: 0 |
|||
- _DoubleSidedMode: 0 |
|||
- _DstBlend: 0 |
|||
- _EmissiveColorMode: 1 |
|||
- _EmissiveIntensity: 0 |
|||
- _GlossMapScale: 1 |
|||
- _Glossiness: 0.5 |
|||
- _GlossyReflections: 1 |
|||
- _HeightBias: 0 |
|||
- _HeightMapMode: 0 |
|||
- _HeightScale: 1 |
|||
- _MaterialId: 0 |
|||
- _Metallic: 1 |
|||
- _Mode: 0 |
|||
- _NormalMapSpace: 0 |
|||
- _OcclusionStrength: 1 |
|||
- _Parallax: 0.02 |
|||
- _Smoothness: 1 |
|||
- _SmoothnessTextureChannel: 0 |
|||
- _SpecularHighlights: 1 |
|||
- _SrcBlend: 1 |
|||
- _SubSurfaceRadius: 0 |
|||
- _SurfaceType: 0 |
|||
- _UVDetail: 0 |
|||
- _UVSec: 0 |
|||
- _ZWrite: 1 |
|||
m_Colors: |
|||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1} |
|||
- _Color: {r: 1, g: 1, b: 1, a: 1} |
|||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} |
|||
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} |
|
|||
fileFormatVersion: 2 |
|||
guid: e2a91f1184ed1c9429dc2c4385e3c6fe |
|||
timeCreated: 1479808235 |
|||
licenseType: Pro |
|||
NativeFormatImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
撰写
预览
正在加载...
取消
保存
Reference in new issue