This commit is contained in:
2025-01-16 00:08:10 +11:00
commit d610cf6595
7 changed files with 702 additions and 0 deletions

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5501
}

37
index.html Normal file
View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Unreal Engine Material Library</title>
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
</head>
<body>
<div class="flex-container">
<div class="container">
<header>
<div class="header-content">
<h1><span class="highlight">UE</span> Material Snippets</h1>
</div>
<div class="filter-container">
<div class="search-box">
<input type="text" data-search placeholder="Search materials...">
</div>
<div class="categories-filter" data-categories></div>
</div>
</header>
<main data-material-grid></main>
</div>
<footer>
<div class="footer-content">
<p>&copy; 2025 Max Litruv Boonzaayer. All rights reserved.</p>
<nav>
<a href="https://lit.ruv.wtf" target="_blank">Main Page</a>
</nav>
</div>
</footer>
</div>
<script src="main.js"></script>
</body>
</html>

142
main.js Normal file
View File

@@ -0,0 +1,142 @@
document.addEventListener('DOMContentLoaded', async () => {
const grid = document.querySelector('[data-material-grid]');
const searchInput = document.querySelector('[data-search]');
const categoriesContainer = document.querySelector('[data-categories]');
let materialLibrary = [];
try {
const response = await fetch('materials.json');
const data = await response.json();
materialLibrary = data.materials;
const categories = [...new Set(materialLibrary.flatMap(m => m.categories))].sort();
categoriesContainer.innerHTML = categories.map(category => `
<button class="category-button" data-category="${category}">
${category.charAt(0).toUpperCase() + category.slice(1)}
</button>
`).join('');
const categoryButtons = categoriesContainer.querySelectorAll('.category-button');
categoryButtons.forEach(button => {
button.addEventListener('click', () => {
button.classList.toggle('active');
filterMaterials();
});
});
} catch (error) {
console.error('Error loading materials:', error);
grid.innerHTML = '<p class="error-message">Error loading materials library.</p>';
return;
}
function renderMaterials(materials) {
grid.innerHTML = materials.map(material => `
<div class="material-card show" data-material="${material.name.toLowerCase().replace(/\s+/g, '-')}">
<img class="material-preview" src="${material.preview}" alt="${material.name}">
<div class="material-info">
<h3>${material.name}</h3>
<p>${material.description}</p>
<div class="material-tags">
${material.categories.map(cat => `<span class="tag" data-tag="${cat}">${cat}</span>`).join(' ')}
</div>
</div>
</div>
`).join('');
const tags = document.querySelectorAll('.tag');
tags.forEach(tag => {
tag.addEventListener('click', (e) => {
e.stopPropagation();
const category = tag.dataset.tag;
const categoryButton = [...document.querySelectorAll('.category-button')]
.find(button => button.dataset.category === category);
if (categoryButton) {
categoryButton.classList.add('active');
filterMaterials();
}
});
});
reSortMasonry();
}
async function loadSnippet(snippetPath) {
try {
const response = await fetch(snippetPath);
return await response.text();
} catch (error) {
console.error('Error loading snippet:', error);
return '';
}
}
async function filterMaterials() {
const searchTerm = searchInput.value.toLowerCase();
const selectedCategories = [...document.querySelectorAll('.category-button.active')]
.map(button => button.dataset.category);
const filtered = materialLibrary.filter(material => {
const matchesSearch = material.name.toLowerCase().includes(searchTerm) ||
material.description.toLowerCase().includes(searchTerm) ||
material.categories.some(cat => cat.toLowerCase().includes(searchTerm));
const matchesCategory = selectedCategories.every(cat => material.categories.includes(cat));
return matchesSearch && matchesCategory;
});
const allCards = document.querySelectorAll('.material-card');
allCards.forEach(card => {
card.classList.add('hide');
});
setTimeout(() => {
renderMaterials(filtered);
}, 300);
}
function reSortMasonry() {
const masonryItems = document.querySelectorAll('.material-card');
let transitionCount = masonryItems.length;
masonryItems.forEach(item => {
item.style.display = 'inline-block';
item.addEventListener('transitionend', () => {
transitionCount--;
if (transitionCount === 0) {
grid.style.columnCount = 0;
grid.style.columnCount = 4;
}
}, { once: true });
});
}
grid.addEventListener('click', async (e) => {
const card = e.target.closest('.material-card');
if (card && !e.target.classList.contains('tag')) {
const materialName = card.dataset.material;
const material = materialLibrary.find(m =>
m.name.toLowerCase().replace(/\s+/g, '-') === materialName
);
const snippet = await loadSnippet(material.snippet);
navigator.clipboard.writeText(snippet);
const notification = document.createElement('div');
notification.className = 'copy-notification';
notification.textContent = 'Copied!';
notification.style.left = `${e.clientX}px`;
notification.style.top = `${e.clientY - 30}px`;
document.body.appendChild(notification);
setTimeout(() => notification.remove(), 1000);
}
});
grid.addEventListener('dragstart', (e) => {
e.preventDefault();
});
searchInput.addEventListener('input', filterMaterials);
renderMaterials(materialLibrary);
});

11
materials.json Normal file
View File

@@ -0,0 +1,11 @@
{
"materials": [
{
"name": "Vinette",
"categories": ["photo", "fx", "vintage"],
"preview": "/thumbnails/vinette.png",
"snippet": "snippets/vinette.txt",
"description": "Adds a subtle darkened border around the edges of the image for a vintage effect."
}
]
}

216
snippets/vinette.txt Normal file
View File

@@ -0,0 +1,216 @@
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_26" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_26'"
Begin Object Class=/Script/Engine.MaterialExpressionConstant Name="MaterialExpressionConstant_0" ExportPath="/Script/Engine.MaterialExpressionConstant'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionConstant_0'"
End Object
Begin Object Name="MaterialExpressionConstant_0" ExportPath="/Script/Engine.MaterialExpressionConstant'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionConstant_0'"
R=0.500000
MaterialExpressionEditorX=340
MaterialExpressionEditorY=-913
MaterialExpressionGuid=AAA1817742CD1A6F40CE05B5ABAB0FAE
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionConstant'MaterialExpressionConstant_0'"
NodePosX=340
NodePosY=-913
NodeGuid=FE8B54F54BA1C7E216E7D89550CAE532
CustomProperties Pin (PinId=F4CE38AA4369C3FF936AE9964798BD5B,PinName="Value",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.5",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=432DEF544800B87269823D8DDFA716ED,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_27 D3A48C284532E6E6BFDF3B9CFE3B3272,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_27" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_27'"
Begin Object Class=/Script/Engine.MaterialExpressionDistance Name="MaterialExpressionDistance_0" ExportPath="/Script/Engine.MaterialExpressionDistance'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionDistance_0'"
End Object
Begin Object Name="MaterialExpressionDistance_0" ExportPath="/Script/Engine.MaterialExpressionDistance'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionDistance_0'"
A=(Expression="/Script/Engine.MaterialExpressionConstant'MaterialGraphNode_26.MaterialExpressionConstant_0'")
B=(Expression="/Script/Engine.MaterialExpressionTextureCoordinate'MaterialGraphNode_28.MaterialExpressionTextureCoordinate_0'")
MaterialExpressionEditorX=496
MaterialExpressionEditorY=-896
MaterialExpressionGuid=3F00A1CB44F89E5DE91D518E1B29228A
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionDistance'MaterialExpressionDistance_0'"
NodePosX=496
NodePosY=-896
NodeGuid=95C0675F4B22E38D3CD284B9B536BA6C
CustomProperties Pin (PinId=D3A48C284532E6E6BFDF3B9CFE3B3272,PinName="A",PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_26 432DEF544800B87269823D8DDFA716ED,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=C48447B54F5EEA4F3C12198004EBD6CA,PinName="B",PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_28 952015E541117C8A208706B6071DBD08,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=EB63485548CF1F3206C4CB96F3E31056,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_30 23E7FB1C43D9DCF5D1E1C49A6EDEF3BF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_28" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_28'"
Begin Object Class=/Script/Engine.MaterialExpressionTextureCoordinate Name="MaterialExpressionTextureCoordinate_0" ExportPath="/Script/Engine.MaterialExpressionTextureCoordinate'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_28.MaterialExpressionTextureCoordinate_0'"
End Object
Begin Object Name="MaterialExpressionTextureCoordinate_0" ExportPath="/Script/Engine.MaterialExpressionTextureCoordinate'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_28.MaterialExpressionTextureCoordinate_0'"
MaterialExpressionEditorX=288
MaterialExpressionEditorY=-832
MaterialExpressionGuid=B35A92024A9217BA97688BAF26229395
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionTextureCoordinate'MaterialExpressionTextureCoordinate_0'"
NodePosX=288
NodePosY=-832
AdvancedPinDisplay=Hidden
NodeGuid=5D40B5364A27D73A7C0F99BDB186E143
CustomProperties Pin (PinId=51A4347F4919E221EE69D7BABCCF8792,PinName="Coordinate Index",PinType.PinCategory="optional",PinType.PinSubCategory="int",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8503E5154EC3DBD4CCB4EE8BC646EB2E,PinName="UTiling",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=2C36A892446621A3E8FECE8D68EB4ADA,PinName="VTiling",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=F211FAF14837B0018B9CD682321CC40C,PinName="Un Mirror U",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=1CCF89FC45F63AB38A188B90FBE507E1,PinName="Un Mirror V",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,)
CustomProperties Pin (PinId=952015E541117C8A208706B6071DBD08,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_27 C48447B54F5EEA4F3C12198004EBD6CA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_29" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_29'"
Begin Object Class=/Script/Engine.MaterialExpressionScalarParameter Name="MaterialExpressionScalarParameter_2" ExportPath="/Script/Engine.MaterialExpressionScalarParameter'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_29.MaterialExpressionScalarParameter_2'"
End Object
Begin Object Name="MaterialExpressionScalarParameter_2" ExportPath="/Script/Engine.MaterialExpressionScalarParameter'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_29.MaterialExpressionScalarParameter_2'"
DefaultValue=0.500000
ParameterName="Distance"
ExpressionGUID=2B7236524D7349398A0F81A83A70B671
MaterialExpressionEditorX=496
MaterialExpressionEditorY=-784
MaterialExpressionGuid=54F80AF64BC24F36C400E7A1CC7F28D5
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionScalarParameter'MaterialExpressionScalarParameter_2'"
NodePosX=496
NodePosY=-784
bCanRenameNode=True
NodeGuid=ED044C4049A13A26696505AB303C4DD7
CustomProperties Pin (PinId=532CED024F19E97CCDAC4EB15DA1FB1F,PinName="Default Value",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.5",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1ED4F264486B3CD29D38C7940242A570,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_31 04561F374058BBE1694ECE86253CCE13,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_30" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_30'"
Begin Object Class=/Script/Engine.MaterialExpressionOneMinus Name="MaterialExpressionOneMinus_0" ExportPath="/Script/Engine.MaterialExpressionOneMinus'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_30.MaterialExpressionOneMinus_0'"
End Object
Begin Object Name="MaterialExpressionOneMinus_0" ExportPath="/Script/Engine.MaterialExpressionOneMinus'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_30.MaterialExpressionOneMinus_0'"
Input=(Expression="/Script/Engine.MaterialExpressionDistance'MaterialGraphNode_27.MaterialExpressionDistance_0'")
MaterialExpressionEditorX=608
MaterialExpressionEditorY=-880
MaterialExpressionGuid=315BA9124B4EC3CC372E669F7C13AE04
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionOneMinus'MaterialExpressionOneMinus_0'"
NodePosX=608
NodePosY=-880
NodeGuid=EE0C20BA405FFC03077A84A0947F623D
CustomProperties Pin (PinId=23E7FB1C43D9DCF5D1E1C49A6EDEF3BF,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_27 EB63485548CF1F3206C4CB96F3E31056,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=40B78CAC42CFCAA9F2BF1690A2A7E549,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_31 53E268B740B91B7E8E653BBD2190BA7F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_31" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_31'"
Begin Object Class=/Script/Engine.MaterialExpressionMultiply Name="MaterialExpressionMultiply_0" ExportPath="/Script/Engine.MaterialExpressionMultiply'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_31.MaterialExpressionMultiply_0'"
End Object
Begin Object Name="MaterialExpressionMultiply_0" ExportPath="/Script/Engine.MaterialExpressionMultiply'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_31.MaterialExpressionMultiply_0'"
A=(Expression="/Script/Engine.MaterialExpressionOneMinus'MaterialGraphNode_30.MaterialExpressionOneMinus_0'")
B=(Expression="/Script/Engine.MaterialExpressionScalarParameter'MaterialGraphNode_29.MaterialExpressionScalarParameter_2'")
MaterialExpressionEditorX=736
MaterialExpressionEditorY=-880
MaterialExpressionGuid=222146AA45E34DE170FEE792143EF237
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionMultiply'MaterialExpressionMultiply_0'"
NodePosX=736
NodePosY=-880
NodeGuid=BD23D3F04F43F35A72AF4C9AAD98E32B
CustomProperties Pin (PinId=53E268B740B91B7E8E653BBD2190BA7F,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",LinkedTo=(MaterialGraphNode_30 40B78CAC42CFCAA9F2BF1690A2A7E549,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=04561F374058BBE1694ECE86253CCE13,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",LinkedTo=(MaterialGraphNode_29 1ED4F264486B3CD29D38C7940242A570,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=DC67F25A46D513596408EEBC44609849,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_32 81866F1C4B06B12C927B04941915BB62,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_32" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_32'"
Begin Object Class=/Script/Engine.MaterialExpressionMaterialFunctionCall Name="MaterialExpressionMaterialFunctionCall_2" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_32.MaterialExpressionMaterialFunctionCall_2'"
End Object
Begin Object Name="MaterialExpressionMaterialFunctionCall_2" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_32.MaterialExpressionMaterialFunctionCall_2'"
MaterialFunction="/Script/Engine.MaterialFunction'/Engine/Functions/Engine_MaterialFunctions01/ImageAdjustment/CheapContrast.CheapContrast'"
FunctionInputs(0)=(ExpressionInputId=95C9DA0E48D34168E34AD3A607BAA34E,Input=(Expression="/Script/Engine.MaterialExpressionMultiply'MaterialGraphNode_31.MaterialExpressionMultiply_0'",InputName="In"))
FunctionInputs(1)=(ExpressionInputId=3C3E177E485D8FFFC35D1482F0A20020,Input=(Expression="/Script/Engine.MaterialExpressionScalarParameter'MaterialGraphNode_33.MaterialExpressionScalarParameter_3'",InputName="Contrast"))
FunctionOutputs(0)=(ExpressionOutputId=5067ED8C4A2EFE82DB33F99EBE37E80E,Output=(OutputName="Result"))
MaterialExpressionEditorX=960
MaterialExpressionEditorY=-880
MaterialExpressionGuid=4417091447D4325FE05D1397C91F1AD5
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
Outputs(0)=(OutputName="Result")
End Object
MaterialExpression="/Script/Engine.MaterialExpressionMaterialFunctionCall'MaterialExpressionMaterialFunctionCall_2'"
NodePosX=960
NodePosY=-880
NodeGuid=CB3F8AC24845CB6C6566B7BABFF8424F
CustomProperties Pin (PinId=81866F1C4B06B12C927B04941915BB62,PinName="In (S)",PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_31 DC67F25A46D513596408EEBC44609849,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9F2CBBF14EDD321B89136F82DE8BAF2F,PinName="Contrast (S)",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_33 218F2E0E433460891A75E7B6A13DFE01,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=0191193A45DDBFFECC9277946D5D530C,PinName="Result",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_34 1F39C022485E879B336D128A84DD55B8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_33" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_33'"
Begin Object Class=/Script/Engine.MaterialExpressionScalarParameter Name="MaterialExpressionScalarParameter_3" ExportPath="/Script/Engine.MaterialExpressionScalarParameter'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_33.MaterialExpressionScalarParameter_3'"
End Object
Begin Object Name="MaterialExpressionScalarParameter_3" ExportPath="/Script/Engine.MaterialExpressionScalarParameter'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_33.MaterialExpressionScalarParameter_3'"
DefaultValue=0.250000
ParameterName="Sharpness"
ExpressionGUID=D7EC8DA445E6553F80CD21BC9575E46D
MaterialExpressionEditorX=752
MaterialExpressionEditorY=-784
MaterialExpressionGuid=9F0EAFEB4459BB0291431C9BD1C99287
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionScalarParameter'MaterialExpressionScalarParameter_3'"
NodePosX=752
NodePosY=-784
bCanRenameNode=True
NodeGuid=9406676442A2D05DCF1CBB961FE4D605
CustomProperties Pin (PinId=CED3B8B74FF419FBC7B95FAB36BEA842,PinName="Default Value",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.25",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=218F2E0E433460891A75E7B6A13DFE01,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_32 9F2CBBF14EDD321B89136F82DE8BAF2F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_34" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_34'"
Begin Object Class=/Script/Engine.MaterialExpressionLinearInterpolate Name="MaterialExpressionLinearInterpolate_1" ExportPath="/Script/Engine.MaterialExpressionLinearInterpolate'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_34.MaterialExpressionLinearInterpolate_1'"
End Object
Begin Object Name="MaterialExpressionLinearInterpolate_1" ExportPath="/Script/Engine.MaterialExpressionLinearInterpolate'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_34.MaterialExpressionLinearInterpolate_1'"
A=(Expression="/Script/Engine.MaterialExpressionConstant3Vector'MaterialGraphNode_35.MaterialExpressionConstant3Vector_0'",Mask=1,MaskR=1,MaskG=1,MaskB=1)
B=(Expression="/Script/Engine.MaterialExpressionReroute'MaterialGraphNode_Knot_1.MaterialExpressionReroute_0'")
Alpha=(Expression="/Script/Engine.MaterialExpressionMaterialFunctionCall'MaterialGraphNode_32.MaterialExpressionMaterialFunctionCall_2'")
MaterialExpressionEditorX=1232
MaterialExpressionEditorY=-1120
MaterialExpressionGuid=8AD0EB8E4B86C27657F3BB8F186F37C1
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
bCollapsed=False
End Object
MaterialExpression="/Script/Engine.MaterialExpressionLinearInterpolate'MaterialExpressionLinearInterpolate_1'"
NodePosX=1232
NodePosY=-1120
NodeGuid=BBE61B284AB0E31BB171838F46763A90
CustomProperties Pin (PinId=A071FD7642842885AE9AEEAE330D5F01,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",LinkedTo=(MaterialGraphNode_35 7E672C5D45B57C7C895E1F81C6CC986B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5B3CD56246F96E04D775069F3B0A076E,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",LinkedTo=(MaterialGraphNode_Knot_1 5820BB354A8804F4FB20B8B8A1A82471,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=1F39C022485E879B336D128A84DD55B8,PinName="Alpha",PinType.PinCategory="optional",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.5",LinkedTo=(MaterialGraphNode_32 0191193A45DDBFFECC9277946D5D530C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=A67F60E548397C3B7C2526A01F9FCB7E,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_35" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_35'"
Begin Object Class=/Script/Engine.MaterialExpressionConstant3Vector Name="MaterialExpressionConstant3Vector_0" ExportPath="/Script/Engine.MaterialExpressionConstant3Vector'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_35.MaterialExpressionConstant3Vector_0'"
End Object
Begin Object Name="MaterialExpressionConstant3Vector_0" ExportPath="/Script/Engine.MaterialExpressionConstant3Vector'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_35.MaterialExpressionConstant3Vector_0'"
MaterialExpressionEditorX=912
MaterialExpressionEditorY=-1088
MaterialExpressionGuid=C588047F4638A09FAE8FD49450BBB679
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionConstant3Vector'MaterialExpressionConstant3Vector_0'"
NodePosX=912
NodePosY=-1088
NodeGuid=FB721C8B4D2EC26FC474B0ACE8E10233
CustomProperties Pin (PinId=913DBF164615A5B5D3B95CA7E4AE847F,PinName="Constant",PinType.PinCategory="optional",PinType.PinSubCategory="rgb",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0,0.0,0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=7E672C5D45B57C7C895E1F81C6CC986B,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_34 A071FD7642842885AE9AEEAE330D5F01,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=2A13615F4E9317DBC29B5B82EE96C191,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=E9461345481617D627A82BB17123A3D6,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8205F1094EF48646EC9C578B86310EE3,PinName="Output4",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
Begin Object Class=/Script/UnrealEd.MaterialGraphNode_Knot Name="MaterialGraphNode_Knot_1" ExportPath="/Script/UnrealEd.MaterialGraphNode_Knot'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_Knot_1'"
Begin Object Class=/Script/Engine.MaterialExpressionReroute Name="MaterialExpressionReroute_0" ExportPath="/Script/Engine.MaterialExpressionReroute'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_Knot_1.MaterialExpressionReroute_0'"
End Object
Begin Object Name="MaterialExpressionReroute_0" ExportPath="/Script/Engine.MaterialExpressionReroute'/Engine/Transient.PreviewMaterial_2:MaterialGraph_0.MaterialGraphNode_Knot_1.MaterialExpressionReroute_0'"
MaterialExpressionEditorX=1040
MaterialExpressionEditorY=-1168
MaterialExpressionGuid=0F6CA9144890D149ADDD98820E4745F0
Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.PreviewMaterial_2'"
Desc="Input"
End Object
MaterialExpression="/Script/Engine.MaterialExpressionReroute'MaterialExpressionReroute_0'"
NodePosX=1040
NodePosY=-1168
bCommentBubbleVisible=True
bCanRenameNode=False
NodeComment="Input"
NodeGuid=334A8A304E1CF5FB4264AA8E3DB67BDF
CustomProperties Pin (PinId=6007152B4DCD774B77A2CCA8FFDC2F95,PinName="InputPin",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=5820BB354A8804F4FB20B8B8A1A82471,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(MaterialGraphNode_34 5B3CD56246F96E04D775069F3B0A076E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object

293
style.css Normal file
View File

@@ -0,0 +1,293 @@
:root {
--primary-color: #2196F3;
--secondary-color: #00A8F3;
--background-color: #1B1B1B;
--card-bg: #2A2A2A;
--text-primary: #FFFFFF;
--text-secondary: #BBBBBB;
--border-color: #3A3A3A;
--padding: 12px;
--border-radius: 4px;
--font-size: 14px;
--box-shadow: 0 2px 8px rgba(0,0,0,0.2);
--hover-box-shadow: 0 5px 15px rgba(33,150,243,0.2);
--transition-duration: 0.3s;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Roboto', sans-serif;
}
body, html {
height: 100%;
}
body {
background-color: var(--background-color);
color: var(--text-primary);
}
.flex-container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
flex: 1;
}
header {
margin-bottom: 30px;
}
h1 {
color: var(--text-primary);
font-weight: 500;
font-size: 28px;
margin-bottom: 20px;
}
.search-box {
display: flex;
gap: 10px;
margin-bottom: 20px;
width: 100%;
}
[data-search] {
background: var(--card-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
padding: var(--padding);
border-radius: var(--border-radius);
flex: 1;
}
[data-search]::placeholder {
color: var(--text-secondary);
}
.filter-container {
display: flex;
flex-direction: column;
gap: 12px;
}
.categories-filter {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: center;
}
.category-button {
background: var(--card-bg);
border: 1px solid var(--border-color);
color: var(--text-secondary);
padding: var(--padding);
border-radius: var(--border-radius);
cursor: pointer;
transition: all 0.2s;
font-size: var(--font-size);
}
.category-button.active {
background: var(--primary-color);
color: var(--text-primary);
border-color: var(--primary-color);
}
.category-button:hover {
border-color: var(--primary-color);
color: var (--primary-color);
}
.category-button.active:hover {
color: var(--text-primary);
}
[data-material-grid] {
column-count: 4;
column-gap: 20px;
max-width: 1200px;
margin: 0 auto;
}
.material-card {
display: inline-block;
width: 100%;
margin-bottom: 20px;
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--border-radius);
overflow: hidden;
box-shadow: var(--box-shadow);
transition: transform 0.2s, opacity var(--transition-duration);
cursor: pointer;
opacity: 1;
animation: fadeIn var(--transition-duration) ease-in;
}
.material-card.hide {
opacity: 0;
transform: scale(0.95);
animation: fadeOut var(--transition-duration) ease-out;
}
.material-card.show {
opacity: 1;
transform: scale(1);
}
.material-card:hover {
transform: translateY(-5px);
border-color: var(--primary-color);
box-shadow: var(--hover-box-shadow);
}
.material-preview {
width: 100%;
height: auto;
object-fit: contain;
}
.material-info {
padding: 15px;
}
.material-info h3 {
margin-bottom: 8px;
color: var(--text-primary);
font-size: 16px;
font-weight: 500;
}
.material-info p {
color: var(--text-secondary);
font-size: 14px;
}
.material-tags {
margin-top: 10px;
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag {
background: var(--card-bg);
border: 1px solid var(--border-color);
color: var(--text-secondary);
padding: 3px 8px;
border-radius: var(--border-radius);
font-size: 12px;
cursor: pointer;
user-select: none;
}
.tag:hover {
background: var(--primary-color);
color: var(--text-primary);
}
.copy-notification {
position: fixed;
background: var(--primary-color);
color: white;
padding: 8px 12px;
border-radius: var(--border-radius);
font-size: 14px;
pointer-events: none;
transform: translate(-50%, 0);
animation: floatUp 1s ease-out forwards;
z-index: 1000;
box-shadow: var(--hover-box-shadow);
font-weight: 500;
}
@keyframes floatUp {
0% {
opacity: 1;
transform: translate(-50%, 0);
}
100% {
opacity: 0;
transform: translate(-50%, -30px);
}
}
@keyframes fadeIn {
0% {
opacity: 0;
transform: scale(0.95);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes fadeOut {
0% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0.95);
}
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
}
#convert-button {
display: none;
}
footer {
background-color: var(--background-color);
color: var(--text-secondary);
padding: 20px 0;
text-align: center;
border-top: 1px solid var(--border-color);
}
.footer-content {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.footer-content p {
margin: 0;
font-size: var(--font-size);
}
.footer-content nav {
display: flex;
gap: 20px;
}
.footer-content nav a {
color: var(--text-secondary);
text-decoration: none;
transition: color 0.2s;
}
.footer-content nav a:hover {
color: var(--primary-color);
}

BIN
thumbnails/vinette.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB