浏览代码
Change UnityStandard to HDRenderLoop
Change UnityStandard to HDRenderLoop
Change name of the renderloop to HD Standard Use vertex normal for now to test light/main
当前提交
902def74
共有 28 个文件被更改,包括 607 次插入 和 350 次删除
-
5Assets/ScriptableRenderLoop/ShaderLibrary/Common.hlsl
-
265Assets/TestScenes/ForwardRenderLoop/ForwardRenderLoop.unity
-
2Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/LightDefinition.cs
-
22Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/TemplateDisneyGGX.hlsl
-
4Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Material/DisneyGGX.hlsl
-
42Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/Lighting.hlsl
-
9Assets/ScriptableRenderLoop/HDRenderLoop.meta
-
13Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset
-
8Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.asset.meta
-
315Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs
-
12Assets/ScriptableRenderLoop/HDRenderLoop/HDRenderLoop.cs.meta
-
41Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl
-
8Assets/ScriptableRenderLoop/HDRenderLoop/Shaders/Lighting/LightingForward.hlsl.meta
-
160Assets/TestScenes/HDTest/Material/test.mat
-
9Assets/ScriptableRenderLoop/ShaderLibrary/ParticipatingMedia.meta
-
12Assets/ScriptableRenderLoop/UnityStandard/UnityStandardRenderLoop.cs.meta
-
13Assets/ScriptableRenderLoop/UnityStandard/UnityStandardRenderLoop.asset
-
8Assets/ScriptableRenderLoop/UnityStandard/UnityStandardRenderLoop.asset.meta
-
9Assets/ScriptableRenderLoop/UnityStandard.meta
-
0/Assets/TestScenes/HDTest.meta
-
0/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders.meta
-
0/Assets/ScriptableRenderLoop/HDRenderLoop/Shaders
-
0/Assets/TestScenes/HDTest/Material.meta
-
0/Assets/TestScenes/HDTest/Material/test.mat.meta
|
|||
fileFormatVersion: 2 |
|||
guid: efe43be6d4923e441a2d4b20b3783b7f |
|||
folderAsset: yes |
|||
timeCreated: 1474540060 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!114 &11400000 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_PrefabParentObject: {fileID: 0} |
|||
m_PrefabInternal: {fileID: 0} |
|||
m_GameObject: {fileID: 0} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 558064ecdbf6b6742892d699acb39aed, type: 3} |
|||
m_Name: HDRenderLoop |
|||
m_EditorClassIdentifier: |
|
|||
fileFormatVersion: 2 |
|||
guid: 2400b74f5ce370c4481e5dc417d03703 |
|||
timeCreated: 1474539935 |
|||
licenseType: Pro |
|||
NativeFormatImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using UnityEngine; |
|||
using System.Collections; |
|||
using UnityEngine.Rendering; |
|||
using System.Collections.Generic; |
|||
using System; |
|||
|
|||
using UnityEditor; |
|||
|
|||
namespace UnityEngine.ScriptableRenderLoop |
|||
{ |
|||
public class HDRenderLoop : ScriptableRenderLoop |
|||
{ |
|||
[MenuItem("Renderloop/CreateHDRenderLoop")] |
|||
static void CreateHDRenderLoop() |
|||
{ |
|||
var instance = ScriptableObject.CreateInstance<HDRenderLoop>(); |
|||
AssetDatabase.CreateAsset(instance, "Assets/HDRenderLoop.asset"); |
|||
} |
|||
|
|||
//[SerializeField]
|
|||
//ShadowSettings m_ShadowSettings = ShadowSettings.Default;
|
|||
//ShadowRenderPass m_ShadowPass;
|
|||
|
|||
static private ComputeBuffer m_punctualLightList; |
|||
public const int MAX_LIGHTS = 1024; |
|||
|
|||
|
|||
void OnEnable() |
|||
{ |
|||
Rebuild (); |
|||
} |
|||
|
|||
void OnValidate() |
|||
{ |
|||
Rebuild (); |
|||
} |
|||
|
|||
void ClearComputeBuffers() |
|||
{ |
|||
if (m_punctualLightList != null) |
|||
m_punctualLightList.Release(); |
|||
} |
|||
|
|||
void Rebuild() |
|||
{ |
|||
ClearComputeBuffers(); |
|||
|
|||
// m_ShadowPass = new ShadowRenderPass (m_ShadowSettings);
|
|||
m_punctualLightList = new ComputeBuffer(MAX_LIGHTS, System.Runtime.InteropServices.Marshal.SizeOf(typeof(PunctualLightData))); |
|||
} |
|||
|
|||
void OnDisable() |
|||
{ |
|||
m_punctualLightList.Release(); |
|||
} |
|||
|
|||
//---------------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
void UpdatePunctualLights(ActiveLight[] activeLights) |
|||
{ |
|||
int punctualLightCount = 0; |
|||
List<PunctualLightData> lights = new List<PunctualLightData>(); |
|||
|
|||
for (int lightIndex = 0; lightIndex < Math.Min(activeLights.Length, MAX_LIGHTS); lightIndex++) |
|||
{ |
|||
ActiveLight light = activeLights[lightIndex]; |
|||
if (light.lightType == LightType.Spot || light.lightType == LightType.Point) |
|||
{ |
|||
Matrix4x4 lightToWorld = light.localToWorld; |
|||
|
|||
PunctualLightData l = new PunctualLightData(); |
|||
|
|||
l.positionWS = lightToWorld.GetColumn(3); |
|||
l.invSqrAttenuationRadius = 1.0f / (light.range * light.range); |
|||
l.color = new Vec3(light.finalColor.r, light.finalColor.g, light.finalColor.b); |
|||
l.forward = lightToWorld.GetColumn(0); |
|||
l.up = lightToWorld.GetColumn(1); |
|||
l.right = lightToWorld.GetColumn(2); |
|||
|
|||
l.diffuseScale = 1.0f; |
|||
l.specularScale = 1.0f; |
|||
l.shadowDimmer = 1.0f; |
|||
|
|||
if (light.lightType == LightType.Spot) |
|||
{ |
|||
// TODO: Add support of cosine inner and outer for spot light to get nicer spotlight...
|
|||
float cosSpotOuterHalfAngle = 1.0f / light.invCosHalfSpotAngle; |
|||
float cosSpotInnerHalfAngle = cosSpotOuterHalfAngle; |
|||
|
|||
float val = Mathf.Max(0.001f, (cosSpotInnerHalfAngle - cosSpotOuterHalfAngle)); |
|||
l.angleScale = 1.0f / val; |
|||
l.angleOffset = -cosSpotOuterHalfAngle * l.angleScale; |
|||
} |
|||
else |
|||
{ |
|||
// 1.0f, 2.0f are neutral value allowing GetAngleAnttenuation in shader code to return 1.0
|
|||
l.angleScale = 1.0f; |
|||
l.angleOffset = 2.0f; |
|||
} |
|||
|
|||
lights.Add(l); |
|||
punctualLightCount++; |
|||
} |
|||
} |
|||
m_punctualLightList.SetData(lights.ToArray()); |
|||
|
|||
Shader.SetGlobalBuffer("g_punctualLightList", m_punctualLightList); |
|||
Shader.SetGlobalInt("g_punctualLightCount", punctualLightCount); |
|||
} |
|||
|
|||
void UpdateLightConstants(ActiveLight[] activeLights /*, ref ShadowOutput shadow */) |
|||
{ |
|||
/* |
|||
int nNumLightsIncludingTooMany = 0; |
|||
|
|||
int g_nNumLights = 0; |
|||
|
|||
Vector4[] g_vLightColor = new Vector4[ MAX_LIGHTS ]; |
|||
Vector4[] g_vLightPosition_flInvRadius = new Vector4[ MAX_LIGHTS ]; |
|||
Vector4[] g_vLightDirection = new Vector4[ MAX_LIGHTS ]; |
|||
Vector4[] g_vLightShadowIndex_vLightParams = new Vector4[ MAX_LIGHTS ]; |
|||
Vector4[] g_vLightFalloffParams = new Vector4[ MAX_LIGHTS ]; |
|||
Vector4[] g_vSpotLightInnersuterConeCosines = new Vector4[ MAX_LIGHTS ]; |
|||
Matrix4x4[] g_matWorldToShadow = new Matrix4x4[ MAX_LIGHTS * MAX_SHADOWMAP_PER_LIGHTS ]; |
|||
Vector4[] g_vDirShadowSplitSpheres = new Vector4[ MAX_DIRECTIONAL_SPLIT ]; |
|||
|
|||
for ( int nLight = 0; nLight < activeLights.Length; nLight++ ) |
|||
{ |
|||
|
|||
nNumLightsIncludingTooMany++; |
|||
if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) |
|||
continue; |
|||
|
|||
ActiveLight light = activeLights [nLight]; |
|||
LightType lightType = light.lightType; |
|||
Vector3 position = light.light.transform.position; |
|||
Vector3 lightDir = light.light.transform.forward.normalized; |
|||
AdditionalLightData additionalLightData = light.light.GetComponent<AdditionalLightData> (); |
|||
|
|||
// Setup shadow data arrays
|
|||
bool hasShadows = shadow.GetShadowSliceCountLightIndex (nLight) != 0; |
|||
|
|||
if ( lightType == LightType.Directional ) |
|||
{ |
|||
g_vLightColor[ g_nNumLights ] = light.finalColor; |
|||
g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( |
|||
position.x - ( lightDir.x * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), |
|||
position.y - ( lightDir.y * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), |
|||
position.z - ( lightDir.z * DIRECTIONAL_LIGHT_PULLBACK_DISTANCE ), |
|||
-1.0f ); |
|||
g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); |
|||
g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); |
|||
g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, float.MaxValue, (float)lightType ); |
|||
g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); |
|||
|
|||
if (hasShadows) |
|||
{ |
|||
for (int s = 0; s < MAX_DIRECTIONAL_SPLIT; ++s) |
|||
{ |
|||
g_vDirShadowSplitSpheres[s] = shadow.directionalShadowSplitSphereSqr[s]; |
|||
} |
|||
} |
|||
} |
|||
else if ( lightType == LightType.Point ) |
|||
{ |
|||
g_vLightColor[ g_nNumLights ] = light.finalColor; |
|||
|
|||
g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); |
|||
g_vLightDirection[ g_nNumLights ] = new Vector4( 0.0f, 0.0f, 0.0f ); |
|||
g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); |
|||
g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); |
|||
g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( 0.0f, -1.0f, 1.0f ); |
|||
} |
|||
else if ( lightType == LightType.Spot ) |
|||
{ |
|||
g_vLightColor[ g_nNumLights ] = light.finalColor; |
|||
g_vLightPosition_flInvRadius[ g_nNumLights ] = new Vector4( position.x, position.y, position.z, 1.0f / light.range ); |
|||
g_vLightDirection[ g_nNumLights ] = new Vector4( lightDir.x, lightDir.y, lightDir.z ); |
|||
g_vLightShadowIndex_vLightParams[ g_nNumLights ] = new Vector4( 0, 0, 1, 1 ); |
|||
g_vLightFalloffParams[ g_nNumLights ] = new Vector4( 1.0f, 0.0f, light.range * light.range, (float)lightType ); |
|||
|
|||
float flInnerConePercent = AdditionalLightData.GetInnerSpotPercent01(additionalLightData); |
|||
float spotAngle = light.light.spotAngle; |
|||
float flPhiDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * Mathf.Deg2Rad ), 0.0f, 1.0f ); // outer cone
|
|||
float flThetaDot = Mathf.Clamp( Mathf.Cos( spotAngle * 0.5f * flInnerConePercent * Mathf.Deg2Rad ), 0.0f, 1.0f ); // inner cone
|
|||
g_vSpotLightInnerOuterConeCosines[ g_nNumLights ] = new Vector4( flThetaDot, flPhiDot, 1.0f / Mathf.Max( 0.01f, flThetaDot - flPhiDot ) ); |
|||
|
|||
} |
|||
|
|||
if ( hasShadows ) |
|||
{ |
|||
// Enable shadows
|
|||
g_vLightShadowIndex_vLightParams[ g_nNumLights ].x = 1; |
|||
for(int s=0; s < shadow.GetShadowSliceCountLightIndex (nLight); ++s) |
|||
{ |
|||
int shadowSliceIndex = shadow.GetShadowSliceIndex (nLight, s); |
|||
g_matWorldToShadow [g_nNumLights * MAX_SHADOWMAP_PER_LIGHTS + s] = shadow.shadowSlices[shadowSliceIndex].shadowTransform.transpose; |
|||
} |
|||
} |
|||
|
|||
g_nNumLights++; |
|||
} |
|||
|
|||
// Warn if too many lights found
|
|||
if ( nNumLightsIncludingTooMany > MAX_LIGHTS ) |
|||
{ |
|||
if ( nNumLightsIncludingTooMany > m_nWarnedTooManyLights ) |
|||
{ |
|||
Debug.LogError( "ERROR! Found " + nNumLightsIncludingTooMany + " runtime lights! Valve renderer supports up to " + MAX_LIGHTS + |
|||
" active runtime lights at a time!\nDisabling " + ( nNumLightsIncludingTooMany - MAX_LIGHTS ) + " runtime light" + |
|||
( ( nNumLightsIncludingTooMany - MAX_LIGHTS ) > 1 ? "s" : "" ) + "!\n" ); |
|||
} |
|||
m_nWarnedTooManyLights = nNumLightsIncludingTooMany; |
|||
} |
|||
else |
|||
{ |
|||
if ( m_nWarnedTooManyLights > 0 ) |
|||
{ |
|||
m_nWarnedTooManyLights = 0; |
|||
Debug.Log( "SUCCESS! Found " + nNumLightsIncludingTooMany + " runtime lights which is within the supported number of lights, " + MAX_LIGHTS + ".\n\n" ); |
|||
} |
|||
} |
|||
|
|||
// Send constants to shaders
|
|||
Shader.SetGlobalInt( "g_nNumLights", g_nNumLights ); |
|||
|
|||
// New method for Unity 5.4 to set arrays of constants
|
|||
Shader.SetGlobalVectorArray( "g_vLightPosition_flInvRadius", g_vLightPosition_flInvRadius ); |
|||
Shader.SetGlobalVectorArray( "g_vLightColor", g_vLightColor ); |
|||
Shader.SetGlobalVectorArray( "g_vLightDirection", g_vLightDirection ); |
|||
Shader.SetGlobalVectorArray( "g_vLightShadowIndex_vLightParams", g_vLightShadowIndex_vLightParams ); |
|||
Shader.SetGlobalVectorArray( "g_vLightFalloffParams", g_vLightFalloffParams ); |
|||
Shader.SetGlobalVectorArray( "g_vSpotLightInnerOuterConeCosines", g_vSpotLightInnerOuterConeCosines ); |
|||
Shader.SetGlobalMatrixArray( "g_matWorldToShadow", g_matWorldToShadow ); |
|||
Shader.SetGlobalVectorArray( "g_vDirShadowSplitSpheres", g_vDirShadowSplitSpheres ); |
|||
|
|||
// Time
|
|||
#if ( UNITY_EDITOR )
|
|||
{ |
|||
Shader.SetGlobalFloat( "g_flTime", Time.realtimeSinceStartup ); |
|||
//Debug.Log( "Time " + Time.realtimeSinceStartup );
|
|||
} |
|||
#else
|
|||
{ |
|||
Shader.SetGlobalFloat( "g_flTime", Time.timeSinceLevelLoad ); |
|||
//Debug.Log( "Time " + Time.timeSinceLevelLoad );
|
|||
} |
|||
#endif
|
|||
|
|||
// PCF 3x3 Shadows
|
|||
float flTexelEpsilonX = 1.0f / m_ShadowSettings.shadowAtlasWidth; |
|||
float flTexelEpsilonY = 1.0f / m_ShadowSettings.shadowAtlasHeight; |
|||
Vector4 g_vShadow3x3PCFTerms0 = new Vector4( 20.0f / 267.0f, 33.0f / 267.0f, 55.0f / 267.0f, 0.0f ); |
|||
Vector4 g_vShadow3x3PCFTerms1 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, -flTexelEpsilonX, -flTexelEpsilonY ); |
|||
Vector4 g_vShadow3x3PCFTerms2 = new Vector4( flTexelEpsilonX, flTexelEpsilonY, 0.0f, 0.0f ); |
|||
Vector4 g_vShadow3x3PCFTerms3 = new Vector4( -flTexelEpsilonX, -flTexelEpsilonY, 0.0f, 0.0f ); |
|||
|
|||
Shader.SetGlobalVector( "g_vShadow3x3PCFTerms0", g_vShadow3x3PCFTerms0 ); |
|||
Shader.SetGlobalVector( "g_vShadow3x3PCFTerms1", g_vShadow3x3PCFTerms1 ); |
|||
Shader.SetGlobalVector( "g_vShadow3x3PCFTerms2", g_vShadow3x3PCFTerms2 ); |
|||
Shader.SetGlobalVector( "g_vShadow3x3PCFTerms3", g_vShadow3x3PCFTerms3 ); |
|||
*/ |
|||
} |
|||
|
|||
public override void Render(Camera[] cameras, RenderLoop renderLoop) |
|||
{ |
|||
// Set Frame constant buffer
|
|||
// TODO...
|
|||
|
|||
foreach (var camera in cameras) |
|||
{ |
|||
// Set camera constant buffer
|
|||
// TODO...
|
|||
|
|||
CullResults cullResults; |
|||
CullingParameters cullingParams; |
|||
if (!CullResults.GetCullingParameters (camera, out cullingParams)) |
|||
continue; |
|||
|
|||
//m_ShadowPass.UpdateCullingParameters (ref cullingParams);
|
|||
|
|||
cullResults = CullResults.Cull (ref cullingParams, renderLoop); |
|||
|
|||
//ShadowOutput shadows;
|
|||
//m_ShadowPass.Render (renderLoop, cullResults, out shadows);
|
|||
|
|||
renderLoop.SetupCameraProperties (camera); |
|||
|
|||
//UpdateLightConstants(cullResults.culledLights /*, ref shadows */);
|
|||
|
|||
UpdatePunctualLights(cullResults.culledLights); |
|||
|
|||
DrawRendererSettings settings = new DrawRendererSettings (cullResults, camera, new ShaderPassName("Forward")); |
|||
settings.rendererConfiguration = RendererConfiguration.ConfigureOneLightProbePerRenderer | RendererConfiguration.ConfigureReflectionProbesProbePerRenderer; |
|||
settings.sorting.sortOptions = SortOptions.SortByMaterialThenMesh; |
|||
|
|||
renderLoop.DrawRenderers (ref settings); |
|||
renderLoop.Submit (); |
|||
} |
|||
|
|||
// Post effects
|
|||
} |
|||
|
|||
#if UNITY_EDITOR
|
|||
public override UnityEditor.SupportedRenderingFeatures GetSupportedRenderingFeatures() |
|||
{ |
|||
var features = new UnityEditor.SupportedRenderingFeatures(); |
|||
|
|||
features.reflectionProbe = UnityEditor.SupportedRenderingFeatures.ReflectionProbe.Rotation; |
|||
|
|||
return features; |
|||
} |
|||
#endif
|
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 558064ecdbf6b6742892d699acb39aed |
|||
timeCreated: 1474539930 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
#ifndef UNITY_LIGHTING_FORWARD_INCLUDED |
|||
#define UNITY_LIGHTING_FORWARD_INCLUDED |
|||
|
|||
//----------------------------------------------------------------------------- |
|||
// Simple forward loop architecture |
|||
//----------------------------------------------------------------------------- |
|||
|
|||
StructuredBuffer<PunctualLightData> g_punctualLightList; |
|||
int g_punctualLightCount; |
|||
|
|||
// TODO: Think about how to apply Disney diffuse preconvolve on indirect diffuse => must be done during GBuffer layout! Else emissive will be fucked... |
|||
// That's mean we need to read DFG texture during Gbuffer... |
|||
void ForwardLighting(float3 V, float3 positionWS, BSDFData material, |
|||
out float4 diffuseLighting, |
|||
out float4 specularLighting) |
|||
{ |
|||
diffuseLighting = float4(0.0, 0.0, 0.0, 0.0); |
|||
specularLighting = float4(0.0, 0.0, 0.0, 0.0); |
|||
|
|||
for (int i = 0; i < g_punctualLightCount; ++i) |
|||
{ |
|||
float4 localDiffuseLighting; |
|||
float4 localSpecularLighting; |
|||
EvaluateBSDF_Punctual(V, positionWS, g_punctualLightList[i], material, localDiffuseLighting, localSpecularLighting); |
|||
diffuseLighting += localDiffuseLighting; |
|||
specularLighting += localSpecularLighting; |
|||
} |
|||
|
|||
/* |
|||
for (int i = 0; i < 4; ++i) |
|||
{ |
|||
float4 localDiffuseLighting; |
|||
float4 localSpecularLighting; |
|||
EvaluateBSDF_Area(V, positionWS, areaLightData[i], material, localDiffuseLighting, localSpecularLighting); |
|||
diffuseLighting += localDiffuseLighting; |
|||
specularLighting += localSpecularLighting; |
|||
} |
|||
*/ |
|||
} |
|||
|
|||
#endif // UNITY_LIGHTING_FORWARD_INCLUDED |
|
|||
fileFormatVersion: 2 |
|||
guid: 2520701347d8611488160514a8d9a1bd |
|||
timeCreated: 1474540155 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
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: test |
|||
m_Shader: {fileID: 4800000, guid: e1a84346ee54f9f4993c2f05c59805a0, type: 3} |
|||
m_ShaderKeywords: _EMISSION |
|||
m_LightmapFlags: 1 |
|||
m_CustomRenderQueue: -1 |
|||
stringTagMap: {} |
|||
m_SavedProperties: |
|||
serializedVersion: 2 |
|||
m_TexEnvs: |
|||
- first: |
|||
name: _BumpMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _DetailAlbedoMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _DetailMask |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _DetailNormalMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _DiffuseMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _EmissionMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _MainTex |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _MetallicGlossMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _NormalMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _OcclusionMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _ParallaxMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _SmoothnessMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
- first: |
|||
name: _SpecMap |
|||
second: |
|||
m_Texture: {fileID: 0} |
|||
m_Scale: {x: 1, y: 1} |
|||
m_Offset: {x: 0, y: 0} |
|||
m_Floats: |
|||
- first: |
|||
name: _BumpScale |
|||
second: 1 |
|||
- first: |
|||
name: _Cutoff |
|||
second: 0.5 |
|||
- first: |
|||
name: _DetailNormalMapScale |
|||
second: 1 |
|||
- first: |
|||
name: _DstBlend |
|||
second: 0 |
|||
- first: |
|||
name: _GlossMapScale |
|||
second: 1 |
|||
- first: |
|||
name: _Glossiness |
|||
second: 0.5 |
|||
- first: |
|||
name: _GlossyReflections |
|||
second: 1 |
|||
- first: |
|||
name: _Metallic |
|||
second: 0 |
|||
- first: |
|||
name: _Mode |
|||
second: 0 |
|||
- first: |
|||
name: _OcclusionStrength |
|||
second: 1 |
|||
- first: |
|||
name: _Parallax |
|||
second: 0.02 |
|||
- first: |
|||
name: _Smoothness |
|||
second: 0.5 |
|||
- first: |
|||
name: _SmoothnessTextureChannel |
|||
second: 0 |
|||
- first: |
|||
name: _SpecularHighlights |
|||
second: 1 |
|||
- first: |
|||
name: _SrcBlend |
|||
second: 1 |
|||
- first: |
|||
name: _UVSec |
|||
second: 0 |
|||
- first: |
|||
name: _ZWrite |
|||
second: 1 |
|||
m_Colors: |
|||
- first: |
|||
name: _Color |
|||
second: {r: 1, g: 1, b: 1, a: 1} |
|||
- first: |
|||
name: _DiffuseColor |
|||
second: {r: 1, g: 1, b: 1, a: 1} |
|||
- first: |
|||
name: _EmissionColor |
|||
second: {r: 0, g: 0, b: 0, a: 1} |
|||
- first: |
|||
name: _SpecColor |
|||
second: {r: 0.04, g: 0.04, b: 0.04, a: 1} |
|
|||
fileFormatVersion: 2 |
|||
guid: 89da82daf26da9242b541b3d831288e3 |
|||
folderAsset: yes |
|||
timeCreated: 1472140530 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: e5c35d625d1d6324a845b5d88af0ae92 |
|||
timeCreated: 1474299333 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!114 &11400000 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_PrefabParentObject: {fileID: 0} |
|||
m_PrefabInternal: {fileID: 0} |
|||
m_GameObject: {fileID: 0} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: e5c35d625d1d6324a845b5d88af0ae92, type: 3} |
|||
m_Name: UnityStandardRenderLoop |
|||
m_EditorClassIdentifier: |
|
|||
fileFormatVersion: 2 |
|||
guid: bbb9d949788aad640a70f108f114474d |
|||
timeCreated: 1474382158 |
|||
licenseType: Pro |
|||
NativeFormatImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: 6ef0a49ce698a24459471a57184c7259 |
|||
folderAsset: yes |
|||
timeCreated: 1474297943 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
撰写
预览
正在加载...
取消
保存
Reference in new issue