Q100514: இன்ஸ்டன்ஸ் அர்ரே இன்ஸ்டான்சிங் மூலம் சீன் கிராஃப் சமையல் செயல்திறனை அதிகரித்தல்

சுருக்கம்

மீண்டும் மீண்டும் வரும் வடிவியல் உள்ள எந்தக் காட்சியிலும், நினைவகத் தடம் குறைப்பு மற்றும் காட்சி வரைபட சமையல் செயல்திறன் அதிகரிப்பின் நன்மைக்காக இன்ஸ்டான்சிங்கைப் பயன்படுத்தலாம். பொதுவாக, பல பிரதிகளில் வடிவியல் ஒரே மாதிரியாக இருக்கும்போது இன்ஸ்டான்சிங் நன்றாக வேலை செய்கிறது மற்றும் மாற்றங்கள் மட்டுமே தேவைப்படும். இந்தக் கட்டுரை "உதாரண வரிசை" இருப்பிடங்களைப் பயன்படுத்தி இன்ஸ்டான்சிங் செய்யும் முறையை விவரிக்கிறது, இது ஒரு புள்ளி மேகத்தின் புள்ளிகளுக்கு வடிவவியலை எவ்வாறு எடுத்துக்காட்டுவது என்பதற்கான எடுத்துக்காட்டை வழங்குகிறது.

கிடைக்கக்கூடிய பிற இன்ஸ்டான்சிங் அணுகுமுறைகள் பற்றிய கண்ணோட்டத்திற்கு, Katana டெவலப்பர் வழிகாட்டியில் பின்வரும் பகுதியைப் படிக்கவும்: இன்ஸ்டான்சிங் .

பாயிண்ட் கிளவுட் இன்ஸ்டான்சிங் பற்றிய கீழே உள்ள பிரிவுகளை விளக்கும் ஒரு எடுத்துக்காட்டு திட்டத்திற்கு, பின்வரும் Katana திட்டக் கோப்பை “ instanceArray_arnold_material.katana ” ஐப் பார்க்கலாம்.

நிகழ்வு வரிசைகள்

பின்வரும் பகுதி வரிசை இன்ஸ்டான்சிங் பற்றிய சுருக்கமான கண்ணோட்டமாகும். இன்ஸ்டான்சிங் பற்றிய ஆழமான விவாதத்திற்கு, ரெண்டர்மேன் ஆவணம்: ரெண்டர்மேன் 26 ஆவணங்கள் - Katana இன்ஸ்டான்சிங் என்பது இன்ஸ்டான்சிங்கிற்கான அறிமுகமாக மூன்று இன்ஸ்டான்சிங் முறைகளையும் எவ்வாறு அமைப்பது என்பதை நிரூபிக்கிறது.

நிகழ்வு வரிசைகளில், நிகழ்வு இருப்பிடங்கள் "உணர்வு வரிசை" வகையின் ஒற்றை இடத்தில் உள்ள பண்புக்கூறுகள் வழியாக ஒன்று அல்லது அதற்கு மேற்பட்ட நிகழ்வு மூலங்களுக்கு வரைபடமாக்கப்படுகின்றன. நிகழ்வு வரிசைகள் படிநிலை நிறுவல் முறையைப் போலவே இருக்கும், மேலும் பல நிகழ்வு மூலங்களை அமைப்பதற்கான எளிதான வழியின் கூடுதல் நன்மையும் இதில் அடங்கும். ஒரு குறைபாடு என்னவென்றால், பொருட்களை ஒரு நிகழ்வுக்கு மாறுபட முடியாது.

நிகழ்வு வரிசை இருப்பிடத்தில் geometry.instanceSource மற்றும் குறைந்தது ஒரு உருமாற்ற பண்புக்கூறு இருக்க வேண்டும். instanceSource ஒற்றை பாதையை மட்டுமே கொண்டிருந்தால் geometry.instanceIndex விருப்பத்திற்குரியது, அந்த நிகழ்வின் மூலம் நிகழ்வு வரிசையிலுள்ள அனைத்து நிகழ்வுகளுக்கும் பயன்படுத்தப்படும்.

வடிவியல்.instanceSource

ஒன்று அல்லது அதற்கு மேற்பட்ட நிகழ்வு மூலங்களின் காட்சி வரைபட இருப்பிட பாதைகளைக் கொண்ட சரம் அல்லது சர வரிசை பண்புக்கூறு

வடிவியல்.உதாரண அட்டவணை

தேவைப்படும் நிகழ்வுகளின் அதே எண்ணிக்கையிலான கூறுகளைக் கொண்ட வரிசை பண்புக்கூறு. இந்த வரிசையில் சேமிக்கப்பட்ட மதிப்புகள் geometry.instanceSource வரிசையில் விரும்பிய நிகழ்வு மூலத்தின் குறியீட்டைக் குறிக்கின்றன. வேறு வார்த்தைகளில் கூறுவதானால், instanceIndex என்பது நிகழ்வு குறியீட்டிலிருந்து நிகழ்வு மூல குறியீட்டிற்கு ஒரு மேப்பிங்கை உருவாக்குகிறது.

வடிவியல்.உருவகம்மேட்ரிக்ஸ் வடிவியல்.உருவகம்மொழிபெயர்ப்பு வடிவியல்.உருவகம்ரோடேட்எக்ஸ் வடிவியல்.உருவகம்ரோடேட்ஒய்
வடிவியல்.உருவச் சுழற்சிZ வடிவியல்.உருவ அளவுகோல்

இந்தப் பண்புக்கூறுகள் ஒவ்வொன்றும் ஒவ்வொரு நிகழ்வு மாற்றங்களின் தட்டையான வரிசையாகும். ஒவ்வொரு பண்புக்கூற்றின் அர்த்தமும் வழக்கமான உருமாற்ற பண்புக்கூறுகளைப் போலவே இருக்கும், மேலும் இவற்றை அனிமேஷனை ஆதரிக்க பல மாதிரிகளாகப் பிரிக்கலாம்.

குறிப்பு: RenderMan, geometry.instanceMatrix பண்புக்கூறை மட்டுமே பயன்படுத்துவதை ஆதரிக்கிறது.

இன்ஸ்டான்சிங் பண்புக்கூறு மரபுகள் பற்றிய கூடுதல் தகவலுக்கு, Katana டெவலப்பர் வழிகாட்டியைப் பார்வையிடவும்: இன்ஸ்டான்சிங் .

ஒரு புள்ளி மேகத்திற்கு அணி இன்ஸ்டான்சிங்

நிகழ்வுகளை வைத்திருக்க ஒரு இடத்தை மட்டுமே பயன்படுத்துவதன் நன்மையை இன்ஸ்டன்ஸ் வரிசைகள் கொண்டுள்ளன, இது ஆயிரக்கணக்கான நிகழ்வு இருப்பிடங்களைக் கொண்ட காட்சிகளில் கூட காட்சி வரைபடத்தை சிறியதாக வைத்திருக்கிறது. நிகழ்வு வரிசையை உருவாக்க நிகழ்வு மூலங்களின் இருப்பிடங்களைக் கொண்ட geometry.instanceSource பண்புக்கூறை Instance arrays படிக்கின்றன. நிகழ்வு மூலங்களின் குறியீடுகளின் வரிசையைக் கொண்ட geometry.indexArray பண்புக்கூறைப் பயன்படுத்தி பல நிகழ்வு மூலங்களைக் குறிப்பிடலாம், ஒவ்வொரு நிகழ்வுக்கும் ஒன்று. ஒரு புள்ளி மேகத்தில் உள்ள புள்ளிகளுக்கு நிகழ்வு வடிவியலுக்கு ஒரு நிகழ்வு வரிசையை உருவாக்குவதற்கான படிகள் பின்வருமாறு.

1. ஒரு புள்ளி மேகப் பொருளை உருவாக்கி அல்லது இறக்குமதி செய்து, அதன் இருப்பிடத்தின் வகை பண்புக்கூறை ஒரு பண்புக்கூறு தொகுப்பு முனையைப் பயன்படுத்தி pointcloud க்கு அமைக்கவும். புள்ளி மேகம் என்பது PrimitiveCreate முனையிலிருந்து பெறப்பட்டதைப் போன்ற geometry.point.P பண்புக்கூறைக் கொண்ட எந்த வடிவவியலாகவும் இருக்கலாம்.

mceclip0.png (ஆங்கிலம்)

பின்னர் காட்சி வரைபடத்தில் புள்ளி மேகத்தின் வகை மாறிய இடத்தைக் காண்பீர்கள்:

mceclip4.png பற்றி

2. பின்னர் நீங்கள் ஒரு நிகழ்வு மூலமாகப் பயன்படுத்த விரும்பும் வடிவவியலை உருவாக்கவும் அல்லது இறக்குமதி செய்யவும். பின்னர் அதன் பெற்றோர் இருப்பிடத்தின் வகை பண்புக்கூறை மற்றொரு பண்புக்கூறு தொகுப்பு முனையைப் பயன்படுத்தி நிகழ்வு மூலத்திற்கு அமைக்கவும்.

உதாரணமாக, வடிவியல் /root/world/geo/src/teapot இல் இருந்தால், /root/world/geo/src என்பது நிகழ்வு மூல இடமாக இருக்க வேண்டும். பல நிகழ்வு மூலங்களைப் பயன்படுத்த இந்த இடத்தின் கீழ் நீங்கள் பின்னர் கூடுதல் பொருட்களைச் சேர்க்கலாம்.

mceclip1.png

பின்னர் காட்சி வரைபடத்தில் உங்கள் நிகழ்வு மூலத்தின் இருப்பிட வகை மாற்றப்பட்டிருப்பதைக் காண்பீர்கள்:

mceclip0.png (ஆங்கிலம்)

3. இரண்டு நெட்வொர்க்குகளையும் ஒன்றாக இணைத்து, இது போன்ற ஒன்றைப் பெறுங்கள்:

mceclip0.png (ஆங்கிலம்)

4. Merge-ன் கீழ்நோக்கி, ஒரு OpScript முனையை உருவாக்கி அதன் applyWhere அளவுருவை குறிப்பிட்ட இடத்திற்கு மாற்றவும். இப்போது OpScript முனையின் அளவுருக்களின் மேலே ஒரு புதிய இருப்பிட அளவுருவைக் காண்பீர்கள். இருப்பிட அளவுருவின் மதிப்பு காட்சி வரைபடத்தில் நிகழ்வு வரிசை எங்கு உருவாக்கப்படுகிறது என்பதை தீர்மானிக்கும். இந்த எடுத்துக்காட்டில் நாம் /root/world/geo/instances ஐப் பயன்படுத்துகிறோம்.

5. OpScript முனையில், ஒரு user.pointCloudLocation சர அளவுருவை உருவாக்கி, அதை புள்ளி மேகத்தின் காட்சி வரைபட இருப்பிட பாதைக்கு அமைக்கவும். பின்னர் ஒரு user.instanceSourceLocations சர வரிசை அளவுருவை, காட்சி வரைபட இருப்பிடங்களின் விட்ஜெட் வகையுடன் உருவாக்கி, உங்கள் நிகழ்வு மூல காட்சி வரைபட இருப்பிட பாதைகளை வரிசைக்கு மதிப்புகளாகச் சேர்க்கவும்.

பயனர் அளவுருக்களை உருவாக்குவது மற்றும் அவற்றின் விட்ஜெட் வகையை மாற்றுவது குறித்த படிகளுக்கு, Katana பயனர் வழிகாட்டியைப் பார்க்கவும்: பயனர் அளவுருக்களைச் சேர்த்தல் .

6. Renderman Docs: Instancing இல் காணப்படும் Pixar எடுத்துக்காட்டில் இருந்து குறைக்கப்பட்ட பின்வரும் OpScript Lua குறியீடு, ஒரு புள்ளி மேகம் மற்றும் நிகழ்வு மூல இடங்களின் அடிப்படையில் ஒரு நிகழ்வு வரிசையை உருவாக்குகிறது.

புள்ளி மேகத்தின் ஒவ்வொரு புள்ளியிலும் வைக்கப்படும் நிகழ்வுகளுடன் நிகழ்வு வரிசையை உருவாக்க, இந்தக் குறியீட்டை OpScript முனையின் ஸ்கிரிப்ட் அளவுருவில் நகலெடுக்கவும்.

-- Read the op arguments
local instanceSourceLocations = Interface.GetOpArg("user.instanceSourceLocations")
local pointCloudLocation = Interface.GetOpArg("user.pointCloudLocation"):getValue()

-- Read the point cloud's points
local pointAttr = Interface.GetAttr("geometry.point.P", pointCloudLocation)
local points = pointAttr :getNearestSample(Interface.GetCurrentTime())

-- Create a single location which will generate an array of instances
-- Set type for this location to 'instance array'
Interface.SetAttr(
'type' , StringAttribute( 'instance array' ))

-- This instance array location must point to the instance source locations
-- through the attribute 'geometry.instanceSource'
Interface.SetAttr(
'geometry.instanceSource' , instanceSourceLocations)

-- The indexArray attribute determines which instance source each instance location represents
local indexArray = {}

-- for each instance create an instance index
for i= 0 ,#points/ 3-1 do
 
-- For this example, the instances are arbitrarily assigned to an
-- instance source
-- a more stable apporach would be to use an arbitrary attribute
-- on the point cloud to assign an instance source

 indexArray[#indexArray
+1 ] = i%instanceSourceLocations:getNumberOfTuples()
end

-- Set index for instance array element

Interface.SetAttr(
'geometry.instanceIndex' , IntAttribute(indexArray, 1 ))

-- geometry.instanceMatrix
-- Get the transforms from the points
local numTimeSamples = pointAttr:getNumberOfTimeSamples()
local matrixArrayMap = {}
-- to get motion blur on the instances, create an instanceMatrix at each
-- time sample available from the point cloud points attribute
for idx=0,numTimeSamples -1 do
local sampleTime = pointAttr:getSampleTime(idx)
local points = pointAttr:getNearestSample(sampleTime)

-- each instance in array has its own matrix
local matrixArray = {}
local workMatrix = Imath.M44d():toTable()

-- for each instance build a matrix with a mocked up transformation
for i=0,#points/ 3-1 do
-- grab the points that represent this instance
x = points[ 3 *i +1 ]
y = points[ 3 *i +2 ]
z = points[ 3 *i +3 ]

-- set the translate of the matrix to the points in the point cloud
workMatrix[ 13 ] = x
workMatrix[ 14 ] = y
workMatrix[ 15 ] = z

for j = 1 , 16 do
matrixArray[#matrixArray +1 ]=workMatrix[j]
end
end
matrixArrayMap[sampleTime] = matrixArray
end

Interface.SetAttr('geometry.instanceMatrix', DoubleAttribute (matrixArrayMap, #matrixArrayMap))

மேலே உள்ள OpScript, user.instanceSourceLocations பயனர் அளவுருவில் அமைக்கப்பட்ட நிகழ்வு மூல இடங்களுக்கு நிகழ்வு வரிசை geometry.instanceSource பண்புக்கூறை அமைக்கிறது. கூடுதலாக, நிகழ்வு வரிசை geometry.instanceIndex பண்புக்கூறு நிகழ்வு மூலங்களுக்கு இடையில் மாறி மாறி அமைக்கப்பட்டுள்ளது. இறுதியாக, நிகழ்வு வரிசை geometry.instanceMatrix பண்புக்கூறு புள்ளி மேகத்தில் உள்ள ஒவ்வொரு புள்ளியிலிருந்தும் மொழிபெயர்ப்புத் தகவலுடன் நிரப்பப்படுகிறது.

7. இப்போது நிகழ்வுகள் உருவாக்கப்பட்டுவிட்டன, புள்ளி மேகம் இனி தேவையில்லை, மேலும் அதை காட்சியிலிருந்து அகற்ற ப்ரூனே முனையைப் பயன்படுத்தலாம்.

mceclip5.png பற்றி

இப்போது உங்கள் நிகழ்வு வரிசையைக் காண நீங்கள் ரெண்டர் செய்யலாம்:

mceclip1.png

முடிக்கப்பட்ட காட்சியை இங்கே பதிவிறக்கம் செய்யலாம்: instanceArray.katana

ஒதுக்கப்பட்ட பொருளை ஒவ்வொரு நிகழ்விற்கும் மாற்றுவதற்கான நிகழ்வு வரிசை தீர்வு.

மற்ற இன்ஸ்டான்சிங் நுட்பங்களைப் போலல்லாமல், இன்ஸ்டான்ஸ் அணிகளில் ஒவ்வொரு நிகழ்விற்கும் நேரடியாகப் பொருளை மாற்றும் வழிமுறை இல்லை. இருப்பினும், வெவ்வேறு பொருட்களுடன் இன்ஸ்டான்ஸ் மூல இருப்பிடங்களைப் பயன்படுத்துவதன் மூலம் வெவ்வேறு பொருட்களை நிகழ்வுகளுக்குப் பயன்படுத்தலாம். இன்ஸ்டான்ஸ் அணிகளைப் பயன்படுத்துவதன் ஒரு நன்மை என்னவென்றால், அனைத்து நிகழ்வுகளும் ஒரு காட்சி வரைபட இடத்தில் உள்ளன. இருப்பினும், இதன் பொருள் ஒரு குறிப்பிட்ட நிகழ்வைக் கண்டறிவது கிட்டத்தட்ட சாத்தியமற்றது, ஏனெனில் தனிப்பட்ட நிகழ்வுகள் பார்வையாளர் அல்லது காட்சி வரைபடத்தில் தோன்றாது மற்றும் காட்சியின் ரெண்டரில் மட்டுமே தெரியும்.

ஒரு நிகழ்வு வரிசையை உருவாக்க மேலே உள்ள நிகழ்வு வரிசையிலிருந்து பாயிண்ட் கிளவுட் பகுதியைப் பார்க்கவும். நிகழ்வு வரிசை உருவாக்கப்பட்டவுடன், ஒவ்வொரு நிகழ்வு மூலத்திற்கும் பொருட்களை மாற்றுவதன் மூலம் பொருள் நிகழ்வுகளின் தொகுப்புக்கு மாறுபடும். ஒரு நிகழ்வு மூலத்திற்கான பொருளை மாற்ற MaterialAssign முனையைப் பயன்படுத்தவும், மேலும் பொருள் ஒதுக்கீடு அந்த குறிப்பிட்ட நிகழ்வு மூலத்தைப் பயன்படுத்தும் ஒவ்வொரு நிகழ்வு இடத்திற்கும் எடுத்துச் செல்லப்படுகிறது. MaterialAssign முனைகளை உருவாக்கி, நிகழ்வு ஆதாரங்களாகத் தேர்ந்தெடுக்கப்பட்ட காட்சி வரைபட இடங்களுக்கு பொருட்களை ஒதுக்கவும்.

மேலும் படிக்க

இன்ஸ்டான்சிங் கண்ணோட்டத்திற்கு, கீழே உள்ள முதல் ஆதார இணைப்பைப் பார்க்கவும். கீழே உள்ள பிற ஆதாரங்கள் ஒவ்வொரு இன்ஸ்டான்சிங் முறையிலும் உள்ள பிற மேம்பட்ட இன்ஸ்டான்சிங் தலைப்புகளைப் பற்றி ஆழமாகப் பேசுகின்றன.

இணைப்புகள்

We're sorry to hear that

Please tell us why