62 lines
3.7 KiB
C#
62 lines
3.7 KiB
C#
|
using UnityEngine;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace DigitalOpus.MB.Core
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// A TextureBlender will attempt to blend non-texture properties with textures so that the result material looks the same as source material.
|
|||
|
/// </summary>
|
|||
|
public interface TextureBlender
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// The shader name that must be matched on the result material in order for this TextureBlender to be used. This should return something like "Legacy/Bumped Difuse"
|
|||
|
/// </summary>
|
|||
|
bool DoesShaderNameMatch(string shaderName);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// This is called to prepare the TextureBlender before any calls to OnBlendTexturePixel
|
|||
|
/// Use this to grab the non-texture property values from the material that will be used to alter the Pixel color in the texture.
|
|||
|
/// Note that the sourceMat may not use a shader matching ShaderName. It may not have expected properties. Check that properties exist
|
|||
|
/// before grabing them.
|
|||
|
/// </summary>
|
|||
|
void OnBeforeTintTexture(Material sourceMat, string shaderTexturePropertyName);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Called once for each pixel in the texture to alter the pixel color. For efficiency don't check shaderPropertyName every call. Instead use OnBeforeTintTexture
|
|||
|
/// to prepare this textrure blender for a batch of OnBlendTexturePixel calls.
|
|||
|
/// </summary>
|
|||
|
Color OnBlendTexturePixel(string shaderPropertyName, Color pixelColor);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Material a & b may have the same set of textures but different non-texture properties (colorTint etc...)
|
|||
|
/// If so then they need to be put into separate rectangels in the atlas. This method should check the non-texture properties
|
|||
|
/// and return false if they are different. Note that material a and b may use a different shader than GetShaderName so your code
|
|||
|
/// should handle the case where properties do not exist.
|
|||
|
/// </summary>
|
|||
|
bool NonTexturePropertiesAreEqual(Material a, Material b);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Sets the non texture properties on the result materail after textures have been baked. If for example _Color has been blended with
|
|||
|
/// the _Albedo textures then the _Color property on the result material should probably be set to white.
|
|||
|
/// </summary>
|
|||
|
void SetNonTexturePropertyValuesOnResultMaterial(Material resultMaterial);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Some textures may not be assigned for a material. This method should return a color that will used to create a small solid color texture
|
|||
|
/// to be used in these cases. Note that this small solid color texture will later be blended using OnBlendTexturePixel. If the texturePropertyname is _mainTex
|
|||
|
/// then the the returned color should probably be white so it looks correct when OnBlendTexturePixel blends the _Color.
|
|||
|
///
|
|||
|
/// This is also used to determine if an atlas needs to be generated for a texture property. If all the source materials are missing the texture for
|
|||
|
/// texPropertyName property (eg. _MainTex), but some of the source materials return different value for:
|
|||
|
/// OnBlendTexturePixel(texturePropertyName, GetColorIfNoTexture(sourceMat, texturePropertyName))
|
|||
|
/// Then an atlas will be generated with the different colors.
|
|||
|
///
|
|||
|
/// This method can also be used to collect the value of non texture properties and cache them for each source material. This information can be useful
|
|||
|
/// for setting values on the result material.
|
|||
|
/// </summary>
|
|||
|
Color GetColorIfNoTexture(Material m, ShaderTextureProperty texPropertyName);
|
|||
|
}
|
|||
|
}
|