View Categories

Dosyalardan Dokular

10 dakika okuma

giriiş  #


Bu bölümde , farklı dosya formatlarını çeşitli şekillerde yükleyen ve sunan V-Ray dokularını ele alacağız.  BRDF’ler  (ve bazı ışıklar) doku eklenebilen birçok Renk, AColor ve Float parametre yuvasına sahiptir. Genellikle sadece doku dosyalarını yüklersiniz, ancak V-Ray ayrıca birçok prosedürel doku ve değiştirici görevi gören doku  eklentileri (yani basit bir işlev uygulamak, dokuları birleştirmek, kanallardan birinden veri çıkarmak vb.) sunar. 200’den fazla doku eklentisi vardır  , bu nedenle yalnızca en önemlilerine bakacağız. Eklentilerin çoğu  belirli  ana uygulamalar için yapılmıştır. Doku verilerinin kendisi dışında, V-Ray, UVW haritalama koordinatları oluşturmak veya geometri kaynağından gelen orijinal verileri değiştirmek için UVW oluşturucu  eklentileri kullanır  . Bir UVWGen eklentisi kullanmak zorunlu değildir. 

TexBitmap  #


Bu doku, bir bitmap arabelleğinden (sonraki iki maddeye bakın) gelen verileri, renk çarpanları, döşeme vb. gibi bazı ek parametrelerle birlikte kullanır.

 

Parametreler #

  • compatibility_with  – Bu, farklı uygulamalardan dışa aktarılan dokuları birbirinden ayırt etmek için kullanılır. Değer şu anlama gelir: 0 – 3ds Max (bu aynı zamanda varsayılan değerdir), 1 – Maya, …

  • alpha_from_intensity  – Eğer 2 ise, alfa değeri 1.0f’ye zorlanır; 1 ise, elde edilen alfa değeri renk yoğunluğu (compliance_with 0 ise) veya renk parlaklığıdır (compliance_with 1 ise); 0 ise, alfa değeri bitmap alfa değerinden alınır.

  • ters çevir  – Doğruysa, ortaya çıkan doku rengi ters çevrilecektir.

  • invert_alpha  – Eğer true ise ve invert açık ise, ortaya çıkan dokunun alfa değeri de tersine çevrilir. Eğer false ise, sadece renk tersine çevrilir.

  • color_mult  – Doku rengi için bir çarpan

  • color_offset  – Doku rengi için ek bir ofset değeri.

  • alpha_mult  – Doku alfa değeri için bir çarpan

  • alpha_offset  – Doku alfa değeri için ek bir ofset.

  • nouvw_color  – Geçerli uvw koordinatı olmadığında kullanılacak renk

  • renk  – Ortaya çıkan renk

  • out_transparency  – Elde edilen şeffaflık

  • out_alpha  – Elde edilen alfa değeri

  • çıkış_yoğunluğu  – Elde edilen yoğunluk

  • uvwgen  – Doku için UVW oluşturucu

  • Karo  – 0: karo döşemesi yok; 1: UV’de karo döşemesi; 2: U’da karo döşemesi; 3: V’de karo döşemesi; 4: UV’de karo döşemesi, ancak filtreli karo döşemesi yok;

  • placement_type  – Dokunun geçerli kısmının uygulanma şekli. Bu parametre, özel yerleştirme için dokuyu kırpmanıza veya boyutunu küçültmenize olanak tanır. Kırpma ve yerleştirme ayarları, dokuyu yalnızca bu harita ve haritanın tüm örnekleri için kullanıldığı şekliyle etkiler. Doku dosyasının kendisini etkilemezler. Olası değerler şunlardır:

    • varsayılan (0)  – tüm doku geçerlidir

    • kırpma (1)  – Bir dokuyu kırpmak, onu orijinal halinden daha küçük bir dikdörtgen alana indirgemek anlamına gelir. Kırpma, dokunun ölçeğini değiştirmez.

    • Yerleştirme (2)  – Bir dokuyu yerleştirmek, haritayı ölçeklendirmenize ve onu döşemesinin herhangi bir yerine yerleştirmenize olanak tanır. Yerleştirme, dokunun ölçeğini değiştirebilir, ancak dokunun tamamını gösterir. Kırpma veya yerleştirme bölgesinin yerleşimini ve boyutunu belirten dört değerin tümü animasyonludur.

  •  – Geçerli doku sektörünün U koordinatı

  •  – Geçerli doku sektörünün V koordinatı

  •  – Geçerli doku sektörünün genişliği

  •  – Geçerli doku sektörünün yüksekliği

  • titreşim  – Rastgele yerleştirme varyasyonunun miktarı

  • tile_u  – Doğruysa yatay döşeme vardır.

  • tile_v  – Doğruysa dikey döşeme vardır.

  • uv_noise_on  – Doğruysa gürültü etkinleştirilir.

  • uv_noise_animate  – Eğer true ise gürültü animasyonlu hale getirilir. Gürültüyü canlandırmak için “UV noise phase” kullanın.

  • uv_noise_amount  – UV gürültü miktarı

  • uv_noise_levels  – UV gürültü yinelemeleri

  • uv_noise_size  – UV gürültü boyutu

  • un_noise_phase  – UV gürültü fazı

  • bitmap – Doku için BitmapBuffer

Örnekler #

 Aşağıdaki tüm örnekler, ana .vrscene dosyasındaki şu  #include satırının yorum satırı olmaktan çıkarılmasıyla sahne paketi kullanılarak oluşturulmuştur .

Basit bitmap dokusu #

Sahne “vrscenes/map_01 TexBitmap.vrscene” şeklindedir.

Doku rengi, gain ve lift kullanılarak düzeltildi. #

Sahne “vrscenes/map_02 TexBitmap corrections.vrscene” şeklindedir.

BitmapBuffer kullanılarak doku gama düzeltmesi yapıldı. #

Sahne “vrscenes/map_03 TexBitmap & BitmapBuffer gamma.vrscene” şeklindedir.

Doku gama düzeltmesi MayaGamma kullanılarak yapılmıştır. #

Sahne “vrscenes/map_04 TexBitmap & MayaGamma.vrscene” şeklindedir.

BitmapBuffer #

Bu eklenti bir resim dosyasını yükler. Çok sayıda format desteklenir – kayıplı/kayıpsız, 8 bitten 32 bite kadar. Bu bir doku eklentisi değildir ve tek amacı TexBitmap’e veri sağlamaktır. Filtreleme ve gama için bazı seçenekleri vardır. Şu anda desteklenen formatlar HDR, EXR, PNG, BMP, TGA, SGI, JPG, PIC, TIF, PSD, VRIMG’dir. IFL dosyaları biçimindeki resim dosyası listeleri de desteklenir.

Parametreler #

  • filtre_türü – -1 – en yakın; 0 – filtreleme yok; 1 – mip-map filtreleme; 2 – toplam alan tablosu filtreleme; 3 – elips filtreleme; 4 – kullanımdan kaldırıldı, kullanmayın; 5 – keskin mip-map filtreleme

  • filter_blur – filtreleme için kullanılan bulanıklık parametresi

  • color_space  – .hdr görüntüsünün renk uzayını belirtir, böylece ters eğri uygulanarak görüntü doğrusal bir renk uzayına getirilebilir. Olası değerler şunlardır:

    • doğrusal (0)  – Herhangi bir düzeltme uygulanmaz.

    • gama düzeltilmiş (1)  – Renk alanı  Gama  parametresi aracılığıyla kontrol edilir.

    • sRGB (2)  – .hdr görüntüsü sRGB renk uzayındadır.

    • otomatik (3) – Otomatik düzeltmeler uygulanır.

  • gamma  – Görüntü için gama düzeltme değeri. Örneğin, bitmap diske 2.2 gama düzeltmesiyle kaydedildiyse, işleme sırasında bu düzeltmeyi kaldırmak için 0.4545 girmeniz gerekir.

  • allow_negative_colors  – yanlışsa negatif renkler sınırlandırılacaktır.

  • İnterpolasyon  – Mip-map filtreleme için interpolasyon yöntemi. Aşağıdaki örneğe bakın. Olası değerler şunlardır:

    • Bilinear (0)  – Görüntü değerleri bitmap’teki dört pikselden enterpolasyon yoluyla elde edilir. Bu en hızlı enterpolasyon yöntemidir, ancak sonuç sürekli değildir (pürüzsüz değildir) ve harita yer değiştirme veya  kabartma haritalama için kullanıldığında yapaylıklar oluşturabilir.

    • bikübik (1)  – Görüntü değerleri bitmap’teki on altı pikselden enterpolasyon yoluyla elde edilir. Bu en yavaş yöntemdir, ancak sonuçlar çok fazla bulanıklık olmadan pürüzsüzdür.

    • biquadratik (2)  – Görüntü değerleri bitmap’teki dokuz pikselden enterpolasyon yoluyla elde edilir. Bu yöntem Bicubic enterpolasyondan daha hızlıdır, ancak görüntüyü çok fazla yumuşatabilir.

  • Dosya  – Dosya adı; sırasıyla Mari veya Mudbox döşemeleri için etiketler veya belirli döşemeler için $nU ve $nV içerebilir; küçük harfli etiketler döşemelerin 0’dan başladığını, büyük harfli etiketler ise 1’den başladığını varsayar.

  • load_file  – false olarak ayarlanırsa dosya yüklenmez.

  • frame_sequence  – Birden fazla animasyon dosyası varsa ve bu dosyaların adlarında kare numarası geçiyorsa True değerini döndürür. Verilen ‘file’ dizesindeki “<frameNum>” ifadesinin geçerli kare numarasıyla değiştirilmesini sağlar.

  • frame_number – Görüntü dizileriyle çalışırken, bu parametre dizideki hangi görüntünün kullanılacağını belirtir. Parametre atlanırsa veya varsayılan değer (-2147483648) kullanılırsa, kare numarası geçerli kare zaman değerine bağlıdır.

  • frame_offset  – Görüntü dizileri için başlangıç ​​karesi uzaklığı

  • use_data_window  – OpenEXR dosyalarında olduğu gibi veri penceresi bilgilerini kullanmak için true; aksi halde false

  • ifl_start_frame  – Doku animasyonunun başlangıcını belirtir. Burada belirtilen kare numarası, sahne animasyonunun ilk karesinde oynatılacaktır.

  • ifl_playback_rate  – Doku animasyonunun hızını, gerçek animasyon hızının bir kesri olarak kontrol eder. 1 değeri, doku animasyonunun normal hızda çalışacağı anlamına gelir. 2 değeri ise doku animasyonunun sahne animasyonunun iki katı hızda çalışacağı anlamına gelir.

  • ifl_end_condition  – Görüntü dosyası listesi (IFL) bitiş koşulu. Bu seçenek, animasyonlu dokunun son karesine ulaşıldığında ne olacağını kontrol etmenizi sağlar. Mevcut seçenekler şunlardır:

    • Döngü (0) – Animasyon, Başlangıç ​​Karesi  seçeneğinde  belirtilen kareden tekrar başlayacaktır. 

    • Ping Pong (1) – Animasyon, Başlangıç ​​Karesi  seçeneğinde belirtilen kareye ulaşana kadar geriye doğru oynatılacak   ve ardından tekrar ileriye doğru oynatılacaktır.

    • (2) Tut – Animasyon son karede duracak ve sahne animasyonunun sonuna kadar görüntülenecektir.

Örnek – Görüntü dosyası listesi (IFL) dizisi
#

Aşağıda, bir resim dosyası listesi (IFL) sekansı için varlıklar içeren örnek bir vrscene bulunmaktadır. Bu, V-Ray’de standart bir animasyonlu sahne olarak işlenebilir.

Sequence_IFL.zip

 vrscene’deki BitmapBuffer ayarlarıyla ilgili bir not :

  • BitmapBuffer::frame_sequence değeri 1 olarak ayarlanmıştır; bu da BitmapBuffer::file içindeki IFL’den BitmapBuffer::frame_number değerini otomatik olarak ayarlamalıdır.

Aşağıdaki SettingsOutput  parametrelerinden de bahsetmekte fayda var:

  • anim_start – Animasyon aralığının zaman birimi cinsinden başlangıcı, örneğin frame_start / frames_per_second.

  • anim_end – Zaman birimi cinsinden animasyon aralığının sonu, örneğin frame_end / frames_per_second.

  • frame_start – Animasyon aralığının başlangıcındaki kare numarası.

  • frames_per_second – Birim zamanda istenen kare sayısı ( SettingsUnitsInfo::seconds_scale ile ilgilidir ve 1.0f / frames_per_second’a eşit olmalıdır).

  • Kareler – Anahtar karelerin listesi.

IFL dizisi ile BitmapBuffer için kod örneği #

# Compatibility with Python 2.7.
from __future__ import print_function
 
# The directory containing the vray shared object should be present in the PYTHONPATH environment variable.
# Try to import the vray module from VRAY_SDK/python, if it is not in PYTHONPATH
import sys, os
VRAY_SDK = os.environ.get('VRAY_SDK')
if VRAY_SDK:
    sys.path.append(os.path.join(VRAY_SDK, 'python'))
import vray
 
SCENE_PATH = os.path.join(os.environ.get('VRAY_SDK'), 'scenes')
# Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
os.chdir(SCENE_PATH)
 
def onStateChanged(renderer, oldState, newState, instant):
    if oldState == vray.RENDERER_STATE_IDLE_INITIALIZED and newState == vray.RENDERER_STATE_PREPARING:
        print('Sequence started.')
 
    if newState == vray.RENDERER_STATE_IDLE_FRAME_DONE or newState == vray.RENDERER_STATE_IDLE_DONE:
        print('Image Ready, frame ' + str(renderer.frame) +
              ' (sequenceEnd = ' + str(renderer.sequenceEnded) + ')')
 
        if newState == vray.RENDERER_STATE_IDLE_FRAME_DONE:
            # If the sequence has NOT finished - continue with next frame.
            renderer.continueSequence()
        else:
            print('Sequence done. Closing renderer...')
 
# Create an instance of VRayRenderer with default options.
# The renderer is automatically closed after the `with` block.
with vray.VRayRenderer() as renderer:
    # Register a simple log callback. Always useful for debugging.
    def dumpMsg(renderer, message, level, instant):
        if level == vray.LOGLEVEL_ERROR:
            print("[ERROR]", message)
        elif level == vray.LOGLEVEL_WARNING:
            print("[Warning]", message)
        elif level == vray.LOGLEVEL_INFO:
            print("[info]", message)
        # Uncomment for testing, but you might want to ignore these in real code
        #else: print("[debug]", message)
    renderer.setOnLogMessage(dumpMsg)
    # Add a listener for the renderer state change event. We will use it to detect when a frame is completed and allow the next one to start.
    renderer.setOnStateChanged(onStateChanged)
    # Load scene from a file.
    renderer.load(os.path.join(SCENE_PATH, 'Sequence_ifl.vrscene'))
    # Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
    # The default value is unlimited. We have to call this *after* loading the scene.
    renderer.setInteractiveSampleLevel(1)
    # Start rendering a sequence of frames (animation).     
    renderer.renderSequence()
    # Wait until the entire sequence has finished rendering.
    renderer.waitForSequenceEnd()
#define VRAY_RUNTIME_LOAD_PRIMARY
#include "vraysdk.hpp"
#include "vrayplugins.hpp"
#include "utils.h"
 
using namespace VRay;
using namespace VRay::Plugins;
using namespace std;
 
const char *BASE_PATH = getenv("VRAY_SDK");
string SCENE_PATH = (BASE_PATH ? string(BASE_PATH) : string(".")) + PATH_DELIMITER + "scenes";
 
void onStateChanged(VRayRenderer &renderer, RendererState oldState, RendererState newState, double instant, void* userData) {
if (oldState == IDLE_INITIALIZED && newState == PREPARING) {
printf("Sequence started.\
");
}
if (newState == IDLE_FRAME_DONE || newState == IDLE_DONE) {
printf("Image Ready, frame %d (sequenceEnded = %d)\
", renderer.getCurrentFrame(), renderer.isSequenceEnded());
 
if (newState == IDLE_FRAME_DONE) {
// If the sequence has NOT finished - continue with next frame.
renderer.continueSequence();
} else {
printf("Sequence done. Closing renderer...\
");
}
} }
 
int main() {
// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
changeCurrentDir(SCENE_PATH.c_str());
// Load V-Ray SDK library.
VRayInit init(NULL, true);
// Create an instance of VRayRenderer with default options.
// The renderer is automatically closed at the end of the current scope.
VRayRenderer renderer;
// It's recommended to always have a console log
renderer.setOnLogMessage(logMessage);
// Add a listener for the renderer state change event.
// We will use it to detect when a frame is completed and allow the next one to start.
renderer.setOnStateChanged(onStateChanged);
// Load scene from a file.
renderer.load("Sequence_ifl.vrscene");
// Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
// The default value is unlimited. We have to call this *after* loading the scene.
renderer.setInteractiveSampleLevel(1);
// Start rendering a sequence of frames (animation).
renderer.renderSequence();
// Wait until the entire sequence has finished rendering.
renderer.waitForSequenceEnd();
 
return 0;
}
using System;
using System.IO;
using VRay;
using VRay.Plugins;
 
namespace _01_animate_from_scene
{
class Program
{
static void Main(string[] args)
{
string SCENE_PATH = Path.Combine(Environment.GetEnvironmentVariable("VRAY_SDK"), "scenes");
// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
Directory.SetCurrentDirectory(SCENE_PATH);
// Create an instance of VRayRenderer with default options. The renderer is automatically closed after the `using` block.
using (VRayRenderer renderer = new VRayRenderer())
{
// Add a listener for any type of log message.
renderer.LogMessage += new EventHandler<MessageEventArgs>((source, e) =>
{
// You can remove the if for testing, but you might want to ignore Debug in real code
if (e.LogLevel != LogLevelType.Debug)
{
Console.WriteLine(String.Format("[{0}] {1}", e.LogLevel.ToString(), e.Message));
}
});
// Add a listener for state changes.
// It is invoked when the renderer prepares for rendering, renders, finishes or fails.
renderer.StateChanged += new EventHandler<StateChangedEventArgs>((source, e) =>
{
if (e.OldState == VRayRenderer.RendererState.IDLE_INITIALIZED
&& e.NewState == VRayRenderer.RendererState.PREPARING)
{
Console.WriteLine("Sequence started.");
}
 
if (e.NewState == VRayRenderer.RendererState.IDLE_FRAME_DONE)
{
Console.WriteLine("Image Ready, frame " + renderer.Frame +
" (sequenceEnded = " + renderer.IsSequenceEnded + ")");
 
// If the sequence has NOT finished - continue with next frame.
renderer.ContinueSequence();
}
 
if (e.NewState == VRayRenderer.RendererState.IDLE_DONE)
{
Console.WriteLine("Sequence done. (sequenceEnded = " +
renderer.IsSequenceEnded + ") Closing renderer...");
}
});
// Load scene from a file.
renderer.Load("Sequence_ifl.vrscene");
// Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
// The default value is unlimited. We have to call this *after* loading the scene.
renderer.SetInteractiveSampleLevel(1);
// Start rendering a sequence of frames (animation).
renderer.RenderSequence();
// Wait until the entire sequence has finished rendering.
renderer.WaitForSequenceEnd();
}
}
}
}
var path = require('path');
var vray = require(path.join(process.env.VRAY_SDK, 'node', 'vray'));
 
var SCENE_PATH = path.join(process.env.VRAY_SDK, 'scenes');
// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
process.chdir(SCENE_PATH);
 
// Create an instance of VRayRenderer with default options.
var renderer = vray.VRayRenderer();
// It's recommended to always have a console log callback
renderer.on("logMessage", function(message, level, instant) {
if (level == vray.LOGLEVEL_ERROR)
console.log("[ERROR] ", message);
else if (level == vray.LOGLEVEL_WARNING)
console.log("[Warning] ", message);
else if (level == vray.LOGLEVEL_INFO)
console.log("[info] ", message);
// Uncomment for testing, but you might want to ignore these in real code
//else console.log("[debug] ", message);
});
// Add a listener for the renderer state change event.
// We will use it to detect when a frame is completed and allow the next one to start.
renderer.on("stateChanged", function(oldState, newState, instant) {
if (newState == "idleFrameDone" || newState == "idleDone") {
console.log("Image Ready, frame " + renderer.frame +
" (sequenceEnd = " + renderer.sequenceEnded + ")");
 
// Check if the sequence has finished rendering.
if (newState == "idleDone") {
// Closes the renderer.
// This call is mandatory in order to free up the event loop.
// The renderer object is unusable after closing since its resources
// are freed. It should be released for garbage collection.
renderer.close(() => {});
} else {
// If the sequence has NOT finished - continue with next frame.
renderer.continueSequence();
}
} else if (newState.startsWith("idle")) {
console.log("Unexpected end of render sequence: ", newState);
renderer.close();
}
});
// Load scene from a file asynchronously.
renderer.load("Sequence_ifl.vrscene", function(err) {
if (err) throw err;
// Maximum paths per pixel for interactive mode. Set a low sample level to complete rendering faster.
// The default value is unlimited. We have to call this *after* loading the scene.
renderer.setInteractiveSampleLevel(1);
// Start rendering a sequence of frames (animation).
renderer.renderSequence();
// Prevent garbage collection and exiting nodejs until the renderer is closed.
renderer.keepAlive();
});

Örnek – İnterpolasyon Parametresi #

Bu örnek, farklı enterpolasyon yöntemlerinin etkisini göstermektedir. Aşağıdaki resimlerde, bu dokuyla yer değiştirmiş bir çaydanlık gösterilmektedir:

Farklı enterpolasyon yöntemlerinin, farklı pürüzsüzlük seviyelerinde biraz farklı sonuçlar ürettiğine dikkat edin.

TexBitmap ve BitmapBuffer için Kod Örneği #

# Load scene from a file.
renderer.load(os.path.join(SCENE_PATH, 'material.vrscene'))
 
# Create a bitmap buffer which can load data from a file
newBitmap = renderer.classes.BitmapBuffer()
newBitmap.file = os.path.join('assets', 'bricks01.jpg')
 
# TexBitmap is used for file-based texturing. Other Tex{*} plugins offer procedural and combination textures
newTexture = renderer.classes.TexBitmap()
# Set the texture to use the loaded buffer
newTexture.bitmap = newBitmap
 
brdf = renderer.classes.BRDFDiffuse()
# Attach the texture as input to the brdf.
brdf.color_tex = newTexture
newMaterial = renderer.classes.MtlSingleBRDF()
newMaterial.brdf = brdf
 
newNode = renderer.classes.Node()
newNode.material = newMaterial
newNode.geometry = renderer.plugins['CubeShape@mesh2']
newNode.transform = vray.Transform(vray.Matrix(1), vray.Vector(-15, 0, 0))
// Load scene from a file.
renderer.load("material.vrscene");
 
// Create a bitmap buffer which can load data from a file
BitmapBuffer newBitmap = renderer.newPlugin<BitmapBuffer>();
newBitmap.set_file("assets" PATH_DELIMITER "bricks01.jpg");
 
// TexBitmap is used for file-based texturing. Other Tex{*} plugins offer procedural and combination textures
TexBitmap newTexture = renderer.newPlugin<TexBitmap>();
// Set the texture to use the loaded buffer
newTexture.set_bitmap(newBitmap);
 
BRDFDiffuse brdf = renderer.newPlugin<BRDFDiffuse>();
// Attach the texture as input to the brdf
brdf.set_color_tex(newTexture);
MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();
newMaterial.set_brdf(brdf);
 
Node newNode = renderer.newPlugin<Node>();
newNode.set_material(newMaterial);
newNode.set_geometry(renderer.getPlugin("CubeShape@mesh2"));
newNode.set_transform(Transform(Matrix(1), Vector(-15, 0, 0)));
// Load scene from a file.
renderer.Load("material.vrscene");
 
// Create a bitmap buffer which can load data from a file
BitmapBuffer newBitmap = renderer.NewPlugin<BitmapBuffer>();
newBitmap.File = Path.Combine("assets", "bricks01.jpg");
 
// TexBitmap is used for file-based texturing. Other Tex{*} plugins offer procedural and combination textures
TexBitmap newTexture = renderer.NewPlugin<TexBitmap>();
// Set the texture to use the loaded buffer
newTexture.Bitmap = newBitmap;
 
BRDFDiffuse brdf = renderer.NewPlugin<BRDFDiffuse>();
// Attach the texture as input to the brdf.
brdf.ColorTex = newTexture;
MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();
newMaterial.Brdf = brdf;
 
Node newNode = renderer.NewPlugin<Node>();
newNode.Material = newMaterial;
newNode.Geometry = renderer.GetPlugin("CubeShape@mesh2");
newNode.Transform = new Transform(new Matrix(1), new Vector(-15, 0, 0));
// Load scene from a file synchronously.
renderer.loadSync("material.vrscene");
 
// Create a bitmap buffer which can load data from a file
var newBitmap = renderer.classes.BitmapBuffer();
newBitmap.file = path.join("assets", "bricks01.jpg");
   
// TexBitmap is used for file-based texturing. Other Tex{*} plugins offer procedural and combination textures
var newTexture = renderer.classes.TexBitmap();
// Set the texture to use the loaded buffer
newTexture.bitmap = newBitmap;
  
var brdf = renderer.classes.BRDFDiffuse();
// Attach the texture as input to the brdf.
brdf.color_tex = newTexture;
var newMaterial = renderer.classes.MtlSingleBRDF();
newMaterial.brdf = brdf;
 
var newNode = renderer.classes.Node();
newNode.material = newMaterial;
newNode.geometry = renderer.plugins["CubeShape@mesh2"];
newNode.transform = vray.Transform(vray.Matrix(1), vray.Vector(-15, 0, 0));

RawBitmapBuffer #


BitmapBuffer ile aynı işlevi görür, ancak diskteki bir dosya yerine bellekteki sıkıştırılmamış verileri kullanır.

Parametreler #

  • filtre_türü  – 1 – en yakın; 0 – filtreleme yok; 1 – mip-map filtreleme; 2 – toplam alan tablosu filtreleme

  • filter_blur  – filtreleme için kullanılan bulanıklık parametresi

  • Renk alanı  – 0 – doğrusal, 1 – gama düzeltilmiş, 2 – sRGB

  • gamma  – Görüntü için gama düzeltme değeri. Örneğin, bitmap diske 2.2 gama düzeltmesiyle kaydedildiyse, işleme sırasında bu düzeltmeyi kaldırmak için 0.4545 girmeniz gerekir.

  • allow_negative_colors  – yanlışsa negatif renkler sınırlandırılacaktır.

  • İnterpolasyon  – Mip-map filtreleme için interpolasyon yöntemi (0 – doğrusal olmayan, 1 – kübik çift, 2 – ikinci dereceden çift)

  • pikseller  – Bitmap’te kullanılan ham pikseller

  • pixels_type  – 0: 8-bit RGBA, 1: float RGBA, 2: 8-bit RGBE, 3: 16-bit RGBA, 4: float RGBA

  • genişlik  – Ham bitmap’in genişliği

  • yükseklik – Ham bitmap’in yüksekliği

TexPtex #


Doku, bir PTex dosyasından yüklenmiştir. Bu, BitmapBuffer kullanmaz. PTex, bir alt bölüm veya çokgen ağının her yüzüne ayrı bir doku uygulayan ve bu nedenle UV ataması gerektirmeyen bir eşleme sistemidir. Bir PTex dosyası, yüz sınırları boyunca filtreleme için kullanılan mipmap’ler ve komşuluk verileriyle birlikte keyfi sayıda doku depolayabilir. PTex kavramı hakkında daha fazla bilgi için aşağıdaki Notlar bölümüne bakın .

Parametreler #

  • ptex_file  – Ptex doku dosyası

  • Görüntü dizisini kullan  –

  • resim_numarası  –

  • görüntü_ofseti  –

  • ifl_start_frame – Aşağıdaki 3 parametre BitmapBuffer’dakiyle  aynıdır  .

  • ifl_playback_rate  –

  • ifl_end_condition  –

  • filter_type  – Doku için kullanılan filtre türü

  • genişlik  – filtreleme için kullanılan genişlik parametresi

  • bulanıklık  – filtreleme için kullanılan bulanıklık parametresi

  • Keskinlik  – Bu seçenek yalnızca Filtre Türü Bicubic olarak ayarlandığında kullanılabilir ve filtrenin uyguladığı keskinleştirme miktarını kontrol eder.

  • lerp  – Mipmap seviyeleri arasında enterpolasyon. Bir ptex dokusunun, temelde farklı çözünürlüklerdeki doku sürümleri olan birkaç mipmap seviyesi olabilir. Bu, nesnenin kameraya daha yakın kısımlarına daha yüksek çözünürlüklü bir doku, uzaktaki kısımlarına ise daha düşük çözünürlüklü bir sürüm uygulanmasına olanak tanır. Bu seçenek etkinleştirildiğinde, V-Ray, sonunda pürüzsüz ve kusursuz bir doku oluşturmak için farklı mipmap seviyeleri arasında enterpolasyon yapacaktır.

  • anisotropic_filtering  – Keskin açılardan bakıldığında dokuların işlenmesini iyileştiren anizotropik filtrelemeyi etkinleştirir.

  • reverse_vertices  – Köşe noktalarının sırasını tersine çevirir. Belirli bir ağ için bir ptex oluşturulur. Bazen ptex’i oluşturan program, ağın köşe noktalarını ters sırada numaralandırır. Bu durumda nesne düzgün şekilde dokulandırılmaz ve bu seçeneği etkinleştirmek sorunu çözer.

  • cache_size  – Bir PTex dosyasındaki bilgiler depolama için sıkıştırılmıştır. Kullanılabilmesi için sıkıştırılmış halinin açılması ve RAM’de saklanması gerekir. Bu parametre, mevcut doku için ne kadar bellek (MB cinsinden) kullanılabileceğini kontrol eder. Değer tüm doku için yeterince büyükse, bilgiler yalnızca bir kez çıkarılır ve tüm işleme boyunca saklanır. Aksi takdirde, bilgiler sürekli olarak sabit sürücüden okunur, çıkarılır ve gerektiğinde kullanılır. Bu parametrenin düşük değeri, büyük PTex dosyalarının yavaş işlenmesine neden olabilir.

  • auto_color  – Otomatik renk kanalı seçimini kullanın. Bir ptex dosyası keyfi sayıda kanala sahip olabilir ve hangi kanalın hangi bilgiyi içerdiğini belirlemenin kesin bir yolu yoktur. Bu seçenek etkinleştirildiğinde, V-Ray Kırmızı, Yeşil ve Mavi için doğru kanalı seçmeye çalışır. Bu seçenek kapalı olduğunda, kullanıcı hangi kanalın hangi bilgiyi içerdiğini manuel olarak belirtir.

  • r_channel  – Kırmızı kanal olarak kullanılacak kanalın indeksi.

  • g_channel  – Yeşil kanal olarak kullanılacak kanalın indeksi.

  • b_channel  – Mavi kanal olarak kullanılacak kanalın indeksi.

  • auto_alpha  – Otomatik alfa kanalı seçimini kullanın.

  • a_channel  – Alfa kanalı olarak kullanılacak kanalın indeksi.

  • alpha_type  – Alfa değerinin nereden alınacağı.

  • Renk alanı  – 0 – doğrusal, 1 – gama düzeltilmiş, 2 – sRGB

  • gamma  – Görüntü için gama düzeltme değeri. Örneğin, bitmap diske 2.2 gama düzeltmesiyle kaydedildiyse, işleme sırasında bu düzeltmeyi kaldırmak için 0.4545 girmeniz gerekir.

  • renk  – Son doku rengi

  • color_gain  – Doku rengi için bir çarpan

  • color_offset  – Doku rengi için ek bir ofset değeri.

Notlar #


  • PTex hakkında daha fazla bilgiye buradan ulaşabilirsiniz.

  • PTex dosyaları, bir nesnenin ağ yapısının topolojisiyle yakından ilişkilidir. Bu nedenle, topolojiyi değiştiren herhangi bir değiştirici (TurboSmooth ve MeshSmooth dahil) PTex dokusunun işlenmesini bozacaktır. Nesneyi yumuşatmak istiyorsanız, Subdivision Type ve Displacement amount değeri 0.0 olan Displacement Modifier | GeomDisplacedMesh değiştiricisini kullanabilirsiniz.

  • PTex dokularını yer değiştirme için kullanırken, bitişik çokgenlere uygulanan filtrelemedeki hafif farklılık nedeniyle çokgen kenarları boyunca küçük çatlaklar oluşabilir. Filtre genişliğini 0,0 olarak ayarlamak durumu iyileştirecektir, ancak bu durum PTex dosyasının en ayrıntılı mip-map seviyesinin yüklenmesine ve dolayısıyla gerekli belleğin artmasına neden olacaktır.

  • Yer değiştirme için PTex dokuları kullanırken, özellikle doku negatif renklere sahipse, GeomDisplacedMesh değiştiricisinin min_bound  ve  max_bound parametrelerini ayarlamak gerekebilir  . Aksi takdirde, doku değerleri kırpılabilir.

Tarafından desteklenmektedir BetterDocs

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir