Jump to content

Recommended Posts

Posted

I'm trying to learn client-modding, and I decided to fallow LauQ's guide to 3d moddeling. I got some questions answered by Grr, and everything went fine after that. I managed to adapt an accessory from GoD to Interlude. Yet, since I'm trying to learn as much as I can, there are a few things that aren't covered in LauQ's guide, and I'd like to ask you guys.

 

1. As you can see in the image below, there are 2 textures: ant_cap_m003_t00_mk and ant_cap_m003_t00_sp. This is something common among the textures, so what's the difference between textures ending with _mk and those ending with _sp? I'm guessing sp stands for Specular, is that right?

 

2eqeurk.jpg

 

2. The image above also has a Shader (related to Specular) and a Final Blend thing. What exactly are those two? From what's shown in UE (images below), I'm guessing Shader deals with the texture's looks, like reflection, illumination and those sort of things, is that right? How about the Final Blend?

 

I tried reading some guides in order to figure out what exactly it does. The following guides actually mention it, but don't exactly explain what it does. Just blindly use it.

http://www.maxcheaters.com/forum/index.php?topic=65468.0

http://www.maxcheaters.com/forum/index.php?topic=146673.0

http://www.maxcheaters.com/forum/index.php?topic=38359.0

 

Shader Options:

 

syqmut.jpg

 

Final Blend Options:

 

34is7cz.jpg

 

Thanks in advance for your patience and any help,

Posted

mk and sp is just the name like ori and sp2

Generally you want to edit the mk or ori ones

sp - specular mask

sp2/si - self illumination mask


Most of the time final blend is NOT necessary, although it could help with stuff that has a lot of detailed alpha

Usually specular is the shiny stuff/glossy effect (env map) and self illumination is a effect like panner or something

Posted

mk and sp is just the name like ori and sp2

Generally you want to edit the mk or ori ones

sp - specular mask

sp2/si - self illumination mask


Most of the time final blend is NOT necessary, although it could help with stuff that has a lot of detailed alpha

Usually specular is the shiny stuff/glossy effect (env map) and self illumination is a effect like panner or something

 

You're always fast xD

 

So is there any rules to decide which one (mk or ori) I shud edit? Any chances I may need to edit both of them?

 

Usually specular is the shiny stuff/glossy effect (env map)

self illumination is a effect like panner or something

 

Is there any difference between Specular and SpecularityMask? How about SelfIllumination and SelfIlluminationMask?

 

How about Diffuse and Opacity, what does each one do?

 

And since there's a Shader thing on UTPT, I suppose L2 items already have a defined configuration on Shader Properties. Is it possible to extract those NCSoft shader properties and use for myself, or do I have to do everything myself?

 

Guess those are all my questions.

I'm truly grateful for all the help you've been giving me lately, Grr.

Posted

Mk is just another thing for ori (dunno why it's called that but it's the actual texture that shows up and is usually a larger dimension than the sp)


Yah there is, specular = actual effect, mask = the path in which the effect is shown same thing applies for self illumination

Opacity = your alpha


2 sided = true (ALWAYS!) and ob_mask if you have a opacity layer if not leave it at ob_normal

Posted

Thanks for the incredible help, Grr!

 

Just two questions remaining:

 

1. How about Diffuse, what does it do?

 

2. I suppose L2 already has shaders defined. Is it possible to extract those NCSoft shaders (using UTPT or something else) and use for myself, or do I have to create the shader myself?

Guest
This topic is now closed to further replies.


  • Posts

    • we all love you very much Guytis💖 🤗
    • W/e u smoke there, i want aswell... life has been cruel all this time! Maybe it will help me
    • I would like to take this opportunity to publicly apologize to the following people:   @Acacia, @Victory, @Splicho, @ShadowNetwork, @l2gold2025, @SkyLord, @maneco, @F4sh10n, @Maxtor, @Celestine, @911reg, @Nightw0lf. @UnknownSoldier   If at any point my words, actions, or posts offended you, I sincerely apologize. I recognize that in the past there were moments of tension and unnecessary conflict, but today I want to leave all of that behind. From now on, I choose not to hold any grudges against anyone and to let go of everything that happened — from both sides. The path I want to follow in this community is one of collaboration, mutual respect, and growth. Thank you to those who are still contributing and sharing. Sincerely,   Guytis
    • I found a dev , I will edit this post and start tomorrow as to build a 100 percent retail l2 Pride volos style like the old times   Features: Chronicle: Interlude  Xp:999 Sp:999 Adena:999 Start level : 80   Fast farming system : up to 3 hours for S grade equipment and up.to 5 days for later added 2 armor and weapon sets   Buff time 59mins all Full Npc buffer,  I will have buffers but with no heal close by for all areas  Reasonably priced Gm Shop, Gatekeeper, Free noblesse On death you dont lose sny materials and such except for very few if you P.k.   CP,hp,mp potion for 200 each   all players go from.No grade gear to S grade  with each different part of weapon , armor set,jewels,dyes,tattoos having different stats and such   Unique system of skills and little tweaks,     All classes of heroes have a fighting chance each with a different purpose and character..     All skills and deffus work for 70% chance of success and up  but for 4 to 7 sec each.   Many different areas of xp,sp and farm, 2 3 different farm pvp areas and all changing some. Days of the week, Also 2 party farm and pvp areas will be added.     All mini raid bosses and bosses have an hour respawn time.   As for special bosses  All have 1 hour almost  respawn time except for , Valakas and antharas with 3 hours.   And lastly  , 5 different events will be available for a good reward 5 times a day.  
    • Чтобы скачать файлы с сайта Akumu, вы можете использовать этот код на Node.js. Понадобятся два пакета: axios и cheerio.   это медленно, но делает свою работу   P.S. пропускает файл, если он присутствует и не изменен   const axios = require("axios"); const cheerio = require("cheerio"); const fs = require("fs/promises"); const path = require("path"); const BASE_URL = "http://akumu.ru/lineage2/L2NA/P746/"; const OUTPUT_DIR = "./downloaded"; async function delay(ms) { return new Promise((res) => setTimeout(res, ms)); } async function downloadFile(url, filepath) { // Skip download if file already exists and was not modified today try { const stat = await fs.stat(filepath); const mtime = stat.mtime; const today = new Date(); if ( mtime.getFullYear() === today.getFullYear() && mtime.getMonth() === today.getMonth() && mtime.getDate() === today.getDate() ) { // File was modified today, do not skip } else { console.log(`File exists, skipping: ${filepath}`); return false; // Indicate skipped } } catch (e) { // File does not exist, proceed to download } const writer = await fs.open(filepath, "w"); const response = await axios({ url, method: "GET", responseType: "stream" }); const totalLength = parseInt(response.headers['content-length'], 10); let downloadedLength = 0; let lastLogged = Date.now(); let lastDownloaded = 0; const lastModified = response.headers["last-modified"]; const mtime = lastModified ? new Date(lastModified) : new Date(); return new Promise((resolve, reject) => { const stream = writer.createWriteStream(); response.data.on('data', (chunk) => { downloadedLength += chunk.length; const now = Date.now(); if (now - lastLogged > 1000 || downloadedLength === totalLength) { const percent = totalLength ? ((downloadedLength / totalLength) * 100).toFixed(2) : 'N/A'; const speed = ((downloadedLength - lastDownloaded) / ((now - lastLogged) / 1000)) / 1024; // KB/s process.stdout.write(`\rDownloading ${path.basename(filepath)}: ${percent}% (${(downloadedLength/1024).toFixed(1)} KB/${totalLength ? (totalLength/1024).toFixed(1) : '?'} KB) ${(speed).toFixed(1)} KB/s `); lastLogged = now; lastDownloaded = downloadedLength; } }); response.data.pipe(stream); response.data.on("end", async () => { await writer.close(); process.stdout.write("\n"); // Set mtime and atime try { await fs.utimes(filepath, mtime, mtime); } catch (e) { console.warn( `Failed to set file timestamp for ${filepath}:`, e.message ); } resolve(true); // Indicate downloaded }); response.data.on("error", async (err) => { await writer.close(); reject(err); }); }); } async function crawlAndDownload(url, localPath) { console.log("Visiting:", url); // Ensure local path exists await fs.mkdir(localPath, { recursive: true }); const { data } = await axios.get(url); const $ = cheerio.load(data); const links = $("tbody a") .toArray() .map((el) => $(el).attr("href")) .filter((href) => href && href !== "../"); for (const href of links) { const fullUrl = new URL(href, url).href; const decodedHref = decodeURIComponent(href); const targetPath = path.join(localPath, decodedHref); if (href.endsWith("/")) { // It's a folder, recurse normally await crawlAndDownload(fullUrl, targetPath); } else { // It's a file, retry download indefinitely on failure while (true) { try { console.log("Downloading file:", fullUrl); const downloaded = await downloadFile(fullUrl, targetPath); if (downloaded) { await delay(1000); // Delay only if file was downloaded } break; // Success or skipped, exit retry loop } catch (err) { console.error( `Failed to download ${fullUrl}, retrying... Error: ${err.message}` ); // Optionally wait before retrying to be gentle on server await delay(3000); } } } } } crawlAndDownload(BASE_URL, OUTPUT_DIR) .then(() => console.log("Done!")) .catch((err) => console.error("Error:", err));
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock